一分钟入门mcp开发
给自己几分钟时间,快速了解一下mcp技术~
0 1分钟时间入门
👉 Python实现一个基于sse通信的完整mcp-demo
0.1 环境依赖
Python >= 3.10
Package Version
----------------- ---------
annotated-types 0.7.0
anyio 4.9.0
certifi 2025.4.26
click 8.2.1
h11 0.16.0
httpcore 1.0.9
httpx 0.28.1
httpx-sse 0.4.0
idna 3.10
mcp 1.9.2
pydantic 2.11.5
pydantic-core 2.33.2
pydantic-settings 2.9.1
python-dotenv 1.1.0
python-multipart 0.0.20
sniffio 1.3.1
sse-starlette 2.3.6
starlette 0.47.0
typing-extensions 4.14.0
typing-inspection 0.4.1
uvicorn 0.34.3
0.2 实现mcp-server
server-1-带2个tool
#!/usr/bin/env python
#-*- coding:UTF-8 -*-
#########################################################################
# File Name: sse_server_1.py
# Author: AI_Team
# Mail: example@jd.com
# Created Time: 17:19:01 2025-06-04
#########################################################################
import sys
import httpx
import asyncio
from mcp.server import FastMCP
app = FastMCP('web-search', port=9000)
@app.tool()
async def web_search(query: str) -> str:
"""
搜索互联网内容
Args:
query: 要搜索内容
Returns:
搜索结果的总结
"""
res_data = ["query", query]
return ':'.join(res_data)
@app.tool()
async def hello_world() -> str:
"""
给世界打招呼
Args:
None
Returns:
打招呼的内容
"""
return "Hi mcp world!"
if __name__ == "__main__":
app.run(transport='sse')
server-2-带1个tool
#!/usr/bin/env python
#-*- coding:UTF-8 -*-
#########################################################################
# File Name: sse_server_2.py
# Author: AI_Team
# Mail: example@jd.com
# Created Time: 17:19:01 2025-06-04
#########################################################################
import sys
import httpx
import asyncio
from mcp.server import FastMCP
app = FastMCP('test-sse', port=9001)
@app.tool()
async def hi_world() -> str:
"""
给世界打招呼的另一种说法
Args:
None
Returns:
带中文的打招呼内容
"""
return "你好 mcp world!"
if __name__ == "__main__":
app.run(transport='sse')
0.3 实现mcp-client
#!/usr/bin/env python
#-*- coding:UTF-8 -*-
#########################################################################
# File Name: sse_cli.py
# Author: AI_Team
# Mail: example@jd.com
# Created Time: 18:43:37 2025-06-04
#########################################################################
import sys
import asyncio
from contextlib import AsyncExitStack
from mcp.client.sse import sse_client
from mcp import ClientSession
class MCPClient:
def __init__(self, server_urls: list[str]):
"""
初始化 MCP 客户端。
:param server_urls: SSE 服务地址列表,用于连接多个服务器。
"""
self.server_urls = server_urls
self.sessions = {} # 存储每个服务器的会话及其上下文 :server_id -> session
self.tool_mapping = {} # 工具映射 :prefixed_name -> (session, original_tool_name)
self.exit_stack = AsyncExitStack()
async def initialize_sessions(self):
"""
初始化与所有 SSE 服务器的连接,并获取可用工具列表。
"""
for i, server_url in enumerate(self.server_urls):
server_id = f"server{i}" # 为每个服务器生成唯一标识符