基于Cursor+Claude sonnet4 完成MCP-Agent 开源框架分析
该框架结合了 Anthropic 公司的两个重要贡献:MCP 协议和"构建有效代理"的设计模式,为开发者提供了一个强大而灵活的 AI 应用开发平台。我还基于这个框架生成了一个zabbix MCP server,由于缺少zabbix框架,没有调试出效果。我还基于这个框架生成了一个zabbix MCP server,由于缺少zabbix框架,没有调试出效果。MCP Agent 作为一个新兴但设计精良的
在小宇宙上有人推荐这个框架,也恰恰为了体验Claude Sonnet 4大模型功能,顺手做了一个框架介绍。的确是读代码的好工具,可以快速生成交接文档。我还基于这个框架生成了一个zabbix MCP server,由于缺少zabbix框架,没有调试出效果。
概述
MCP Agent框架 是一个基于 Model Context Protocol (MCP) 构建的简单、可组合的 AI 代理框架。该框架结合了 Anthropic 公司的两个重要贡献:MCP 协议和"构建有效代理"的设计模式,为开发者提供了一个强大而灵活的 AI 应用开发平台。
项目信息:
- 版本
: 0.0.23
- 开源协议
: Apache 2.0
- Python 版本要求
: ≥ 3.10
- GitHub
: lastmile-ai/mcp-agent
- PyPI
: mcp-agent
核心理念与设计哲学
1. 基于标准化协议
MCP Agent 建立在 Model Context Protocol 之上,这是一个标准化接口,允许任何软件通过 MCP 服务器为 AI 助手提供访问能力。这种设计确保了:
- 互操作性
: 与任何支持 MCP 的服务无缝集成
- 可扩展性
: 随着更多服务采用 MCP 协议,框架能力自然扩展
- 标准化
: 避免了各种自定义集成的复杂性
2. 可组合的设计模式
框架实现了 Anthropic 研究论文《Building Effective Agents》中描述的所有模式,并以可组合的方式实现:
-
每个模式都是独立的组件
-
模式之间可以链式组合
-
支持复杂工作流的构建
3. 模型无关性
与许多绑定特定 LLM 提供商的框架不同,MCP Agent 支持多种 LLM 提供商:
- OpenAI
(GPT 系列)
- Anthropic
(Claude 系列)
- Google
(Gemini 系列)
- Azure OpenAI
- AWS Bedrock
- Cohere
核心架构组件
1. MCPApp - 应用程序主入口
classMCPApp:
"""
主应用程序类,管理全局状态并可以托管工作流
"""
def__init__(
self,
name: str = "mcp_application",
description: str | None = None,
settings: Optional[Settings] | str = None,
human_input_callback: Optional[HumanInputCallback] = None,
signal_notification: Optional[SignalWaitCallback] = None,
):
主要职责:
-
管理应用程序生命周期
-
配置管理和初始化
-
MCP 服务器连接管理
-
工作流注册和执行
-
日志和遥测
2. Agent - 核心代理类
classAgent:
"""
代理是一个实体,可以访问一组 MCP 服务器,
并将它们作为工具调用暴露给 LLM
"""
def__init__(
self,
name: str,
instruction: str,
server_names: List[str],
functions: Optional[List[Callable]] = None,
):
核心特性:
-
访问指定的 MCP 服务器
-
将服务器功能暴露为 LLM 工具
-
具有明确的名称和目的(指令)
-
支持本地函数扩展
3. AugmentedLLM - 增强型 LLM
classAugmentedLLM:
"""
通过 MCP 服务器和函数增强的 LLM
"""
asyncdefgenerate(self, message: str, **kwargs) -> List[Message]
asyncdefgenerate_str(self, message: str, **kwargs) -> str
asyncdefgenerate_structured(self, model: Type[T], message: str, **kwargs) -> T
关键能力:
-
工具调用集成
-
多轮对话支持
-
结构化输出生成
-
内存管理
4. MCP 连接管理
框架提供了完整的 MCP 服务器生命周期管理:
classMCPConnectionManager:
"""管理 MCP 服务器连接的生命周期"""
asyncdefconnect_to_server(self, server_config: ServerConfig)
asyncdefdisconnect_from_server(self, server_name: str)
asyncdeflist_tools(self, server_name: str)
工作流模式详解
MCP Agent 实现了多种经过验证的代理模式,每种模式都针对特定的使用场景进行了优化。
1. Augmented LLM(增强型 LLM)
适用场景: 基础的工具增强对话
from mcp_agent.workflows.llm.augmented_llm_openai import OpenAIAugmentedLLM
finder_agent = Agent(
name="finder",
instruction="你是一个具有文件系统和网络访问能力的代理",
server_names=["fetch", "filesystem"],
)
asyncwith finder_agent:
llm = await finder_agent.attach_llm(OpenAIAugmentedLLM)
result = await llm.generate_str("读取 README.md 文件的内容")
2. Parallel(并行处理)
适用场景: 需要同时执行多个独立任务
from mcp_agent.workflows.parallel.parallel_llm import ParallelLLM
# 创建专门的代理
proofreader = Agent(name="proofreader", instruction="检查语法错误...")
fact_checker = Agent(name="fact_checker", instruction="验证事实准确性...")
style_enforcer = Agent(name="style_enforcer", instruction="执行风格指南...")
# 结果聚合代理
grader = Agent(name="grader", instruction="将反馈整合为结构化报告")
# 并行工作流
parallel = ParallelLLM(
fan_in_agent=grader,
fan_out_agents=[proofreader, fact_checker, style_enforcer],
llm_factory=OpenAIAugmentedLLM,
)
result = await parallel.generate_str("学生短篇小说提交: ...")
3. Router(路由器)
适用场景: 根据输入内容智能路由到不同的处理器
from mcp_agent.workflows.router.router_llm import LLMRouter
# 定义路由目标
defprint_hello():
return"Hello, World!"
finder_agent = Agent(name="finder", server_names=["fetch", "filesystem"])
writer_agent = Agent(name="writer", server_names=["filesystem"])
# 创建路由器
router = LLMRouter(
name="smart_router",
instruction="根据用户请求路由到合适的处理器",
categories=[
("greeting", print_hello, "处理问候语"),
("file_operations", finder_agent, "文件操作和查找"),
("content_creation", writer_agent, "内容创建和写作"),
],
llm_factory=OpenAIAugmentedLLM,
)
result = await router.generate_str("帮我找到项目中的配置文件")
4. Intent Classifier(意图分类器)
适用场景: 复杂的意图识别和分类
from mcp_agent.workflows.intent_classifier.intent_classifier import IntentClassifier
classifier = IntentClassifier(
name="customer_service_classifier",
categories=[
"technical_support",
"billing_inquiry",
"product_information",
"complaint_handling"
],
llm_factory=AnthropicAugmentedLLM,
)
intent = await classifier.classify("我的账单有问题,费用比预期高")
# 返回: "billing_inquiry"
5. Orchestrator-Workers(编排器-工作者)
适用场景: 复杂的多步骤工作流编排
from mcp_agent.workflows.orchestrator.orchestrator import Orchestrator
# 工作者代理
data_collector = Agent(name="collector", instruction="收集数据...")
data_analyzer = Agent(name="analyzer", instruction="分析数据...")
report_generator = Agent(name="reporter", instruction="生成报告...")
# 编排器
orchestrator = Orchestrator(
name="data_pipeline",
instruction="协调数据处理管道",
workers=[data_collector, data_analyzer, report_generator],
llm_factory=OpenAIAugmentedLLM,
)
result = await orchestrator.execute("生成月度销售分析报告")
6. Evaluator-Optimizer(评估器-优化器)
适用场景: 需要迭代改进的任务
from mcp_agent.workflows.evaluator_optimizer.evaluator_optimizer import EvaluatorOptimizer
writer = Agent(name="writer", instruction="创建内容...")
evaluator = Agent(name="evaluator", instruction="评估内容质量...")
optimizer = EvaluatorOptimizer(
name="content_optimizer",
worker=writer,
evaluator=evaluator,
max_iterations=3,
llm_factory=AnthropicAugmentedLLM,
)
result = await optimizer.execute("写一篇关于 AI 的博客文章")
7. Swarm(群体智能)
适用场景: 多代理协作和动态任务分配
from mcp_agent.workflows.swarm.swarm import Swarm
# 定义代理
triage_agent = Agent(name="triage", instruction="分类客户请求...")
booking_agent = Agent(name="booking", instruction="处理预订...")
support_agent = Agent(name="support", instruction="技术支持...")
# 创建 Swarm
swarm = Swarm(
name="customer_service_swarm",
agents=[triage_agent, booking_agent, support_agent],
llm_factory=OpenAIAugmentedLLM,
)
result = await swarm.execute("我需要更改明天的航班")
高级特性
1. 可组合性
所有工作流模式都实现了 AugmentedLLM 接口,这意味着它们可以无缝组合:
# 将路由器的输出作为并行处理的输入
router_output = await router.generate_str("复杂的用户请求")
parallel_result = await parallel.generate_str(router_output)
2. 人工输入集成
框架支持人工干预和输入:
from mcp_agent.human_input.types import HumanInputCallback
asyncdefhuman_input_handler(prompt: str) -> str:
returninput(f"人工输入请求: {prompt}\n> ")
app = MCPApp(
name="interactive_agent",
human_input_callback=human_input_handler
)
3. 信号和事件通知
支持工作流信号和事件通知系统:
@app.workflow_signal(name="approval_signal")
asyncdefwait_for_approval():
# 等待外部批准信号
pass
@app.workflow_task
asyncdefprocess_with_approval():
# 执行需要批准的任务
await wait_for_approval()
# 继续处理
4. 遥测和监控
内置的遥测和监控功能:
# 配置文件中启用遥测
logger:
transports: [console, file]
level: info
path: "logs/mcp-agent.jsonl"
# 支持 OpenTelemetry
telemetry:
enabled: true
endpoint: "http://localhost:4317"
配置管理
应用配置 (mcp_agent.config.yaml)
execution_engine:asyncio
logger:
transports: [console, file]
level:info
path:"logs/mcp-agent.jsonl"
mcp:
servers:
fetch:
command:"uvx"
args: ["mcp-server-fetch"]
filesystem:
command:"npx"
args:
["-y", "@modelcontextprotocol/server-filesystem", "/path/to/directory"]
openai:
default_model:gpt-4o-mini
anthropic:
default_model:claude-3-5-sonnet-20241022
密钥配置 (mcp_agent.secrets.yaml)
openai:
api_key:"sk-your-openai-api-key"
anthropic:
api_key:"sk-ant-your-anthropic-api-key"
google:
api_key:"your-google-api-key"
实际应用场景
1. 客户服务自动化
# 多代理客户服务系统
triage_agent = Agent(name="triage", instruction="分类客户请求")
technical_agent = Agent(name="technical", instruction="处理技术问题")
billing_agent = Agent(name="billing", instruction="处理账单问题")
router = LLMRouter(
categories=[
("technical", technical_agent, "技术支持"),
("billing", billing_agent, "账单查询"),
]
)
2. 内容创作流水线
# 内容创作和优化流水线
writer = Agent(name="writer", instruction="创作内容")
editor = Agent(name="editor", instruction="编辑和改进")
fact_checker = Agent(name="fact_checker", instruction="事实核查")
parallel = ParallelLLM(
fan_out_agents=[editor, fact_checker],
fan_in_agent=writer,
)
3. 数据分析工作流
# 自动化数据分析
data_collector = Agent(name="collector", server_names=["database", "api"])
analyzer = Agent(name="analyzer", server_names=["analytics"])
reporter = Agent(name="reporter", server_names=["filesystem"])
orchestrator = Orchestrator(
workers=[data_collector, analyzer, reporter]
)
生态系统集成
1. Claude Desktop 集成
MCP Agent 可以作为 MCP 服务器集成到 Claude Desktop:
# 将 MCP Agent 应用暴露为 MCP 服务器
from mcp_agent.server.mcp_agent_server import MCPAgentServer
server = MCPAgentServer(app)
await server.run()
2. Streamlit Web 应用
import streamlit as st
from mcp_agent.app import MCPApp
st.title("MCP Agent Web Interface")
app = MCPApp(name="streamlit_agent")
# 集成到 Streamlit 界面
3. Jupyter Notebook
# 在 Jupyter 中使用
import asyncio
from mcp_agent.app import MCPApp
app = MCPApp(name="notebook_agent")
asyncdefrun_agent():
asyncwith app.run() as running_app:
# 执行代理任务
pass
await run_agent()
性能特性
1. 异步架构
-
完全异步的设计
-
支持高并发操作
-
非阻塞的 I/O 操作
2. 连接池管理
-
MCP 服务器连接复用
-
自动连接恢复
-
资源优化管理
3. 内存管理
-
智能的对话历史管理
-
可配置的内存策略
-
自动垃圾回收
开发者体验
1. 简单的 API 设计
# 最简单的使用方式
app = MCPApp(name="my_agent")
asyncwith app.run():
agent = Agent(name="helper", server_names=["filesystem"])
asyncwith agent:
llm = await agent.attach_llm(OpenAIAugmentedLLM)
result = await llm.generate_str("帮我做某事")
2. 丰富的示例和文档
-
完整的示例应用
-
详细的 API 文档
-
最佳实践指南
3. 调试和监控
-
详细的日志记录
-
性能指标收集
-
错误追踪和诊断
与其他框架的比较
|
特性 |
MCP Agent |
LangChain |
AutoGen |
CrewAI |
|---|---|---|---|---|
| 协议标准化 |
✅ MCP 协议 |
❌ 自定义 |
❌ 自定义 |
❌ 自定义 |
| 模型无关性 |
✅ 多提供商 |
✅ 多提供商 |
✅ 多提供商 |
✅ 多提供商 |
| 可组合性 |
✅ 高度可组合 |
⚠️ 部分支持 |
⚠️ 部分支持 |
⚠️ 部分支持 |
| 多代理支持 |
✅ 原生支持 |
⚠️ 通过扩展 |
✅ 原生支持 |
✅ 原生支持 |
| 学习曲线 |
🟢 简单 |
🟡 中等 |
🟡 中等 |
🟢 简单 |
| 生态系统 |
🟡 新兴 |
🟢 成熟 |
🟡 发展中 |
🟡 发展中 |
总结
MCP Agent 框架代表了 AI 代理开发的新方向,它通过以下几个关键优势脱颖而出:
核心优势
- 标准化基础
基于 MCP 协议,确保与生态系统的兼容性
- 科学设计
实现了经过验证的代理设计模式
- 高度可组合
所有组件都可以灵活组合和扩展
- 模型无关
: 支持多种 LLM 提供商,避免供应商锁定
- 简单易用
清晰的 API 设计和丰富的示例
适用场景
- 企业自动化
客户服务、数据处理、内容管理
- 开发工具
代码分析、文档生成、测试自动化
- 研究应用
多代理系统研究、AI 工作流实验
- 教育培训
AI 代理开发学习和实践
选择建议
适合选择 MCP Agent 的情况:
-
需要与多种外部服务集成
-
要求高度的可组合性和灵活性
-
希望使用标准化协议
-
团队偏好简单清晰的 API
可能需要考虑其他选择的情况:
-
需要非常成熟的生态系统(考虑 LangChain)
-
专注于特定的多代理场景(考虑 AutoGen)
-
需要开箱即用的企业功能
MCP Agent 作为一个新兴但设计精良的框架,特别适合那些希望构建标准化、可扩展的 AI 代理应用的开发者。随着 MCP 生态系统的不断发展,这个框架有望成为 AI 代理开发的重要选择。
更多推荐
所有评论(0)