Claude Code作为热门的AI编程助手,默认运行在终端沙盒环境中,仅能处理本地文件、执行基础shell命令,无法对接数据库、代码托管平台等外部系统,功能边界十分有限。MCP(Model Context Protocol,模型上下文协议)的出现,就是为了打破这个边界,让AI编程助手可以安全、标准化地调用各类外部服务。

MCP协议核心原理
MCP是一套开放的标准化通信协议,采用客户端-服务端架构,核心作用是定义AI应用(客户端)和外部服务(服务端)之间的交互规则,避免每个AI工具都要单独适配不同的外部服务。它的核心交互流程如下:
- AI客户端(如Claude Code)向MCP服务端发起能力查询,获取服务端支持的功能列表
- 用户或AI模型触发外部调用需求时,客户端按照MCP协议格式发送请求
- MCP服务端处理请求,调用对应的外部系统能力,返回标准化结果
- 客户端将结果解析后反馈给AI模型,用于后续推理或输出
整个过程中,MCP协议统一了请求格式、认证方式、数据返回规范,既降低了开发适配成本,也保障了调用过程的安全性。
MCP五大核心服务实战
MCP协议定义了五大核心服务类型,覆盖大部分AI编程助手的外部调用场景,下面结合实际案例演示如何对接Claude Code。
1. 资源服务(Resources)
资源服务用于让AI访问外部静态或动态资源,比如远程配置文件、文档库等。以下是一个简单的文件资源服务端实现示例:
# mcp_resource_server.py
from mcp import Server
import json
# 初始化MCP服务端
server = Server("file-resource-server")
# 注册资源列表接口,告诉客户端当前服务端提供的资源
@server.list_resources()
async def list_resources():
return [
{
"uri": "file:///remote/config.json",
"name": "项目远程配置文件",
"mimeType": "application/json"
}
]
# 注册资源读取接口,处理客户端的资源请求
@server.read_resource()
async def read_resource(uri: str):
if uri == "file:///remote/config.json":
# 模拟读取远程配置,实际场景可对接OSS、配置中心等
config = {"db_host": "127.0.0.1", "db_port": 3306}
return json.dumps(config)
return None
if __name__ == "__main__":
server.run()2. 提示词服务(Prompts)
提示词服务用于给AI提供标准化的任务提示模板,避免重复编写同类任务的提示词。以下是提示词服务端的实现:
# mcp_prompt_server.py
from mcp import Server
server = Server("prompt-server")
# 注册提示词模板列表
@server.list_prompts()
async def list_prompts():
return [
{
"name": "github_pr_template",
"description": "GitHub开PR的标准提示词模板",
"arguments": [
{"name": "branch_name", "description": "要合并的分支名", "required": True},
{"name": "pr_title", "description": "PR标题", "required": True}
]
}
]
# 返回具体提示词内容
@server.get_prompt()
async def get_prompt(name: str, arguments: dict):
if name == "github_pr_template":
return f"请帮我基于分支{arguments['branch_name']}向main分支提交PR,标题为:{arguments['pr_title']},描述包含本次修改的核心功能点"
return None
if __name__ == "__main__":
server.run()3. 工具服务(Tools)
工具服务是MCP最常用的核心服务,允许AI调用外部系统的具体操作能力,比如执行SQL、调用API等。以下是数据库查询工具的实现:
# mcp_tool_server.py
from mcp import Server
import pymysql
server = Server("db-tool-server")
# 注册工具列表,描述工具功能和参数
@server.list_tools()
async def list_tools():
return [
{
"name": "query_user_data",
"description": "查询用户表数据,支持按用户ID筛选",
"inputSchema": {
"type": "object",
"properties": {
"user_id": {"type": "integer", "description": "用户ID,不填则返回所有用户"}
},
"required": []
}
}
]
# 执行工具调用逻辑
@server.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "query_user_data":
conn = pymysql.connect(
host="127.0.0.1",
port=3306,
user="root",
password="test123",
database="user_db"
)
cursor = conn.cursor()
user_id = arguments.get("user_id")
if user_id:
cursor.execute("SELECT id,name,email FROM user WHERE id=%s", (user_id,))
else:
cursor.execute("SELECT id,name,email FROM user")
result = cursor.fetchall()
cursor.close()
conn.close()
return str(result)
return None
if __name__ == "__main__":
server.run()4. 采样服务(Sampling)
采样服务允许MCP服务端反向请求AI客户端进行推理,比如让AI判断返回结果是否符合预期,再决定是否执行后续操作。以下是采样服务的简单示例:
# mcp_sampling_server.py
from mcp import Server
server = Server("sampling-server")
# 注册采样请求处理逻辑
@server.create_message()
async def create_message(messages: list, model: str = None):
# 实际场景中这里会调用Claude Code的推理接口,此处模拟返回结果
return {
"role": "assistant",
"content": "返回的用户数据格式正确,可以执行后续写入操作"
}
if __name__ == "__main__":
server.run()5. 根服务(Roots)
根服务用于定义AI客户端可以访问的资源根目录边界,避免AI越权访问敏感路径。以下是根服务的配置示例:
{
"roots": [
{
"uri": "file:///project/src",
"name": "项目源码目录"
},
{
"uri": "file:///project/docs",
"name": "项目文档目录"
}
]
}Claude Code对接MCP服务
完成MCP服务端开发后,只需要在Claude Code的配置文件中添加MCP服务地址,即可让Claude Code具备对应的外部调用能力。配置完成后,当你向Claude Code提出"查询ID为1的用户信息"这类需求时,它会自动调用对应的MCP工具服务,返回数据库查询结果后再整理输出给你,真正突破沙盒限制,成为更强大的开发辅助工具。
通过MCP协议,我们不需要修改Claude Code的核心代码,只需要按照标准开发对应的MCP服务端,就能快速扩展它的能力边界,这也是MCP被称为AI编程助手外骨骼的核心原因。
MCPClaude_CodeAI编程助手模型上下文协议核心服务实战修改时间:2026-05-31 04:14:08