对绝大部分 AI 开发者来说,除了了解MCP的原理,我们更关心 Server 的实现。因此,我这里准备通过一个最简单的示例来介绍如何实现一个 MCP Server。MCP servers 可以提供三种主要类型的功能:
- Tools(工具):可以被 LLM 调用的函数或外部服务接口,需要用户授权后执行。
- Resources(资源):提供类似文件的结构化数据,供LLM读取和分析。如本地文件内容、远程api返回的json数据、数据库查询结果等。
- Prompts(提示):预先编写的模板,帮助用户完成特定任务 本教程将主要关注工具(Tools)。
1 使用LLM构建MCP的最佳实践
在开始之前,Anthropic 为我们提供了一个基于LLM 的 MCP Server 的最佳开发实践(modelcontextprotocol.io/tutorials/b...),Guide里面特意提到了,该实践是基于Claude,也可以基于其它LLM。总结如下:
-
引入 domain knowledge (说人话就是,告诉他一些 MCP Server 开发的范例和资料)
- 访问 modelcontextprotocol.io/llms-full.t... 并复制完整的文档文本。(实测这个太长了,可以忽略)
- 导航到 MCP TypeScript SDK 或 Python SDK Github 项目中并复制相关内容。
- 把这些作为 prompt 输入到你的 chat 对话中(作为 context)。
-
描述你的需求
- 你的服务器会开放哪些资源
- 它会提供哪些工具
- 它应该给出哪些引导或建议
- 它需要跟哪些外部系统互动
给出一个 example prompt:
python
... (这里是已经引入的 domain knowledge)
打造一个 MCP 服务器,它能够:
- 连接到我公司的 PostgreSQL 数据库
- 将表格结构作为资源开放出来
- 提供运行只读 SQL 查询的工具
- 包含常见数据分析任务的引导
剩下的部分也很重要,但是偏重于方法论,实践性较弱,这里就不展开了,推荐直接看链接:modelcontextprotocol.io/tutorials/b...
2 手动实践
本节内容主要参考了官方文档:Quick Start: For Server Developers(modelcontextprotocol.io/quickstart/...)。
这里准备了一个简单的示例,使用 Python 实现一个 MCP Server,用来统计当前桌面上的 txt 文件数量和获取对应文件的名字(你可以理解为一点用都没有,但是它足够简单,主要是为了难以配置环境的读者提供一个足够短的实践记录)。以下实践均运行在我的 MacOS 系统上。
Step 1. 前置工作
- 安装 Claude Desktop。
- Python 3.10+ 环境
- Python MCP SDK 1.2.0+
Step 2. 环境配置
python
# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 创建项目目录
uv init txt_counter
cd txt_counter
# 设置 Python 3.10+ 环境
echo "3.11" > .python-version
# 创建虚拟环境并激活
uv venv
source .venv/bin/activate
# Install dependencies
uv add "mcp[cli]" httpx
# Create our server file
touch txt_counter.py
Step 3. 构建一个prompt
python
"""
... (这里是已经引入的 domain knowledge)
"""
打造一个 MCP 服务器,它能够:
- 功能:
- 统计当前桌面上的 txt 文件数量
- 获取对应文件的名字
要求:
- 不需要给出 prompt 和 resource 相关代码。
- 你可以假设我的桌面路径为 /Users/{username}/Desktop
Domain Knowledge 复制于 MCP Python SDK的README文件(raw.githubusercontent.com/modelcontex...
Step 4. 实现MCP Server
以下代码由 Claude 3.7 直接生成。当然这里主要是因为需求足够简单,当需要实现一个复杂的 MCP Server 时,可能需要多步的引导和 Debug 才能得到最终的代码。
python
import os
from pathlib import Path
from mcp.server.fastmcp import FastMCP
# 创建 MCP Server
mcp = FastMCP("桌面 TXT 文件统计器")
@mcp.tool()
def count_desktop_txt_files() -> int:
"""Count the number of .txt files on the desktop."""
# Get the desktop path
username = os.getenv("USER") or os.getenv("USERNAME")
desktop_path = Path(f"/Users/{username}/Desktop")
# Count .txt files
txt_files = list(desktop_path.glob("*.txt"))
return len(txt_files)
@mcp.tool()
def list_desktop_txt_files() -> str:
"""Get a list of all .txt filenames on the desktop."""
# Get the desktop path
username = os.getenv("USER") or os.getenv("USERNAME")
desktop_path = Path(f"/Users/{username}/Desktop")
# Get all .txt files
txt_files = list(desktop_path.glob("*.txt"))
# Return the filenames
if not txt_files:
return "No .txt files found on desktop."
# Format the list of filenames
file_list = "\n".join([f"- {file.name}" for file in txt_files])
return f"Found {len(txt_files)} .txt files on desktop:\n{file_list}"
if __name__ == "__main__":
# Initialize and run the server
mcp.run()
任务非常简单,只需要调用非常基本的OS就可以完成。
Step 5. 测试MCP Server
python
$ mcp dev txt_counter.py
Starting MCP inspector...
Proxy server listening on port 3000
MCP Inspector is up and running at http://localhost:5173
之后进入到给出的链接中,你大概能按下图进行操作:

Step 6. 接入Claude
最后一步就是把我们写好的 MCP 接入到 Claude Desktop 中。流程如下:
python
# 打开 claude_desktop_config.json (MacOS / Linux)
# 如果你用的是 cursor 或者 vim 请更换对应的命令
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
在配置文件中添加以下内容,记得替换相关路径为实际路径。
python
{
"mcpServers": {
"txt_counter": {
"command": "/opt/homebrew/bin/uv",
"args": [
"--directory",
"/Users/yangfan/mcp/txt_counter",
"run",
"txt_counter.py"
]
}
}
}
uv
最好是绝对路径,推荐使用 which uv
获取。
配置好后重启 Claude Desktop,如果没问题就能看到对应的 MCP Server 了。

Step 7. 实际使用
接下来,我们通过一个简单的prompt进行实际测试:
bash
能推测我当前桌面上 txt 文件名的含义吗?
它可能会请求你的使用权限,如图一所示,你可以点击 Allow for This Chat


看起来我们MCP Server已经正常工作了!
MCP Server Debug
Debug是一个非常复杂的话题,这里直接推荐官方的教程:
总结
MCP (Model Context Protocol) 代表了 AI 与外部工具和数据交互的标准建立。通过本文,我们可以了解到:
使用与开发:对于普通用户,MCP 提供了丰富的现成工具,用户可以在不了解任何技术细节的情况下使用;对于开发者,MCP 提供了清晰的架构和 SDK,使工具开发变得相对简单。
MCP 还处于发展初期,但其潜力巨大。更重要的是生态,基于统一标准下构筑的生态也会正向的促进整个领域的发展。我们可以看看MCP工具平台:mcp.so/
