Skip to main content

MCP server exposing Futu OpenD read-only investment-research quote APIs.

Project description

futu-opend-mcp

An MCP server that exposes Futu OpenD's read-only investment-research quote APIs (stock/option/warrant/futures prices, financials, news/announcements, shareholders, institutions, macro) as MCP tools. It borrows your already-running, logged-in Futu OpenD gateway - no separate auth. No trading, no subscriptions.

It wraps the official Futu skill pack unmodified, so it stays in sync with Futu's own field-parsing logic.

Install & run

Claude Code / Claude Desktop (stdio)

claude mcp add futu-opend-mcp -- uvx futu-opend-mcp

Or from git before a PyPI release:

claude mcp add futu-opend-mcp -- uvx --from git+https://github.com/ER-EPR/futu-opend-mcp futu-opend-mcp

Open WebUI via mcpo (HTTP)

uvx mcpo --port 8000 -- futu-opend-mcp
# OpenAPI at http://localhost:8000, docs at /docs

MCP JSON config

Add to ~/.claude/settings.json, .mcp.json, or Claude Desktop config:

Remote OpenD (with encryption):

{
  "mcpServers": {
    "futu-opend": {
      "command": "uvx",
      "args": ["futu-opend-mcp"],
      "env": {
        "FUTU_OPEND_HOST": "your-opend-host",
        "FUTU_OPEND_PORT": "11111",
        "FUTU_OPEND_ENCRYPT": "true",
        "FUTU_OPEND_RSA_KEY": "-----BEGIN RSA PRIVATE KEY-----\\nMIIC...\\n-----END RSA PRIVATE KEY-----"
      }
    }
  }
}

Local OpenD (no encryption):

{
  "mcpServers": {
    "futu-opend": {
      "command": "uvx",
      "args": ["futu-opend-mcp"],
      "env": {
        "FUTU_OPEND_ENCRYPT": "false"
      }
    }
  }
}

Extract the RSA key for the env var:

docker exec futu-opend cat /rsa/rsa_private_pkcs1.pem | awk '{printf "%s\\n", $0}'

Configuration (env vars)

Var Default Purpose
FUTU_OPEND_HOST 127.0.0.1 OpenD host
FUTU_OPEND_PORT 11111 OpenD port
FUTU_OPEND_RSA_KEY - inline PEM of the shared RSA private key
FUTU_OPEND_RSA_KEY_FILE - path to the PEM file (alternative to above)
FUTU_OPEND_ENCRYPT true proto encryption; false for local 127.0.0.1 OpenD
FUTU_OPEND_LOG_LEVEL INFO logging level

OpenD and the SDK share one RSA private key (PKCS#1 1024-bit). Get it from a dockerized OpenD with: docker compose logs opend | grep -A20 'NEW RSA PRIVATE KEY'.

Tools

~50 read-only tools across: price/quote, search, screening, financials, research/valuation, corporate actions, shareholders, profile, capital flow, short interest, options, option underlying IV/HV, warrants/futures, plates, industrial chains, institutions, macro, dividends, IPO, and diagnostics. See docs/superpowers/specs/2026-07-10-futu-opend-mcp-design.md.

Development

pip install -e ".[dev]"
pytest -q -m "not integration"   # unit tests (no OpenD needed)
ruff check .

Live-OpenD integration tests are marked integration and skip themselves when OpenD is unreachable. Re-vendor the official skill pack with ./scripts/sync_skill.sh.

Attribution

Wraps the official Futu futuapi skill pack (vendored under src/futu_opend_mcp/_skill/futuapi/, unmodified). Legal terms in that folder apply.

License

MIT.

Project details


Download files

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

Source Distribution

futu_opend_mcp-0.1.2.tar.gz (243.8 kB view details)

Uploaded Source

Built Distribution

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

futu_opend_mcp-0.1.2-py3-none-any.whl (413.5 kB view details)

Uploaded Python 3

File details

Details for the file futu_opend_mcp-0.1.2.tar.gz.

File metadata

  • Download URL: futu_opend_mcp-0.1.2.tar.gz
  • Upload date:
  • Size: 243.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for futu_opend_mcp-0.1.2.tar.gz
Algorithm Hash digest
SHA256 1662cce7f9656729babab5c91623c513c98e98f531039709e5a51bf533ca0716
MD5 2ffe348988d4ca3d83fa14ae7eb04f28
BLAKE2b-256 875d8788aed1341b116a5241e0fcdc72ddcc04a33cc324d362b1cd4d3f8d1b65

See more details on using hashes here.

Provenance

The following attestation bundles were made for futu_opend_mcp-0.1.2.tar.gz:

Publisher: publish.yml on xyonium/futu-opend-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 futu_opend_mcp-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: futu_opend_mcp-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 413.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for futu_opend_mcp-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c47e75d014c6bf22994e918eb2926b8545df9f72d1bf17ad7c6d4f35cd60bddb
MD5 c254b9d7d2fcd40fa1f77ee721f86a91
BLAKE2b-256 dbe4043aaf3c92496e47ee25bf10aadbd80028a8349cb1800c2c5e832ec31cd1

See more details on using hashes here.

Provenance

The following attestation bundles were made for futu_opend_mcp-0.1.2-py3-none-any.whl:

Publisher: publish.yml on xyonium/futu-opend-mcp

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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page