AI代理框架

基于Rust的生产级AI代理框架,支持多LLM集成和MCP协议,适用于构建高性能、安全的代理系统。

  • by koki7o
  • Rust
  • 本地部署
  • 25 星标
  • 更新于
在 GitHub 查看 koki7o/mcp-framework

使用说明

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社区

报告问题 • 讨论