MCP协议实战:用10分钟接入第一个MCP Server

技术开发MCP协议AIClaudeHTTP/SSE2026-08-21

MCP协议实战:用10分钟接入第一个MCP Server

封面图:Unsplash 图库,仅供学习演示。
MCP(Model Context Protocol)是 Anthropic 于 2026 年底开源的标准协议,旨在让 AI 模型与外部工具、数据源即插即用。本教程将用 10 分钟完成一个基于 HTTP/SSE 的 MCP Server,并接入 Claude 或本地模型。

1. 什么是MCP:核心概念与设计哲学

MCP 采用客户端/服务端架构:
graph LR A[AI模型/客户端] -->|MCP协议| B[MCP Client] B <-->|HTTP/SSE| C[MCP Server] C --> D[工具Tool] C --> E[资源Resource] C --> F[提示词Prompt]
核心概念对照表:
概念说明类比
MCP Server提供工具、资源、提示词的独立服务USB 设备
MCP Client连接 Server 并调用工具的组件电脑系统
Tool可被模型调用的函数 / API设备功能
Transport数据传输方式,如 HTTP/SSE、StdioUSB 接口
设计哲学:
  • 模型与工具解耦:模型不直接调用 API,而是通过 MCP 协商。
  • 标准化交互:工具发现、调用、结果返回都有统一协议。
  • 安全边界:Server 可独立部署、鉴权和审计。

2. 开发环境准备

建议版本:
依赖版本要求用途
Python3.10+运行 FastMCP
fastmcplatestMCP Server 开发框架
mcplatestPython MCP Client SDK
httpxlatest调用 Ollama API
Ollamalatest本地模型推理(可选)
安装命令:
pip install fastmcp mcp httpx

3. 搭建HTTP/SSE服务端

创建 `server.py`:
from fastmcp import FastMCP
mcp = FastMCP('demo-server')
@mcp.tool()
def add(a: float, b: float) -> float:
 """相加两个数字"""
 return a + b
@mcp.tool()
def get_time() -> str:
 """返回当前时间"""
 from datetime import datetime
 return datetime.now().isoformat()
if __name__ == '__main__':
 mcp.run(transport='sse')
启动服务:
fastmcp run server.py
默认 SSE 地址为 `http://localhost:8000/sse`。

4. 集成Claude或本地模型

4.1 Claude Code

Claude Code 是 Anthropic 官方 CLI,支持远程 SSE MCP Server。在终端添加:
claude mcp add demo --transport sse --url http://localhost:8000/sse
重启 Claude Code 后,在对话中发送:
用 add 工具计算 1 + 2,结果是多少?

4.2 本地模型(Ollama + 最小Agent)

先拉取模型:
ollama pull llama3.2
然后用 Python MCP SDK 连接 Server:
import httpx
from mcp import ClientSession
from mcp.client.sse import sse_client
def ask_ollama(prompt: str) -> str:
 r = httpx.post(
 'http://localhost:11434/api/generate',
 json={'model': 'llama3.2', 'prompt': prompt, 'stream': False},
 timeout=30
 )
 return r.json()['response']
async def run():
 async with sse_client('http://localhost:8000/sse') as (read, write):
 async with ClientSession(read, write) as session:
 await session.initialize()
 tools = await session.list_tools()
 print('可用工具:', tools)
 result = await session.call_tool('add', {'a': 1, 'b': 2})
 print('add(1,2):', result)
if __name__ == '__main__':
 import asyncio
 asyncio.run(run())
实际接入时,可以用大模型输出结构化工具调用,再由客户端执行 Tool 并把结果返回模型,形成 Agent 闭环。

5. 常见踩坑与优化

问题原因解决方案
端口被占用默认 8000 被占指定 --port 9000
SSE 连不上路径错误确认使用 /sse 路径
CORS 报错浏览器跨域配置 CORS 允许域
工具调用超时Tool 执行过久将长时间任务改为异步/轮询
小模型不会用工具模型能力不足使用 7B 以上模型并给出 few-shot 示例
优化建议:
  • 使用 streamable HTTP 替代 SSE,支持更多传输语义。
  • 为 Tool 增加输入校验和错误重试。
  • 生产环境加入鉴权(如 Bearer Token)。
  • 先在一行里打印日志,方便调试 MCP 协议报文。

附加内容

推荐视频(平台检索出处)

平台推荐内容来源/检索入口
B站搜索“MCP协议实战”,观看热门实战视频B站检索
腾讯视频搜索“MCP教程”腾讯视频检索
优酷搜索“MCP Server”优酷检索
抖音搜索“MCP教程”抖音检索
视频出处为各平台搜索结果,版权归原作者所有;本教程仅为学习推荐,不承担相关责任。

操作清单

  • 安装 Python 3.10+ 与 fastmcp
  • 编写 server.py 并创建 add / get_time 工具
  • 运行 fastmcp run server.py
  • 用 curl 或 Python SDK 验证 SSE 连接
  • 在 Claude Code 中注册 MCP Server
  • 用 Ollama + MCP SDK 完成一次本地工具调用

避坑指南

  • 端口占用:使用 --port 显式指定端口,避免与本地服务冲突。
  • SSE 路径:确认连接地址是 /sse,不是根路径 /。
  • 跨域问题:浏览器端调用时需在网关或 Server 层开启 CORS。
  • 远程访问:如果不在本机调试,需要将监听地址改为 0.0.0.0,并注意防火墙。
  • 模型幻觉:小模型可能会伪造工具调用结果,建议用更大的模型并做结果校验。

免责声明

本教程仅用于技术学习和研究。实际部署请遵循 OpenAI、Anthropic、Ollama 等平台的服务条款,并确保你有权访问和调用相关 API。MCP 并未取代 API 安全策略,请勿在公开环境中暴露无鉴权的服务端。
PREMIUM

需要完整版教程?

包含详细步骤、视频演示、提示词模板和可下载资料包。微信支付即时获取。

购买完整版 ¥29.90