写点什么

5 分钟手把手教你开发一个 MCP 服务

作者:巫山老妖
  • 2025-04-05
    广东
  • 本文字数:1764 字

    阅读完需:约 6 分钟

开发一个 MCP(Model Context Protocol)服务器需要遵循标准协议,结合代码实现和工具配置。以下是基于 Python 技术栈的 MCP Server 开发步骤及关键要点,综合了多个实践案例与官方文档建议:



一、环境准备

安装 Python 与 MCP SDK

  • Python 版本需≥3.10(推荐 3.10+),使用pip安装 MCP 库:


python -m venv mcp-env  # 推荐使用虚拟环境source mcp-env/bin/activate #Linux/Macpip install mcp
复制代码


  • 验证安装:mcp version应返回版本号(如 1.5.0)。

选择开发工具

支持 MCP 的客户端(如 Cline、Cursor、Claude Desktop)用于测试,或使用调试工具如MCP Inspector



二、核心开发步骤

定义工具函数(Tools)

  • 使用@mcp.tool()装饰器暴露函数能力,并通过文档字符串描述功能(供大模型理解用途):


# custom_mcp.pyfrom mcp.server.fastmcp import FastMCPimport os
mcp = FastMCP()
@mcp.tool()def list_desktop_files() -> list: """获取当前用户桌面上的所有文件列表(macOS专属实现)""" desktop_path = os.path.expanduser("~/Desktop") return os.listdir(desktop_path)
@mcp.tool()def say_hello(name: str) -> str: """生成个性化问候语(中英双语版)""" return f"🎉 你好 {name}! (Hello {name}!)"
if __name__ == "__main__": mcp.run(transport='stdio') # 启用调试模式
复制代码


  • 关键点:工具函数需返回 JSON 序列化兼容的数据类型(如字符串、列表、字典)。

扩展其他能力

  • 资源(Resources):通过 URI 模板暴露静态或动态数据(如数据库查询结果):


@mcp.resource("config://app_settings")def get_app_config() -> dict:    return {"theme": "dark", "language": "zh-CN"}
复制代码


  • 提示(Prompts):定义与大模型交互的上下文模板(需结合 MCP 协议规范)。


@mcp.prompt()def code_review_prompt(code: str) -> str:    return f"请审查以下代码并指出问题:\n\n{code}"
复制代码

启动与传输配置

选择传输协议:


  • 本地通信transport='stdio'(适合 IDE 集成)。

  • 远程通信transport='sse'(基于 HTTP 事件流,需部署为 Web 服务)。

完整示例

# custom_mcp.pyfrom mcp.server.fastmcp import FastMCPimport os
mcp = FastMCP()
@mcp.tool()def list_desktop_files() -> list: """获取当前用户桌面上的所有文件列表(macOS专属实现)""" desktop_path = os.path.expanduser("~/Desktop") return os.listdir(desktop_path)
@mcp.tool()def say_hello(name: str) -> str: """生成个性化问候语(中英双语版)""" return f"🎉 你好 {name}! (Hello {name}!)"
@mcp.resource("config://app_settings")def get_app_config() -> dict: return {"theme": "dark", "language": "zh-CN"}
@mcp.prompt()def code_review_prompt(code: str) -> str: return f"请审查以下代码并指出问题:\n\n{code}"

if __name__ == "__main__": mcp.run(transport='stdio')
复制代码



三、客户端配置与测试

配置 MCP 客户端

  • 以 CLINE 为例,在设置中添加 MCP 服务器路径(如cline_mcp_settings.json):


{  "mcpServers": {    "list_desktop_files": {      "command": "python3",      "args": [        "/Users/[USER_NAME]/[YOUR_PATH]/custom_mcp.py"      ]    }  }}
复制代码


  • 刷新客户端后,通过自然语言指令(如“我的桌面有哪些文件”)调用工具。



可视化调试

  • 使用MCP Inspector检查消息交互:


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


  • 确保服务器日志输出正常,检查权限与路径限制。


使用npx运行@modelcontextprotocol/inspector,如下所示:



打开 web 服务,可视化调试你所开发的 Tools:




四、高级实践与优化

  1. 安全性控制

  2. 限制工具访问范围(如仅允许读取特定目录)。

  3. 使用 Nacos 等工具管理敏感配置(如 API 密钥加密)。

  4. 集成现有 API

  5. 通过 Nacos + Higress 方案,将存量 HTTP API 转换为 MCP 协议,无需修改代码:

  6. Nacos 注册服务元数据,Higress 网关处理协议转换。

  7. 示例:将高德地图 API 封装为 MCP Server,支持自然语言调用天气查询。

  8. 动态发现与扩展

  9. 利用 MCP 市场(如AIbasemcp.so)发布或引用公共服务,实现工具动态加载。



五、常见问题与解决方案




通过上述步骤,开发者可以快速构建一个功能完整的 MCP Server,并结合生态工具实现高效集成。更多进阶实践可参考 MCP 官方文档及社区资源(如 AIbase、GitHub 示例仓库)。


发布于: 刚刚阅读数: 3
用户头像

巫山老妖

关注

不总结哪来的经验,不分享经验有何用? 2018-02-22 加入

专注于移动开发领域,公众号【巫山老妖】。

评论

发布
暂无评论
5分钟手把手教你开发一个MCP服务_MCP协议_巫山老妖_InfoQ写作社区