项目简介
Foobara 是一款功能强大的Ruby框架,旨在通过命令封装复杂的领域操作,并自动生成可机读的元数据。这些元数据使得系统功能易于被发现,并能自动适配多种集成方式(如HTTP、CLI、异步任务调度以及MCP)。它支持对数据(模型和实体)的托管与管理,并提供数据持久化能力,使得LLM客户端能够以标准化的方式访问上下文信息和调用外部功能。
主要功能点
- 命令封装: 将高层领域操作封装为可重用、自文档化的命令。
- 可发现性: 自动为命令生成机器可读的元数据,方便工具和外部系统理解和调用。
- 多协议集成: 通过多种连接器(如HTTP、命令行、异步队列、调度器和MCP)轻松暴露命令。
- 数据管理: 支持定义模型 (Models) 和实体 (Entities),提供数据结构和持久化能力。
- 远程命令: 允许导入和执行其他Foobara系统中的命令,如同本地命令一样。
- 领域映射器: 帮助在不同领域概念之间进行数据转换和集成。
- 代码生成: 提供命令行工具生成项目结构、命令、类型等代码。
安装步骤
- 将 'foobara' gem 添加到你的 Gemfile:
# Gemfile gem 'foobara' - 运行 'bundle install' 安装依赖:
bundle install - (可选) 安装本地文件CRUD驱动 (用于数据持久化):
gem install foobara-local-files-crud-driver - (可选) 安装MCP连接器:
gem install foobara-mcp-connector
服务器配置 (MCP客户端配置信息)
以下是MCP客户端连接到Foobara MCP服务器的配置示例。MCP客户端需要这些信息来启动Foobara服务器并与其通信。
{ "server_name": "MyFoobaraMcpServer", "command": "ruby", "args": [ "path/to/your_foobara_mcp_server.rb" ], "description": "连接到 Foobara 后端,通过 MCP 协议提供命令和服务。", "features": { "resources": true, "tools": true, "prompts": false } }
配置说明:
- 'server_name': 你的MCP服务器实例的名称,可以自定义。
- 'command': 启动Foobara服务器的命令行可执行程序。对于Ruby项目,通常是 'ruby'。
- 'args': 传递给 'command' 的参数列表。这里是你的Foobara MCP服务器启动脚本的路径。例如,如果你的脚本名为 'my_foobara_mcp_server.rb' 并位于项目根目录下,则应填写 '["my_foobara_mcp_server.rb"]'。
- 'description': 对该MCP服务器的简要描述。
- 'features': 声明该MCP服务器支持的功能。
- 'resources': 设置为 'true',表示服务器支持托管和管理资源(如Capybara实体数据)。
- 'tools': 设置为 'true',表示服务器支持注册和执行工具(如Capybara操作命令)。
- 'prompts': 设置为 'false',表示服务器目前不支持Prompt模板功能。
请确保将 'path/to/your_foobara_mcp_server.rb' 替换为你实际的Foobara MCP服务器启动脚本的完整路径。该脚本内容应包含 MCP 连接器的初始化和命令连接,例如:
#!/usr/bin/env ruby require "foobara/local_files_crud_driver" # 如果你需要持久化数据 require "foobara/mcp_connector" # 配置你的CRUD驱动(例如,使用本地文件存储数据) crud_driver = Foobara::LocalFilesCrudDriver.new Foobara::Persistence.default_crud_driver = crud_driver # 定义你的Foobara组织、领域、命令和实体等 module FoobaraDemo foobara_organization! module CapyCafe foobara_domain! class Capybara < Foobara::Entity attributes do id :integer name :string, :required age :integer, :required end primary_key :id end class CreateCapybara < Foobara::Command inputs Capybara.attributes_for_create result Capybara def execute self.capybara = Capybara.create(inputs) end attr_accessor :capybara end class FindAllCapybaras < Foobara::Command result [Capybara] def execute Capybara.all.to_a # 确保将集合转换为数组,以便MCP客户端处理 end end class UpdateCapybara < Foobara::Command inputs do id Capybara.primary_key_type, :required year_of_birth :integer end result Capybara def execute capybara = Capybara.load(id) capybara.year_of_birth = year_of_birth if year_of_birth capybara.save! capybara end end end end # 初始化并连接MCP连接器 mcp_connector = Foobara::McpConnector.new mcp_connector.connect(FoobaraDemo::CapyCafe::FindAllCapybaras) mcp_connector.connect(FoobaraDemo::CapyCafe::UpdateCapybara) mcp_connector.connect(FoobaraDemo::CapyCafe::CreateCapybara) # 启动MCP服务器,通过标准I/O与客户端通信 mcp_connector.run_stdio_server
基本使用方法
一旦MCP客户端配置并连接到你的Foobara MCP服务器,LLM就可以通过自然语言请求来执行你的Foobara命令。
例如,假设你的Foobara服务器包含了 'CreateCapybara'、'FindAllCapybaras' 和 'UpdateCapybara' 等命令:
- 创建一只水豚: 你可以通过MCP客户端向LLM提问,例如:“请帮我创建一个名叫Fumiko,年龄100岁的水豚。” LLM可能会调用 'CreateCapybara' 命令。
- 查找所有水豚: 你可以提问:“列出所有水豚。” LLM可能会调用 'FindAllCapybaras' 命令。
- 更新水豚信息: 如果你发现某个水豚的生日年份有误,可以提问:“将ID为2的水豚的出生年份更新为2019。” LLM可能会调用 'UpdateCapybara' 命令。
Foobara MCP服务器会处理这些请求,执行相应的Ruby命令,并将结果通过MCP协议返回给LLM客户端。
信息
分类
开发者工具