[具身智能-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 暴露了哪些工具和资源,并进行测试。
-
安装 inspector:
bashnpx @modelcontextprotocol/inspector python file_server.py(注意:你需要先安装 Node.js 和 npx)
-
运行后,终端会给出一个本地网址(通常是
http://localhost:5173)。 -
在浏览器打开该网址,你就能在界面上看到
read_file_content和create_file工具,并可以直接输入参数进行测试。
在 Claude Desktop 中使用
如果你想让 Claude 桌面版使用这个 Server,需要修改配置文件。
-
找到 Claude 的配置文件
claude_desktop_config.json。- Mac:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- Mac:
-
添加你的 Server 配置:
json{ "mcpServers": { "my-file-manager": { "command": "python", "args": [ "/absolute/path/to/your/file_server.py" ] } } } -
重启 Claude Desktop,点击左上角的
⚙️图标,你应该能看到 "my-file-manager" 连接成功。此时你就可以直接问 Claude:“帮我列出文件”,“帮我读取 test.txt”等。
📌 核心概念总结
- @mcp.tool(): 将函数暴露给 AI。AI 可以决定调用它,并传入参数。
- @mcp.resource(): 暴露数据源。AI 可以读取这些数据作为上下文(Context),但通常不会修改它。
- @mcp.prompt(): (示例中未展示) 用于预定义提示词模板,帮助 AI 更好地完成特定任务。
这两个示例涵盖了 MCP 开发中 90% 的需求。你可以从修改 file_server.py 开始,尝试接入你自己的业务逻辑。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)