Skip to main content
Glama

sc-mcp

Connect your Scalable Capital brokerage to any MCP-capable assistant. This server is a thin, read-friendly wrapper around Scalable Capital's official sc CLI — agents get your portfolio, trades, analytics, quotes, charts, watchlist and alerts with the same pieces of config across Claude Code, Claude Desktop, Codex, Cursor and VS Code.

Features

  • Live broker data — overview, holdings, transactions, analytics, cash breakdown, performance charts, quotes, security news.

  • Portfolio management extras — watchlist, price alerts, portfolio groups and savings-plan config.

  • Fast by default — read responses are cached in a SQLite file (survives restarts, see Configuration).

  • Safety first — no trades, no orders. Write tools are off unless you opt in; money-moving commands are absent by design.

  • Runs anywhere — plain stdio for desktop clients, HTTP for remote access, or a fully self-contained Docker image.

[!Warning] Unofficial. A community wrapper around Scalable Capital's sc CLI — not affiliated with or endorsed by Scalable Capital. A stopgap until a first-party MCP server exists, and likely to be retired once it does.

No warranty. Provided "as is" under the MIT License; no responsibility for loss, damage, incorrect data or any financial consequence. Not financial advice — verify anything you act on.

Related MCP server: Trading 212 MCP Server

Tools

Read-only tools hit the broker live; successful responses are cached for 5 minutes (configurable) in a SQLite file that survives restarts.

Tool

Returns

sc CLI since

sc_overview

Portfolio value, cash, performance

v0.1.0

sc_holdings

Positions with prices, quantities, market values

v0.1.0

sc_transactions

Trade history with filters (date, ISIN, type, paging)

v0.1.0

sc_analytics

Allocation, sector/region exposure, attribution

v0.1.0

sc_security_news

Latest news for a security by ISIN

v0.1.0

sc_quote

Current quote by ISIN

v0.2.0

sc_search

Search securities within the portfolio context

v0.1.0

sc_transaction

Single transaction details by ID

v0.2.0

sc_cash_breakdown

Buying power, cash, credit, derivatives availability

v0.4.0

sc_chart

Historical OHLCV by ISIN (1d/7d/1m/3m/6m/ytd/1y/max)

v0.5.0

sc_overnight

Overnight savings account summary

v0.5.0

sc_overnight_transactions

Overnight transaction history with filters

v0.5.0

sc_portfolio_groups

Groups with since-buy performance, ungrouped holdings

v0.6.0

sc_derivatives_search

Derivative discovery (knockout/warrant/factor)

v0.3.0

sc_watchlist

Watchlist (read)

v0.1.0

sc_price_alerts

Price alerts, optionally active-only

v0.1.0

sc_savings_plans_config

Savings-plan config & ex-ante fees (read-only)

v0.6.0

sc_capabilities

CLI capability dump (version, commands, exit codes)

v0.1.0

sc_watchlist_add ⚠️

Add to watchlist

v0.1.0

sc_watchlist_remove ⚠️

Remove from watchlist

v0.1.0

sc_price_alert_add ⚠️

Create price alert

v0.1.0

sc_price_alert_remove ⚠️

Remove price alert

v0.2.0

sc_portfolio_group_create ⚠️

Create group

v0.6.0

sc_portfolio_group_update ⚠️

Update group name/description

v0.6.0

sc_portfolio_group_delete ⚠️

Delete group

v0.6.0

sc_portfolio_group_assign ⚠️

Assign holdings to a group

v0.6.0

sc_portfolio_group_unassign ⚠️

Unassign holdings from a group

v0.6.0

⚠️ = requires SC_MCP_ENABLE_WRITES=true, off by default.

The sc CLI also exposes trade and savings-plans add/remove. Those are deliberately not exposed — money-moving commands are out of scope entirely (the write tools above only touch watchlists, alerts and groups).

Quick start

Pick one path — all three end with a working server:

Path

What you need

Docs

Claude Code plugin

Claude Code only — zero config

below

uvx one-liner

uv + a logged-in sc CLI

any client

Docker

Docker only — nothing installed locally

below

Claude Code plugin

/plugin marketplace add NinjaEde/mcp-scalable-capital
/plugin install sc-mcp

That registers the scalable-capital MCP server and a skill that tells Claude when and how to use the tools.

uvx one-liner

uvx --from git+https://github.com/NinjaEde/mcp-scalable-capital@v0.2.0 sc-mcp

Point any MCP client at that command (sc-mcp started stdio, pin the tag per Versioning).

Requirements

  1. uv on PATH — skip this with Docker.

  2. The sc CLI on PATH (see Authentication).

  3. An authenticated session: sc login (see Authentication).

Docker bundles both the CLI and this server, so the only manual step there is the login below.

Authentication

Every sc_* tool shells out to Scalable Capital's official sc CLI, which must be installed and logged in once per machine (or per Docker volume).

Install the CLI

macOS (Homebrew):

brew install scalablecapital/tap/scalable-cli

Linux (also the binary baked into the Docker image): download the official build for your architecture and put sc on PATH:

ARCH=$(uname -m)   # x86_64 or aarch64
curl -fSL "https://github.com/ScalableCapital/scalable-cli/releases/download/v0.6.0/sc-v0.6.0-linux-${ARCH}-gnu.tar.gz" -o /tmp/sc.tar.gz
tar xzf /tmp/sc.tar.gz -C /tmp
sudo install -m 0755 /tmp/sc-v0.6.0-linux-${ARCH}-gnu/sc /usr/local/bin/sc

Verify:

sc --version   # e.g. "sc 0.6.0"

Log in (once)

sc login       # device flow: open the printed URL, confirm, done
sc whoami      # confirm the session works

If a tool later reports "session may have expired — try sc login", just re-run sc login.

Where the session lives

~/.config/scalable-cli/:

File

Purpose

session.json

Your authenticated session (the sc-cli-config volume in Docker)

config.toml

Optional settings — e.g. the session backend

Headless / keyring-less environments (Docker, CI, servers): the CLI defaults to the OS keyring. Where none exists, point it at a plain file (the Docker image does this for you in docker/entrypoint.sh):

# ~/.config/scalable-cli/config.toml
[auth]
session_backend = "file"

Then run sc login again — the session lands in session.json and persists across restarts.

Tip: reuse a host session inside containers instead of logging in twice:

docker cp ~/.config/scalable-cli/session.json sc-mcp:/home/sc/.config/scalable-cli/session.json
docker compose restart

Treat that file like a password — never commit it.

Integrating with clients

Claude Code (manual)

claude mcp add scalable-capital -- uvx --from git+https://github.com/NinjaEde/mcp-scalable-capital@v0.2.0 sc-mcp

Cursor

Add to Cursor — or add to .cursor/mcp.json (or ~/.cursor/mcp.json):

{
  "mcpServers": {
    "scalable-capital": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/NinjaEde/mcp-scalable-capital@v0.2.0", "sc-mcp"]
    }
  }
}

Codex

Add to ~/.codex/config.toml:

[mcp_servers.scalable-capital]
command = "uvx"
args = ["--from", "git+https://github.com/NinjaEde/mcp-scalable-capital@v0.2.0", "sc-mcp"]

Claude Desktop (bundle, no config editing)

Download sc-mcp.mcpb, then in Claude Desktop go to Settings → Extensions → Install Extension and pick the file.

[!Note] If Claude Desktop can't find uvx, open the extension's settings and set the full path (e.g. /opt/homebrew/bin/uvx). GUI apps on macOS don't always inherit your shell PATH.

VS Code / other MCP clients

{
  "mcpServers": {
    "scalable-capital": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/NinjaEde/mcp-scalable-capital@v0.2.0", "sc-mcp"]
    }
  }
}

Pin the @v0.2.0 tag (see Versioning). Drop it to track the latest main.

Docker

The whole stack — this server and the sc CLI — runs in containers, so you only need Docker (no local uv, Python, or sc):

docker compose up -d --build              # build + start on http://localhost:8000/mcp
docker compose run --rm sc-login          # first time only — interactive device flow

The session is stored in the sc-cli-config volume and survives restarts. Writes stay off unless you set SC_MCP_ENABLE_WRITES: "true" in docker-compose.yml.

Point any HTTP-capable MCP client at the server URL:

{
  "mcpServers": {
    "scalable-capital": {
      "type": "http",
      "url": "http://localhost:8000/mcp"
    }
  }
}

The container talks to scalable.capital directly. The device-flow URL from sc login works the same as on your host; just follow it in a browser. The image already ships the session_backend = "file" config (see Authentication).

Compatibility

Tested against sc 0.6.x. The CLI is pre-1.0 and its command surface can change between minor versions; the server logs a warning to stderr at startup if your installed sc differs from the tested major.minor. sc is an external binary, not a Python dependency, so that's the only enforcement available. If you see the warning and a tool misbehaves, the mismatch is the likely cause.

Configuration

Env var

Default

Effect

SC_MCP_CACHE_TTL

300

Seconds to cache successful responses. 0 disables caching (always hit the broker live).

SC_MCP_CACHE_DB

~/.cache/sc-mcp/cache.db

Path to the SQLite cache file.

SC_MCP_ENABLE_WRITES

unset

Set to 1, true, or yes to enable the ⚠️ write tools.

SC_MCP_TRANSPORT

stdio

streamable-http (or http) serves over HTTP instead of stdio — used by Docker.

SC_MCP_HTTP_HOST

0.0.0.0

Bind address for the HTTP transport.

SC_MCP_HTTP_PORT

8000

Port for the HTTP transport.

Develop

uv sync
uv run sc-mcp          # starts the stdio server
# or
SC_MCP_TRANSPORT=streamable-http uv run sc-mcp
uv run pytest

How to stay in sync with sc (when to add/update tools, bump SUPPORTED_SC_VERSION, read-only invariants) is documented in CLAUDE.md.

Versioning

SemVer — the tools are the public API:

Bump

Trigger

MAJOR

A tool is removed/renamed, or a parameter changes incompatibly

MINOR

A tool or optional parameter is added

PATCH

Bug fix, error-message wording, internals

Releases are tagged vX.Y.Z; pin a tag when installing via uvx --from git+..., which otherwise tracks the default branch and can change your tool surface under you. Most bumps are driven by sc CLI changes (see Compatibility); the version is this package's own, not the sc version.

License

MIT

Available Tools

27 tools
sc_analyticsA

Get Scalable Capital portfolio analytics — allocation breakdowns, sector/region exposure, and performance attribution.

Inputs: portfolio_id. Returns: result

sc_capabilitiesA

Get the Scalable Capital CLI capability dump — version, supported commands, exit codes, and local trade controls.

Inputs: no named parameters. Returns: result

sc_cash_breakdownA

Get Scalable Capital cash breakdown — buying power, available cash, credit, and derivatives availability in one compact response. Use before placing orders to check available funds.

Inputs: portfolio_id. Returns: result

sc_chartB

Get historical chart data (OHLCV) for a security by ISIN from Scalable Capital. Use for technical analysis, trend detection, or price history review.

Inputs: isin (required), timeframe, portfolio_id. Returns: result

sc_holdingsC

Get Scalable Capital portfolio holdings — all positions with current prices, quantities, and market values. Live broker data.

Inputs: include_ytd, portfolio_id. Returns: result

sc_overnightA

Get Scalable Capital overnight savings account summary — balance and interest rate. Auto-resolves account when exactly one active account is accessible.

Inputs: savings_account_id. Returns: result

sc_overnight_transactionsB

List Scalable Capital overnight savings account transactions with filters. Use type_filter='interest' to review interest payment history.

Inputs: cursor, to_time, from_time, page_size, +3 more. Returns: result

sc_overviewB

Get Scalable Capital broker portfolio overview — total value, cash, performance. Returns live data directly from the broker.

Inputs: include_ytd, portfolio_id. Returns: result

sc_portfolio_group_assignB

Assign holdings to a portfolio group (auto-removes from other groups). Requires SC_MCP_ENABLE_WRITES=true.

Inputs: isins (required), group_id (required), portfolio_id. Returns: result

sc_portfolio_group_createB

Create a new portfolio group. Requires SC_MCP_ENABLE_WRITES=true.

Inputs: name (required), description, portfolio_id. Returns: result

sc_portfolio_group_deleteA

Delete a portfolio group. Holdings return to ungrouped. Requires SC_MCP_ENABLE_WRITES=true.

Inputs: group_id (required), portfolio_id. Returns: result

sc_portfolio_groupsB

Get Scalable Capital portfolio groups — custom groupings with since-buy performance attribution and ungrouped holdings list.

Inputs: group_id, portfolio_id. Returns: result

sc_portfolio_group_unassignA

Remove a holding from a portfolio group (returns it to ungrouped). Requires SC_MCP_ENABLE_WRITES=true.

Inputs: isin (required), group_id (required), portfolio_id. Returns: result

sc_portfolio_group_updateB

Update portfolio group name/description. Requires SC_MCP_ENABLE_WRITES=true.

Inputs: group_id (required), name, description, portfolio_id, +1 more. Returns: result

sc_price_alert_addA

Add a price alert. Provide either isin or ticker. Requires SC_MCP_ENABLE_WRITES=true.

Inputs: price (required), isin, ticker, portfolio_id. Returns: result

sc_price_alert_removeA

Remove a price alert by ID. Requires SC_MCP_ENABLE_WRITES=true.

Inputs: alert_id (required), portfolio_id. Returns: result

sc_price_alertsC

Get Scalable Capital price alerts, optionally filtered to active ones only.

Inputs: active_only, portfolio_id. Returns: result

sc_quoteB

Get the current Scalable Capital quote for a security by ISIN.

Inputs: isin (required), include_ytd, portfolio_id. Returns: result

sc_savings_plans_configA

Get valid savings-plan configuration and ex-ante fee disclosure for a security. Read-only — use before deciding on a savings plan.

Inputs: isin (required), portfolio_id. Returns: result

sc_security_newsA

Get latest news summary for a specific security by ISIN from Scalable Capital.

Inputs: isin (required), locale. Returns: result

sc_transactionA

Get details for a single Scalable Capital broker transaction by ID.

Inputs: transaction_id (required), portfolio_id. Returns: result

sc_transactionsB

List Scalable Capital broker transactions with optional filters. Use for reconciliation, tax analysis, or reviewing trade history.

Inputs: isin, cursor, to_time, from_time, +3 more. Returns: result

sc_watchlistC

Get the current Scalable Capital broker watchlist — all tracked securities.

Inputs: include_ytd, portfolio_id. Returns: result

sc_watchlist_addA

Add a security to the Scalable Capital watchlist. Requires SC_MCP_ENABLE_WRITES=true.

Inputs: isin (required), portfolio_id. Returns: result

sc_watchlist_removeB

Remove a security from the Scalable Capital watchlist. Requires SC_MCP_ENABLE_WRITES=true.

Inputs: isin (required), portfolio_id. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 27 tools

    Disambiguation5/5

    Each tool targets a distinct resource and action: overview, holdings, transactions, watchlist, price alerts, portfolio groups, and market data are cleanly separated. Even similar-looking tools like sc_transactions and sc_transaction are clearly plural-list vs singular-detail.

    Naming Consistency5/5

    All tools share the sc_ prefix and use snake_case. Reads are sc_<noun> and mutations are sc_<noun>_<verb> (add/remove/create/update/delete/assign), forming a predictable and uniform convention.

    Tool Count2/5

    With 27 tools, the surface exceeds the point where an agent can easily select among options. Several related operations could be consolidated into compound tools, e.g., portfolio group CRUD or watchlist read/write/delete.

    Completeness4/5

    The read side is quite complete: portfolio, transactions, analytics, market data, overnight savings, and configuration are covered. Missing order placement and savings-plan write actions are notable gaps, but the given scope is mostly coherent.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    • Connect brokerage accounts to AI assistants: holdings, orders, asset lookup, and approved trading.

      https://mcp.tradeit.app/mcp
    • Connect Claude, ChatGPT, Codex, Claude Code or another MCP client to your real multi-broker investment portfolio. Fortunest tracks stocks, ETFs and crypto across brokers and exchanges; its MCP server lets your agent read holdings, returns, allocation, risk, trades and tax lots, calculated by Fortunest rather than guessed by the model. Reads run on their own; every change waits for your approval in the Fortunest app, and no tool places an order or moves money. Sign-in is OAuth 2.1 and needs Fortunest Pro (14-day trial, no card). A free demo that needs no account is listed as Fortunest demo.

      https://app.fortunest.ai/mcp
    • OpenFinance gives any AI agent easy trading across every major market through one hosted MCP server. Trade crypto spot and perpetuals on Hyperliquid with market, limit and TWAP orders, leverage and margin control. Trade stocks, indices, commodities, forex and pre-IPO names as Hyperliquid HIP-3 perps. Trade Polymarket prediction markets with odds, order books, positions, PnL and trader leaderboards. Swap and bridge across 40+ EVM chains and Solana with Relay and Jupiter, find memecoins across 200+ chains, launch tokens on Robinhood Chain and Solana, and buy crypto with card, bank or UPI. Write actions are designed to ask for your confirmation first. Connect with OAuth (sign in to OpenFinance and approve) or an API key. Works with Claude, ChatGPT, Cursor, VS Code, Codex and any MCP client. No install. Home: https://openfinance.tech/agents · Docs: https://docs.openfinance.tech · GitHub: https://github.com/openfinance-tech/mcp

    • Brazilian Open Finance MCP — 30+ banks (Itaú, Nubank, etc.) to Claude/Cursor. Read-only.

      https://api.mcp.ai/banco

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables natural language access to Zerodha trading accounts for retrieving portfolio holdings, positions, orders, funds, and real-time market prices. Supports secure authentication for Indian stock market trading operations via Claude, Cursor, and other MCP-compatible AI tools.
      1
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      Provides secure access to Trading 212 Public API through MCP, enabling Claude Desktop users to manage portfolios, execute trades, and analyze market data using natural language commands.
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables trading Indian stocks on ICICI Direct through natural conversation with any MCP-compatible AI assistant, featuring automated TOTP login and tools for portfolio monitoring, order placement, and market data.
      MIT
    • A
      license
      B
      quality
      C
      maintenance
      A read-only MCP server that wraps the Scalable Capital CLI to expose broker data (portfolio, holdings, transactions, analytics, quotes, news) to any MCP-capable client.
      8
      MIT