设计并实现一个 MCP Server

设计并实现一个 MCP Server 其实比你想象的要简单,特别是 Anthropic 最近推出了简化版的 SDK。

实现一个 MCP Server 主要分为三个阶段:设计(定义能力) -> 编码(Python/TS实现) -> 配置(连接到客户端)

我们将以一个 Python 版本的简单示例------"一个能查询股票并记录笔记的助手"------来带你走完全流程。

第一阶段:设计 (Design Phase)

在写代码之前,你需要明确你的 Server 要通过 MCP 协议暴露什么能力给 AI。

  1. 确定工具 (Tools): AI 需要主动执行什么动作?

    • 示例: get_stock_price(symbol) ------ 输入股票代码,返回价格。
  2. 确定资源 (Resources): AI 需要被动读取什么数据?

    • 示例: daily_note://today ------ 读取今天的笔记内容。
  3. 确定提示词 (Prompts): 是否需要预设模板?

    • 示例: summarize_stock ------ 一个帮助分析股票数据的预设 Prompt。

第二阶段:编码实现 (Implementation Phase)

我们将使用 Python 的 mcp 官方库。为了最快上手,我们使用 FastMCP(这是 SDK 中用于快速构建的高级接口)。

1. 环境准备

你需要安装 Python 和 mcp 库:

复制代码
pip install mcp

2. 编写代码 (server.py)

创建一个 server.py 文件,写入以下代码:

python 复制代码
from mcp.server.fastmcp import FastMCP

# 1. 初始化 Server 名称
mcp = FastMCP("StockHelper")

# 模拟的数据库数据
stock_data = {
    "AAPL": 180.50,
    "GOOGL": 140.20,
    "MSFT": 410.00
}

# 2. 定义工具 (Tool) - AI 会调用这个函数
@mcp.tool()
def get_stock_price(symbol: str) -> str:
    """
    获取指定股票代码的当前价格。
    Args:
        symbol: 股票代码 (例如 AAPL, MSFT)
    """
    # 实际开发中这里会调用真实的 API (如 Yahoo Finance)
    price = stock_data.get(symbol.upper())
    if price:
        return f"{symbol.upper()} 当前价格是 ${price}"
    else:
        return f"未找到股票代码 {symbol}"

# 3. 定义资源 (Resource) - AI 可以直接读取这个 URI
@mcp.resource("note://daily_log")
def get_daily_log() -> str:
    """获取今天的交易日志"""
    return "今日日志:关注科技股动向,特别是 AI 板块的波动。"

# 4. 运行服务
if __name__ == "__main__":
    mcp.run()

第三阶段:连接与测试 (Integration Phase)

代码写好了,现在需要把这个 Server 挂载到宿主应用(Host)上,最常用的宿主是 Claude Desktop

1. 修改配置文件

找到 Claude Desktop 的配置文件:

  • MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

用文本编辑器打开它,添加你的 Server 配置(注意修改 python 的路径和文件路径):

json 复制代码
{
  "mcpServers": {
    "stock-helper": {
      "command": "python", 
      "args": ["/绝对路径/path/to/your/server.py"]
    }
  }
}

注意:建议使用绝对路径,或者使用 uv / venv 环境里的 python 可执行文件路径。

2. 重启 Claude 并测试

  1. 完全关闭并重启 Claude Desktop。

  2. 你会看到输入框旁边多了一个"插头"或工具图标,点击可以看到 stock-helper 已连接。

  3. 开始对话:

  • 你: "帮我查一下 AAPL 的价格。"

  • Claude: (内部调用 get_stock_price("AAPL")) -> "AAPL 当前价格是 $180.50"。

  • 你: "看看今天的日志里写了什么?"

  • Claude: (内部读取 note://daily_log) -> "今日日志显示要关注科技股动向..."

第四阶段:调试与优化 (Debugging & Best Practices)

在实际开发中,你不可能一次就写对,这里有两个关键工具和原则:

1. 使用 MCP Inspector (调试神器)

Anthropic 提供了一个网页版调试器,不用重启 Claude 就能测代码。

bash 复制代码
npx @modelcontextprotocol/inspector python server.py

这会启动一个本地网页,你可以在上面手动点击你的 Tool,查看返回值是否符合预期。

2. 关键设计原则

  • 详细的 Docstring: 注意看上面代码里的 """文档字符串"""。LLM 是通过阅读这些文字来理解如何使用你的工具的。如果你写得不清楚,AI 就不知道该传什么参数。

  • 错误处理: 你的函数不要直接抛出 Python 异常(Crash),而是应该返回一个清晰的错误信息字符串(如 Error: Connection timeout),这样 AI 可以看到错误并尝试自我修正。

  • 安全性: 因为是本地执行,千万小心 不要暴露类似 execute_shell_command 这样危险的工具,否则 AI 被提示词注入攻击后可能会删除你电脑的文件。

相关推荐
passerby60615 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了5 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅5 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅5 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅6 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment6 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅6 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊6 小时前
jwt介绍
前端
爱敲代码的小鱼6 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
Cobyte7 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc