FMP通用MCP(仅限用户密钥)
核心摘要 - 完全不使用环境变量/服务器密钥。 -?apiKey=或标题X-FMP-Api-Key仅传递到的密钥 使用向FMP提出请求。 -PRODUCT_API_KEY基础服务器认证 去除可以了。 - 在MCP/Connector方案中Mcp-Session-Id可以使用保存/重新使用会话单位密钥。
______________________________________________________________________
1)配置概述
- 服务器框架: 斯塔莱特 (MCP
FastMCP.streamable_http_app()使用) - 外部连接: 财务建模准备(FMP) —
https://financialmodelingprep.com - HTTP客户端:
httpx - 文件:
server.py(本存储库的单一入口点)
密钥处理策略
- 服务器/环境变量
FMP_API_KEY未使用 (回退/删除强制验证) PRODUCT_API_KEY,REQUIRE_MCP_AUTH,ALLOW_QUERY_API_KEY实际处置- 所有FMP呼叫 用户提供的密钥仅使用
- URL查询: ?apiKey= - 标题: X-FMP-Api-Key: - 会话: Mcp-Session-Id(或 mcp_session_id 查询) 保存并重新使用会话
在初始请求中 ?apiKey=...如果仅传递,则该密钥 DEFAULT_FMP_KEY_FROM_URL 临时保存为 之后,它也可以暂时用于没有会话标识符的请求。______________________________________________________________________
2)安装
# python 3.10+ 권장
pip install uvicorn httpx python-dotenv starlette mcp在某些环境中,pip install mcp可能不提供软件包。那种情况 单独安装或提供MCP客户机/服务器工具包server.py的MCP相关线路 通过临时注释,只能使用常规HTTP端点。
______________________________________________________________________
3)运行
uvicorn server:app --reload
# 기본 주소: http://127.0.0.1:8000Render等PaaS PORT 环境变量可以自动注入,本代码 PORT如果没有 8000 由端口驱动。
______________________________________________________________________
4)HTTP端点
下面的端点 本地测试为添加。(封装MCP工具调用的薄封套)
4.1公司简介
GET /fmp/profile/{symbol}示例:
curl "http://127.0.0.1:8000/fmp/profile/AAPL?apiKey=YOUR_FMP_KEY"
# 또는
curl -H "X-FMP-Api-Key: YOUR_FMP_KEY" "http://127.0.0.1:8000/fmp/profile/AAPL"4.2实时行情
GET /fmp/quote/{symbol}示例:
curl "http://127.0.0.1:8000/fmp/quote/AAPL?apiKey=YOUR_FMP_KEY"
# 또는
curl -H "X-FMP-Api-Key: YOUR_FMP_KEY" "http://127.0.0.1:8000/fmp/quote/AAPL"4.3任意路径代理(注意)
GET /fmp/call?path=/api/v3/profile/AAPL&apiKey=YOUR_FMP_KEY安全主义:在生产环境中 /fmp/call请务必配置的允许路径白名单/列表列表。4.4健康检查
GET /health- 如果没有密钥:跳过外部联动测试,简单响应
- 如果您有密钥:实际调用轻量级FMP端点以验证连接性
4.5路线/韦尔诺恩
GET /:索引信息GET /.well-known/openid-configuration:OAuth/OIDC不支持指南(有意404)GET /.well-known/oauth-authorization-server:OAuth/OIDC不支持指南(有意404)
______________________________________________________________________
5)MCP工具(工具)
Starlette应用程序 FastMCP.streamable_http_app()由组成 /mcp 提供SSE端点。 下面公开了MCP工具。
- 核心:
fmp_call(endpoint, service, params, ...)
- 包含所有FMP调用的通用寻呼机 - 如果没有用户密钥,请执行以下操作: _error 以结构响应
- 基于目录的动态工具:
fmp_search_name,fmp_quote,fmp_income_statement等多数 - 工具:
- ping() :验证会话/密钥是否保留 - set_fmp_api_key(api_key) / clear_fmp_api_key() :在会话中注册/禁用密钥 - list_fmp_endpoints(run_check=True) :目录+辅助功能检查 - test_endpoint_access(service, endpoint, params) :调用特定端点示例
_error 响应格式(示例)
{
"_error": {
"code": "MISSING_API_KEY",
"needs_user_confirmation": false,
"suggest_web_search": true,
"message": "MCP URL에 ?apiKey=... 로 FMP 키를 전달해야 합니다...",
"explain_to_user": "MCP 서버 등록 시 URL 끝에 ?apiKey=를 포함해 주세요."
}
}上游错误(401/402/403/429/5xx等)包括: _error.code/status/plan_hint/suggested_action 背地里 分类并返回。
______________________________________________________________________
6)会话和密钥存储规则
- 请求
Mcp-Session-Id标题(或查询)mcp_session_id)将其值用作会话ID。 X-FMP-Api-Key海瑟娜?apiKey如果包含参数 密钥存储在会话中可以。- 如果以后使用相同的会话ID请求 省略键可以。
示例(PowerShell):
# 1) 최초 요청: 세션 + apiKey
curl -H "Mcp-Session-Id: local-test-session" "http://127.0.0.1:8000/fmp/profile/AAPL?apiKey=YOUR_FMP_KEY"
# 2) 이후 요청: 같은 세션, 키 생략
curl -H "Mcp-Session-Id: local-test-session" "http://127.0.0.1:8000/fmp/quote/AAPL"______________________________________________________________________
7)常见问题(FAQ)&故障诊断
Q1) 404 Not Found走吧。
- 原因1:服务器是旧版本代码。
server.py中的以下3个路由 必须包括必须。
- app.add_route("/fmp/profile/{symbol}", ...) - app.add_route("/fmp/quote/{symbol}", ...) - app.add_route("/fmp/call", ...)
- 原因2:拼写错误/路径错误。示例:
/fmp/quote/AAPL像那样 元件必须传递到path param。
Q2) _error: MISSING_API_KEY走吧。
- URL中
?apiKey=...或标题X-FMP-Api-Key: ...请检查是否包括。 - 如果您正在使用MCP
set_fmp_api_key()可以通过注册会话。
Q3)出现401/402/403/429/5xx等上游错误。
- 响应的
_error请检查字段。plan_hint,suggested_action将介绍如何应对。
Q4)Render部署时的设置是?
- FMP_API_KEY/PRODUCT_API_KEY不需要(不使用)。
- 必要时
CORS_ALLOW_ORIGINS请仅指定为环境变量。 - 端口为
PORT遵循环境变量,如果没有,则使用8000。
______________________________________________________________________
8)安全注意事项
- 公开发行时
/fmp/call银 白名单/光线列表请务必应用。 - 不要将API密钥保留在日志中(包括反向代理/监控工具)。
- 超文本传输安全协议(TLS)仅在环境中使用。
______________________________________________________________________
9)许可证
根据内部使用或项目策略。
