金融数据代理服务

一个Docker化的MCP网关服务,用于代理NASDAQ Data Link MCP服务器,支持通过Server-Sent Events (SSE)进行金融数据查询和工具调用。适用于金融数据分析、实时数据监控等场景。

  • by Jaivignesh-afk
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Jaivignesh-afk/mcp-gateway

使用说明

概述 此仓库包含一个配置为代理纳斯达克数据链路MCP服务器的Docker化MCP网关,以及一个Python异步客户端,该客户端用于初始化MCP会话、枚举可用工具,并通过服务器发送事件(SSE)调用一个示例工具。 客户端连接到位于 http://localhost:8080/nasdaq/sse 的网关,并展示了一个对名为 list_stock_stat_fields 的工具进行空参数调用的示例。

建筑 `docker-compose.yml` 文件定义了两个服务:`mcp-gateway`(在主机端口 8080 上暴露)和 `nasdaq-mcp`(在主机端口 8081 上暴露,映射到容器内的 8080 端口),它们共同构成了一个简单的网关到后端的拓扑结构。 `gateway.yaml` 配置了一个服务器条目 `nasdaq-data-link`,该条目指向 `http://nasdaq-mcp:8080/sse`,使用传输类型为 `sse`,并启用了签名验证,使得网关能够通过内部 Docker 网络将 SSE 流量路由到后端的 MCP 服务器。

文件结构 `test.py` — 使用SSE(Server-Sent Events)通过`mcp.ClientSession`初始化会话、列出工具并调用一个示例工具的异步Python客户端示例。

`docker-compose.yml` —— 用于编排 `mcp-gateway` 和 `nasdaq-mcp` 服务,包括端口、环境、命令标志、卷和密钥。

`gateway.yaml` — 网关服务器配置,通过SSE(服务器发送事件)并进行签名验证,将`nasdaq-data-link`绑定到`nasdaq-mcp`服务。

先决条件 由于编排和服务配置是在docker-compose.yml文件中定义的,因此需要Docker和Docker Compose。 要运行test.py中的示例客户端(该客户端导入了mcp和mcp.client.sse),需要安装一个提供mcp包的Python模块。 必须通过NASDAQ_API_KEY环境变量或在compose配置中描述的nasdaq_data_link_api_key.txt密钥来提供一个NASDAQ数据链接API密钥。

设置 将 gateway.yaml 文件放置在本地 ./config 目录下,这样它就会被挂载到网关容器的 /config/gateway.yaml 路径,与 docker-compose.yml 中的 mcp-gateway 命令标志和卷映射相匹配。 如果使用提供的秘密工作流,请创建一个包含NASDAQ Data Link API密钥的nasdaq_data_link_api_key.txt文件,以支持在compose文件中声明的my_secret秘密。

使用 Docker 运行 使用 `docker compose up -d` 命令启动堆栈,以在主机端口8080上运行mcp-gateway,并在主机端口8081上运行nasdaq-mcp,如ports部分所定义。

网关将通过SSE(服务器发送事件)使用服务器名称nasdaq-data-link,并利用通过--servers和/config/gateway.yaml提供的配置,将/nasdaq路由到nasdaq-mcp。

NASDAQ_DATA_LINK_API_KEY通过环境变量传递给网关和后端,同时可定义一个用于基于文件的密钥配置的可选密钥my_secret。

运行Python客户端 安装依赖项,以便能够导入mcp模块和mcp.client.sse,因为test.py导入这些符号以建立SSE客户端和MCP会话。 运行 `python test.py` 来初始化会话,列出可用的工具,并针对 `http://localhost:8080/nasdaq/sse` 调用示例工具 `list_stock_stat_fields`,使用空参数调用。 该脚本从`list_tools`响应中打印工具元数据,然后打印示例工具调用的结果内容,以便快速验证。

配置详情 MCP网关使用镜像docker/mcp-gateway:latest,将8080端口绑定到8080端口,挂载./config:/config,并以包括--transport=sse、--servers=nasdaq-data-link、--port=8080、--verbose=true和--config=/config/gateway.yaml在内的标志启动。 纳斯达克-MCP使用镜像mcp/nasdaq-data-link:latest,将8081端口映射到8080端口,并且还期望从环境变量中获取NASDAQ_DATA_LINK_API_KEY以便后端访问数据服务。 在 `gateway.yaml` 中,启用 `verify_signatures: true` 以强制进行签名验证,同时将 SSE 流量路由到 `nasdaq-data-link` 服务器条目下的 `http://nasdaq-mcp:8080/sse`。

故障排除 如果list_tools返回无条目或工具调用失败,请验证NASDAQ_DATA_LINK_API_KEY是否可通过NASDAQ_API_KEY环境映射获取,或是否由Docker Compose中配置的nasdaq_data_link_api_key.txt密钥提供支持。 确保网关配置文件位于网关容器内的 /config/gateway.yaml 路径下可通过,方法是验证 compose 文件中的 ./config 挂载点和 --config 标志是否一致。 确认客户端目标URL为http://localhost:8080/nasdaq/sse,并且两个容器都在运行,并且正在监听docker-compose.yml中定义的预期端口。