Offeryn - Rust MCP 服务器实现
项目简介
Offeryn 是一个用 Rust 语言编写的 MCP 服务器实现,旨在简化开发者为 AI 智能体快速创建和暴露工具的过程。它遵循 Model Context Protocol 标准,允许大型语言模型 (LLM) 通过标准化的 JSON-RPC 协议调用外部功能。Offeryn 提供核心 MCP 服务器功能,并支持 Stdio 和 SSE 两种传输方式,方便集成到不同的 LLM 应用环境中。
主要功能点
- 核心 MCP 服务器协议: 实现了 JSON-RPC 核心协议,能够处理 MCP 客户端的请求和响应。
- 工具 (Tools) 支持: 允许注册和执行工具,通过过程宏 'mcp_tool' 简化工具的定义和注册。
- 多种传输协议: 支持 Stdio (标准输入输出) 和 SSE (Server-Sent Events) 传输协议,方便在不同场景下部署和使用。
- 自动 JSON Schema 生成: 为工具函数的输入参数自动生成 JSON Schema,方便 LLM 理解工具的输入格式。
- 示例代码: 提供 Stdio 和 SSE 两种传输方式的示例代码,方便用户快速上手。
安装步骤
-
安装 Rust 环境: 确保你的系统已安装 Rust 编程环境。你可以访问 https://www.rust-lang.org/tools/install 按照官方指引安装。
-
克隆仓库: 使用 Git 克隆 offeryn 仓库到本地:
git clone https://github.com/avahowell/offeryn.git cd offeryn -
构建项目: 使用 'cargo build' 命令构建项目。你可以在根目录或 'crates/offeryn-core' 目录下执行此命令。
cargo build --release构建成功后,可执行文件通常位于 'target/release/examples' 目录下(例如 'calculator' 或 'stdio-calculator')。
服务器配置
MCP 客户端需要配置 MCP 服务器的启动命令和参数才能连接。以下是针对 offeryn 项目生成的配置信息示例 (JSON 格式),你需要根据实际使用的示例和传输协议选择对应的配置。
针对 Stdio 传输的配置 (例如 'stdio-calculator' 示例):
{ "serverName": "calculator", "command": "./target/release/examples/stdio-calculator", "args": [], "transport": "stdio" }
- 'serverName': 服务器名称,例如 "calculator",在 'McpServer::new("calculator", ...)' 中定义。
- 'command': 服务器可执行文件的路径。假设你在项目根目录下构建,且运行 'stdio-calculator' 示例。
- 'args': 启动参数,此示例不需要参数,所以为空数组。
- 'transport': 传输协议,设置为 "stdio"。
针对 SSE 传输的配置 (例如 'calculator' 示例):
{ "serverName": "calculator", "command": "./target/release/examples/calculator", "args": [], "transport": "sse", "baseUrl": "http://127.0.0.1:3000" }
- 'serverName', 'command', 'args', 'transport': 与 Stdio 配置类似。
- 'baseUrl': SSE 服务器的基础 URL,默认为 'http://127.0.0.1:3000',对应 'calculator' 示例中绑定的地址。
基本使用方法
-
启动服务器: 根据你选择的传输协议,运行相应的可执行文件。
-
Stdio: 在终端中直接运行 'target/release/examples/stdio-calculator'。服务器将通过标准输入输出与客户端通信。
-
SSE: 在终端中运行 'target/release/examples/calculator'。服务器将启动一个 HTTP 服务器,监听 'http://127.0.0.1:3000'。
-
-
配置 MCP 客户端: 在你的 MCP 客户端 (例如 Claude Desktop) 中,按照客户端的指引添加 MCP 服务器配置。你需要提供上面生成的 JSON 配置信息,并确保客户端能够访问到 offeryn 服务器。
-
使用工具: 连接成功后,LLM 客户端应该能够发现 offeryn 服务器提供的工具。你可以指示 LLM 使用这些工具来执行相应的操作,例如使用计算器工具进行数学运算。
示例 - 使用 curl 与 SSE 服务器交互 (calculator 示例)
假设 SSE 服务器已启动,Session ID 为 '$SESSION_ID' (你需要先通过访问 '/sse' 端点获取 Session ID)。
-
发送 Initialize 请求:
curl -X POST http://localhost:3000/message?sessionId=$SESSION_ID \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{"experimental":{},"sampling":{},"roots":{"listChanged":false}},"clientInfo":{"name":"curl","version":"1.0.0"}}}' -
调用 'calculator_add' 工具:
curl -X POST http://localhost:3000/message?sessionId=$SESSION_ID \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"calculator_add","arguments":{"a":2,"b":3}}}' -
调用 'calculator_multiply' 工具:
curl -X POST http://localhost:3000/message?sessionId=$SESSION_ID \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"calculator_multiply","arguments":{"a":4,"b":5}}}'
注意: 目前 offeryn 仓库的 'README.md' 指出,资源 (Resources) 和 Prompt 模板 (Prompts) 功能尚未完全实现,但核心的工具 (Tools) 功能已经完备可用。
信息
分类
AI与计算