使用Python和Typescript框架创建AI应用,通过MCP服务器为LLM提供上下文。
AI代理工具包为开发者提供了各种API,使AI解决方案能够执行任务并确保用户满意的准确结果。然而将这些工具集成到AI应用中并进行管理可能十分复杂。本文介绍使用模型上下文协议(Model Context Protocol,MCP)为LLM和代理提供上下文的行业标准。
LLM上下文提供方法与规范
默认情况下,若不给LLM和AI聊天机器人提供适当上下文,它们无法获取实时信息、执行代码、调用外部工具和API,甚至无法代替用户使用浏览器。开发者可采用以下方法突破LLM和代理的这种限制:
- Composio:提供规范工具库和集成AI代理与LLM的解决方案。除现成工具库外,其最新推出的Composio MCP支持连接100+个IDE的MCP服务器。
- Agents.json:基于OpenAI标准的规范,增强AI代理与API和外部工具的交互。
- MCP:为LLM和AI助手提供上下文数据的最佳方式。例如可构建MCP文档服务器,通过llms.txt文件形式为IDE和代理框架提供完整文档访问。
什么是MCP?
MCP可视为LLM的第三次进化:
- 第一代LLM依赖训练数据回答问题
- 第二代LLM获得非直观的额外上下文工具
- 第三代通过MCP基础设施轻松访问外部应用
在企业场景中,MCP作为Anthropic开源的协议,可将企业数据连接到AI系统。它标准化了内容仓库(GitHub、Notion)、开发环境、网络和商业工具与辅助AI技术的连接。典型用例包括AI辅助编程,已有数百个MCP集成支持Cursor和Windsurf等开发环境。
MCP工作原理
当用户向代理发送查询时,代理决定调用哪个MCP服务器和工具来获取相关信息。例如让ChatGPT在Slack频道安排会议,MCP可实现这一操作流程:
为何采用MCP?
微软已宣布在Copilot Studio集成MCP,OpenAI也在Agents SDK和ChatGPT桌面应用中支持MCP。传统工具集成方式在管理多代理系统时存在维护困难,而MCP通过中央注册表统一管理:
MCP优势
- 灵活的架构设计
- 改进的工具访问管理
- 解决独立工具局限性
- 社区驱动生态
- 强大的身份验证系统
- 工具搜索便捷化
- 高度可扩展
- 行业标准支持
MCP服务器类型
Anthropic规范定义两种服务器连接方式:
- SSE:通过HTTP连接远程服务
- STDIO:本地命令执行和标准I/O通信
MCP注册中心
开源MCP工具注册中心包括:
- GitHub社区服务器
- Glama Registry
- Smithery提供2000+服务器
- OpenTools生成式API示例:
from openai import OpenAI client = OpenAI( base_url="https://api.opentools.com", api_key="<OPENTOOLS_API_KEY>" ) completion = client.chat.completions.create( model="anthropic/claude-3.7-sonnet", messages=[ { "role": "user", "content": "Compare specs of top 5 EVs on caranddriver.com" } ], tools=[{ "type": "mcp", "ref": "firecrawl" }] )
七大MCP客户端框架
1. OpenAI Agents SDK构建Git代理
import asyncio import shutil import streamlit as st from agents import Agent, Runner, trace from agents.mcp import MCPServer, MCPServerStdio async def query_git_repo(mcp_server: MCPServer, directory_path: str, query: str): agent = Agent( name="Assistant", instructions=f"Answer questions about the localgit repository at {directory_path}, use that for repo_path", mcp_servers=[mcp_server], ) with st.spinner(f"Running query: {query}"): result = await Runner.run(starting_agent=agent, input=query) return result.final_output # 完整代码见原文...
2. Praison AI集成Airbnb
import streamlit as st from praisonaiagents import Agent, MCP @st.cache_resource def get_agent(): return Agent( instructions="""You help book apartments on Airbnb.""", llm="gpt-4o-mini", tools=MCP("npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt") ) # 完整代码见原文...
3. LangChain集成文件系统
async def main(prompt: str) -> None: server_params = StdioServerParameters( command="npx", args=["-y", "@modelcontextprotocol/server-filesystem", str(pathlib.Path(__file__).parent.parent)], ) async with stdio_client(server_params) as (read, write): async with ClientSession(read, write) as session: toolkit = MCPToolkit(session=session) await toolkit.initialize() response = await run(toolkit.get_tools(), prompt) print(response)
4. Chainlit集成Linear
@cl.on_mcp_connect async def on_mcp_connect(connection, session: ClientSession): """建立MCP连接时调用""" @cl.on_mcp_disconnect async def on_mcp_disconnect(name: str, session: ClientSession): """断开MCP连接时调用"""
5. Agno多代理协作
async with contextlib.AsyncExitStack() as stack: airbnb_client, _ = await stack.enter_async_context(stdio_client(airbnb_server_params)) maps_client, _ = await stack.enter_async_context(stdio_client(maps_server_params)) airbnb_agent = Agent( name="Airbnb", role="Airbnb Agent", model=OpenAIChat("gpt-4o"), tools=[airbnb_client], instructions=dedent("""\ You are an agent that can find Airbnb listings for a given location.\ """), add_datetime_to_instructions=True, )
6. Upsonic集成HackerNews
class HackerNewsMCP: command = "uvx" args = ["mcp-hn"] task = Task( "Analyze the top 5 HackerNews stories...", tools=[HackerNewsMCP, Search] ) agent = Agent( "Tech News Analyst", company_url="https://news.ycombinator.com/", company_objective="To provide insightful analysis of tech industry news" )
7. Mastra TypeScript集成
import { MCPConfiguration } from "@mastra/mcp"; const mcp = new MCPConfiguration({ servers: { stockPrice: { command: "npx", args: ["tsx", "stock-price.ts"], env: { API_KEY: "your-api-key" } }, weather: { url: new URL("http://localhost:8080/sse") } } }); const agent = new Agent({ name: "Multi-tool Agent", model: openai("gpt-4"), tools: await mcp.getTools() });
挑战与展望
当前MCP面临工具质量验证、搜索标准化等挑战。社区正在讨论标准化方案,未来可能实现类似Python的pip install
安装方式。PulseMCP等平台正致力于改进MCP工具发现体验。