使用说明
FastAPI+MCP(流式HTTP)入门
此回购是 教学入门 用于模型上下文协议(MCP) 快速API 和那个 流式HTTP 传输(HTTP POST/GET,可选SSE)。
它旨在支持20周计划,学生可以:
- 学习REST/HTTP基础知识,
- 学习MCP原语(工具/资源/提示),
- 比较 stdio与流式HTTP(HTTP/SSE),
- 使用以下工具测试服务器 curl和Python (无需邮递员)。
1) 先决条件
- Python 3.10+(推荐3.11)
2) 安装程序
cd mcp-fastapi-starter
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
python -m pip install -U pip
pip install -r requirements.txt
3) 运行服务器
# You may need python -m here
uvicorn app.main:app --reload --port 8000
您现在应该已经:
- REST健康端点:
http://127.0.0.1:8000/health - MCP端点:
http://127.0.0.1:8000/mcp/(注意后面的斜线)
4) 快速REST检查(第1周对齐)
curl -s http://127.0.0.1:8000/health | python -m json.tool
或者使用普通卷曲输出:
curl -i http://127.0.0.1:8000/health
5) 使用curl通过流式HTTP的MCP(手动JSON-RPC)
5.1初始化(开始会话)
重要提示: 对于Streamable HTTP,客户端必须发送 Accept: application/json, text/event-stream.
服务器可能会返回 Mcp-Session-Id 响应标头。如果是这样,请在以后的请求中包含它。
curl -i \
-X POST http://127.0.0.1:8000/mcp/ \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{
"jsonrpc":"2.0",
"id":1,
"method":"initialize",
"params":{
"protocolVersion":"2025-11-25",
"capabilities":{},
"clientInfo":{"name":"curl","version":"1.0"}
}
}'
复制 Mcp-Session-Id 如果返回标头值。
5.2将客户端标记为已初始化
curl -i \
-X POST http://127.0.0.1:8000/mcp/ \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "Mcp-Session-Id: <PASTE_SESSION_ID>" \
-d '{
"jsonrpc":"2.0",
"method":"notifications/initialized",
"params":{}
}'
5.3列出工具
curl -s \
-X POST http://127.0.0.1:8000/mcp/ \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "Mcp-Session-Id: <PASTE_SESSION_ID>" \
-d '{
"jsonrpc":"2.0",
"id":2,
"method":"tools/list",
"params":{}
}' | python -m json.tool
5.4调用工具(add)
curl -s \
-X POST http://127.0.0.1:8000/mcp/ \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "Mcp-Session-Id: <PASTE_SESSION_ID>" \
-d '{
"jsonrpc":"2.0",
"id":3,
"method":"tools/call",
"params":{
"name":"add",
"arguments":{"a":2,"b":3}
}
}' | python -m json.tool
5.5阅读资源(status://summary)
curl -s \
-X POST http://127.0.0.1:8000/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "Mcp-Session-Id: <PASTE_SESSION_ID>" \
-d '{
"jsonrpc":"2.0",
"id":4,
"method":"resources/read",
"params":{"uri":"status://summary"}
}' | python -m json.tool
6) 使用Python的MCP(手动HTTP客户端)
python clients/http_client_manual.py
它将:
- 初始化
- 捕捉
Mcp-Session-Id如果提供 - 列出工具
- 呼叫
echo
项目布局
mcp-fastapi-starter/
app/
main.py
mcp_server.py
clients/
http_client_manual.py
requirements.txt