使用说明
MCP框架-Rust实现
生产就绪的Rust框架,用于构建具有内置MCP支持、多LLM集成和基于web的检查器的AI代理。部署内存安全、高性能的代理系统。
什么是mcp框架?
一个用于构建可以使用任何MCP服务器的AI代理的Rust框架。专为性能、安全性和可靠性至关重要的生产部署而设计。
核心组件:
- 代理框架:异步优先设计的多LLM支持(Claude、OpenAI)
- MCP客户端:使用HTTP和stdio传输的多服务器编排
- MCP服务器:构建自定义工具并通过MCP协议公开它们
- Web检查器:使用实时UI调试和测试MCP服务器
特性
✅ 现已上市
| 特性 | 描述 |
|---|---|
| MCP服务器 | 使用工具注册构建和部署自定义MCP服务器 |
| MCP客户端 | 同时连接到多个MCP服务器(HTTP、stdio) |
| AI 代理 | 具有会话管理的生产就绪代理 |
| Web检查器 | 使用工具测试和请求/响应查看器调试UI |
| 克劳德集成 | 全人类API支持流媒体 |
| OpenAI集成 | 带函数调用的GPT-4、o1、o3型号 |
| 浏览器自动化 | 用于web任务的Playwright MCP集成 |
| 会话管理 | 与状态跟踪的持续对话 |
| 异步/等待 | 基于Tokio构建的零成本异步运行时 |
🚧 路线图
| 功能 | 优先级 | 状态 |
|---|---|---|
| 多提供商LLM | 高 | 计划(双子座、格鲁克、DeepSeek、米斯特拉尔) |
| 矢量数据库 | 高 | 计划中(Qdrant、Chroma、Pinecone) |
| 智能体协同 | 高 | 计划(基于图形的工作流程、交接) |
| 流媒体支持 | 高 | 计划中(逐个令牌,工具流) |
| 资源 | 中等 | 计划中(MCP资源协议) |
| 提示 | 中等 | 计划中(MCP提示协议) |
| 认证 | 中等 | 计划(OAuth、API密钥) |
| 存储器系统 | 中等 | 计划中(RAG,语义检索) |
| 中间件 | 低 | 计划(请求/响应挂钩) |
示例工具
• echo - String echo utility
• calculator - Math: add, subtract, multiply, divide, power, sqrt
• get_weather - Weather lookup for cities worldwide
• search_text - Find pattern occurrences in text
• string_length - Get character count
• text_reverse - Reverse text strings
• json_parser - Validate and format JSON
• http_status - Look up HTTP status codes
快速开始
先决条件
# Requires Rust 1.70+
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
1.克隆和设置
git clone https://github.com/koki7o/mcp-framework
cd mcp-framework
# Create .env for API keys (optional but recommended)
cp .env.example .env
# Edit .env and add ANTHROPIC_API_KEY or OPENAI_API_KEY
2.运行示例
最小服务器(1个工具):
cargo run
带有8个工具+检查器UI的服务器:
cargo run --example server_with_tools
# Visit: http://localhost:8123
人工智能代理与克劳德:
# Requires ANTHROPIC_API_KEY in .env
cargo run --example anthropic_agent_demo_with_tools --release
使用OpenAI的AI代理:
# Requires OPENAI_API_KEY in .env
cargo run --example openai_agent_demo_with_tools --release
浏览器自动化(OpenAI):
# Requires OPENAI_API_KEY in .env
# Install: npm install -g @playwright/mcp@latest && npx playwright install firefox
cargo run --example browser_agent_openai
浏览器自动化(Claude):
# Requires ANTHROPIC_API_KEY in .env
# Install: npm install -g @playwright/mcp@latest && npx playwright install firefox
cargo run --example browser_agent_anthropic
为什么选择mcp框架?
🚀 演出
- 零成本抽象:Rust的编译时优化意味着没有运行时开销
- 异步优先:基于Tokio构建,适用于高并发工作负载
- 内存效率高:无垃圾收集暂停,性能可预测
🛡️ 安全
- 内存安全:Rust的借用检查器可在编译时防止常见错误
- 类型安全性:使用强类型在部署前捕获错误
- 无畏的并发性:没有数据竞争,没有未定义的行为
🔌 MCP本地
- 一级MCP:从第一天起就围绕模型上下文协议构建
- 多服务器:在单个代理中连接到多个MCP服务器
- 完整协议:工具、资源(计划)、提示(计划)
🛠️ 开发者体验
- Web检查器:无需编写代码即可直观地测试工具
- 丰富的例子:7+个常见用例示例
- 生产准备就绪:用于实际部署,而不是玩具项目
📦 生态系统
- 官方SDK:用途
rmcp-官方Rust MCP实现 - 战斗测试:基于经过验证的库(Tokio、Axum、Serde)构建
- 可扩展:易于添加自定义LLM提供者和工具
用法
构建AI代理
use mcp_framework::prelude::*;
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<()> {
mcp_framework::load_env();
let client = McpClient::new("http://localhost:3000");
let llm = AnthropicAdapter::from_env("claude-sonnet-4-5-20250929".to_string())?;
let mut agent = Agent::new(client, Arc::new(llm), AgentConfig::default());
let response = agent.run("What is 15 + 27?").await?;
println!("{}", response);
Ok(())
}
运行示例:
cargo run --example anthropic_agent_demo_with_tools --release-克劳德演示cargo run --example openai_agent_demo_with_tools --release-OpenAI演示
创建MCP服务器
use mcp_framework::prelude::*;
use mcp_framework::server::{McpServer, ServerConfig, ToolHandler};
use std::sync::Arc;
struct MyToolHandler;
#[async_trait::async_trait]
impl ToolHandler for MyToolHandler {
async fn execute(&self, name: &str, arguments: serde_json::Value)
-> Result<Vec<ResultContent>> {
match name {
"greet" => Ok(vec![ResultContent::Text {
text: format!("Hello, {}!", arguments.get("name").and_then(|v| v.as_str()).unwrap_or("stranger"))
}]),
_ => Err(Error::ToolNotFound(name.to_string())),
}
}
}
#[tokio::main]
async fn main() -> Result<()> {
let config = ServerConfig {
name: "My Server".to_string(),
version: "1.0.0".to_string(),
capabilities: ServerCapabilities {
tools: Some(ToolsCapability { list_changed: Some(false) }),
resources: None, // Not implemented yet
prompts: None, // Not implemented yet
},
};
let server = McpServer::new(config, Arc::new(MyToolHandler));
server.register_tool(Tool {
name: "greet".to_string(),
description: Some("Greet someone".to_string()),
input_schema: None,
});
Ok(())
}
示例:
cargo run-最小服务器(1个工具)cargo run --example server_with_tools-完整示例(8个工具+检查器)
使用MCP客户端
use mcp_framework::prelude::*;
use serde_json::json;
#[tokio::main]
async fn main() -> Result<()> {
let client = McpClient::new("http://localhost:3000");
// List all tools
let tools = client.list_tools().await?;
println!("Available tools: {:?}", tools);
// Call a tool
let result = client.call_tool("echo", json!({
"message": "Hello, MCP!"
})).await?;
println!("Result: {:?}", result);
Ok(())
}
例子:
cargo run --example client_usage-完整的客户端使用示例
使用检查器进行调试
使用web UI测试和调试MCP服务器。
cargo run --example server_with_tools
# Open browser to: http://localhost:8123
特征:
- 查看已注册的工具
- 具有自动生成表单的测试工具
- 请求/响应历史记录
- 实时输出检查
你能建造什么?
🤖 AI代理
- 研究助理:搜索、分析和总结信息的代理
- 编码助手:读取代码库、编写代码、运行测试的代理
- 数据分析师:查询数据库并生成见解的代理
- 客户支持:具有知识库集成的代理
🌐 浏览器自动化
- 网络抓取:使用人工智能导航从网站中提取数据
- E2E测试:自动生成并运行浏览器测试
- 填表:自动化重复的web任务
- 监控:检查网站状态和内容更改
🔧 自定义工具
- 业务逻辑:将内部API包装为MCP工具
- 数据库操作:SQL查询、CRUD操作
- 文件系统:搜索、读取、写入文件
- 外部API:天气、地图、支付网关
🎯 多智能体系统
- 专业团队:不同任务的不同代理(研究、编码、审查)
- 工作流:将复杂管道的代理链连接在一起
- 协作:沟通和协调的代理人
测试
# Run all tests
cargo test
# Run with output
cargo test -- --nocapture
# Run specific test
cargo test test_name
# Run with release optimizations
cargo test --release
贡献
欢迎投稿!请随时提交拉取请求。
许可证
MIT许可证-有关详细信息,请参阅许可证文件
由...制作❤️ 对于MCP社区