下面给出两个最精简、可直接运行的 Python 示例,帮助你 5 分钟跑通第一组 MCP Server + Client。
- 环境准备(仅需一次)
# 1) 安装 Python 3.10+
# 2) 安装 MCP SDK
python -m pip install "mcp[cli]"
- 编写 MCP Server(
demo_server.py)
# demo_server.py
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("DemoServer")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers."""
return a + b
@mcp.tool()
def greet(name: str) -> str:
"""Return greeting."""
return f"Hello, {name}!"
if __name__ == "__main__":
# stdio 传输,方便本地调试
mcp.run(transport="stdio")
运行测试:
python demo_server.py
# 若无报错,说明 Server 已就绪(stdio 模式不会打印任何日志)
- 编写 MCP Client(
demo_client.py)
# demo_client.py
import asyncio
import sys
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def main():
# 1. 定义如何启动我们的 server
server_params = StdioServerParameters(
command=sys.executable, # 当前 python 解释器
args=["demo_server.py"] # server 脚本
)
# 2. 建立会话
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize() # MCP 握手
# 3. 列举可用工具
tools = await session.list_tools()
print("Available tools:", [t.name for t in tools])
# 4. 调用工具
result = await session.call_tool("add", arguments={"a": 3, "b": 4})
print("add(3,4) =>", result)
result = await session.call_tool("greet", arguments={"name": "MCP"})
print("greet('MCP') =>", result)
if __name__ == "__main__":
asyncio.run(main())
运行客户端:
python demo_client.py
期望输出类似:
Available tools: ['add', 'greet']
add(3,4) => [TextContent(type='text', text='7')]
greet('MCP') => [TextContent(type='text', text='Hello, MCP!')]
- 下一步
- 把 Server 加到 Claude Desktop / Cursor:只需在对应的
mcp.json里加一段指向demo_server.py的配置即可。 - 给 Server 再加
@mcp.resource()或@mcp.prompt()就能暴露更多能力。
到此,你已拥有本地可跑、可扩展的最小 MCP 链路啦。祝编码愉快!
🧾 声明:所有内容均为我非工作时间的个人开发探索,技术探索过程公开透明,旨在分享语音交互领域的实战经验,不代表任何单位或组织,不涉及任何职务行为或工作成果,仅供学习参考。