
Canary MCP
io.github.osauerPublished by GitHub account osauerv3.35.0Updated Nov 7, 2026
Read-only IBKR MCP: account, positions, brief, regime, stress, reporting, Edge, and risk.
Overview
Read-only MCP server that lets an assistant inspect an Interactive Brokers account: positions, exposure, risk checks, regime, stress and trade outcomes.
- What you can do
- Read account details, positions and exposure grouped by underlying
- Run discipline checks against your own limits and see which positions breach them
- Review a daily brief of what changed and what needs attention
- Inspect regime, portfolio stress and Edge readings on what prices did after past trades
- Report on the account and flag missing or stale data
- No order or preview tools are exposed to the assistant in any build
- When to use it
- Useful when you want an AI agent to answer questions about your IBKR account and risk posture, such as what needs attention today or which limits are breached, without giving it any way to trade.
- Requirements
- Runs locally beside IB Gateway 10.37+ or TWS with API socket access enabled, on macOS or Linux (arm64 or amd64; Windows only via WSL). Needs an IBKR Pro account, paper or live. Installed as a signed binary or an MCP Bundle for Claude Desktop; other hosts point at the binary's absolute path with the mcp argument.
Installation
In SourceWeft
- Open Canary MCP in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Canary
A risk desk for your Interactive Brokers account. It reads your account for you and your AI agent, checks it against your limits, and, in the trading build, places the trades you authorise.
Canary runs beside your IB Gateway or TWS and nothing runs on a server of mine. It tells you what needs attention today. It runs twenty discipline checks against limits you set and names the ones your positions breach. It shows exposure by underlying. Canary Edge shows what the price did 1, 5 and 20 sessions after your past stock and ETF trades, from your broker statements, where a decision repeated often enough to count. The same readings come as text, as JSON, in a paired phone app, and as MCP tools for Claude Desktop, Claude Code, Cursor or Zed.
It comes in two builds. The standard binary reads; it has no compiled order path. The trading binary, a separate download, also executes orders, and only the ones you authorised: a transaction you confirmed, or a close or reduction the daemon runs under a bucket you listed in your written policy, a list that ships empty. Every order is pinned to one account, client ID and mode, consumes a preview token for that exact draft, is journaled with its origin before it is sent, and passes the risk policy's order limits, the mandate gate and the freeze. An agent trades only through the gated CLI. The MCP server has no order or preview tool in any build. Canary never decides a trade on its own.
Documentation · Install · First session · Agentic trading · Canary Edge · MCP tools · Safety · Privacy
Start
You need IB Gateway 10.37+ or TWS with API socket access enabled, an IBKR Pro account, and macOS or Linux on arm64 or amd64. Paper and live both work. There is no Windows build; use WSL.
Terminal, and every MCP host. One signed binary in ~/.local/bin:
The install guide shows how to inspect the script first and covers every other installation path.
Claude Desktop. Download the MCP Bundle,
canary.mcpb,
open it with Claude Desktop, then quit and relaunch Claude. The
walkthrough
covers the first connection.
Any other MCP host. Install the binary as above, then point the host at its
absolute path; which canary prints it.
A first question that works in any host:
What needs attention today, and which data is missing or stale?
[Canary Edge, rendered from synthetic data: a decision review, its coverage, and price outcomes]
Canary Edge in the paired app, rendered from synthetic data: what the price did after past decisions, and how much evidence supports each row.
Ways in
MCP hosts
Ask plain questions rather than naming tools. The host guide covers Claude Code, Cursor, Zed, continuously running agents, logs, and connection checks. The generated MCP reference lists every tool and its schema.
Terminal and paired app
Every data command supports --json:
Run canary status first for connection problems and canary data health for
missing or stale data. canary --help and the
CLI reference list every command and flag.
For the paired app, run canary app on the machine that owns the Gateway or
TWS session, then run canary app pair and scan the QR code. The
app guide covers pairing, remote access, and push
notifications.
Experimental: moomoo and Futu through OpenD
Canary can also read a Futu or moomoo account through OpenD, Futu's local gateway, while OpenD is running and logged in. This support is experimental. Reading balances and holdings, order and fill history, and converting to the base currency have been tested only against a stand-in for OpenD written for Canary's tests, so check what Canary shows against your broker. Canary cannot place, change or cancel orders through OpenD: it refuses the request and sends nothing to your broker.
Add this to ~/.config/ibkr/config.toml:
With one real account on your login, Canary uses it. With several, it picks none:
canary status lists them, and you set account under [opend] to its id.
A simulated account is never picked: to use one, set account to its id.
With this setting, Canary shows account balances and stock and ETF positions, and
quotes for the Hong Kong and US markets where your OpenD login has the quote rights;
no other market's quotes have been read. A holding in a market without a quote right
shows the price OpenD reports with the holding, not a market quote. Options, futures and anything else in the account appear in a separate
list at the value OpenD reports, unconverted and not checked by Canary. Canary's exposure
figures and checks against your limits do not count them, so those figures do not
cover your whole account.
Holdings outside the account's base currency are converted at a rate worked out
from OpenD's own account totals, not a quoted rate; where that is not possible they
are not measured, and the checks against your limits report that they cannot judge
them. Many features
are not available, among them daily P&L, the regime, portfolio stress, Edge, statement
reporting, the market overview, the market tape and technical analysis; canary status lists most of them. Canary with moomoo and Futu
has the details.
Each daemon serves one broker. To run OpenD beside IBKR, start a second daemon
with its own XDG_CONFIG_HOME, XDG_STATE_HOME, XDG_CACHE_HOME,
XDG_RUNTIME_DIR and CANARY_SOCKET. The
configuration reference lists every key.
Go wire-protocol library
pkg/ibkr is a clean-room Go library for the TWS wire protocol. It transports
broker requests only. Its API reference is on
pkg.go.dev, and its
statement coverage is updated on each push to main as a
line-by-line report.
go install github.com/osauer/canary/v2/cmd/canary@latest
installs the v2 CLI, not the current v3 release; use the installer for the
binary. Start with the package documentation and the
wire protocol page.
Safety and privacy
The standard binary has no compiled order path, and the installer, updater and MCP Bundle never install the trading binary. The trading binary executes what you authorised and nothing else. The daemon checks every order at preview, at admission and at the final send: account, client ID and mode pins, the preview token for that draft, the journal entry written before the send, the risk policy's order limits, the mandate gate and the freeze. Gated orders has the detail.
Canary has no telemetry and does not send account IDs, balances, quantities, or P/L to the maintainer. PRIVACY.md is the data map. SECURITY.md covers the threat model and signed releases.
Documentation and legal
Canary is an independent third-party client for Interactive Brokers' publicly
documented TWS API. It is not built, endorsed, sponsored, or supported by
Interactive Brokers Group, Inc. or its affiliates. pkg/ibkr redistributes no
Interactive Brokers code, libraries, jars, or market data. Canary's OpenD client
is likewise independent and is not built, endorsed, sponsored, or supported by
Futu or its affiliates; pkg/futu includes protocol definitions from Futu's
public client under the Apache License 2.0, as
its notice sets out. Nothing here is
investment advice.
Canary is a private project of Oliver Sauer.
MIT. See LICENSE.
Source: README.md at commit e3994f3
Tools
0Version history
37- v3.35.0LatestNov 7, 2026
- v3.34.1Nov 5, 2026
- v3.33.1Nov 4, 2026
- v3.33.0Nov 3, 2026
- v3.32.1Oct 31, 2026
- v3.32.0Oct 30, 2026
- v3.31.0Oct 30, 2026
- v3.30.0Oct 29, 2026
- v3.27.1Oct 23, 2026
- v3.26.3Oct 21, 2026
- v3.26.2Oct 20, 2026
- v3.26.1Oct 20, 2026
- v3.25.4Oct 20, 2026
- v3.25.3Oct 19, 2026
- v3.25.1Oct 19, 2026
- v3.24.2Oct 18, 2026
- v3.22.2Oct 18, 2026
- v3.21.1Oct 11, 2026
- v3.20.1Oct 10, 2026
- v3.19.2Oct 8, 2026
- v3.19.0Oct 7, 2026
- v3.18.1Oct 6, 2026
- v3.17.0Oct 4, 2026
- v3.16.1Oct 3, 2026
- v3.16.0Oct 2, 2026
- v3.15.0Oct 1, 2026
- v3.14.0Sep 30, 2026
- v3.13.0Sep 27, 2026
- v3.12.1Sep 24, 2026
- v3.12.0Sep 23, 2026
- v3.11.0Sep 23, 2026
- v3.10.0Sep 22, 2026
- v3.9.2Sep 20, 2026
- v3.9.0Sep 20, 2026
- v3.8.0Sep 19, 2026
- v3.7.0Sep 18, 2026
- v3.6.0Sep 16, 2026
Score
50% 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 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- 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