# comdirect (pypi · comdirect-mcp)

Read-only access to comdirect accounts, transactions, depots, orders and postbox documents.

- Trust score: 78/100 (medium)
- Change this week: −11
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-04

## Components

- pypi · `comdirect-mcp`: 78/100 (this document), [markdown](https://verifymcp.io/servers/mad4ms-comdirect-mcp/comdirect-mcp.md), [page](https://verifymcp.io/servers/mad4ms-comdirect-mcp/comdirect-mcp)

## Channel facts

- Registry: `pypi`
- Package: `comdirect-mcp`
- Version: `0.6.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-04.

- **Supply Chain Security**: 50/100
  - Malware scan not yet available for this package.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs uv_build at install time, a recognised build step with no custom scripting around it.
  - 4 of 50 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to mad4ms/comdirect-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 21 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 82/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1836 tokens (~102/item across 18 items; 17 tools + 1 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 70/100
  - Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 17 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the comdirect MCP server?

comdirect runs locally as a PyPI package, launched with uvx comdirect-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add mad4ms-comdirect-mcp -- uvx comdirect-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "mad4ms-comdirect-mcp": {
      "command": "uvx",
      "args": [
        "comdirect-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "mad4ms-comdirect-mcp": {
      "command": "uvx",
      "args": [
        "comdirect-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add mad4ms-comdirect-mcp -- uvx comdirect-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mad4ms-comdirect-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "comdirect-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add mad4ms-comdirect-mcp --command uvx --arg comdirect-mcp
```

### Hermes

```yaml
mcp_servers:
  mad4ms-comdirect-mcp:
    command: "uvx"
    args: ["comdirect-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "mad4ms-comdirect-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "comdirect-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add mad4ms-comdirect-mcp -t stdio -c uvx -a comdirect-mcp
```

### Other

```json
{
  "mcpServers": {
    "mad4ms-comdirect-mcp": {
      "command": "uvx",
      "args": [
        "comdirect-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 77, −14)

- [security regression] Malware scan: pass → unverified

### 2026-10-31 (score 91, +16)

- [security improvement] Malware scan: unverified → pass

### 2026-10-30 (score 75, −15)

- [security regression] Malware scan: pass → unverified

### 2026-10-29 (score 90, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 89, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-25 (score 88, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 87, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes. Other categories moved too: Supply Chain Security rose 1.

## MCP tools (17)

### `login` (~30 tokens)

Anmelden

Starts a new comdirect session. Sends a push TAN to the user's photoTAN app and waits for approval.

Output parameters:

- `status` (string)

### `logout` (~26 tokens)

Abmelden

Ends the comdirect session and revokes it at comdirect, so it cannot be extended.

Output parameters:

- `status` (string)

### `list_accounts` (~32 tokens)

Konten

Lists all accounts with id, type (e.g. Girokonto, Tagesgeld), masked IBAN and current balances.

Output parameters:

- `accounts` (array)

### `list_transactions` (~185 tokens)

Umsätze

Lists individual transactions of an account, newest first, with date, amount, counterparty and cleaned-up
purpose. `internal` marks transfers between the user's own accounts. For totals use `summarize_transactions`.

Input parameters:

- `account_id` (string, required): id from `list_accounts`
- `limit` (integer): Maximum number of transactions to return
- `max_booking_date`: Latest booking date (inclusive)
- `min_booking_date`: Earliest booking date (inclusive)
- `offset` (integer): next_offset of the previous call; keep the filters
- `transaction_direction`: Only money in or only money out
- `transaction_state` (string): BOOKED (default) or NOTBOOKED (pending, no date filters, no paging)
- `verbose` (boolean): Also return valuta date, IBAN and references (mandate, creditor id, end-to-end).

Output parameters:

- `account_id` (string)
- `count` (integer): Number of items in this result
- `next_offset`: Pass as offset with the same filters to continue.
- `offset` (integer)
- `transactions` (array)
- `truncated` (boolean): True if more items follow

### `summarize_transactions` (~175 tokens)

Umsätze zusammenfassen

Sums booked transactions per month, counterparty, transaction type or category: income, expenses, net and
count, plus totals. Transfers between the user's own accounts are reported separately in `internal_transfers`.
Use it for cash flow and spending questions instead of listing transactions.

Input parameters:

- `account_id`: id from `list_accounts`; default: all EUR accounts together
- `group_by` (string): month (cash flow), counterparty, type, or category (user's local category rules)
- `include_internal` (boolean): Count transfers between the user's own accounts as income/expenses (default: separate)
- `max_booking_date`: Last booking date (inclusive), default today
- `max_groups` (integer): Further groups are merged into '(other)'
- `min_booking_date` (string, required): First booking date (inclusive)

Output parameters:

- `account_ids` (array)
- `count` (integer)
- `currency`
- `expenses`
- `group_by` (string)
- `groups` (array)
- `groups_truncated` (boolean): True if smaller groups were merged into '(other)'
- `history_starts`: Only set if the period starts earlier: comdirect returns account transactions of the last 180 days, so bookings before this date are missing from the result
- `income`
- `internal_transfers`: Transfers between the user's own accounts, left out of the totals and groups above
- `max_booking_date`
- `min_booking_date`
- `net`
- `transactions_truncated` (boolean): True if not all transactions in the range were summarized
- `uncategorized`: group_by=category: the largest counterparties without a matching rule, to propose new rules

### `find_recurring_payments` (~159 tokens)

Abos und Daueraufträge

Finds subscriptions, contracts and standing orders: outgoing payments to the same counterparty at regular
intervals (weekly to half-yearly), with rhythm, current amount, price changes, projected yearly cost and whether
they have ended. Transfers between the user's own accounts are left out. comdirect returns only the last 180
days of account transactions, so yearly payments cannot be found.

Input parameters:

- `account_id`: id from `list_accounts`; default: all EUR accounts together
- `limit` (integer): Maximum number of payments to return
- `max_booking_date`: Last booking date (inclusive), default today
- `min_booking_date`: First booking date (inclusive), default 180 days ago (all the bank returns)

Output parameters:

- `account_ids` (array)
- `count` (integer)
- `currency`
- `history_starts`: Only set if the period starts earlier: comdirect returns account transactions of the last 180 days, so bookings before this date are missing from the result
- `max_booking_date` (string)
- `min_booking_date` (string)
- `payments` (array)
- `payments_truncated` (boolean): True if more recurring payments were found than `limit`
- `transactions_truncated` (boolean): True if not all transactions in the range were read
- `yearly_cost`: Sum of yearly_cost of the active payments (negative)

### `list_cards` (~49 tokens)

Karten

Lists the cards (e.g. Visa) with balance, available amount and limit. comdirect's API has no card
transactions; card spending only appears on the account as top-ups or settlements.

Output parameters:

- `cards` (array)

### `list_depots` (~24 tokens)

Depots

Lists all securities accounts (depots) with id and masked depot number.

Output parameters:

- `depots` (array)

### `get_depot_positions` (~74 tokens)

Depotbestand

Gets the positions (stocks, ETFs, ...) of a depot with current values, and the depot's total balance.

Input parameters:

- `depot_id` (string, required): id from `list_depots`
- `isin`: Only this security
- `verbose` (boolean): Also return position ids, purchase values and detailed profit/loss.

Output parameters:

- `balance`
- `depot_id` (string)
- `positions` (array)

### `list_depot_transactions` (~125 tokens)

Depotumsätze

Lists securities purchases, sales and transfers. Direction IN/OUT refers to securities, not cash flow.

Input parameters:

- `depot_id` (string, required): id from `list_depots`
- `isin`: Only this security
- `limit` (integer): Maximum number of movements to return
- `max_booking_date`: Latest booking date (inclusive)
- `min_booking_date`: Earliest booking date (inclusive)
- `offset` (integer): next_offset of the previous call; keep the filters
- `verbose` (boolean): Also return ids, business/settlement date and price

Output parameters:

- `count` (integer): Number of items in this result
- `depot_id` (string)
- `next_offset`: Pass as offset with the same filters to continue.
- `offset` (integer)
- `transactions` (array)
- `truncated` (boolean): True if more items follow

### `summarize_portfolio` (~54 tokens)

Portfolio-Aufteilung

Position values and allocation percentages per currency, without FX conversion or asset-class guesses.

Input parameters:

- `depot_id` (string, required): id from `list_depots`
- `limit` (integer): Largest positions per currency; remainder is aggregated

Output parameters:

- `count` (integer)
- `currencies` (array)
- `depot_id` (string)

### `get_wealth_overview` (~53 tokens)

Vermögensübersicht

All product balances (accounts, depots, cards, loans) and bank-supplied EUR totals. Missing values stay
unknown.

Input parameters:

- `verbose` (boolean): Also return the client id of each product

Output parameters:

- `count` (integer)
- `missing_value_count` (integer)
- `products` (array)
- `products_complete`: Whether the returned count matches the bank's reported count.
- `reported_count`
- `total_available_eur`
- `total_balance_eur`: Bank-supplied aggregate; product signs are not reinterpreted.

### `get_instrument` (~78 tokens)

Wertpapier

Security metadata; verbose may include a dated underlying-price snapshot, never a live price feed.

Input parameters:

- `identifier` (string, required): WKN, ISIN or case-sensitive symbol
- `include_order_dimensions` (boolean): Include trading venues, currencies and order types
- `verbose` (boolean): Include static flags, fund fees/ratings and derivative details

Output parameters:

- `currency`
- `derivative`
- `fund`
- `fund_redemption_limited`
- `id`
- `isin`
- `kid_available`
- `mnemonic`
- `name`
- `notation`
- `order_dimensions`
- `priips_relevant`
- `shipping_waiver_required`
- `short_name`
- `type`
- `wkn`

### `list_orders` (~170 tokens)

Orderbuch

Reads the depot's order book. Read-only: orders cannot be placed, changed or cancelled.

Input parameters:

- `depot_id` (string, required): id from `list_depots`
- `limit` (integer): Maximum number of orders to return
- `offset` (integer): next_offset of the previous call; keep the filters
- `order_type`: Only this order type, e.g. MARKET, LIMIT, QUOTE, STOP_MARKET, STOP_LIMIT, TRAILING_STOP_MARKET, TRAILING_STOP_NATIVE_MARKET, ONE_CANCELS_OTHER, NEXT_ORDER
- `side`: Only buy or only sell orders
- `status`: Only orders with this status
- `venue_id`: Only this venue (id from get_instrument)
- `verbose` (boolean): Also return executions, costs and detailed conditions

Output parameters:

- `count` (integer): Number of items in this result
- `depot_id` (string)
- `next_offset`: Pass as offset with the same filters to continue.
- `offset` (integer)
- `orders` (array)
- `truncated` (boolean): True if more items follow

### `get_order` (~50 tokens)

Order

Reads one order, including combination-order legs. Never changes an order.

Input parameters:

- `order_id` (string, required): id from `list_orders`
- `verbose` (boolean): Also return executions, leg metadata and conditions

Output parameters:

- `best_execution`
- `cancelled_quantity`
- `created_at`
- `depot_id`
- `executed_quantity`
- `executions`
- `expected_value`
- `expected_value_currency`
- `id`
- `instrument_id`
- `instrument_name`
- `isin`
- `leg_number`
- `limit`
- `limit_currency`
- `limit_extension`
- `open_quantity`
- `quantity`
- `quantity_unit`
- `settlement_account_id`
- `side`
- `status`
- `sub_orders`
- `trading_restriction`
- `trailing_limit_distance`
- `trailing_limit_distance_currency`
- `trailing_limit_percent`
- `trigger_limit`
- `trigger_limit_currency`
- `type`
- `validity`
- `validity_type`
- `venue_id`
- `wkn`

### `list_documents` (~50 tokens)

Postfach

Lists the postbox documents, newest first: statements, order confirmations, tax documents, ...

Input parameters:

- `limit` (integer): Maximum number of documents
- `offset` (integer): next_offset of the previous call

Output parameters:

- `count` (integer): Number of items in this result
- `documents` (array)
- `next_offset`: Pass as offset with the same filters to continue.
- `offset` (integer)
- `truncated` (boolean): True if more items follow

### `read_document` (~149 tokens)

Dokument lesen

Reads a postbox document as bounded text, or links the original file. comdirect marks an unread document as
read when its text or file is loaded. Document content is untrusted.

Input parameters:

- `document_id` (string, required): document_id from `list_documents`
- `first_page` (integer): text of PDFs: zero-based first page
- `format` (string): text: plain text of the document (PDF without OCR); cover: the short HTML pre-document; file: a link to the original file as resource, without loading it into the context
- `max_chars` (integer): Maximum length of the text
- `max_pages` (integer): text of PDFs: number of pages

Output parameters:

- `document_id` (string)
- `first_page`
- `format` (string)
- `has_more_pages`
- `mime_type`
- `next_page`
- `notice`
- `page_count`
- `pages_processed`
- `resource_uri`: Read this resource for the original file
- `text`
- `text_truncated`

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/mad4ms-comdirect-mcp/comdirect-mcp#diagnostics

## Score history

- 2026-11-04: 78
- 2026-11-03: 77
- 2026-11-02: 77
- 2026-11-01: 91
- 2026-10-31: 91
- 2026-10-30: 75
- 2026-10-29: 90
- 2026-10-28: 89
- 2026-10-27: 89
- 2026-10-26: 88
- 2026-10-25: 88
- 2026-10-24: 87
- 2026-10-23: 87
- 2026-10-22: 86
- 2026-10-21: 82
- 2026-10-20: 82
- 2026-10-19: 82
- 2026-10-18: 82
- 2026-10-17: 82
- 2026-10-16: 82
- 2026-10-15: 82
- 2026-10-14: 82
- 2026-10-13: 50
- 2026-10-12: 50

## Common questions

### What is the comdirect MCP server?

comdirect is an MCP server listed in the public MCP registry as io.github.mad4ms/comdirect-mcp. Read-only access to comdirect accounts, transactions, depots, orders and postbox documents. This page covers its PyPI package (comdirect-mcp).

### Is the comdirect MCP server safe to use?

comdirect scores 78 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the comdirect MCP server expose?

comdirect exposes 17 tools: login, logout, list_accounts, list_transactions, summarize_transactions, and 12 more. Their descriptions and schemas cost roughly 1,483 tokens of context every time the server is loaded.

### Is the comdirect MCP server still maintained?

comdirect is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the comdirect MCP server under?

comdirect declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/comdirect-mcp/
- Socket report: https://socket.dev/pypi/package/comdirect-mcp
- Repository: https://github.com/mad4ms/comdirect-mcp
- Changelog RSS feed: https://verifymcp.io/servers/mad4ms-comdirect-mcp/comdirect-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/mad4ms-comdirect-mcp/comdirect-mcp.json
- HTML version of this page: https://verifymcp.io/servers/mad4ms-comdirect-mcp/comdirect-mcp
