comdirect
PYPI · COMDIRECT-MCP
Read-only access to comdirect accounts, transactions, depots, orders and postbox documents.
Available components
Last scanned (17 hours ago)
Scores higher than 76% of PyPI servers
Category Finance and Payments
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. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs uv_build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 4 of 50 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to mad4ms/comdirect-mcp). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 21 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability82
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 1836 tokens (~102/item across 18 items; 17 tools + 1 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management70
- Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 17 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 +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.
- 2 Nov 26 −14
- Malware scan: pass → unverified ▼ security
- 31 Oct 26 +16
- Malware scan: unverified → pass ▲ security
- 30 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- 29 Oct 26 +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.
- 27 Oct 26 +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.
- 25 Oct 26 +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.
- 23 Oct 26 +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.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Analysed pypi/comdirect-mcp@0.6.1
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | pypi |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | mad4ms/comdirect-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/mad4ms/comdirect-mcp/.github/workflows/publish.yml@refs/tags/v0.6.1 |
| Rekor log index | 3245445547 |
| Predicate type | PyPI publish attestation https://docs.pypi.org/attestations/publish/v1 |
| Subject digest | sha256:9dbc72de87abfa4b49a4d6999ba117bf98f42df02af2c8909f1f50bb3851aa0e |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | uv_build |
Background: Why install scripts are a supply-chain risk →
Dependencies 50 packages
| Packages resolved | 50 |
|---|---|
| Stale | 3 |
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
find_recurring_payments Abos und Daueraufträge ~159
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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) |
| Name | Type | Req | Description |
|---|---|---|---|
| account_ids | array | yes | – |
| count | integer | yes | – |
| 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 | yes | – |
| min_booking_date | string | yes | – |
| payments | array | yes | – |
| payments_truncated | boolean | yes | True if more recurring payments were found than `limit` |
| transactions_truncated | boolean | yes | True if not all transactions in the range were read |
| yearly_cost | – | yes | Sum of yearly_cost of the active payments (negative) |
No examples provided.
get_depot_positions Depotbestand ~74
Gets the positions (stocks, ETFs, ...) of a depot with current values, and the depot's total balance.
| Name | Type | Req | Description |
|---|---|---|---|
| depot_id | string | yes | id from `list_depots` |
| isin | – | – | Only this security |
| verbose | boolean | – | Also return position ids, purchase values and detailed profit/loss. |
| Name | Type | Req | Description |
|---|---|---|---|
| balance | – | yes | – |
| depot_id | string | yes | – |
| positions | array | yes | – |
No examples provided.
get_instrument Wertpapier ~78
Security metadata; verbose may include a dated underlying-price snapshot, never a live price feed.
| Name | Type | Req | Description |
|---|---|---|---|
| identifier | string | yes | 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 |
| Name | Type | Req | Description |
|---|---|---|---|
| currency | – | – | – |
| derivative | – | – | – |
| fund | – | – | – |
| fund_redemption_limited | – | – | – |
| id | – | – | – |
| isin | – | – | – |
| kid_available | – | – | – |
| mnemonic | – | – | – |
| name | – | – | – |
| notation | – | – | – |
| order_dimensions | – | – | – |
| priips_relevant | – | – | – |
| shipping_waiver_required | – | – | – |
| short_name | – | – | – |
| type | – | – | – |
| wkn | – | – | – |
No examples provided.
get_order Order ~50
Reads one order, including combination-order legs. Never changes an order.
| Name | Type | Req | Description |
|---|---|---|---|
| order_id | string | yes | id from `list_orders` |
| verbose | boolean | – | Also return executions, leg metadata and conditions |
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | – | – | – |
No examples provided.
get_wealth_overview Vermögensübersicht ~53
All product balances (accounts, depots, cards, loans) and bank-supplied EUR totals. Missing values stay unknown.
| Name | Type | Req | Description |
|---|---|---|---|
| verbose | boolean | – | Also return the client id of each product |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | – |
| missing_value_count | integer | yes | – |
| products | array | yes | – |
| 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. |
No examples provided.
list_accounts Konten ~32
Lists all accounts with id, type (e.g. Girokonto, Tagesgeld), masked IBAN and current balances.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| accounts | array | yes | – |
No examples provided.
list_cards Karten ~49
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.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| cards | array | yes | – |
No examples provided.
list_depot_transactions Depotumsätze ~125
Lists securities purchases, sales and transfers. Direction IN/OUT refers to securities, not cash flow.
| Name | Type | Req | Description |
|---|---|---|---|
| depot_id | string | yes | 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 |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number of items in this result |
| depot_id | string | yes | – |
| next_offset | – | – | Pass as offset with the same filters to continue. |
| offset | integer | yes | – |
| transactions | array | yes | – |
| truncated | boolean | yes | True if more items follow |
No examples provided.
list_depots Depots ~24
Lists all securities accounts (depots) with id and masked depot number.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| depots | array | yes | – |
No examples provided.
list_documents Postfach ~50
Lists the postbox documents, newest first: statements, order confirmations, tax documents, ...
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of documents |
| offset | integer | – | next_offset of the previous call |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number of items in this result |
| documents | array | yes | – |
| next_offset | – | – | Pass as offset with the same filters to continue. |
| offset | integer | yes | – |
| truncated | boolean | yes | True if more items follow |
No examples provided.
list_orders Orderbuch ~170
Reads the depot's order book. Read-only: orders cannot be placed, changed or cancelled.
| Name | Type | Req | Description |
|---|---|---|---|
| depot_id | string | yes | 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 |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | Number of items in this result |
| depot_id | string | yes | – |
| next_offset | – | – | Pass as offset with the same filters to continue. |
| offset | integer | yes | – |
| orders | array | yes | – |
| truncated | boolean | yes | True if more items follow |
No examples provided.
list_transactions Umsätze ~185
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`.
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | 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). |
| Name | Type | Req | Description |
|---|---|---|---|
| account_id | string | yes | – |
| count | integer | yes | Number of items in this result |
| next_offset | – | – | Pass as offset with the same filters to continue. |
| offset | integer | yes | – |
| transactions | array | yes | – |
| truncated | boolean | yes | True if more items follow |
No examples provided.
login Anmelden ~30
Starts a new comdirect session. Sends a push TAN to the user's photoTAN app and waits for approval.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | yes | – |
No examples provided.
logout Abmelden ~26
Ends the comdirect session and revokes it at comdirect, so it cannot be extended.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | yes | – |
No examples provided.
read_document Dokument lesen ~149
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.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | string | yes | 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 |
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | string | yes | – |
| first_page | – | – | – |
| format | string | yes | – |
| has_more_pages | – | – | – |
| mime_type | – | – | – |
| next_page | – | – | – |
| notice | – | – | – |
| page_count | – | – | – |
| pages_processed | – | – | – |
| resource_uri | – | – | Read this resource for the original file |
| text | – | – | – |
| text_truncated | – | – | – |
No examples provided.
summarize_portfolio Portfolio-Aufteilung ~54
Position values and allocation percentages per currency, without FX conversion or asset-class guesses.
| Name | Type | Req | Description |
|---|---|---|---|
| depot_id | string | yes | id from `list_depots` |
| limit | integer | – | Largest positions per currency; remainder is aggregated |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | – |
| currencies | array | yes | – |
| depot_id | string | yes | – |
No examples provided.
summarize_transactions Umsätze zusammenfassen ~175
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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | First booking date (inclusive) |
| Name | Type | Req | Description |
|---|---|---|---|
| account_ids | array | yes | – |
| count | integer | yes | – |
| currency | – | – | – |
| expenses | – | yes | – |
| group_by | string | yes | – |
| groups | array | yes | – |
| groups_truncated | boolean | yes | 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 | – | yes | – |
| internal_transfers | – | – | Transfers between the user's own accounts, left out of the totals and groups above |
| max_booking_date | – | – | – |
| min_booking_date | – | – | – |
| net | – | yes | – |
| transactions_truncated | boolean | yes | 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 |
No examples provided.
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.
pypi · comdirect-mcp
claude mcp add mad4ms-comdirect-mcp -- uvx comdirect-mcp
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.