Skip to main content

unified-finance-mcp

CI PyPI version Python License: MIT

One MCP server for finance data: Yahoo Finance, TradingView, FMP, Alpha Vantage, marketaux, Futu OpenD and the Kimi Datasource meta-source behind a single tool surface, with market-aware auto-routing across sources.

Features

Surface Tools Notes
Unified tools 18 Domain-organized, cross-source tools with a source parameter: auto routes by market coverage, or pin one source explicitly
TradingView containers 3 tv_scan, tv_analyze, egx_market — scanner/analysis containers selected by action (unknown actions return the available list)
Futu OpenD mount 53 All futu-opend-mcp tools are mounted alongside the unified tools (get_snapshot, get_kline, futu_get_option_chain, …) when OpenD is configured
L2 self-describing containers 2 quant_backtest and kimi_datasource keep secondary functionality out of the primary tool list; call with action='help' / action='list' to discover them
Diagnostics 1 get_service_status reports provider availability, coverage and mounted tool counts (read-only, no network I/O)

Data sources: Yahoo Finance · TradingView · FMP · Alpha Vantage · marketaux · Futu OpenD · Kimi Datasource (tianyancha CN company data, World Bank / IMF macro series, SEC EDGAR, S&P Capital IQ, gildata screener data, and more).

The unified tools accept futu (HK.00700), Yahoo (0700.HK, COMI.CA) and TradingView (EGX:COMI) symbol forms; bare tickers default to US.

Install

Requires Python ≥ 3.10.

uvx unified-finance-mcp          # ephemeral run (uv)
pipx install unified-finance-mcp # persistent install
pip install unified-finance-mcp  # classic install

The console entry point is unified-finance-mcp. By default it serves stdio (MCP client spawns it directly); --transport http serves streamable HTTP with a /health endpoint.

Configuration

All configuration is via environment variables. The server's own knobs use the FINANCE_MCP_* prefix; third-party credentials keep their vendor names. Every key is optional — each provider activates only when its credential is present, and auto-routing skips unavailable sources.

Core (all providers)

Variable Purpose Default
FINANCE_MCP_TRANSPORT stdio or http (or CLI --transport) stdio
FINANCE_MCP_HOST HTTP listen host (or CLI --host) 127.0.0.1
FINANCE_MCP_PORT HTTP listen port (or CLI --port) 8000
FINANCE_MCP_REQUEST_TIMEOUT Per-source request timeout (seconds) 20
FINANCE_MCP_MAX_RETRIES HTTP retry count 3
FINANCE_MCP_MIN_HOST_DELAY Minimum delay between requests to one host (seconds) 0.5
FINANCE_MCP_FUTU 0 disables the Futu OpenD mount entirely true

FMP

Free API key: https://site.financialmodelingprep.com/register

Variable Purpose Default
FMP_API_KEY FMP API key
FMP_BASE_URL FMP endpoint override; point it at your multi-key rotator, e.g. http://api-key-rotator:8788/fmp https://financialmodelingprep.com

Alpha Vantage

Free API key: https://www.alphavantage.co/support/#api-key

Variable Purpose Default
ALPHAVANTAGE_API_KEY Alpha Vantage API key
ALPHAVANTAGE_BASE_URL Endpoint override (rotator-friendly), e.g. http://api-key-rotator:8788/alphavantage https://www.alphavantage.co

marketaux

Free API token: https://www.marketaux.com/register

Variable Purpose Default
MARKETAUX_API_TOKEN marketaux news API token
MARKETAUX_BASE_URL Endpoint override (rotator-friendly), e.g. http://api-key-rotator:8788/marketaux https://api.marketaux.com

Kimi Datasource

Auth resolution order: KIMI_PROXY_URLKIMI_ACCESS_TOKENKIMI_AUTH_FILE. Exactly one way needs to be configured for the kimi tools to activate.

Variable Purpose Default
KIMI_PROXY_URL Primary. URL of a proxy that injects credentials for you — e.g. the CLIProxyAPI cliproxy-kimi-tools plugin at http://cli-proxy-api:8317/v0/management/kimi/tools, or a standalone kimi-datasource-proxy container. When KIMI_ACCESS_TOKEN is also set, it is sent as Authorization: Bearer … (the CLIProxyAPI management key) and the proxy strips it before talking to Kimi.
KIMI_AUTH_FILE Fallback. Path (or glob) to a cliproxy kimi credential JSON, e.g. /mnt/docker/cliproxy/auths/kimi-*.json — the first file with disabled != true is used; the client self-refreshes the token when it expires
KIMI_ACCESS_TOKEN Fallback (direct). A Kimi Code token used directly against KIMI_BASE_URL, with no refresh logic. With KIMI_PROXY_URL set: doubles as the proxy's management key (see above).
KIMI_BASE_URL Upstream endpoint used with the two fallback paths https://api.kimi.com/coding/v1/tools
KIMI_FILES_DIR Where datasource result files are written /tmp/unified_finance_mcp

Futu OpenD (inherited from futu-opend-mcp)

Variable Purpose Default
FUTU_OPEND_HOST OpenD gateway host 127.0.0.1
FUTU_OPEND_PORT OpenD gateway port 11111
FUTU_OPEND_ENCRYPT Use encrypted protocol true
FUTU_OPEND_RSA_KEY / FUTU_OPEND_RSA_KEY_FILE RSA private key (inline or file) for encrypted OpenD

Client configuration

Claude Code

# stdio (default transport)
claude mcp add finance -- uvx unified-finance-mcp

# with environment, e.g. your API keys + rotator endpoints
claude mcp add finance \
  --env FMP_API_KEY=<your-fmp-key> \
  --env FMP_BASE_URL=http://api-key-rotator:8788/fmp \
  --env KIMI_PROXY_URL=http://kimi-datasource-proxy:8788/coding/v1/tools \
  --env FUTU_OPEND_HOST=192.168.1.10 \
  -- uvx unified-finance-mcp

# streamable HTTP mode (server started with --transport http)
claude mcp add --transport http finance http://127.0.0.1:8000/mcp

claude_desktop_config.json

{
  "mcpServers": {
    "finance": {
      "command": "uvx",
      "args": ["unified-finance-mcp"],
      "env": {
        "FMP_API_KEY": "<your-fmp-key>",
        "FMP_BASE_URL": "http://api-key-rotator:8788/fmp",
        "ALPHAVANTAGE_API_KEY": "<your-av-key>",
        "KIMI_PROXY_URL": "http://kimi-datasource-proxy:8788/coding/v1/tools",
        "FUTU_OPEND_HOST": "127.0.0.1"
      }
    }
  }
}

Streamable HTTP (any MCP client)

Start the server:

FINANCE_MCP_TRANSPORT=http unified-finance-mcp --port 8000
# or: unified-finance-mcp --transport http --port 8000

then connect to http://127.0.0.1:8000/mcp (health probe at http://127.0.0.1:8000/health).

Migrating from mcpo (5 servers → 1)

Replace the mcpo-aggregated stack — futu-opend, yfinance, tradingview (wrapped through mcpo) plus FMP and Alpha Vantage over streamable HTTP — with a single unified-finance-mcp entry.

Before (mcpo config, five servers):

{
  "mcpServers": {
    "futu":        { "command": "uvx", "args": ["futu-opend-mcp"] },
    "yfinance":    { "command": "mcpo", "args": ["--config", "/path/to/yfinance-mcp.json"] },
    "tradingview": { "command": "mcpo", "args": ["--config", "/path/to/tradingview-mcp.json"] },
    "fmp":         { "type": "sse", "url": "http://localhost:8788/fmp" },
    "alphavantage":{ "type": "sse", "url": "http://localhost:8788/alphavantage" }
  }
}

After:

{
  "mcpServers": {
    "finance": {
      "command": "uvx",
      "args": ["unified-finance-mcp"],
      "env": {
        "FMP_API_KEY": "<your-fmp-key>",
        "FMP_BASE_URL": "http://api-key-rotator:8788/fmp",
        "ALPHAVANTAGE_API_KEY": "<your-av-key>",
        "MARKETAUX_API_TOKEN": "<your-marketaux-token>",
        "KIMI_PROXY_URL": "http://kimi-datasource-proxy:8788/coding/v1/tools",
        "FUTU_OPEND_HOST": "127.0.0.1"
      }
    }
  }
}

The same credentials carry over; yfinance and tradingview need no key (they are backed by yfinance and tradingview-ta/tradingview-screener in-process, which also removes the Python ≥3.14 wrapper constraint mcpo hit).

Tool quick reference

Tool What it does
get_quote Latest snapshot for one or more symbols (futu/yahoo/TV symbol forms)
get_history OHLCV history; interval 1m–1mo, start/end dates
get_company_info Company profile: name, sector, market cap, description
get_financial_report Income / balance / cashflow statements, annual or quarterly
get_news Symbol news, or global headlines with symbol=None
get_technical_indicators Ratings summary + indicator values (summary or named indicators)
run_screener Screen stocks by market and numeric filters, sorted and limited
get_ownership Major / institutional / mutual-fund holders, insider transactions
get_events_calendar Earnings, dividends, IPO calendar (date range optional)
get_economic_data Macro series: GDP, CPI, unemployment, rates, treasury yields, …
search_symbols Search symbols by company name or ticker
get_company_risk_cn CN company risk profile from tianyancha (via kimi)
quant_backtest Strategy backtest container: run / compare / walk_forward; action='help' for the full parameter guide
kimi_datasource Self-describing datasource access: action='list' / 'describe' / 'call'
tv_scan TradingView exchange-wide scans (top gainers/losers, volume breakout, …) by action
tv_analyze TradingView symbol analysis (summary, candle patterns, multi-timeframe, …) by action
egx_market Egyptian Exchange tools (overview, sector scan, index, screener, trade plan, fibonacci) by action
get_service_status Provider availability/coverage and mounted tool counts (read-only)

Plus the 53 mounted futu-opend-mcp tools (get_snapshot, get_kline, futu_get_option_chain, get_capital_flow, …) for HK/CN/US depth from OpenD.

Development

pip install -e ".[dev]"
ruff check .                        # lint
pytest -q -m "not integration"      # unit suite (integration marker needs live APIs/OpenD)

Layout: src/unified_finance_mcp/providers/ (Yahoo, TradingView, FMP, Alpha Vantage, marketaux, Futu bridge, Kimi), tools/ (the 14 tool modules registered from ALL_MODULES), config.py (env Settings), http.py (polite per-host rate-limited client).

Release process

  1. Push your changes to main and confirm CI is green (ruff + pytest).
  2. On PyPI, add this repository as a pending trusted publisher (one-time setup).
  3. Tag and push:
git tag v0.1.0 && git push origin v0.1.0

publish.yml builds the wheel/sdist and publishes to PyPI via OIDC trusted publishing (no tokens stored in the repo).

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

unified_finance_mcp-0.1.1.tar.gz (254.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

unified_finance_mcp-0.1.1-py3-none-any.whl (180.6 kB view details)

Uploaded Python 3

File details

Details for the file unified_finance_mcp-0.1.1.tar.gz.

File metadata

  • Download URL: unified_finance_mcp-0.1.1.tar.gz
  • Upload date:
  • Size: 254.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for unified_finance_mcp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 fd94a9fd7a1968f380d4eb366adf5d25d4082f2484f80f5c7ade357ab9cfa65d
MD5 6a399713333d61e14f0913ddfdc2f19c
BLAKE2b-256 54f407bdca3f50ca128a47563278a2f02b2f8fe815aee2605c9d499026175d9d

See more details on using hashes here.

Provenance

The following attestation bundles were made for unified_finance_mcp-0.1.1.tar.gz:

Publisher: publish.yml on xyonium/finance-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file unified_finance_mcp-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for unified_finance_mcp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f2c968708212b107ec12b1b317738ba61e839380f0e616e13f8c5d2fceb3687d
MD5 0b194d4222692e986e9c3d589dade21c
BLAKE2b-256 57cc7dc9548950c7a6b782945b56b974221b5071a0c1708940878f36e6f020cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for unified_finance_mcp-0.1.1-py3-none-any.whl:

Publisher: publish.yml on xyonium/finance-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.3.0

2 files

0.2.0

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.2

2 files

This release

0.1.1 This release

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page