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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

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

Uploaded Python 3

File details

Details for the file futu_opend_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: futu_opend_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 413.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for futu_opend_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d162e48e502151db839fd1c0616c1f1ef1a8d1bb1a9b918862f1e4210a876bc4
MD5 b357215a7ca0cff097f3ec8579ef1459
BLAKE2b-256 77267e7326dee41d6cb76189c1085598e918f856d5dfabf1c02568f9e21ec615

See more details on using hashes here.

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