概念MCP令牌代理
FastAPI服务,将请求多路复用到临时 @notionhq/notion-mcp-server 过程。\ 每个入站请求都使用Notion令牌进行身份验证,启动(或重新使用)匹配的后端,代理通过HTTP转发请求,同时剥离逐跳标头。
特性
- 旋转至
MAX_PARALLEL_BACKENDS隔离的MCP服务器,每个服务器都作用于一个Notion令牌。 - 在暴露后端之前执行主动健康检查。
- 自动清理空闲或不健康的进程。
- 附带Docker和Compose定义,用于可重复部署。
需求
- Python 3.11+
- Node.js 18+(仅需要在本地运行Notion MCP服务器)
- Docker(可选,用于容器化工作流)
配置
| 变量 | 默认值 | 用途 |
|---|---|---|
BACKEND_IDLE_TIMEOUT | 900 | 后端被拆除前的几秒钟不活动。 |
BACKEND_HEALTH_TIMEOUT | 15 | 等待后端通过的秒数 /health. |
BACKEND_HEALTH_INTERVAL | 0.5 | 健康重试之间的延迟。 |
MAX_PARALLEL_BACKENDS | 8 | 同时运行的MCP服务器的最大数量。 |
MCP_SERVER_COMMAND | npx -y @notionhq/notion-mcp-server | 用于启动MCP后端的命令。 |
PORT | 8000 | 暴露的FastAPI端口 |
认证模型
客户端通过以下方式调用代理 Authorization: Bearer .\ 代理为每个令牌存储后端,注入 NOTION_TOKEN 并在转发之前将标头交换为内部身份验证令牌。
在本地运行
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
export MCP_SERVER_COMMAND="npx -y @notionhq/notion-mcp-server"
uvicorn main:app --host 0.0.0.0 --port 8000向发送请求 http://localhost:8000/mcp 并将您的Notion令牌传递到 Authorization 头球
Docker工作流程
手动构建:
docker build -t notion-mcp-proxy .
docker run -p 4554:8000 --env BACKEND_IDLE_TIMEOUT=600 notion-mcp-proxy或依赖Compose:
docker compose up --buildCompose文件公开端口 4554 并为空闲超时和最大并行后端设置合理的默认值。
API表面
GET /healthz–轻量级状态,包括活动后端的数量。ANY /mcp–将请求转发到MCP后端,流式传输响应并逐跳过滤标头。
开发笔记
main.py包含所有编排逻辑,包括流程生命周期和流式代理httpx.- 空闲清理每30秒在后台运行一次;调整
BACKEND_IDLE_TIMEOUT以适应你的工作量。 - 更改依赖关系时,请保留Dockerfile和
requirements.txt以避免本地和容器化环境之间的漂移。
