当前位置: 首页 > news >正文

[具身智能-335]:mcp server代码示例

MCP(Model Context Protocol)就像是给大模型装上的“万能接口”,让它能安全地连接到你本地的文件、数据库或者各种API。写一个 Server 其实不难,核心就是把你的业务逻辑封装成标准的“工具”、“资源”或“提示词”。

下面我用最流行的 Python SDK,通过两个例子带你快速上手:一个是最基础的“打招呼”工具,另一个是能读取本地文件内容的实用工具

🛠️ 准备工作

首先,你需要安装官方的 Python SDK:

bash

pip install mcp

💻 示例一:最基础的“Hello World”工具

这个例子展示了如何定义一个最简单的工具,接收参数并返回结果。

文件名:server.py

python

from mcp.server.fastmcp import FastMCP # 1. 初始化 MCP 服务器 mcp = FastMCP("Demo Server") # 2. 定义一个工具 (Tool) # 这个工具的作用是:接收一个名字,返回一句问候语 @mcp.tool() def say_hello(name: str) -> str: """ 向指定用户打招呼。 Args: name: 用户的名字 """ return f"你好,{name}!欢迎来到 MCP 的世界。" # 3. 启动服务器 if __name__ == "__main__": # 使用 stdio 模式启动,这是最常用的模式,用于与 Claude Desktop 等客户端通信 mcp.run()
🧪 如何测试

你可以使用uvicorn或者直接运行脚本来启动它,但通常我们需要在 MCP 客户端(如 Claude Desktop)中配置它。为了快速验证代码逻辑,你可以写一个简单的测试脚本,或者直接在终端运行python server.py(如果配置了标准输入输出)。

📂 示例二:实用的“文件读取器” (带资源与工具)

这个例子更贴近真实场景:我们不仅提供一个工具来读取文件,还暴露一个资源列表,让 AI 知道有哪些文件可用。

文件名:file_server.py

python

from mcp.server.fastmcp import FastMCP import os # 初始化服务器 mcp = FastMCP("File Manager") # 模拟一个受保护的文件目录 TARGET_DIR = "./test_files" # --- 1. 定义资源 (Resources) --- # 资源通常是只读的数据,AI 可以参考它们 @mcp.resource("dir://files") def list_files() -> list[str]: """列出目标目录下的所有文件""" if not os.path.exists(TARGET_DIR): os.makedirs(TARGET_DIR) return ["目录已创建,目前是空的。"] return os.listdir(TARGET_DIR) # --- 2. 定义工具 (Tools) --- # 工具是可以执行操作的函数 @mcp.tool() def read_file_content(filename: str) -> str: """ 读取指定文件的内容。 Args: filename: 文件名(不包含路径) """ # 安全检查:防止路径遍历攻击 if "/" in filename or "\\" in filename: return "错误:为了安全,只允许提供文件名,不允许包含路径。" file_path = os.path.join(TARGET_DIR, filename) if not os.path.exists(file_path): return f"错误:文件 '{filename}' 不存在。" try: with open(file_path, "r", encoding="utf-8") as f: return f.read() except Exception as e: return f"读取文件时出错: {str(e)}" @mcp.tool() def create_file(filename: str, content: str) -> str: """ 在目标目录创建一个新文件。 Args: filename: 文件名 content: 文件内容 """ if "/" in filename or "\\" in filename: return "错误:不允许包含路径。" file_path = os.path.join(TARGET_DIR, filename) with open(file_path, "w", encoding="utf-8") as f: f.write(content) return f"成功创建文件: {filename}" if __name__ == "__main__": mcp.run()

🚀 如何运行与调试

MCP Server通常不直接像Web 服务那样运行,而是作为子进程被客户端(如 Claude Desktop)调用。

使用官方 Inspector 调试(推荐)

MCP 官方提供了一个 CLI 工具叫inspector,可以可视化地查看你的 Server 暴露了哪些工具和资源,并进行测试。

  1. 安装 inspector:

    bash
    npx @modelcontextprotocol/inspector python file_server.py

    (注意:你需要先安装 Node.js 和 npx)

  2. 运行后,终端会给出一个本地网址(通常是http://localhost:5173)。

  3. 在浏览器打开该网址,你就能在界面上看到read_file_contentcreate_file工具,并可以直接输入参数进行测试。

在 Claude Desktop 中使用

如果你想让 Claude 桌面版使用这个 Server,需要修改配置文件。

  1. 找到 Claude 的配置文件claude_desktop_config.json

    • Mac:~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows:%APPDATA%\Claude\claude_desktop_config.json
  2. 添加你的 Server 配置:

    json
    { "mcpServers": { "my-file-manager": { "command": "python", "args": [ "/absolute/path/to/your/file_server.py" ] } } }
  3. 重启 Claude Desktop,点击左上角的⚙️图标,你应该能看到 "my-file-manager" 连接成功。此时你就可以直接问 Claude:“帮我列出文件”,“帮我读取 test.txt”等。

📌 核心概念总结

  • @mcp.tool(): 将函数暴露给 AI。AI 可以决定调用它,并传入参数。
  • @mcp.resource(): 暴露数据源。AI 可以读取这些数据作为上下文(Context),但通常不会修改它。
  • @mcp.prompt(): (示例中未展示) 用于预定义提示词模板,帮助 AI 更好地完成特定任务。

这两个示例涵盖了 MCP 开发中 90% 的需求。你可以从修改file_server.py开始,尝试接入你自己的业务逻辑。

http://www.jsqmd.com/news/621822/

相关文章:

  • Vue + Iframe 实战:打造企业级流程配置中心祷
  • 005、模型训练实战:数据加载、损失函数与优化器详解
  • 题解:P3336 [ZJOI2013] 话旧
  • 项目二:ABB IRB 120 三种运动仿真实验
  • Qwen3Guard-Gen-WEB部署指南:快速实现AI生成内容安全过滤
  • 一道基础计算题卡在 分,求助判题规则问题写
  • JOULWATT杰华特 JW5027SOTB#TRPBF SOT23-6 电压转换器
  • OpenClaw最强对手Hermes Agent从入门到精通
  • Node.js实战:利用阿里云短信服务实现高效验证码发送
  • 什么是 Transformer 架构?
  • 2026年4月,参考重型货架源头厂家口碑推荐选货,物流货架/仓库货架/大仓库货架/货架厂仓储货架,重型货架公司推荐 - 品牌推荐师
  • OpenSSL命令行生存指南:从生成RSA密钥到文件签名验签的完整流程
  • 深度技术剖析:PVZ Toolkit开源游戏修改器完全指南
  • L293D直流电机驱动库:跨平台HAL设计与直通防护
  • 基于PyTorch 2.8 与Dify框架的低代码AI应用开发
  • ZYNQ7000 AXI DMA 接收中断(S2MM_introut)全解析:从硬件原理到Linux驱动开发
  • Python 里把 JSON 转成字典
  • 2026年评价高的门窗/阳光房门窗/佛山智能门窗/极窄门窗优质公司推荐 - 品牌宣传支持者
  • Python 列表与元组:从核心区别到实战选型
  • 保姆级教程:用ABAP BAPI_PRODORDCONF_CREATE_TT实现多工序报工与自动收货(含完整代码)
  • [具身智能-336]:Python定义一个函数示例说明,不带参数和带参数分别说说明,还有->提示
  • 组合专机-给喷油泵下体零件设计组合机床(论文 CAD图纸)
  • TMI拓尔微 TMI3408 SOT23-5 DC-DC电源芯片
  • F12实战:Cookie的增删改查与登录态管理
  • FireRed-OCR Studio惊艳案例:将200页技术手册PDF转为可搜索Markdown
  • 2026年防爆地磅选型指南:地磅汽车衡/地磅电子汽车衡/地磅电子秤/地磅衡器/天津地磅/天津电子秤/工业电子秤/选择指南 - 优质品牌商家
  • ImageNet验证集标签映射实战:从devkit解析到文件重组织的完整指南
  • RS-422 vs RS-485:硬件工程师必须知道的5个关键差异点
  • 彻底告别OpenClaw使用焦虑:我给他装上了“透视眼”和“批量克隆模组手
  • 一个LLM网关需要处理哪些工程问题?多模型路由与成本归因实战