Public.com MCP Server
An MCP (Model Context Protocol) server that connects AI assistants to your Public.com brokerage account. Trade stocks, options, and crypto — get quotes, manage orders, and view your portfolio — all through natural language.
Disclaimer: For illustrative and informational purposes only. Not investment advice or recommendations. Use at your own risk.
Tools
Read-Only
| Tool | Description |
|---|---|
check_setup |
Verify API credentials and connectivity |
get_accounts |
List all brokerage accounts |
get_portfolio |
View positions, equity, buying power, open orders |
get_orders |
List active/open orders (bracket legs share a bracketId) |
get_order |
Get status of a specific order |
get_history |
Transaction history (trades, deposits, dividends, etc.) |
get_quotes |
Real-time quotes for stocks, crypto, options |
get_price_history |
OHLCV price history for equities, crypto, options, or indices |
get_instrument |
Details about a specific tradeable instrument |
get_all_instruments |
List all available instruments with filters |
search_bonds |
Filtered, paged search for fixed income instruments |
get_bond_details |
Pricing, ratings, coupon and maturity info for a bond |
get_option_expirations |
Available expiration dates for options |
get_option_chain |
Full option chain (calls + puts) for a symbol |
get_option_greeks |
Greeks (delta, gamma, theta, vega, rho, IV) for multiple options |
get_option_greek |
Greeks for a single option symbol |
get_tax_lots |
Unrealized tax-lot summary (per-lot gain/loss, term, cost basis) |
get_tax_lots_for_symbol |
Unrealized tax-lot detail for a single symbol |
get_tax_lots_csv |
Export unrealized tax lots as a Base64-encoded CSV file |
get_strategy_quote |
Consolidated quote for a multi-leg option strategy |
preflight_order |
Estimate costs/impact before placing a single-leg order |
preflight_multileg_order |
Estimate costs for multi-leg options strategies |
preflight_short_order |
Estimate costs before placing a short-sale order |
preflight_call_credit_spread |
Estimate costs for a Bear Call Spread |
preflight_call_debit_spread |
Estimate costs for a Bull Call Spread |
preflight_put_credit_spread |
Estimate costs for a Bull Put Spread |
preflight_put_debit_spread |
Estimate costs for a Bear Put Spread |
Write (Destructive)
| Tool | Description |
|---|---|
place_order |
Place a single-leg order (stocks, crypto, options); optionally a bracket order via order_class + exit-leg prices, or target specific tax lots via tax_lot_matching_instructions |
place_multileg_order |
Place multi-leg orders (spreads, straddles, etc.) |
place_call_credit_spread |
Place a Bear Call Spread |
place_call_debit_spread |
Place a Bull Call Spread |
place_put_credit_spread |
Place a Bull Put Spread |
place_put_debit_spread |
Place a Bear Put Spread |
place_short_order |
Place an equity short-sale order |
flatten_and_go_short |
Sell an existing long position then go short (experimental) |
cancel_order |
Cancel an existing order |
cancel_and_replace_order |
Atomically cancel and replace an order |
Bracket orders
place_order places a bracket by setting order_class to BRACKET, OCO or OTO
and supplying at least one exit leg:
| Argument | Meaning |
|---|---|
order_class |
SIMPLE (default, standalone) or BRACKET / OCO / OTO |
take_profit_limit_price |
Limit price of the take-profit leg |
stop_loss_stop_price |
Stop price of the stop-loss leg |
stop_loss_limit_price |
Optional — makes the stop-loss a STOP_LIMIT rather than a STOP |
The exit legs are submitted automatically when the entry order fills, and every leg
of the bracket — the entry included — reports the entry's order ID as its
bracketId, so get_orders groups them.
The API accepts brackets for EQUITY and OPTION only; they need a whole-share
quantity (not amount), must use the CORE market session, and the entry
order_type must be LIMIT or MARKET (LIMIT only for OCO). preflight_order
validates the entry order only — it has no view of the exit legs.
Prerequisites
- Python 3.10+
- Public.com account — Sign up
- Public.com API key — Get one here
Installation
pip install publicdotcom-mcp-server
Or install from source:
git clone https://github.com/publicdotcom/publicdotcom-mcp-server.git
cd publicdotcom-mcp-server
pip install .
Configuration
Set your API credentials as environment variables:
# Required
export PUBLIC_COM_SECRET=your_api_secret_key
# Optional — sets a default account so you don't need to specify it each time
export PUBLIC_COM_ACCOUNT_ID=your_account_id
Usage
Claude Desktop
Add this to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"public-com": {
"command": "publicdotcom-mcp-server",
"env": {
"PUBLIC_COM_SECRET": "your_api_secret_key",
"PUBLIC_COM_ACCOUNT_ID": "your_account_id"
}
}
}
}
Claude Desktop (using uvx)
If you prefer using uvx (no pre-install needed):
{
"mcpServers": {
"public-com": {
"command": "uvx",
"args": ["publicdotcom-mcp-server"],
"env": {
"PUBLIC_COM_SECRET": "your_api_secret_key",
"PUBLIC_COM_ACCOUNT_ID": "your_account_id"
}
}
}
}
Running Directly
# stdio transport (default — for Claude Desktop, Claude Code, etc.)
publicdotcom-mcp-server
# Or run as a Python module
python -m publicdotcom_mcp_server
Hosted / Remote Deployment
For remote deployments (behind a reverse proxy or load balancer), switch to the streamable-HTTP transport:
export MCP_TRANSPORT=streamable-http
export PUBLIC_COM_SECRET=your_api_secret_key
export PORT=8000 # optional, defaults to 8000
export HOST=0.0.0.0 # optional, defaults to 0.0.0.0
publicdotcom-mcp-server
In this mode the server listens for MCP requests at POST /mcp. Clients authenticate per-request via an Authorization: Bearer <key> header, which takes priority over the PUBLIC_COM_SECRET environment variable — useful for multi-tenant deployments.
Testing with MCP Inspector
npx @modelcontextprotocol/inspector publicdotcom-mcp-server
Development
# Clone and install in development mode
git clone https://github.com/publicdotcom/publicdotcom-mcp-server.git
cd publicdotcom-mcp-server
pip install -e ".[dev]"
# Run tests
pytest
# Run the server locally
python -m publicdotcom_mcp_server
CI & Releases
- CI (
.github/workflows/ci.yml) runs the test suite (Python 3.10–3.13) andruffon every push tomainand every pull request. - Releases (
.github/workflows/release.yml) run on every push tomain. When theversioninpyproject.tomlis one that hasn't been released yet (no matchingv<version>tag), the workflow builds the package, publishes to PyPI via Trusted Publishing (OIDC) — no API token is stored — and creates the corresponding GitHub Release. Merges that don't change the version are no-ops.
To cut a release: bump version in pyproject.toml in your PR and merge it to main. The release + PyPI publish + v<version> tag/GitHub Release happen automatically. One-time setup on PyPI (project → Publishing) must register a Trusted Publisher for this repo with workflow release.yml and environment pypi.
How It Works
This server wraps the publicdotcom-py Python SDK, exposing each API operation as an MCP tool. The MCP protocol allows AI clients to discover and call these tools through a standardized interface.
AI Client (Claude, etc.)
↕ MCP Protocol (stdio)
Public.com MCP Server
↕ HTTPS
Public.com Trading API
All tools include proper MCP tool annotations:
- Read-only tools are marked with
readOnlyHint: true - Order-placement tools are marked with
readOnlyHint: false(they modify account state) - Order cancellation tools (
cancel_order,cancel_and_replace_order) are additionally marked withdestructiveHint: true
License
Metadata
Release files for publicdotcom-mcp-server 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| publicdotcom_mcp_server-0.7.0.tar.gz | 42.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| publicdotcom_mcp_server-0.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 68.5 kB
Release files / publicdotcom_mcp_server-0.7.0.tar.gz
| Download URL | publicdotcom_mcp_server-0.7.0.tar.gz |
|---|---|
| Size | 42.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
53305a08ba218c4c5947ce6ea2ae637ab5da3aa759d68a717cfc4e478caee0ab
|
|
BLAKE2b-256 checksum How to use checksums |
43da5437927ea9f514e543909fab939d7273fedbf60ebda57b13eeeef187ec57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency logRelease files / publicdotcom_mcp_server-0.7.0-py3-none-any.whl
| Download URL | publicdotcom_mcp_server-0.7.0-py3-none-any.whl |
|---|---|
| Size | 26.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7707b20907a7bab928e7502dbb115e6f87851b7cb6545e7f178d5c3b3733c7b0
|
|
BLAKE2b-256 checksum How to use checksums |
25eafe574999c3834dff1bd80fdf7520ecb4ccb96779c6cc42622e5947509602
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 10, 2026.
Transparency log