MCP HTTP流式传输教学工具

一个基于FastAPI和HTTP流式传输的教学工具,用于学习MCP协议和REST/HTTP基础。

  • by Robbo-lab
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Robbo-lab/mcp-rest-api

使用说明

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