从零开始自建 MCP Server:让大模型连接你的数据和工具
下面是一篇偏技术博客风格的文章,面向有一定开发经验、想了解 MCP(Model Context Protocol)并尝试自建 MCP Server 的读者。
随着大模型应用的发展,AI Agent 正逐渐从“聊天机器人”走向“任务执行助手”。但传统的大语言模型存在一个天然限制:它不知道你的私有数据,也无法直接调用你的业务系统。
例如:
-
ChatGPT 不知道你的数据库里的订单信息;
-
Claude 无法直接访问你的内部知识库;
-
企业 Agent 不能直接操作 Jira、GitHub、CRM 等系统。
为了解决这个问题,Anthropic 提出了 MCP(Model Context Protocol,模型上下文协议)。它提供了一套标准化协议,让大模型能够安全、统一地访问外部数据源和工具。
本文将介绍如何从零开始搭建一个 MCP Server,让你的 AI Agent 能够调用自己的服务。
一、什么是 MCP?
MCP 全称 Model Context Protocol,是一种用于连接 AI 模型和外部系统的开放协议。
简单理解:
MCP 就像 AI 世界里的 USB 接口。
过去,每接入一个外部服务,都需要单独开发插件:
AI模型
|
|-- GitHub Plugin
|
|-- Database Plugin
|
|-- Slack Plugin
每个插件都有自己的协议。
而 MCP 希望统一成:
MCP Protocol
|
-------------------
| | |
数据库 API服务 文件系统
|
AI模型
只要服务支持 MCP,任何兼容 MCP 的 AI 客户端都可以调用。
二、MCP 的核心架构
一个完整的 MCP 系统通常包含三个角色:
1. MCP Host
也就是 AI 应用。
例如:
-
Claude Desktop
-
Cursor
-
自研 Agent 平台
它负责:
-
与模型交互;
-
管理 MCP Server;
-
将工具能力暴露给模型。
2. MCP Client
Host 内部的 MCP 客户端。
负责:
-
建立连接;
-
发送 MCP 请求;
-
获取工具列表。
3. MCP Server
我们今天重点构建的部分。
它负责向 AI 提供:
-
Tools(工具)
-
Resources(资源)
-
Prompts(提示模板)
例如:
你的 MCP Server 可以提供:
工具:
query_user()
create_order()
search_document()
资源:
customer_database
company_wiki
Prompt:
generate_report
三、自建 MCP Server 的基本流程
整体流程:
创建项目
|
安装 MCP SDK
|
实现 Server
|
定义 Tools
|
启动服务
|
连接 Claude/Cursor
|
测试调用
下面以 Python 为例。
四、环境准备
首先创建项目:
mkdir my-mcp-server
cd my-mcp-server
创建 Python 环境:
python -m venv venv
source venv/bin/activate
安装 MCP SDK:
pip install mcp
项目结构:
my-mcp-server/
├── server.py
├── requirements.txt
└── README.md
五、实现第一个 MCP Server
创建:
server.py
写入:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP(
"My First MCP Server"
)
@mcp.tool()
def hello(name: str) -> str:
"""
返回欢迎信息
"""
return f"Hello {name}"
if __name__ == "__main__":
mcp.run()
代码非常简单。
这里:
mcp = FastMCP()
创建 MCP 服务。
然后:
@mcp.tool()
表示注册一个工具。
AI 模型看到之后,会知道:
工具名称:
hello
参数:
name:string
作用:
返回欢迎信息
启动:
python server.py
你的第一个 MCP Server 就运行起来了。
六、添加真实业务能力
MCP 的价值不在 Hello World,而在连接真实系统。
例如连接数据库:
用户:
查询订单状态
AI:
调用 MCP Tool
MCP Server:
查询 MySQL
返回结果
例如:
@mcp.tool()
def query_order(order_id:int):
result = database.query(
f"""
select *
from orders
where id={order_id}
"""
)
return result
然后 AI 就拥有:
query_order()
参数:
order_id
功能:
查询订单
七、连接数据库 MCP 示例
假设企业内部有用户数据库:
MySQL:
users
id
name
email
created_time
可以提供:
@mcp.tool()
def get_user(user_id:int):
user = mysql.execute(
"""
SELECT *
FROM users
WHERE id=%s
""",
(user_id,)
)
return user
用户问:
查询张三的信息
模型推理:
需要用户数据
↓
调用 get_user
↓
MCP Server查询数据库
↓
返回结果
八、Resources:给 AI 提供上下文
除了 Tool,MCP 还有 Resource。
例如企业知识库:
/docs
├── company.md
├── product.md
└── api.md
可以暴露:
@mcp.resource(
"company://docs"
)
def company_docs():
return open(
"docs/company.md"
).read()
AI 可以读取:
company://docs
获得企业知识。
九、如何接入 Claude Desktop
以 Claude Desktop 为例。
找到配置文件:
macOS:
~/Library/Application Support/
Claude/claude_desktop_config.json
添加:
{
"mcpServers": {
"my-server": {
"command":
"python",
"args":[
"/your/path/server.py"
]
}
}
}
重新启动 Claude。
如果配置成功:
Claude 会看到:
Available tools:
hello
query_order
get_user
十、MCP Server 开发中的最佳实践
1. 不要把业务逻辑写进 Tool
错误:
@mcp.tool()
def search():
查询数据库
处理权限
格式化结果
发邮件
应该拆分:
MCP Layer
|
Service Layer
|
Database Layer
例如:
server.py
↓
services/order.py
↓
database/mysql.py
2. 做好权限控制
MCP Server 本质是给 AI 开权限。
不要:
@mcp.tool()
def execute_sql(sql):
return db.execute(sql)
因为模型可能生成:
DROP TABLE users;
更安全:
@mcp.tool()
def search_user(name):
return query_user(name)
限制能力,而不是开放能力。
3. 返回结构化数据
不要:
return "用户叫张三,今年30岁"
建议:
return {
"user":
{
"name":"张三",
"age":30
}
}
方便模型理解。
4. 做日志记录
建议记录:
时间
调用工具
参数
用户
返回结果
耗时
方便排查:
-
AI 为什么调用错误?
-
是否存在权限风险?
-
哪些工具使用频率最高?
十一、MCP 可以应用在哪里?
目前常见场景:
企业知识库
AI Agent
↓
MCP
↓
内部文档
数据分析助手
用户:
分析销售数据
AI:
调用SQL MCP
数据库:
返回结果
DevOps Agent
AI
↓
MCP
↓
Kubernetes
GitHub
Jenkins
自动办公
AI
↓
MCP
↓
邮件
日历
CRM
十二、总结
MCP 的核心价值是:
用统一协议,把 AI 和现实世界的数据、工具连接起来。
自建 MCP Server 的核心步骤:
-
安装 MCP SDK;
-
创建 MCP Server;
-
注册 Tools / Resources;
-
连接数据库或业务 API;
-
配置 AI Client;
-
控制权限和安全。
对于开发者来说,MCP 最大的意义不是“让模型回答更多问题”,而是:
让模型真正拥有执行任务的能力。
未来的 AI Agent,很可能不只是聊天,而是通过 MCP 调用企业内部所有系统,成为真正的智能工作入口。
如果继续深入,可以进一步研究:
-
MCP Server 的 SSE / HTTP 部署方式;
-
如何用 FastAPI 构建生产级 MCP;
-
如何给 MCP 增加 OAuth 鉴权;
-
如何设计企业级 MCP Gateway;
-
如何让多个 Agent 共享 MCP 能力。
- 点赞
- 收藏
- 关注作者
评论(0)