使用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工具发现体验。
