io.github.sebastienrousseau/camt053-mcp
PYPI · CAMT053-MCP · SCANNED SEP 20
MCP server for ISO 20022 camt.053 bank-to-customer statement parsing and reconciliation.
Available components
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 Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs poetry.core.masonry.api at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 4 of 52 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (Apache-2.0 OR MIT).Pass
- Actively maintained (last published 21 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability79
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 7516 tokens (~289/item across 26 items; 24 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
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 (38% 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 24 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 25 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
How do I install the io.github.sebastienrousseau/camt053-mcp server?
io.github.sebastienrousseau/camt053-mcp runs locally as a PyPI package, launched with uvx camt053-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 · camt053-mcp
claude mcp add sebastienrousseau-camt053-mcp -- uvx camt053-mcp
{
"mcpServers": {
"sebastienrousseau-camt053-mcp": {
"command": "uvx",
"args": [
"camt053-mcp"
]
}
}
} {
"servers": {
"sebastienrousseau-camt053-mcp": {
"command": "uvx",
"args": [
"camt053-mcp"
]
}
}
} codex mcp add sebastienrousseau-camt053-mcp -- uvx camt053-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sebastienrousseau-camt053-mcp": {
"type": "local",
"command": [
"uvx",
"camt053-mcp"
],
"enabled": true
}
}
} openclaw mcp add sebastienrousseau-camt053-mcp --command uvx --arg camt053-mcp
mcp_servers:
sebastienrousseau-camt053-mcp:
command: "uvx"
args: ["camt053-mcp"] {
"McpServers": {
"sebastienrousseau-camt053-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"camt053-mcp"
]
}
}
} assistant mcp add sebastienrousseau-camt053-mcp -t stdio -c uvx -a camt053-mcp
{
"mcpServers": {
"sebastienrousseau-camt053-mcp": {
"command": "uvx",
"args": [
"camt053-mcp"
]
}
}
} 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.
- 20 Sept 26 +1
- Stability: 0.97 → pass security
- 18 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Sept 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.
- 9 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.
- 7 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.
- 5 Sept 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.
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 20 Sept 2026 · Analysed pypi/camt053-mcp@0.0.20
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | poetry.core.masonry.api |
Background: Why install scripts are a supply-chain risk →
Dependencies 52 packages
| Packages resolved | 52 |
|---|---|
| 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 →
check_cbpr_readiness Check CBPR+ Nov 2026 readiness ~505
Check a camt.053 statement against the CBPR+ Nov 2026 acceptance rules. Use this to audit a statement for the business-rule changes (schema version, structured postal addresses) enforced from the Nov 2026 cutover. For plain XSD schema validity use ``validate_statement`` instead; for just the cutover date use ``get_cbpr_cutover_date``. A coordinated CBPR+ / Fedwire / CHAPS / T2 cutover lands on **14-16 November 2026**: unstructured-only postal addresses get rejected, ``camt.110/111`` exceptions and investigations become mandatory, and T2S R2026.NOV upgrades camt.053 / 054 to schema revision MR2026. This tool walks the supplied payload and reports every issue that will fail the Nov 2026 acceptance rules: * **Schema version** vs the CBPR+ current set (``camt.053.001.08`` / ``camt.053.001.13``); ``.02``-``.07`` are flagged as deprecated warnings; unknown / non-camt.053 namespaces as errors. * **Postal addresses**: every ``<PstlAdr>`` is classified as fully structured, hybrid, or **unstructured-only** (``<AdrLine>`` without ``<TwnNm>`` + ``<Ctry>`` siblings, the Nov 2026 reject case). Returns a dictionary ``{"cbpr_ready": bool, "schema_version": str | None, "checked_at": ISO-8601 UTC, "cutover_date": "2026-11-16", "issues": [...], "summary": {...}}``. ``cbpr_ready`` is ``True`` iff no ``severity="error"`` issue was raised. An ``{"error": ...}`` envelope is returned instead if the XML is malformed or refused by the hardened pre-flight (DOCTYPE / ENTITY / oversized payload). Args: xml: The raw camt.05x statement XML as a string.
| Name | Type | Req | Description |
|---|---|---|---|
| xml | string | yes | The raw camt.05x statement XML document as a string, audited against the CBPR+ Nov 2026 acceptance rules (schema version and structured postal addresses). Rejected by the hardened pre-flight if it ca… |
No output schema declared.
No examples provided.
cite_rulebook Cite payments rulebook clause ~436
Return a curated payments-rulebook citation for a single clause. Use this to quote one specific rule (with its canonical source URL) once you know the ``scheme``/``version``/``clause``. To discover which clauses exist first, call ``list_rulebook_clauses``. Looks up one well-known rule across the SEPA, CBPR+, and HVPS+ rulebooks and returns a short summary together with the canonical source URL so an agent can quote the rule and the operator can verify it against the official document. The registry is a curated convenience layer, not a verbatim reproduction of copyrighted text. Always defer to ``source_url`` for authoritative wording before relying on a citation for compliance or contractual decisions; the returned ``disclaimer`` field repeats this for the calling agent. Args: scheme: One of ``"SEPA"``, ``"CBPR+"``, or ``"HVPS+"`` (case sensitive). version: The rulebook version (e.g. ``"2025"`` or ``"2026"``). clause: A kebab-case clause identifier from ``list_rulebook_clauses``. Returns: A citation dict ``{"scheme", "version", "clause", "title", "summary", "source_url", "as_of", "disclaimer"}`` or an ``{"error": ...}`` payload if the citation is not in the registry.
| Name | Type | Req | Description |
|---|---|---|---|
| clause | string | yes | A kebab-case clause identifier (e.g. 'iban-only') as returned by list_rulebook_clauses for the chosen scheme and version. |
| scheme | string | yes | The payments-rulebook scheme to cite (case-sensitive). Must be exactly one of: 'CBPR+', 'HVPS+', 'SEPA' (see list_rulebook_clauses). |
| version | string | yes | The rulebook version, e.g. '2025' or '2026'. Use list_rulebook_clauses to see which versions exist per scheme. |
No output schema declared.
No examples provided.
classify_entry Classify entry via LLM sampling ~428
Classify one statement entry into a category via MCP LLM Sampling. Use this when you want a semantic, model-driven label for an entry (payroll, fee, refund, …) rather than a deterministic rule match. Because it delegates an LLM completion to the client it is open-world and non-idempotent; for the fixed candidate categories it chooses from, call ``list_classify_entry_categories`` first. Uses the **MCP Sampling** protocol primitive: the server (this process) asks the *client* (the agent's host application) to perform an LLM completion on the server's behalf, then receives the model's structured response. Keeps every LLM call in the operator's existing model contract (privacy, billing, audit). The model is asked to choose exactly one category from ``categories`` (or :data:`camt053_mcp.classify.DEFAULT_CATEGORIES` if ``None`` is passed) and return a structured ``{category, confidence, explanation}`` payload. Clients that do not support Sampling will get an ``{"error": "..."}`` envelope and can fall back to a rules-only classifier. Args: ctx: The MCPServer Context (auto-injected; provides ``session.create_message``). entry: A statement entry dict (the shape returned by ``parse_statement`` / ``list_entries``). categories: The candidate categories. ``None`` uses the built-in default list (12 common payment buckets). Returns: ``{"category", "confidence", "explanation"}`` on success or ``{"error": "..."}`` on Sampling failure / malformed model response / out-of-vocabulary category.
| Name | Type | Req | Description |
|---|---|---|---|
| categories | – | – | The candidate categories the model must choose exactly one from. None (the default) uses the built-in default list exposed by list_classify_entry_categories. |
| entry | object | yes | A single statement entry dict, in the shape returned by parse_statement / list_entries, to classify into one category. |
No output schema declared.
No examples provided.
convert_mt940_to_camt053 Convert legacy MT940 to camt.053 ~371
Convert a legacy SWIFT MT940 statement into a camt.053 structure. Use this as the Phase-1 migration wedge: SWIFT MT940 customer statements retire in **November 2028**, so this tool bridges the gap by turning raw MT940 text into the same JSON-serialisable camt.053 document shape that ``parse_statement`` returns (group header plus statements, each with its account, balances, and entries). Downstream tools (``list_entries``, ``filter_entries``, ``classify_entry``, ``export_journal``) then work on the result unchanged. Wraps the ``camt053-loader-mt940`` library's ``parse_mt940``; the MT parsing itself is delegated (no MT grammar is reimplemented here). The resulting ``ParsedDocument`` is serialised with the same ``to_dict()`` the server's other parse tools use, so agents get a consistent structure. Nothing is read from or written to disk. Returns the converted document as a JSON-serialisable dict, or an ``{"error": ...}`` payload if the MT940 text cannot be parsed (e.g. a missing ``:20:`` reference or a malformed balance / statement line). Args: mt940_text: The raw MT940 statement text as a string.
| Name | Type | Req | Description |
|---|---|---|---|
| mt940_text | string | yes | The raw legacy SWIFT MT940 statement text as a string (``:20:`` / ``:25:`` / ``:28C:`` / ``:60F:`` / ``:61:`` / ``:86:`` / ``:62F:`` fields). Passed verbatim from the bank or ERP; no file path is acc… |
No output schema declared.
No examples provided.
convert_mt942 Convert legacy MT942 to camt.052 ~648
Convert a legacy SWIFT MT942 interim report into a camt.052 structure. Use this as the Phase-1 migration wedge for intraday reporting: SWIFT MT94x messages retire in **November 2028**, so this tool bridges the gap by turning raw MT942 *Interim Transaction Report* text into the same JSON-serialisable camt.052 (Bank-to-Customer Account **Report**) document shape the server's parse tools return (group header plus statements, each with its account, balances, and entries). MT942 is the intraday sibling of MT940: where MT940 maps to camt.053 (end-of-day statement), MT942 maps to camt.052, so the resulting ``message_type`` is ``camt.052.001.08``. Downstream tools (``list_entries``, ``filter_entries``, ``classify_entry``, ``export_journal``) then work on the result unchanged. Wraps the ``camt053-loader-mt942`` library's ``parse_mt942``; the MT parsing itself is delegated (no MT grammar is reimplemented here). The resulting ``ParsedDocument`` is serialised with the same ``to_dict()`` the server's other parse tools use, so agents get a consistent structure. Nothing is read from or written to disk. **Documented model limitation.** The ``camt053`` typed model is camt.053-statement-oriented: it has no dedicated field for camt.052's floor-limit (``<Lmt>``) or transaction-summary (``<TxsSummry>``) blocks. Rather than drop that data, the loader surfaces it on the balance list using clearly proprietary ``type_code`` values so consumers can recognise and filter them: ``:34F:`` floor limits become ``FLIMD`` / ``FLIMC`` balances, and ``:90D:`` / ``:90C:`` entry-count summaries become ``SUMD:<count>`` / ``SUMC:<count>`` balances (the ISO ``NbOfNtries`` count is encoded after the colon; the sum is the balance ``amount``). See the loader's README. Returns the converted document as a JSON-serialisable dict, or an ``{"error": ...}`` payload if the MT942 text cannot be parsed (e.g. a missing ``:20:`` reference or a malformed floor-limit / summary / statement line). Args: mt942_text…
| Name | Type | Req | Description |
|---|---|---|---|
| mt942_text | string | yes | The raw legacy SWIFT MT942 interim transaction report text as a string (``:20:`` / ``:25:`` / ``:28C:`` / ``:34F:`` / ``:13D:`` / ``:61:`` / ``:86:`` / ``:90D:`` / ``:90C:`` fields). Passed verbatim… |
No output schema declared.
No examples provided.
detect_statement_anomalies Detect statement anomalies ~331
Screen a camt.05x statement for deterministic, rule-based anomalies. Use this as a fast, explainable first pass over an incoming statement before deeper review or reversal. It applies three fixed heuristics over the parsed entry list (see ``list_entries``) and never calls out to a model or the network, so the same statement always yields the same result: * **Duplicate references** (severity ``HIGH``) -- two or more entries share an end-to-end id (or, absent one, an entry reference), a classic double-payment signal. * **Unusual fee deductions** (severity ``MEDIUM``) -- a fee/charge debit whose amount exceeds a fixed fraction (25%) of the largest ordinary transaction amount on the statement. * **Velocity spikes** (severity ``LOW``/``MEDIUM``) -- a booking-date window whose entry count runs far above the statement's median per-window count. Returns ``{"anomalies": [{"type", "severity", "detail", "entry_refs"}], "checked_entries": <int>}``; ``anomalies`` is empty for a clean statement. Returns an ``{"error": ...}`` payload instead if the XML cannot be parsed. Args: statement_xml: The raw statement XML as a string.
| Name | Type | Req | Description |
|---|---|---|---|
| statement_xml | string | yes | The raw camt.05x statement XML document as a string, with its root camt <Document> element. Every booked entry across all its statements is screened; no file path is accepted. |
No output schema declared.
No examples provided.
export_journal Export statement to journal entries ~497
Export a camt.053 statement as accounting-platform journal-entry payloads. Use this to reshape a statement's booked entries into ready-to-POST Xero or QuickBooks payloads (the tool builds the payloads only; it does not call any external API or write files). To discover the valid ``target`` values first, call ``list_export_journal_targets``. Parses the supplied statement and re-shapes every booked entry into a target-specific journal-entry payload ready for direct POST to the accounting platform's REST API. Supported targets (see ``camt053_mcp.export_journal.SUPPORTED_TARGETS``): * ``"xero"`` - returns a list of Xero ``BankTransactions`` payloads. Each entry maps to ``{Type, Reference, Date, BankAccount, Contact, LineAmountTypes, CurrencyCode, LineItems}``; CRDT entries become ``Type=RECEIVE`` and DBIT entries ``Type=SPEND``. * ``"qbo"`` - returns a list of QuickBooks Online ``JournalEntry`` payloads. Each entry produces a balanced two-line journal (one to the bank account, one to a clearing account; sign flipped on debit entries). Operator-specific values (account codes, contact identifiers, realm IDs) appear as ``"OPERATOR_FILL"`` placeholders so the operator knows exactly what still needs wiring. The response's ``placeholder_count`` field reports the total. NetSuite + SAP S/4HANA targets are tracked as a follow-up in #17. Args: xml: The raw camt.053 statement XML as a string. target: One of ``"xero"`` or ``"qbo"`` (default ``"xero"``). Returns: ``{"target", "entries", "placeholder_count", "placeholder_field"}`` on success, or ``{"error": ...}`` on failure (unsupported target / malformed XML / parse refusal).
| Name | Type | Req | Description |
|---|---|---|---|
| target | string | – | The accounting platform to shape journal-entry payloads for. Must be exactly one of: 'qbo', 'xero' (see list_export_journal_targets). |
| xml | string | yes | The raw camt.053 statement XML document as a string; its booked entries are reshaped into journal-entry payloads. |
No output schema declared.
No examples provided.
filter_entries Filter entries by reason code ~565
List only the statement entries carrying a given return reason code. Use this to preview exactly which entries a reversal would touch before calling ``generate_reversal`` with the same ``reason_code``. For every entry regardless of reason code use ``list_entries`` instead. When ``limit`` is ``None`` (the default) the full list of matching entries is returned, preserving the behaviour expected by existing callers. When ``limit`` is given, a paginated envelope ``{"total", "offset", "limit", "entries"}`` is returned instead, exposing the ``offset:offset + limit`` slice. A negative ``offset`` or ``limit`` yields an ``{"error": ...}`` payload. Args: xml: The raw statement XML as a string. reason_code: The ISO external return reason to match (default ``"AC04"`` Closed Account). offset: The zero-based index of the first entry to return (paginated mode only; default ``0``). limit: The maximum number of entries to return, or ``None`` for the full list (default ``None``).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | – | – | Maximum number of matching entries to return, starting at offset. None (the default) returns the full unpaginated list; a non-None value returns a {total, offset, limit, entries} envelope. Must be no… |
| offset | integer | – | Zero-based index of the first matching entry to return. Applies only when limit is given; must be non-negative. Defaults to 0. |
| reason_code | string | – | An ISO external return reason code, e.g. 'AC04' Closed Account. Must be exactly one of: 'AC01', 'AC02', 'AC03', 'AC04', 'AC06', 'AC13', 'AC14', 'AG01', 'AG02', 'AM01', 'AM02', 'AM03', 'AM04', 'AM05',… |
| xml | string | yes | The raw camt.05x statement XML document as a string; only its entries carrying the given return reason code are returned. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
generate_reversal Generate reversal document ~431
Generate a validated camt.053.001.14 reversal document from a statement. This is the headline one-shot workflow: pass an incoming statement and a return-reason code and get back the reversal XML (nothing is written to disk). Preview which entries will be reversed first with ``filter_entries`` using the same ``reason_code``. This is the headline one-shot workflow: parse the incoming camt.053, pick the entries with the requested return reason (e.g. AC04 Closed Account), and emit a validated camt.053.001.14 reversal statement. Returns the validated XML document as a string, or an ``{"error": ...}`` payload (serialized) if generation fails. Args: xml: The raw incoming statement XML as a string. reason_code: The ISO external return reason to reverse (default ``"AC04"``).
| Name | Type | Req | Description |
|---|---|---|---|
| reason_code | string | – | An ISO external return reason code, e.g. 'AC04' Closed Account. Must be exactly one of: 'AC01', 'AC02', 'AC03', 'AC04', 'AC06', 'AC13', 'AC14', 'AG01', 'AG02', 'AM01', 'AM02', 'AM03', 'AM04', 'AM05',… |
| xml | string | yes | The raw incoming camt.053 statement XML document as a string; the entries carrying reason_code are reversed into a new camt.053.001.14 document. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
get_cbpr_cutover_date Get CBPR+ cutover date ~145
Return the official CBPR+ / Nov 2026 cutover date as ISO 8601. Use this to quote the enforcement date directly, without parsing a document. To actually audit a statement against the rules that take effect on that date, call ``check_cbpr_readiness`` instead. The cutover (``2026-11-16``) is the date after which the rules checked by ``check_cbpr_readiness`` are enforced by the major clearing systems; payments that fail will be rejected at receive-time. Surfaced as a discrete tool so agents can quote it directly without having to call a readiness check first.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_input_schema Get input JSON Schema ~160
Return the full JSON Schema for a message type's flat input record. Use this to learn every field, its type, and its constraints before assembling records, or to drive a form/UI. For just the required-field names use ``get_required_fields``; to actually check records against this schema use ``validate_records``. Args: message_type: A supported ISO 20022 camt.05x message type.
| Name | Type | Req | Description |
|---|---|---|---|
| message_type | string | yes | A supported ISO 20022 camt.05x message type string. Must be exactly one of: 'camt.052.001.14', 'camt.053.001.14', 'camt.054.001.14' (see list_message_types). |
No output schema declared.
No examples provided.
get_required_fields Get required input fields ~151
List only the required input field names for a camt message type. Use this for a quick checklist of the mandatory columns before building reversing-entry records. When you need full type/format constraints (not just which fields are required), call ``get_input_schema`` instead. Args: message_type: A supported ISO 20022 camt.05x message type.
| Name | Type | Req | Description |
|---|---|---|---|
| message_type | string | yes | A supported ISO 20022 camt.05x message type string. Must be exactly one of: 'camt.052.001.14', 'camt.053.001.14', 'camt.054.001.14' (see list_message_types). |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_tenant_context Get tenant scoping context ~206
Return the multi-tenant scoping context of the current call. Use this to confirm which tenant/account scope the server attributes the session to. On the streamable-HTTP transport (D7, #42) the ``tenant`` field carries the value of the optional ``Camt053-Account`` request header the caller sent; over stdio (or when the caller sent no header) it is ``None``. The same value is stamped as the ``scope`` on the server's audit log, so an agent can verify its calls are attributed to the right tenant. The lookup is read-only and deterministic for a given request: nothing is validated or mutated, and no external system is touched. Args: ctx: The MCPServer Context (auto-injected; carries the underlying HTTP request, when there is one). Returns: ``{"service": "camt053-mcp", "tenant": str | None}``.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_classify_entry_categories List classifier categories ~103
List the default candidate categories the ``classify_entry`` tool uses. Use this to quote the built-in category vocabulary to a user before running the LLM classifier. This is a static list lookup (no model call); to actually classify an entry, call ``classify_entry``. Operators can override the list per call; this tool exposes the default the prompt template ships with so an agent can quote them to the user before invoking the classifier.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_entries List all statement entries ~334
List every booked entry across all statements in a camt.05x document. Use this to get the flat, paginable entry list from a statement. To keep only the entries carrying a given return-reason code use ``filter_entries``; for the full nested document structure use ``parse_statement``. When ``limit`` is ``None`` (the default) the full list of entries is returned. When ``limit`` is given, a paginated envelope ``{"total", "offset", "limit", "entries"}`` is returned instead, exposing the ``offset:offset + limit`` slice. A negative ``offset`` or ``limit`` yields an ``{"error": ...}`` payload. Args: xml: The raw statement XML as a string. offset: The zero-based index of the first entry to return (paginated mode only; default ``0``). limit: The maximum number of entries to return, or ``None`` for the full list (default ``None``).
| Name | Type | Req | Description |
|---|---|---|---|
| limit | – | – | Maximum number of entries to return, starting at offset. None (the default) returns the full unpaginated list; a non-None value returns a {total, offset, limit, entries} envelope. Must be non-negativ… |
| offset | integer | – | Zero-based index of the first entry to return. Applies only when limit is given; must be non-negative. Defaults to 0. |
| xml | string | yes | The raw camt.05x statement XML document as a string; every booked entry across all its statements is returned. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
list_export_journal_targets List journal export targets ~118
List the accounting-platform targets the ``export_journal`` tool supports. Use this to tell a user which ``target`` values ``export_journal`` accepts before invoking it. This lists export destinations only; for the LLM classifier's category vocabulary use ``list_classify_entry_categories``. Returns the sorted list of valid ``target`` arguments accepted by ``export_journal`` (``["qbo", "xero"]`` today). NetSuite and SAP S/4HANA support is a tracked follow-up.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_message_types List camt.05x message types ~112
List every supported ISO 20022 camt.05x message type and its name. Use this first, before any validation or generation call, to discover the exact ``message_type`` strings this server accepts. For the return-reason codes rather than message types, call ``list_return_reasons`` instead. Returns a list of ``{"message_type": ..., "name": ...}`` dictionaries, one per supported message type (e.g. ``camt.053.001.14``).
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_return_reasons List ISO return reason codes ~112
List every known ISO external return reason code with its name. Use this to discover the ``reason_code`` values that ``filter_entries`` and ``generate_reversal`` accept (e.g. ``AC04`` Closed Account). For the supported message types rather than reason codes, use ``list_message_types``. Returns a list of ``{"code": ..., "name": ...}`` dictionaries (e.g. ``{"code": "AC04", "name": "Closed Account Number"}``).
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_rulebook_clauses List rulebook clauses ~231
List the curated rulebook clauses the server can cite, optionally filtered. Use this to browse the citation registry and pick a ``clause`` id; then pass that id to ``cite_rulebook`` to fetch the full summary and source URL. Returns the full registry, optionally filtered by ``scheme`` and / or ``version``. Use the resulting ``clause`` values as input to ``cite_rulebook``. Args: scheme: Restrict to one scheme (e.g. ``"SEPA"``). ``None`` returns all schemes. version: Restrict to one version (e.g. ``"2026"``). ``None`` returns all versions.
| Name | Type | Req | Description |
|---|---|---|---|
| scheme | – | – | Restrict the listing to one scheme. When given, must be exactly one of: 'CBPR+', 'HVPS+', 'SEPA'. None (the default) returns clauses for all schemes. |
| version | – | – | Restrict the listing to one rulebook version, e.g. '2026'. None (the default) returns clauses for all versions. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
parse_statement Parse camt.05x statement XML ~177
Parse an incoming camt.05x statement XML string into structured data. Use this to turn a raw statement into a navigable dict (header, statements, accounts, balances, entries). To pull just the flat entry list use ``list_entries``; to only check the document is schema-valid use ``validate_statement``. Returns the parsed document as a JSON-serialisable dict (group header plus statements, each with its account, balances, and entries), or an ``{"error": ...}`` payload if the XML cannot be parsed. Args: xml: The raw statement XML as a string.
| Name | Type | Req | Description |
|---|---|---|---|
| xml | string | yes | The raw camt.05x statement XML document as a string, with its root camt <Document> element. Returned verbatim from the bank; no file path is accepted. |
No output schema declared.
No examples provided.
search_rulebook_vector Search rulebook clauses by similarity ~526
Search the curated rulebook clauses by lexical-vector similarity. Use this when you know *what* a rule is about but not its exact ``scheme``/``version``/``clause`` id: describe it in natural language and get back the closest curated clauses, each with a similarity ``score``. Then pass the winning ``scheme``/``version``/``clause`` to ``cite_rulebook`` for the full citation, or browse everything with ``list_rulebook_clauses``. Retrieval is a **deterministic lexical-vector cosine** search over the same curated SEPA / CBPR+ / HVPS+ summaries that back ``cite_rulebook`` (no external, copyrighted, or auth-gated rulebook text is indexed). Each clause and the query are hashed into a fixed 256-dimension term-frequency vector (whole words plus character 3/4-grams, BLAKE2b-bucketed so results are reproducible across processes) and ranked by cosine distance with ``sqlite-vec``. It is offline and does **not** use a large neural embedding model, so the same query always yields the same ranking and no model download or network call happens at query time. ``sqlite-vec`` ships in the optional ``[vector]`` extra and is imported lazily; when it is not installed this returns a graceful ``{"error": ...}`` payload asking the operator to ``pip install 'camt053-mcp[vector]'`` rather than failing to import. Args: query: The natural-language search string. top_k: The maximum number of clauses to return (default ``5``, clamped to the corpus size). Returns: ``{"query", "top_k", "returned", "method", "results", "disclaimer"}`` where ``results`` is the ranked list of clause dicts (each with an added ``score``), or an ``{"error": ...}`` payload on a bad argument or a missing ``[vector]`` extra.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | A natural-language search string (e.g. 'structured address requirement' or 'instant payment settlement time'). Matched against the curated SEPA / CBPR+ / HVPS+ clause summaries. |
| top_k | integer | – | Maximum number of clauses to return, ranked most-similar first. Clamped to the corpus size; must be positive. Defaults to 5. |
No output schema declared.
No examples provided.
validate_identifier Validate IBAN, BIC or LEI ~205
Validate a single financial identifier (IBAN, BIC, or LEI). Use this for a one-off identifier check with a clear pass/fail. To validate identifiers embedded across a whole batch of records, prefer ``validate_records`` rather than calling this per field. Returns ``{"kind": str, "value": str, "valid": bool}``. Args: kind: One of ``"iban"``, ``"bic"``, or ``"lei"`` (case-insensitive). value: The identifier value to check.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | string | yes | The financial identifier type to validate (case-insensitive). Must be exactly one of: 'bic', 'iban', 'lei'. |
| value | string | yes | The identifier value to check, matching the chosen kind (e.g. an IBAN, an 8- or 11-character BIC, or a 20-character LEI). Whitespace/case handling follows the underlying validator. |
No output schema declared.
No examples provided.
validate_records Validate records against schema ~223
Validate flat records against a message type's input JSON Schema. Use this on in-memory reversing-entry records to catch structural/type errors per row before generation. To validate a whole camt.05x *document* (XML) against its XSD instead, use ``validate_statement``. Returns a report ``{"valid": bool, "total": int, "valid_count": int, "errors": [...]}``. Args: message_type: A supported ISO 20022 camt.05x message type. records: One or more flat reversing-entry records to validate.
| Name | Type | Req | Description |
|---|---|---|---|
| message_type | string | yes | A supported ISO 20022 camt.05x message type string. Must be exactly one of: 'camt.052.001.14', 'camt.053.001.14', 'camt.054.001.14' (see list_message_types). |
| records | array | yes | One or more flat reversing-entry records (each a dict of field name to value) to validate row-by-row against the message type's input JSON Schema. |
No output schema declared.
No examples provided.
validate_statement Validate statement against XSD ~261
Validate an incoming camt.05x statement XML against its XSD schema. Use this to confirm a document is well-formed and schema-valid before processing it. This checks XSD conformance only; for the Nov 2026 CBPR+ business rules use ``check_cbpr_readiness``, and to extract the data use ``parse_statement``. Detects the document's message type, validates it against the matching ISO 20022 schema, and returns a report ``{"valid": bool, "message_type": str, "errors": [...]}``. A well-formed but schema-invalid document yields ``valid=False`` with a populated ``errors`` list (and the detected ``message_type``); a valid one yields ``valid=True`` with no errors. Returns an ``{"error": ...}`` payload instead if the XML cannot be parsed (e.g. it is malformed or is not a camt ``Document``). Args: xml: The raw statement XML as a string.
| Name | Type | Req | Description |
|---|---|---|---|
| xml | string | yes | The raw camt.05x statement XML document as a string, with its root camt <Document> element. Validated against the matching ISO 20022 XSD; no file path is accepted. |
No output schema declared.
No examples provided.
What is the io.github.sebastienrousseau/camt053-mcp server?
io.github.sebastienrousseau/camt053-mcp is listed in the public MCP registry as io.github.sebastienrousseau/camt053-mcp. MCP server for ISO 20022 camt.053 bank-to-customer statement parsing and reconciliation. This page covers its PyPI package (camt053-mcp).
Is the io.github.sebastienrousseau/camt053-mcp server safe to use?
io.github.sebastienrousseau/camt053-mcp scores 86 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. 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 io.github.sebastienrousseau/camt053-mcp server expose?
io.github.sebastienrousseau/camt053-mcp exposes 24 tools: list_message_types, list_return_reasons, get_required_fields, get_input_schema, validate_records, and 19 more. Their descriptions and schemas cost roughly 7,276 tokens of context every time the server is loaded.
Is the io.github.sebastienrousseau/camt053-mcp server still maintained?
io.github.sebastienrousseau/camt053-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 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 io.github.sebastienrousseau/camt053-mcp server under?
io.github.sebastienrousseau/camt053-mcp declares the Apache-2.0 OR MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.