AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP unreviewed MIT Self-run

Ibkr

mcp-osauer-ibkr · by osauer

IBKR MCP server for TWS and IB Gateway: local Go CLI, stdio MCP server, and Go TWS API.

No reviews yet
0 installs
36 views
0.0% view→install

Install

$ agentstack add mcp-osauer-ibkr

Open-source listing, not yet scanned by AgentStack. Follow the source repository for install instructions.

Security review

⚠ Flagged

1 finding(s); flagged for manual review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures
  • high Pipes remote content directly into a shell (remote code execution).

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution Used
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Reliability & compatibility

Not yet reviewed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Ibkr? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

ibkr - IBKR MCP server for TWS and IB Gateway

[](https://github.com/osauer/ibkr/actions/workflows/ci.yml) [](https://github.com/osauer/ibkr/releases/latest) [](go.mod) [](https://pkg.go.dev/github.com/osauer/ibkr) [](LICENSE)

[MCP tools](docs/reference/mcp-tools.md) · [MCP resources](docs/reference/mcp-resources.md) · [Configuration](docs/reference/config.md) · [Architecture](docs/architecture.md) · [Platform settings](docs/design/platform-settings.md) · [Agentic use](docs/guides/agentic-use.md) · [Mobile app](web/app/README.md)

Agentic portfolio analysis and trading-research workflows for IBKR MCP, TWS, and IB Gateway.

ibkr turns your local IB Gateway or TWS session into structured account and market context for the terminal, Claude Desktop, Claude Code, Cursor, Continue, Zed, and other MCP hosts. It is the local ibkr mcp TWS bridge for portfolio review, exposure mapping, options diagnostics, market-regime checks, scanner-driven research, watchlist monitoring, and position-sizing math.

For MCP users, ibkr mcp is a local IBKR workflow layer for semi-professional retail traders who want agentic portfolio and trading-research analysis on live broker data. The bundled MCP surface is deliberately no-broker-write: it can analyze and size plans, and it can draft preview-only stock/ETF LMT orders, but it cannot place, modify, cancel, or transmit broker orders.

Use it from a shell:

ibkr status
ibkr positions --by underlying
ibkr regime
ibkr canary
ibkr market-events --symbol GME --json
ibkr watch IBM --add
ibkr watch
ibkr calendar --market us --date 2026-05-25
ibkr quote SPY --watch
ibkr size --symbol AAPL --entry 207.50 --stop 202.50 --risk-pct 1
ibkr settings show

Or connect it to Claude Desktop, Claude Code, Cursor, Continue, Zed, or any MCP host and ask:

> "What's in my IBKR account?" > > "Review my portfolio and rank the risks I should look at today." > > "Show my AAPL exposure, including option deltas." > > "How does the market regime look today?" > > "Should I hold, watch, de-lever, or liquidate risk?" > > "Is Xetra open on Whit Monday?" > > "If I buy 100 MSFT at 418 with a stop at 408, what's my EUR risk?"

Your account data stays on the machine running IB Gateway or TWS unless you choose to send it to an MCP host. The project ships as one Go binary with a CLI, a local MCP server, and a Go library. No Python runtime, Java runtime, or hosted service is required.

Contents — [Install](#install) · [What you get](#what-you-get) · [Pick your path](#pick-your-path) · [How it works](#how-it-works) · [Configure](#configure) · [Safety](#safety) · [Other install paths](#other-install-paths) · [Troubleshooting](#troubleshooting)

Install

Prerequisites. A running IB Gateway 10.37+ or TWS (paper or live) on the same machine. Auto-discovered on the four standard ports. An IBKR Pro account (IBKR Lite cannot use the TWS API).

Claude Desktop

Download the latest MCP Bundle:

Open the .mcpb file with Claude Desktop, drag it into Claude Desktop, or use Settings -> Extensions -> Advanced settings -> Install Extension. Quit Claude completely and relaunch it after installation.

The MCPB bundles the ibkr binary for macOS and Linux, runs it locally through stdio, and does not require a separate shell install. Windows Claude Desktop is not supported because ibkr has no native Windows daemon; WSL works through the shell install path below.

Shell, Cursor, Continue, Zed, and generic MCP hosts

curl -fsSL https://raw.githubusercontent.com/osauer/ibkr/main/install.sh | sh
ibkr setup claude-desktop

The installer downloads the release for your OS and architecture, verifies the checksum, installs ibkr in ~/.local/bin, and adds that directory to your shell rc when needed. On macOS, it also clears Gatekeeper quarantine.

ibkr setup claude-desktop writes the legacy MCP server entry to Claude Desktop. Prefer the MCPB path above for Claude Desktop unless you specifically want one shared shell-managed binary. Skip the setup command if you only want the shell tool.

For v1.0.0+ releases, the installer, ibkr update, and the MCPB release asset are covered by the signed SHA256SUMS file. The MCP Registry metadata also carries the MCPB file SHA-256. [Other install paths.](#other-install-paths)

What you get

  • Account and positions. Net liquidation, buying power, cash, margin, daily P&L, positions, option Greeks, per-underlying grouping, and portfolio-level delta/theta/gamma/vega rollups. Multi-currency accounts include FX exposure.
  • Quotes and history. Snapshot quotes, coalesced stock/ETF streaming, daily OHLCV bars, previous close, day change, and data freshness (live, frozen, delayed, delayed-frozen).
  • Official market calendars. US cash equities, US listed options regular sessions, and German Xetra cash equities with holidays, early closes, next open/close, and quote session_context when calendar state explains stale or missing data.
  • Local watchlist. Add/remove/clear symbols offline, list them as JSON, show an enriched quote monitor with price, currency, changes, ranges, volume, timestamps, and held-stock context, or poll the saved list with ibkr watch --watch.
  • Options. Expiry lists with ATM IV and implied move, strike grids with call/put quotes, deltas, and open interest. Option snapshots are supported; option streaming is not exposed.
  • Scanners. Built-in market scans for movers, losers, unusual volume, gaps, high IV rank, and option volume. Agents can also compose ad-hoc scans without writing config.
  • Position sizing. Fixed-fractional sizing against live NLV, with optional target, R-multiple, and breakeven win rate. Pure math; never an order ticket.
  • Market breadth. S&P 500 participation from constituent daily bars: percent above 50-DMA, percent above 200-DMA, and fresh 52-week highs/lows. A fresh cache is instant; first-ever cold start can take about an hour because of IBKR pacing.
  • Dealer gamma. Production-ready SPX/SPXW-canonical zero-gamma and concentration view, with SPY used as corroborating context when its option surface is usable. A fresh, rankable SPX result is the stable headline signal; SPY-only is a labeled proxy. Treat the signed level as a regime hint, not a precise trading level.
  • Risk regime. One call returns the eight-row dashboard: VIX term structure, VVIX, HYG/SPY divergence, HY/IG OAS, funding spread, USD/JPY weekly move, SPX-canonical dealer gamma, and S&P 500 breadth. Heavy rows report computing instead of pretending stale data is fresh.
  • Portfolio canary. ibkr canary and MCP ibkr_canary produce a stateless market regime × portfolio shape monitor with action, market_confirmation, portfolio_fit, input_health, planner readiness, stable fingerprints, and supporting signals[]. It also emits bounded portfolio.held_stress[] rows for material held underlyings when existing positions data shows held-name daily P&L shock, near-expiry held-option delta concentration, or held-name liquidity degradation. Account-only risk stays evidence, not a canary DEFEND trigger; DEFEND requires confirmed market pressure, vulnerable portfolio fit, and clean enough inputs. Use ibkr canary --details for the full evidence rows.
  • Market-event flags. ibkr market-events and MCP ibkr_market_events annotate held or requested stock/ETF symbols with borrow inventory, extreme borrow fee, Nasdaq Reg SHO threshold-list, LULD pause, and regulatory/news halt context. Flags are context and proposal gates: active halt/LULD can block protection proposals, borrow stress can strengthen short buy-to-cover context, and unknown sources remain unknown rather than false.
  • Platform settings. ibkr settings show and MCP ibkr_settings report runtime preferences, trading/build capability, account mode, and compact observed market-data quality with access, source, and read-only reasons. ibkr settings set features.purge_restore.enabled=false disables purge/restore write actions while leaving purge status readable.

Every data command supports --json. ibkr restart --json is also useful for scripts: it reports whether a daemon was already running, old/new PIDs, whether --force was used, the post-start status.health snapshot, and any app process it refreshed. Lifecycle commands such as setup, update, restart, mcp, and daemon are for local operation and transport setup.

For schemas and edge cases, see the [agent skill schema notes](skills/ibkr/schemas.md), [MCP tools reference](docs/reference/mcp-tools.md), [MCP resources reference](docs/reference/mcp-resources.md), [configuration reference](docs/reference/config.md), and [concept docs](docs/concepts.md).

For ready-to-run prompts, see [examples/ibkrportfolioanalysisprompt.md](examples/ibkrportfolioanalysisprompt.md) for portfolio review and [examples/ibkrportfoliocanaryprompt.md](examples/ibkrportfoliocanaryprompt.md) for scheduled stress checks.

Pick your path

Claude Desktop, Cursor, Continue, Zed

ibkr mcp starts a local stdio MCP server. MCP hosts can call the same account, watchlist, quote, calendar, position, scanner, sizing, regime, canary, and preview-only order-draft tools that the CLI exposes as JSON. The order preview surface can mint a local non-submitting preview token, but it cannot place, modify, cancel, or transmit broker orders. Watchlist access through MCP can return either the saved symbols or enriched quote rows; local lifecycle verbs such as setup, update, restart, mcp, daemon, and version stay outside the MCP tool set.

The server also exposes quotes for stocks and ETFs as an MCP resource:

  • ibkr://quote/{symbol}

resources/read returns one snapshot for that URI; resources/subscribe delivers coalesced ticks via notifications/resources/updated until you resources/unsubscribe or close the stdio. The resource shape is documented in [docs/reference/mcp-resources.md](docs/reference/mcp-resources.md).

For Claude Desktop, the recommended install path is the .mcpb asset from the latest release. For other clients, paste this into the client's MCP config (path varies):

{
  "mcpServers": {
    "ibkr": {
      "command": "/ABSOLUTE/PATH/TO/ibkr",
      "args": ["mcp"]
    }
  }
}

The command must be the absolute path. ~ is not expanded by exec and $PATH is not consulted. which ibkr gives you the right value. After upgrading the binary, fully quit and relaunch the client — it caches the spawned server process. MCPB installs carry their own embedded binary; reinstall the new .mcpb release to update that path.

claude.ai (web) accepts only remote MCP servers and cannot reach a local IB Gateway. Use Desktop.

Logs (macOS, Claude Desktop): ~/Library/Logs/Claude/mcp-server-ibkr.log.

Claude Code

Inside a standalone Claude Code session:

/plugin marketplace add osauer/ibkr
/plugin install ibkr@ibkr

Or — for Claude for Mac's embedded Claude Code pane, which doesn't expose /plugin slash commands — from a regular terminal:

claude plugin marketplace add osauer/ibkr
claude plugin install ibkr@ibkr

The plugin carries a skill, Claude Code MCP server config for ibkr mcp, a PreToolUse hook that permits read/preview order commands, blocks shell command chaining around broker-adjacent writes, and refuses broker-write verbs unless the daemon reports a paper or live write-ready trading state (failing closed for broker-adjacent ibkr commands if jq is missing from PATH), plus a SessionStart hint when the binary isn't installed. The skill's allowed-tools pre-allows read and preview-only patterns once the skill activates. For a global allowlist that fires before the skill activates, merge settings/ibkr.settings.json into ~/.claude/settings.json by hand — it is permissions-only: read/preview patterns are allowed, and destructive daemon maintenance carries explicit deny rules while broker writes remain decided by the hook and daemon gates.

The plugin doesn't ship the binary. It carries the skill, hooks, MCP launcher config, and manifest — you still need the ibkr binary from [Install](#install). The MCP launcher looks at IBKR_BIN, the plugin's local development bin/ibkr, PATH, ~/.local/bin/ibkr, Homebrew, and /usr/local/bin/ibkr. The binary and plugin have independent release cadences and independent update paths:

# Binary release (new MCP tool descriptions are baked into the binary):
curl -fsSL https://raw.githubusercontent.com/osauer/ibkr/main/install.sh | sh

# Plugin release (new skill commands, settings, hooks):
claude plugin update ibkr@ibkr

Restart the host (Claude for Mac, standalone Claude Code session, Cursor, …) after either update so it respawns the MCP server subprocess with the new descriptions and reloads the skill at the next session start.

The shell

$ ibkr account --json | jq '.net_liquidation, .base_currency'
$ ibkr watch IBM --add
$ ibkr watch --list --json
$ ibkr watch --json | jq '.rows[] | {sym: .symbol, price: .price, chg: .change_pct, as_of: .price_as_of}'
$ ibkr quote AAPL,MSFT --json | jq '.[] | {sym: .symbol, price: .price, chg: .change_pct}'
$ ibkr quote MBG --market de --json | jq '{sym: .symbol, ccy: .contract.currency, last: .last}'
$ ibkr calendar --market us-options --date 2026-11-27 --json | jq '.session'
$ ibkr positions --by underlying --json | jq '.portfolio.effective_delta'
$ ibkr canary --json | jq '{action, market_confirmation, portfolio_fit, held_stress: .portfolio.held_stress}'
$ ibkr market-events --symbol GME --json | jq '{flags, source_health, fingerprint}'
$ ibkr settings show --json | jq '.features.purge_restore.enabled'
$ ibkr chain NVDA --json | jq '.expiries[] | select(.iv > 0.6)'
$ ibkr size --symbol AAPL --entry 207.50 --stop 202.50 --risk-pct 1

ibkr --help lists subcommands; ibkr --help lists flags. ibkr status first if anything looks off.

Mobile app

ibkr app serves a paired PWA for iPhone-sized checks when you are away from the desk: daemon status, account and positions, market context, canary state, alerts, and settings. The app has Monitor, Alerts, and Settings tabs; Settings can toggle purge/restore write actions and shows trading/build/market-data state. Start it on the Mac running TWS or IB Gateway, then run ibkr app pair and scan the QR code.

For access away from the LAN without router setup, run ibkr app --remote to use the Cloudflare Worker relay at remote.osauer.dev, then run ibkr app pair as usual.

See [web/app/README.md](web/app/README.md) for the short operator notes and [docs/design/mobile-app-mvp.md](docs/design/mobile-app-mvp.md) for the MVP design.

Go and other agent SDKs

pkg/ibkr speaks the TWS API protocol directly:

import "github.com/osauer/ibkr/pkg/ibkr"

cfg := ibkr.DefaultConfig()    // 127.0.0.1:4001
cfg.Port = 4002                // paper

c := ibkr.NewConnector(&ibkr.ConnectorConfig{
    ServiceName: "myapp",
    PoolConfig:  &ibkr.PoolConfig{ClientIDs: []int{15}, BaseConfig: cfg},
})
if err := c.Start(ctx); err != nil { return err }

snap, _ := c.RequestAccountSummary(ctx, 5*time.Second)
fmt.Printf("NLV: %.2f %s\n", *snap.NetLiquidation, snap.Currency)

From Python, TypeScript, or Rust, shell out to the CLI: subprocess in, JSON out. Wrap each ibkr --json invocation as a function and register it with your model's tool-call API.

How it works

ibkr runs local commands against one background daemon.

When you run a CLI command or an MCP tool, it connects to the daemon over a Unix socket. The daemon keeps the IB Gateway or TWS connection open, caches contract details, manages quote subscriptions, and returns JSON responses. It starts on first use and exits after 15 minutes of inactivity unless you run it in the foreground.

CLI or MCP host ->

…

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [osauer](https://github.com/osauer)
- **Source:** [osauer/ibkr](https://github.com/osauer/ibkr)
- **License:** MIT
- **Homepage:** https://osauer.dev/ibkr/

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.