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.1.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.1-py3-none-any.whl (413.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: futu_opend_mcp-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 fc5a9d9f5f169a844d3e024ce8d96ccc95f5b279905ff8ae029dd27354683bac
MD5 cd4624f63dc418d3939a9e2cfb2cc89f
BLAKE2b-256 68d954df2b1ae3b33dae973711c0517a34b9b719b20b05bdf19b7a1533646520

See more details on using hashes here.

Provenance

The following attestation bundles were made for futu_opend_mcp-0.1.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: futu_opend_mcp-0.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2df9a4580a2abf962fa1f70b269fe14772e4d06282e5be30b1ff35543920a0b8
MD5 3f687565bd114bd7dffdd6682324a49e
BLAKE2b-256 7788cff1dac592801dabdfea550c774a1363620cdc079b9662f7bf69726b57dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for futu_opend_mcp-0.1.1-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