金融数据聚合服务

Finance & Crypto MCP 是一个轻量级 Python 模块,提供加密货币市场、股票数据和跨资产新闻的统一聚合服务,支持 CoinGecko、Finnhub、Marketaux 和 NewsAPI 等多种数据源。

  • by aleemjaved42
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 aleemjaved42/finance-mcp

使用说明

金融与加密货币MCP

金融与加密货币MCP是 主控程序 该服务器允许代理在一个地方提取加密市场、股票数据和跨资产新闻。运行时是一个轻量级Python模块,当API密钥可用时,它会扇出CoinGecko(无密钥)、Finnhub、Marketaux和NewsAPI。

此存储库旨在为公共就绪:它不包含嵌入式凭据,在运行时加载机密,并附带响应缓存和重试策略等防御默认值。

亮点

  • 7个MCP工具,涵盖现货价格、移动器、OHLC数据、报价、蜡烛、新闻和跨资产比较。
  • 围绕 requests 使用共享的重试/缓存中间件来平滑速率限制。
  • 零硬编码秘密;基于环境的配置 .env 或过程变量。
  • 与Claude Desktop、MCP Inspector或任何兼容的客户端一起开箱即用。

工具目录

  • crypto_price(symbol, vs_currency="usd") –CoinGecko现货价格,24 h变化,市值。
  • crypto_top_movers(vs_currency="usd", direction="up|down", limit=10) –前24名 h在CoinGecko上移动。
  • crypto_ohlc(symbol, days=1) –CoinGecko OHLC条长达90天。
  • stock_quote(symbol) –Finnhub报价快照,包括价格、变化、范围和货币。
  • stock_candles(symbol, resolution="D", count=100) Finnhub历史蜡烛(1、5、15、30、60分钟或每天)。
  • news(topic="markets", limit=10, lang="en") –来自Finnhub、Marketaux、GDELT的聚合新闻,以及配置后的NewsAPI。
  • compare_assets(assets: list[str]) –智能启发式,提取股票报价或加密货币价格,并返回混合快照。

外部提供商和密钥

  • CoinGecko-公共访问,无需密钥。
  • Finnhub–套装 FINNHUB_API_KEY (免费版有效)。
  • Marketaux–可选,套装 MARKETAUX_KEY.
  • NewsAPI–可选,设置 NEWSAPI_KEY.

如果缺少提供者密钥,则相关联的数据源将被优雅地跳过,工具仍将返回剩余提供者的数据。

需求

  • Python 3.10或更高版本(针对3.11进行测试)。
  • Finnhub的API密钥(库存工具需要),Marketaux和NewsAPI的可选密钥。
  • 网络访问CoinGecko、Finnhub、Marketaux、NewsAPI和GDELT端点。

安装

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

配置

环境变量通过以下方式加载 python-dotenv (load_dotenv() 在 finance_mcp/server.py).将它们添加到您的shell、CI机密或本地 .env 文件,你 不得承诺.

FINNHUB_API_KEY=your_finnhub_api_key      # required for stock tools
NEWSAPI_KEY=your_newsapi_key              # optional, enriches news output
MARKETAUX_KEY=your_marketaux_key          # optional, enriches news output
CACHE_TTL_SECONDS=60                      # requests-cache TTL (set <=0 to disable)
REQUESTS_CACHE_BACKEND=sqlite             # sqlite, filesystem, redis, etc.
REQUESTS_CACHE_PATH=~/.cache/finance-mcp/finance_cache

提示:创建一个 .env 手动文件(例如。, cat <<'EOF' > .env … EOF).该项目的 .gitignore 已排除 .env 以及缓存文件。

运行服务器

python -m finance_mcp.server

服务器将自己宣传为 finance-mcp 并监听stdio(MCP默认)。当上游请求失败时,日志会被写入stderr,并带有基本的回溯功能。

与Claude Desktop一起使用

更新 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "finance-mcp": {
      "command": "python",
      "args": ["-m", "finance_mcp.server"],
      "env": {
        "FINNHUB_API_KEY": "YOUR_KEY",
        "NEWSAPI_KEY": "YOUR_KEY",
        "MARKETAUX_KEY": "YOUR_KEY",
        "CACHE_TTL_SECONDS": "60"
      }
    }
  }
}

编辑配置后重新启动Claude Desktop,使其获取新的服务器定义。

MCP检查员和当地烟雾测试

使用MCP检查器以交互方式运行服务器:

pip install mcp
mcp dev src/finance_mcp/server.py

或执行捆绑烟雾测试(不需要MCP客户端):

python scripts/local_test.py

当设置了相关的API键时,脚本仅调用股票/新闻流。

缓存、速率限制和错误处理

  • finance_mcp/util/http.py 安装 requests-cache 60 默认情况下为SQLite缓存。集 CACHE_TTL_SECONDS<=0 或 REQUESTS_CACHE_BACKEND=none 禁用。
  • 每 requests 会话附带HTTP重试 429/5xx 加上指数级的回退,以礼貌地对待上游API。
  • 当上游调用失败时,该工具要么引发信息错误(股票工具),要么省略提供者(新闻聚合器)。MCP客户端会收到相关的结构化JSON错误。
  • finance_cache.sqlite 通过忽略 .gitignore;如果意外签入,请在发布前删除它。

安全和操作说明

  • 源树中没有凭据。仔细检查你的Git历史记录是否有杂散 .env 在推送之前,文件或缓存数据库。
  • 机密应该通过环境变量或CI/CD机密管理器注入。旋转键(如果它们曾在早期提交中使用过)。
  • 该代码将工具调用(名称和参数)记录到stderr。避免将原始秘密作为工具参数发送。
  • 上游请求不设置显式超时;在敌对网络中运行时,考虑配置公司防火墙或包裹服务器。
  • 默认情况下,所有出站HTTP调用都会验证TLS证书(requests 标准行为)。

示例和提示包

这 examples/prompt_pack.md 该文件包含现成的提示模式,这些模式结合了Claude Desktop等代理的多个工具调用。

许可证

麻省理工学院