Expand description
rucora-mcp - MCP(Model Context Protocol)集成
§概述
本模块提供 MCP(Model Context Protocol)集成支持,用于:
- 连接 MCP 服务器
- 将 MCP 工具转换为 rucora 的 Tool trait
- 统一 MCP 工具调用接口
§什么是 MCP
MCP(Model Context Protocol)是一个开放协议,用于:
- 标准化 AI 模型与外部工具的交互
- 提供工具发现、调用、结果返回的统一格式
- 支持多种传输层(stdio、HTTP、WebSocket 等)
§核心组件
§传输层(Transport)
支持多种 MCP 传输方式:
- [
StdioTransport][]: 标准输入输出(用于本地进程) - [
StreamableHttpTransport][]: HTTP 流式传输
§协议层(Protocol)
MCP 协议定义的消息类型:
- 工具列表请求/响应
- 工具调用请求/响应
- 错误处理
§工具适配(Tool Adapter)
[McpToolAdapter] 将远程 MCP 工具包装为 rucora_core::tool::Tool:
use rucora::mcp::McpToolAdapter;
use rucora_core::tool::Tool;
// MCP 工具可以直接作为 rucora 的 Tool 使用
let adapter: McpToolAdapter = ...;
let result = adapter.call(input).await?;§使用示例
§连接 MCP 服务器
use rucora::mcp::{McpClient, StdioTransport};
// 创建传输层
let transport = StdioTransport::new("mcp-server");
// 创建客户端
let client = McpClient::connect(transport).await?;
// 列出可用工具
let tools = client.list_tools().await?;
for tool in tools {
println!("工具:{}", tool.name);
}§调用 MCP 工具
use rucora::mcp::{McpClient, StdioTransport};
use serde_json::json;
let transport = StdioTransport::new("mcp-server");
let client = McpClient::connect(transport).await?;
// 调用工具
let result = client.call_tool(
"my_tool",
json!({"param": "value"})
).await?;
println!("结果:{}", result);§将 MCP 工具转换为 rucora Tool
use rucora::mcp::{McpClient, McpToolAdapter, StdioTransport};
use rucora_core::tool::Tool;
use std::sync::Arc;
let transport = StdioTransport::new("mcp-server");
let client = McpClient::connect(transport).await?;
// 获取 MCP 工具定义
let tools = client.list_tools().await?;
let mcp_tool = tools.into_iter().next().unwrap();
// 创建适配器
let adapter = McpToolAdapter::new(client.clone(), mcp_tool);
// 现在可以作为 rucora Tool 使用
let result = adapter.call(serde_json::json!({})).await?;§子模块
§依赖
本模块基于 rmcp 库构建。
§Feature 标志
client: 启用 MCP 客户端支持server: 启用 MCP 服务器支持transport-streamable-http-client: HTTP 流式传输客户端
Re-exports§
Modules§
Traits§
- Service
Ext rmcp服务扩展 trait(直接转导出)