语音助手如何接入MCP

79 阅读1分钟

下面给出两个最精简、可直接运行的 Python 示例,帮助你 5 分钟跑通第一组 MCP Server + Client。


  1. 环境准备(仅需一次)
# 1) 安装 Python 3.10+
# 2) 安装 MCP SDK
python -m pip install "mcp[cli]"

  1. 编写 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 模式不会打印任何日志)

  1. 编写 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!')]

  1. 下一步
  • 把 Server 加到 Claude Desktop / Cursor:只需在对应的 mcp.json 里加一段指向 demo_server.py 的配置即可。
  • 给 Server 再加 @mcp.resource()@mcp.prompt() 就能暴露更多能力。

到此,你已拥有本地可跑、可扩展的最小 MCP 链路啦。祝编码愉快!


🧾 声明:所有内容均为我非工作时间的个人开发探索,技术探索过程公开透明,旨在分享语音交互领域的实战经验,不代表任何单位或组织,不涉及任何职务行为或工作成果,仅供学习参考。