Avanza-MCP
Allows reading Avanza credentials (username, password, and current TOTP code) from 1Password using the op CLI, with optional vault specification, enabling secure credential management for login.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Avanza-MCPshow my portfolio summary"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Avanza-MCP
Single-script CLI + Textual TUI for Avanza portfolio monitoring, regular buy/sell orders, stop-loss management, MCP integration, and paper trading.
Credentials are prompted at runtime:
username: visible prompt, unless passed with
--usernamepassword: masked
current TOTP code: masked
Alternatively, pass --onepassword-item ITEM and optional --onepassword-vault VAULT to read the Avanza username, password, and current TOTP code through the 1Password CLI (op). The TUI has a matching Login with 1Password path. The tool does not store these secrets; op will ask you to authorize access through the local 1Password app.
The current TOTP code is passed to avanza-api as totpToken, which is the field name expected by the installed library version.
Setup
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
chmod +x scripts/verify.sh .githooks/pre-commit .githooks/pre-push
git config core.hooksPath .githooksRun the full quality gate at any time:
scripts/verify.shCommands
Console commands print human-readable Rich tables and summaries, not raw API payloads.
Show account overview:
python avanza_cli.py accountsShow portfolio summary:
python avanza_cli.py portfolio summaryShow detailed portfolio positions:
python avanza_cli.py portfolio positionsSearch for a stock/order book:
python avanza_cli.py search-stock "VOLV B"List active stop-loss orders:
python avanza_cli.py stoploss listDry-run a trailing/gliding sell stop-loss:
python avanza_cli.py stoploss set \
--account-id ACCOUNT_ID \
--order-book-id ORDER_BOOK_ID \
--trigger-type follow-upwards \
--trigger-value 5 \
--trigger-value-type % \
--order-type sell \
--order-price 1 \
--order-price-type % \
--volume 10Place the order for real by adding --confirm after reviewing the dry-run output.
If --valid-until is omitted, avanza_cli automatically uses the longest currently allowed date (today + 90 days).
If --order-valid-days is omitted, avanza_cli uses the current Avanza-safe default (8).
Delete a stop-loss order dry-run:
python avanza_cli.py stoploss delete \
--account-id ACCOUNT_ID \
--stop-loss-id STOP_LOSS_IDDelete for real by adding --confirm.
List open regular orders:
python avanza_cli.py orders listDry-run a regular buy/sell order:
python avanza_cli.py orders set \
--account-id ACCOUNT_ID \
--order-book-id ORDER_BOOK_ID \
--order-type buy \
--price 100 \
--valid-until 2026-05-28 \
--volume 10 \
--condition normalDelete an order dry-run:
python avanza_cli.py orders delete \
--account-id ACCOUNT_ID \
--order-id ORDER_IDTextual TUI
Run the terminal UI from the same script:
python avanza_cli.py tuiThe TUI masks password and TOTP inputs, clears those fields after a successful login, and hides the login screen. You can also enter a 1Password item name/ID and optional vault, then use Login with 1Password to let the local op CLI fetch username, password, and TOTP after your 1Password approval. Use Review Only first to validate and log an order request without creating a paper or live order.
After login, the largest account by total value is selected by default. The top panel groups account metrics into colored cards, keeps action buttons together, and shows a live clock plus a weekday OMXS open/close countdown. The P/L metric cycles through 1D P/L, 1W P/L, 1M P/L, 1Y P/L, and Total P/L, with SEK and % values colored separately. The main table shows the selected account's stocks with day movement, profit state, a distinct header row, and a real-time quote indicator: green dot for real-time, yellow dot for delayed or unresolved status. The order ticket searches as you type by stock name, ticker, or ISIN, so it supports opening new positions as well as trading current holdings. The lower table shows stop-losses and open orders for the selected account, with trigger and price values labeled as SEK or %; its cancel column opens a guarded cancellation ticket. Buy/sell side cells are color-coded green/red. Click any table column header to sort by that column; click the same header again to reverse the order. Drag the horizontal divider between tables, the vertical divider beside Active Trades, or the left edge of the order/stop-loss ticket to resize panes. Position and order state refreshes live every 5 seconds.
MCP Server Registration & Run
This project exposes MCP through python avanza_cli.py mcp (stdio transport).
1) Start and authenticate the TUI
python avanza_cli.py tuiLog in, then enable the MCP tick box in the TUI. This starts the localhost bridge and writes .avanza_mcp_session.json.
2) Register the MCP server in Codex/Codex CLI
Add this to ~/.codex/config.toml:
[mcp_servers.avanza-mcp]
command = "python"
args = ["/ABSOLUTE/PATH/TO/avanza_cli.py", "mcp"]Use the absolute path to your local avanza_cli.py.
3) Run from your MCP client
After registration, start/reload Codex or Codex CLI. It will launch:
python avanza_cli.py mcpThe MCP proxy forwards tool calls to the authenticated TUI session through the localhost bridge. MCP starts read-only. Enable Live R/W in the TUI for live mutations; live stop-loss/order placement, edit, replace, or deletion still requires MCP arguments to include confirm: true. MCP activity is shown in the lower-right log console.
4) ChatGPT desktop note
ChatGPT developer mode currently expects remote MCP apps/connectors over SSE or streaming HTTP, so it cannot directly register this local stdio proxy.
For auto-trading experiments, use avanza_live_snapshot as the polling tool. It returns a decision-ready account snapshot and is safe to call every 5 seconds. Paper trading is available in read-only MCP mode through avanza_paper_stoploss_set, avanza_paper_order_set, avanza_paper_orders, and avanza_paper_cancel; paper state is stored in .avanza_paper_session.json and never places an Avanza order. The TUI's Paper tick box is on by default; while it is on, the order and stop-loss form submit buttons create local paper orders. Turn Paper off only when you intend to use live Avanza placement, which still requires typing PLACE. Regular live buy/sell orders are also exposed through avanza_order_set and avanza_order_delete, gated by MCP R/W mode and confirm: true.
TUI sessions write structured JSONL logs under avanza-cli/logs/: a timestamped session log plus persistent app.jsonl, mcp.jsonl, and trading.jsonl.
Safety
This uses the unofficial avanza-api package. Start with stoploss list and dry-runs. Verify Avanza's live interpretation of % and gliding stop-loss fields with very small size before trusting it for meaningful orders.
Credits
Creators: Hamid Kashfi and Codex (OpenAI).
This project builds on the Python avanza-api library by fama93:
PyPI: avanza-api
Source: github.com/fhqvst/avanza
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Hamid-K/avanza-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server