
IBKR Portfolio Builder
io.github.adwiteeymauriyaPublished by GitHub account adwiteeymauriyav0.1.4Updated Oct 24, 2026
Top-down IBKR research: 468 typed screeners tagged by strategy intent, news, account access.
The publisher's own server: PortfolioFit
Overview
Remote MCP server for top-down IBKR portfolio research: a typed catalog of 468 screeners, news, and read-only account data.
- What you can do
- Browse and filter a typed catalog of 468 IBKR screeners by category, strategy intent and instrument, with inverse-pair links and numeric filter codes
- Run IBKR scans and get ranked tickers with exchange, plus substring search over raw scan codes
- Look up contracts by fuzzy name, read full contract metadata, and pull price snapshots or OHLCV history
- Read account summary, open positions, working orders and recent fills
- List subscribed news providers and fetch headlines or a single article body for a symbol
- When to use it
- Useful when you want an assistant to do top-down screening and portfolio research against an Interactive Brokers account — picking a strategy intent, running and intersecting scans, then checking news and earnings context — rather than looking up one ticker at a time.
- Requirements
- A remote Streamable HTTP endpoint at /mcp that you host yourself, with an ib-gateway sibling service and IBKR paper-account credentials (TWS_USERID, TWS_PASSWORD). Auth is chosen by AUTH_MODE: OAuth needs LOGIN_PASSWORD, bearer mode needs STATIC_BEARER_TOKEN, and the Authorization header carries the bearer token. Claude.ai connectors need a public HTTPS URL matching PUBLIC_BASE_URL.
Installation
In SourceWeft
- Open IBKR Portfolio Builder in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Other MCP clients
Follow the launch instructions in the repository.
README
ibkr-portfolio-builder-mcp
A remote MCP server for top-down portfolio construction with Interactive Brokers. Built to be used as a Claude.ai custom connector, Claude Code MCP, or any HTTP MCP client.
Most ibkr-mcp servers expose individual lookup primitives —
get_quote,get_position,place_order. This one exposes the research workflow: a typed catalog of 468 screeners across 16 categories tagged by strategy intent (value / growth / income / momentum / quality / events / …), per-scan applicable instruments, inverse-pair links, and live news/account access — so an LLM can do real top-down portfolio construction (pick sectors / strategies → run scans → cross-reference with news → narrow to candidates) instead of bottoms-up ticker fishing.
Why this exists
I built this because the existing IBKR-MCP servers in the community treat IBKR as a "look-up-one-ticker" data source. That mirrors how most retail brokerage UIs work, but it's not how good portfolio construction actually happens.
A good top-down workflow looks like:
- Macro thesis ("rates are about to fall, dividend payers should re-rate") →
- Strategy intent ("show me income screens with quality bias on US large caps") →
- Screener composition (run dividend yield + ROE + low debt screens; intersect) →
- Event/news context ("any of these have earnings in the next two weeks? any negative analyst actions?") →
- Narrow candidate set ("five tickers, ranked by my criteria, ready for deeper diligence").
To do that with an LLM, the MCP server needs to expose the research vocabulary, not just the raw API. That's the gap this server fills:
- A typed scan catalog — 468 IBKR scan codes across 16 categories (
Fundamentals,Price Movement,Dividends,Options & Volatility,Events & Earnings,52/26/13 Week High-Low,ESG,Bonds, …) auto-tagged with 28 strategy intent tags (value,growth,quality,income,momentum_up,momentum_down,analyst,technical,gap,volatility,events,leverage,efficiency,risk_adjusted, …). The LLM asks "what value scans exist for US stocks?" and gets a clean, filterable answer instead of trying to guess scan codes from training data. - Inverse pair links — every
HIGH_X ↔ LOW_XandX_ASC ↔ X_DESCpair is precomputed, so the LLM can flip polarity ("what's the opposite of LOW_PE_RATIO?") without guessing. - Per-scan instrument map — the catalog knows which scan applies to
STK,ETF,OPT,BOND, etc. The LLM stops sending Refinitiv scans to bond instruments and getting empty results. - Filter catalog — separate typed map of the numeric filters (
priceAbove,peRatioBelow,divYieldAbove,growthRateAbove,avgVolumeAbove,marketCapAbove, …) grouped by category, with per-instrument applicability notes. - News + screeners in one tool surface — same connector, same auth, same conversation. The LLM can intersect a scan result with recent headlines or upcoming earnings without context-switching.
- Two auth modes — full OAuth 2.1 (DCR + PKCE + well-knowns) for Claude.ai custom connectors, plus a static bearer token for everything else. Same server, same tools.
It's still an early server. The IBKR API has plenty of restrictions on what a paper account can actually see (notably historical news entitlement). But the catalog and workflow shape are production-ready, and they're the load-bearing piece for an LLM-driven research loop.
Quick facts
- Transport: Streamable HTTP at
/mcp. - Auth: OAuth 2.1 (PKCE + RFC 7591 Dynamic Client Registration) AND/OR static bearer token. Selectable via
AUTH_MODE. - Persistence: in-memory only today (sessions / DCR clients / OAuth tokens reset on container restart). Redis is on the roadmap — see below.
- IBKR connection: ib-gateway (
ghcr.io/gnzsnz/ib-gateway:stable) runs as a sibling service in this compose; paper account in read-only API mode by default. - Built on: FastMCP + ib_async.
Tools
Parity with IBKR's official MCP for the 9 read-only tools (skipping the two write/order-instruction tools — see roadmap), plus the 5 screener/news/catalog tools that are this server's reason for existing.
Note on order placement. IBKR's official MCP also exposes
Create Order InstructionandDelete Order Instruction. This server intentionally does not — it runs ib-gateway inREAD_ONLY_API=yesmode so even a misrouted tool call cannot place an order. Order execution belongs in a separate service with its own approval gate. See the roadmap for a possible "staged-only" instruction tool that would write to a local store without ever touching IBKR.
Authentication
AUTH_MODE selects which mechanisms the server accepts. The default is both.
The OAuth endpoints (/authorize, /token, /register, /.well-known/*, /login) are always registered. In bearer mode they're inert — nothing in your README needs to point at them.
Generating secrets
Using the static bearer token
Connecting from Claude.ai (OAuth)
Settings → Connectors → Add custom connector → URL: https://YOUR.DOMAIN/mcp → leave OAuth client id/secret blank (Claude.ai uses DCR). When Claude.ai opens the OAuth flow, you'll be prompted for LOGIN_PASSWORD.
Run
By default this pulls the published multi-arch image from GitHub Container Registry: ghcr.io/adwiteeymauriya/ibkr-portfolio-builder-mcp:latest. To build locally instead (e.g. when iterating on the source), run docker compose build ibkr-mcp first.
ib-gateway takes ~60–90 s to finish IBKR login after first start. Tail logs with docker logs -f ibkr-mcp-gateway.
For local-only use (bearer-token clients, no Claude.ai) this is enough — http://localhost:8000/mcp is now serving. Claude.ai custom connectors require an HTTPS URL on the public internet, so a reverse proxy with TLS in front is needed.
Putting TLS in front for Claude.ai
Pick one. Both end with a working https://your-host/mcp and a valid cert.
Option 1 — Cloudflare Tunnel (no public IP, no port forwarding). Best if the server runs on a home network or a VM behind NAT. Cloudflare gives you a hostname and TLS for free; the tunnel daemon dials out from the server to Cloudflare's edge.
~/.cloudflared/config.yml:
Run with cloudflared tunnel run ibkr-mcp (or install as a systemd unit via cloudflared service install). Then set PUBLIC_BASE_URL=https://ibkr-mcp.your-domain.com in .env and docker compose restart ibkr-mcp.
Option 2 — Caddy reverse proxy with Let's Encrypt. Best if the server has a public IP and ports 80/443 open. Caddy fetches certs automatically.
Caddyfile:
Run with caddy run (or install as a system service: sudo caddy start + a systemd unit). Same .env change as above.
In both cases PUBLIC_BASE_URL must match exactly the URL you give Claude.ai — Claude.ai validates the OAuth issuer against it.
Example LLM prompts (top-down workflow)
Roadmap
Open issues / PRs welcome on any of these.
Layout
License
MIT.
Acknowledgements
- gnzsnz/ib-gateway-docker for the headless ib-gateway image.
- ib_async for the async IBKR client.
- FastMCP for the MCP server framework with built-in OAuth support.
Disclaimer
This software talks to your Interactive Brokers account. By default it runs against a paper account in read-only API mode — orders cannot be placed even if a tool tries. If you switch to a live account, you do so at your own risk. None of the tool output constitutes investment advice; the strategy tagging is a vocabulary helper, not a recommendation engine.
Source: README.md at commit 337a5e1
Tools
0Version history
1- v0.1.4LatestSep 16, 2026
Score
60% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 daysRequired25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declaredRequired10 pts
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Other Portfolio integrations

PortfolioFit
fit.portfolioOfficial publisher
PortfolioFit is a remote MCP server that lets an assistant check normalized portfolios against mandates and compute allocation constraints and statistics.

Cameron Rye Portfolio MCP Server
dev.ryeOfficial publisher
Remote MCP endpoint exposing Cameron Rye's blog, portfolio projects, bio, reading list and live site stats, plus contact and newsletter tools.
Shlok Bam's portfolio
Published by GitHub account shlokbam
Shlok Bam's portfolio's hosted MCP server; no sign-in required; Streamable HTTP; 10 tools.

Harshith Nayaka L portfolio docs
Published by GitHub account HarshithNayakaL
Read-only MCP server exposing the developer documentation for a portfolio site's JSON API, MCP, A2A and NLWeb endpoints.

Harshith Nayaka L portfolio
Published by GitHub account HarshithNayakaL
Read-only MCP access to Harshith Nayaka L's portfolio site, letting an assistant look up his profile, projects, case studies, FAQ and agent skills.