bitvavo-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BITVAVO_API_KEY | Yes | API key from https://account.bitvavo.com/user/api | |
| BITVAVO_API_SECRET | Yes | The matching secret | |
| BITVAVO_MCP_DATA_DIR | No | Override the SQLite location (default ~/.bitvavo-mcp/) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pingA | Verify the connection and credentials against Bitvavo. Calls the public time endpoint and the private account endpoint to confirm the API key/secret are valid. Returns server time, account fee tier, and the remaining rate-limit budget. |
| get_balanceA | List balances per asset on the Bitvavo account. Each entry has symbol, available (free to use), and inOrder (locked in open orders). Zero balances are filtered out unless include_zero=true. |
| get_portfolio_valueA | Compute the total portfolio value in |
| get_tickerA | Live 24-hour ticker for one market (e.g. 'BTC-EUR'). Returns open / high / low / last / volume / bid / ask. Public endpoint. |
| get_marketsA | List markets available on Bitvavo. By default only EUR-quoted, trading markets. Pass quote=null or status=null to disable a filter. |
| get_tradesA | Your own filled trades on a specific market (e.g. 'BTC-EUR'). Newest first. Each trade has timestamp, side, amount, price, fee, feeCurrency. |
| get_depositsC | Deposit history — fiat (EUR) and crypto. Optionally filter by symbol. |
| get_withdrawalsA | Withdrawal history — fiat (EUR) and crypto. Optionally filter by symbol. |
| get_open_ordersA | Orders that are placed but not yet (fully) filled. Without a market filter returns open orders across every market on the account. |
| get_candlesA | Historical OHLCV candles for a market (e.g. 'BTC-EUR'). Use this for trend analysis, charts, or computing technical indicators over a custom time window. Interval defaults to 1d, limit to 100 candles. Returned newest-first; each row has timestamp (unix ms), open, high, low, close, volume. |
| get_trendA | Multi-period trend digest for a market: percentage changes over 24h / 7d / 30d / 90d / 1y, plus the high and low within the past year. When you have imported transactions for the base asset, also compares the current price to your average cost basis and reports your unrealized P&L on the position. |
| import_transactionsA | Import a Bitvavo CSV transaction export into the local SQLite store. Idempotent — rows with a known transaction_id are updated in place. After import, get_pnl uses these records as the canonical source so Quick Buy/Sell, Convert, staking and rebate activity all become visible. |
| get_transactionsA | Query the locally-stored transaction history (populated via import_transactions). Newest first. Without filters returns the most recent 100 rows. Combine |
| get_pnlA | Profit & loss per asset, using the average-cost method. Walks every asset's trade history to derive an average cost basis, then compares to the latest market price. Returns per-position cost basis, market value, unrealized + realized P&L, plus portfolio totals. Source priority: locally-imported transactions (via import_transactions) are preferred when available — these include Quick Buy/Sell, Convert, staking and rebate activity that the live API does not expose. When local data is present every traded asset is scanned, so fully-sold positions show their realized P&L too. Without local data, falls back to the live /trades endpoint and only assets with a current non-zero balance are visible. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
Most tools have clearly distinct purposes: ping checks connectivity, get_balance lists balances, get_portfolio_value computes total value, and so on. A few pairs like get_trades vs get_transactions (live vs local) and get_balance vs get_portfolio_value (per-asset vs total) overlap conceptually, but the descriptions clarify the boundaries.
The naming is predominantly verb_noun with get_ prefix for data retrieval, import_transactions for ingestion, and ping for health checks. The deviation from get_ is minor and standard, and all names use snake_case consistently, making the set predictable and readable.
14 tools is well within the ideal 3-15 range and appropriately scoped for a cryptocurrency exchange server. Each tool covers a distinct aspect such as market data, balances, history, or analytics, with no redundant or missing obvious tools.
The server covers market data, balances, deposits/withdrawals, trades, and local transaction history for P&L, which is substantial. However, it lacks core order management operations like place/cancel order or fetching a single order by ID, leaving a notable gap for a trading-focused exchange MCP.