在小宇宙上有人推荐这个框架,也恰恰为了体验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 代理开发的新方向,它通过以下几个关键优势脱颖而出:

核心优势

  1. 标准化基础

    基于 MCP 协议,确保与生态系统的兼容性

  2. 科学设计

    实现了经过验证的代理设计模式

  3. 高度可组合

    所有组件都可以灵活组合和扩展

  4. 模型无关

    : 支持多种 LLM 提供商,避免供应商锁定

  5. 简单易用

    清晰的 API 设计和丰富的示例

适用场景

  • 企业自动化

    客户服务、数据处理、内容管理

  • 开发工具

    代码分析、文档生成、测试自动化

  • 研究应用

    多代理系统研究、AI 工作流实验

  • 教育培训

    AI 代理开发学习和实践

选择建议

适合选择 MCP Agent 的情况:

  • 需要与多种外部服务集成

  • 要求高度的可组合性和灵活性

  • 希望使用标准化协议

  • 团队偏好简单清晰的 API

可能需要考虑其他选择的情况:

  • 需要非常成熟的生态系统(考虑 LangChain)

  • 专注于特定的多代理场景(考虑 AutoGen)

  • 需要开箱即用的企业功能

MCP Agent 作为一个新兴但设计精良的框架,特别适合那些希望构建标准化、可扩展的 AI 代理应用的开发者。随着 MCP 生态系统的不断发展,这个框架有望成为 AI 代理开发的重要选择。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐