mcpField
C
camt053-mcp

camt053-mcp

本地服务
github.com/sebastienrousseau金融数据22 天前更新

关于 camt053-mcp

camt053-mcp 将 camt053 ISO 20022 库提供给 AI Agent,用于处理银行对账单。它支持解析、验证、旧格式转换、按退回原因筛选,以及生成经验证的冲正记录。

主要功能

  1. 01解析 camt.05x 对账单
  2. 02验证对账单、记录和标识符
  3. 03转换 MT940 和 MT942 报文
  4. 04按退回原因筛选条目
  5. 05生成经验证的冲正 XML
  6. 06导出至 Xero 和 QBO 的日记账数据

适用场景

  1. 01检查并验证收到的银行对账单
  2. 02迁移旧版 MT940 或 MT942 数据
  3. 03查找需要冲正的退回交易
  4. 04将对账单条目导出为会计格式

MCP 相关

MCP 服务通过 camt053.services 提供类型化工具、提示词和资源。它支持 stdio、streamable HTTP、SSE 和经过身份验证的 HTTP 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"sebastienrousseau-camt053": {
"command": "uvx",
"args": [
"camt053-mcp"
]
}
}
}
启动命令uvx camt053-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypicamt053-mcp0.0.23

工具

24

收录的工具列表 · 更新于 今天

此工具无需参数。

详细介绍

camt053-mcp:用于 ISO 20022 银行对账单的 MCP 服务

camt053-mcp 徽标

构建 注册表 文档 OpenSSF 记分卡 许可证:Apache-2.0 或 MIT Python 3.10 或更高版本 OpenSSF 最佳实践 Glama MCP 服务评分

camt053-mcp 演示

一个 Model Context Protocol 服务,将 camt053 ISO 20022 银行对账单库作为工具提供给 AI Agent 和助手使用 — 可发现消息类型和退回原因、检查输入架构、验证记录和财务标识符、解析收到的对账单,以及生成经过验证的冲销分录 XML,所有操作均可通过你喜爱的 MCP 客户端完成。

最新版本:v0.0.23:随 camt053 套件 0.0.23 一同发布 (核心库、加载器、写入器、语言服务器和此服务统一使用一个 版本)。不包含受 GHSA-84m7-p3x7-pcfv 影响的 mcp 版本,将每个 GitHub Action 固定到 SHA,并新增 CI 复杂度门禁;通过 stdio、可流式传输的 HTTP、SSE 或经过身份验证的可流式 HTTP 提供 24 个 MCP 工具。

目录

概述

Model Context Protocol(MCP)是一项开放标准,可让 AI Agent 和助手以统一的方式发现并调用外部工具。camt053-mcp 是一个 MCP 服务,它将 camt053 库转换为一组一流的 Agent 工具,让助手能够直接在对话中读取并冲销 ISO 20022 camt.05x 现金管理报文——即标准化的银行对客户账户报告、对账单以及借记/贷记通知。

其核心功能是一站式冲销分录工作流:读取传入的 camt.053 对账单,查找带有退回原因代码(例如 AC04 账户已关闭)的分录,并生成经过验证的冲销分录。

每个工具都是对 camt053.services 的轻量级强类型封装。该服务层是 CLI 和 REST API 共用的单一门面,因此所有接口的行为完全一致。工具返回可序列化为 JSON 的数据;发生错误时,会返回 {"error": ...} 负载,而不是抛出异常。

此软件包是 camt053 套件的一部分。该套件由一组可独立安装的软件包组成,共用 camt053.services 层:

  • camt053 — 核心库(CLI + REST API)
  • camt053-mcp — 本软件包,即 Model Context Protocol 服务
  • camt053-lsp — 面向编辑器的 Language Server Protocol 服务
flowchart LR
    A["MCP client<br/>(Claude Desktop, IDE, agent)"] -->|stdio| B["camt053-mcp"]
    B -->|delegates to| C["camt053.services"]
    C -->|parse + reverse + validate| D["ISO 20022 camt.053 XML"]

ISO 20022 MCP 套件

camt053-mcp 是八个协同运作、供应商中立的 MCP 服务中的银行对账单旗舰服务。这些服务共同覆盖 ISO 20022 银行对账单工作流及 2026 年 11 月结构化地址切换,涵盖对账单深度、全目录路由、对账、多格式摄取和地址修复。套件内各服务的依赖版本范围保持一致,因此可以在同一个 Python 环境中顺利共同安装:先从一个服务开始,随着工作流扩展再添加其他服务。

服务端范围接口安装适用场景
camt053-mcpISO 20022 camt.053/camt.052 银行对账单:解析、验证、筛选、反转;MT940/MT942 迁移;CBPR+ 就绪情况;日记账导出24 个 MCP 工具 · 4 个提示词 · 3 个资源pip install camt053-mcp你需要端到端处理银行对客户对账单——此软件包是套件的旗舰产品
iso20022-mcp统一网关:search / describe / validate / generate / parse 元工具,可路由至 pain · pacs · camt · acmt 系列7 个元工具pip install "iso20022-mcp[all]"你想通过一个入口使用所有报文系列
reconcile-mcp将预期的 pain.001 付款与实际收到的 camt.053 分录进行匹配——精确匹配、部分匹配、一对多、多对一,并为每项匹配评分和说明原因7 个 MCP 工具pip install reconcile-mcp你需要可解释的对账单/付款核对
structured-address-fix-mcpISO 20022 邮政地址分类、评估和修正,助力 2026 年 11 月切换至结构化地址;另含高阶编排层——就绪度评分、清算配置文件检查,以及审计证据(pacs.008 / pain.001 债务人和债权人地址)9 个 MCP 工具pip install structured-address-fix-mcp你需要确保债务人/债权人地址在 2026 年 11 月 14 日前满足切换要求
iso20022-readiness-suite-mcp编排网关:检测 → 结构验证 → 清算配置文件检查 → 就绪度评分,另含自动修正和 pacs.002 银行响应模拟——基于基础服务端构建的元客户端4 个 MCP 工具pip install iso20022-readiness-suite-mcp你想通过一个高阶入口使用套件的就绪检查/编排功能
iso20022-bank-profile-mcp管理、验证并提供特定银行的清算配置文件/规则包(CBPR+、SEPA_Instant、FedNow、Generic);控制高级规则包的使用权限4 个 MCP 工具pip install iso20022-bank-profile-mcp你需要根据本机构的市场惯例检查付款
iso20022-evidence-pack-mcp将就绪检查发现、修正差异和模拟响应编制为密封的审计证据包,并支持使用 Ed25519 签名6 个 MCP 工具pip install iso20022-evidence-pack-mcp你需要防篡改的审计/认证材料

一句话概括:camt053-mcp 是银行对账单旗舰产品 (提供最全面的 camt.05x 接口,支持 stdio、可流式传输的 HTTP、SSE 和经过身份验证的可流式传输 HTTP); iso20022-mcp 是通用报文工具包(用少量动词覆盖整个目录);reconcile-mcp 是对账工作流(预期的款项是否实际到账?); bankstatementparser-mcp 是数据接入层(接收多种格式,输出统一的交易结构);而 structured-address-fix-mcp 是邮政地址专家(确保债务人/债权人地址在 2026 年 11 月切换前满足要求)。

套件还包含按报文系列划分的服务端—— pain001-mcp (贷记转账发起)、 pacs008-mcp (金融机构间贷记转账),以及 acmt001-mcp (账户管理)——均可通过 iso20022-mcp 网关访问。

安装

camt053-mcp 可在 macOS、Linux 和 Windows 上运行,需要 Python 3.10+ 和 pip。它会自动安装核心 camt053 库和 MCP SDK。

python -m pip install camt053-mcp
使用独立虚拟环境(推荐)
python -m venv venv
source venv/bin/activate        # macOS/Linux
venv\Scripts\activate           # Windows
python -m pip install -U camt053-mcp
## 快速入门

10 分钟安装 → MCP 客户端配置 → 首次对话教程,请参阅 docs/quickstart.md。

通过 stdio 启动服务(FastMCP 默认传输方式):

camt053-mcp

将其添加到客户端的配置中,即可向任意 MCP 客户端(例如 Claude Desktop)注册:

{
  "mcpServers": {
    "camt053": { "command": "camt053-mcp" }
  }
}

之后,Agent 可以按需调用以下工具来解析收到的对账单并生成经过验证的反向分录。

对于共享的多租户部署,服务也可以使用可流式传输的 HTTP,并强制进行 bearer-token 身份验证,还可按请求使用 Camt053-Account 指定租户范围:

CAMT053_MCP_TOKEN=<secret> camt053-mcp --transport=http --bind=0.0.0.0:8080

请参阅多租户 HTTP 部署 和部署指南。

传输方式

一条命令行,四种传输方式:

命令传输方式端点协议修订版本
camt053-mcpstdio客户端启动进程2026-07-28、2025-11-25
camt053-mcp --transport streamable-http可流式传输的 HTTPhttp://127.0.0.1:8000/mcp2026-07-28(无状态,server/discover)和 2025-11-25(同一端点上的 initialize、Mcp-Session-Id);响应以服务器发送事件的形式流式传输,GET 会打开服务器到客户端的数据流
camt053-mcp --transport sseHTTP+SSE(2024-11-05)http://127.0.0.1:8000/sse 和 /messages/适用于仍需要较早传输方式的客户端
camt053-mcp --transport http经过身份验证的可流式传输 HTTP(请参阅 transport.py)http://127.0.0.1:8080/mcp(--bind)bearer token 或 OAuth 2.1、Camt053-Account 租户范围、审计链

--host 和 --port 可更改 streamable-http 和 sse 的绑定地址(默认值分别为 127.0.0.1 和 8000)。这两种方式本身都不提供身份验证:请绑定到环回地址,或在绑定到可路由地址之前,将服务置于可信网关后;--transport http 是经过身份验证的选项。每个版本都会使用 scout 验证两种协议时期下的可流式传输 HTTP,并使用 MCP SDK 客户端验证 SSE;请参阅 ADR 0001。

{
  "mcpServers": {
    "camt053": { "url": "http://127.0.0.1:8000/mcp" }
  }
}

工具

所有工具都委托给共享的 camt053.services 层,因此其行为与 CLI 和 REST API 完全一致。

  • list_message_types — 列出支持的 3 种 camt.05x 消息类型
  • list_return_reasons — 列出 ISO 外部退汇原因代码
  • get_required_fields — 指定消息类型所需的输入字段
  • get_input_schema — 指定消息类型的完整输入 JSON Schema
  • validate_records — 根据消息类型验证扁平记录
  • validate_identifier — 验证 IBAN、BIC 或 LEI
  • validate_statement — 根据其 XSD 验证对账单并检测其类型
  • convert_mt940_to_camt053 — MT940 → camt.053 迁移:将旧版 SWIFT MT940 对账单文本转换为 camt.053 结构
  • convert_mt942 — MT942 → camt.052 迁移:将旧版 SWIFT MT942 中间交易报告文本转换为 camt.052 结构
  • check_cbpr_readiness — 标记对账单中 CBPR+ 于 2026 年 11 月截止时存在的问题
  • get_cbpr_cutover_date — 返回 CBPR+ 官方切换日期(2026-11-16)
  • cite_rulebook — 引用精选的 SEPA / CBPR+ / HVPS+ 规则手册条款
  • list_rulebook_clauses — 列出可用的规则手册引文(可选择筛选)
  • search_rulebook_vector — 当你不知道条款 ID 时,通过自然语言相似度查找规则手册条款(需要 [vector] extra)
  • export_journal — 将对账单分录导出为 Xero BankTransactions 或 QBO JournalEntry 负载
  • list_export_journal_targets — 列出 export_journal 支持的会计平台目标
  • classify_entry — 通过 MCP Sampling 对对账单分录进行分类(使用客户端的大模型)
  • list_classify_entry_categories — 列出 classify_entry 使用的默认类别
  • get_tenant_context — 报告调用的多租户范围(HTTP 传输中的 Camt053-Account 标头;stdio 传输时为 None)
  • parse_statement — 将传入的 camt.05x 对账单解析为数据
  • detect_statement_anomalies — 检查对账单中的重复参考信息、异常费用扣款和频率激增(使用确定性规则,不使用模型或网络)
  • list_entries — 列出所有对账单中的每条分录(分页)
  • filter_entries — 返回带有退汇原因代码的分录(分页)
  • generate_reversal — 生成经过验证的冲正分录 XML 文档
分页

list_entries 和 filter_entries 接受可选的 offset(默认值为 0)和 limit(默认值为 None)参数。省略 limit 时,它们会像以前一样返回 完整列表。指定 limit 时,它们会改为返回分页封装:

{"total": 42, "offset": 10, "limit": 5, "entries": [/* ... */]}

负数 offset 或 limit 会返回 {"error": ...} 负载,与 服务端其余部分的错误约定一致。

提示词

提示词用途
reversal_preview引导 Agent 安全地执行冲正工作流,并在生成前进行确认
reconcile_against_pain001按 EndToEndId 将已入账的对账单分录与源 pain.001 批次匹配,并显示异常项
find_duplicate_entries标记对账单中完全重复和疑似重复的分录,并提供置信度和后续操作提示
match_to_invoice_set将入账贷项与应收账款发票台账匹配(精确匹配、汇款信息匹配、部分匹配 / 多发票分层)

reversal_preview 接受可选的 reason_code(默认值为 "AC04"),并返回一个四步消息模板:解析对账单、使用 filter_entries 预览匹配的分录、向操作员确认,然后调用 generate_reversal。其余三个提示词不接受参数,并返回由用户提示词和助手引导说明组成的双消息模板,Agent 可以原样重放。

资源

资源为 Agent 提供只读参考上下文,可直接加载,无需调用工具。每个资源都会返回一个 JSON 负载。

资源 URI内容
camt053://return-reasonsISO 外部退回原因目录 — 包含 {"code", "name"} 的列表
camt053://message-types支持的 camt.05x 消息类型 — 包含 {"message_type", "name"} 的列表
camt053://session/{session_id}/bank/{bic}按(会话、银行)模板生成的上下文:解析后的 BIC 国家/类型、建议的 SEPA / CBPR+ / HVPS+ 规则手册条款、2026 年 11 月的切换日期

两者都基于共享的 camt053.services 层,因此会与对应的 list_return_reasons / list_message_types 工具保持同步。发生错误时,它们会返回序列化的 {"error": ...} 负载。

规则手册搜索

cite_rulebook 需要 scheme、version 和 clause ID。当你知道规则涉及什么,但不知道它叫什么时,search_rulebook_vector 可以帮你找到答案:

search_rulebook_vector("structured address requirement", top_k=3)
{
  "query": "structured address requirement",
  "returned": 3,
  "results": [
    {
      "scheme": "HVPS+",
      "version": "2026",
      "clause": "structured-address-alignment",
      "title": "HVPS+ aligns with CBPR+ structured-address rule",
      "score": 0.702729,
      // ...
    }
  ]
}

获取排名最高的 scheme/version/clause,并传给 cite_rulebook,以获取完整引用。

**它不是神经嵌入模型。**检索采用确定性的词汇向量余弦搜索:每个条款和查询都会被哈希为固定的 256 维词频向量 — 包含完整单词以及 3 元和 4 元字符 n-gram,因此 address 可以匹配 addresses,无需词干提取器 — 使用 BLAKE2b 分桶,而不是 Python 的加盐 hash,并通过 sqlite-vec 排名。这会带来以下三个值得注意的结果:

  • 同一个查询在任何进程和每次 CI 运行中,始终返回相同的排名。
  • 不会下载任何内容,查询时也不会发起网络调用。
  • 它匹配措辞,而非含义。如果查询与某个条款没有共同词汇,无论概念多么相关,都无法找到该条款。

索引仅涵盖经过整理的摘要 — 与 cite_rulebook 使用的摘要相同。不会存储或搜索外部、受版权保护或需要身份验证才能访问的规则手册文本。

安装

sqlite-vec 随可选额外依赖提供,并采用延迟导入,因此基础安装不会引入任何依赖:

python -m pip install 'camt053-mcp[vector]'

如果没有安装该依赖,工具会返回一条注明额外依赖名称的普通错误负载,而不是引发异常。因此,在基础安装上调用该工具的客户端会收到可用的提示,而非堆栈跟踪。

还有一项容易忽略的要求:你的 Python 必须在构建时启用可加载的 SQLite 扩展支持。python.org 的 macOS 安装程序和一些发行版软件包默认禁用了此功能;在这种情况下,即使 sqlite-vec 安装成功,仍然无法加载。工具会检测到这一点并说明原因,同时指出需要查找的构建标志(--enable-loadable-sqlite-extensions)。Homebrew、uv 和 pyenv 构建通常已启用此功能。

如需了解检索设计及其限制,请参阅 docs/vector-search.md。

使用工具

你可以直接通过 FastMCP 实例在进程内调用工具 — 无需使用传输层。这与 Agent 通过 stdio 接收工具的方式一致。此代码片段的可运行版本位于 examples/mcp_tools.py。

import asyncio

from camt053_mcp.server import server

# A complete camt.053 statement with one entry returned AC04 (Closed Account).
statement_xml = """<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.14">
  <BkToCstmrStmt>
    <GrpHdr><MsgId>STMT-MSG-0001</MsgId><CreDtTm>2026-06-15T08:00:00</CreDtTm></GrpHdr>
    <Stmt>
      <Id>STMT-0001</Id><CreDtTm>2026-06-15T08:00:00</CreDtTm>
      <Acct><Id><IBAN>GB29NWBK60161331926819</IBAN></Id><Ccy>EUR</Ccy></Acct>
      <Bal><Tp><CdOrPrtry><Cd>CLBD</Cd></CdOrPrtry></Tp>
        <Amt Ccy="EUR">10000.00</Amt><CdtDbtInd>CRDT</CdtDbtInd>
        <Dt><Dt>2026-06-15</Dt></Dt></Bal>
      <Ntry>
        <NtryRef>NTRY-0001</NtryRef>
        <Amt Ccy="EUR">1500.00</Amt><CdtDbtInd>CRDT</CdtDbtInd>
        <Sts><Cd>BOOK</Cd></Sts>
        <NtryDtls><TxDtls>
          <RtrInf><Rsn><Cd>AC04</Cd></Rsn></RtrInf>
        </TxDtls></NtryDtls>
      </Ntry>
    </Stmt>
  </BkToCstmrStmt>
</Document>"""


async def main() -> None:
    async def call(name, args):
        result = await server.call_tool(name, args)
        # mcp 2.x returns a CallToolResult (read .content); 1.x
        # returns the content list, or a (content, meta) tuple.
        content = getattr(result, "content", None)
        if content is None:
            # mcp 2.x returns a CallToolResult (read .content); 1.x
            # returns the content list, or a (content, meta) tuple.
            content = getattr(result, "content", None)
            if content is None:
                content = result[0] if isinstance(result, tuple) else result
        return content[0].text if content else ""

    # Validate an identifier.
    print(await call("validate_identifier",
                     {"kind": "bic", "value": "NWBKGB2LXXX"}))
    # -> {"kind": "bic", "value": "NWBKGB2LXXX", "valid": true}

    # Page through the matching entries (paginated envelope).
    print(await call("filter_entries",
                     {"xml": statement_xml, "reason_code": "AC04",
                      "offset": 0, "limit": 5}))
    # -> {"total": 1, "offset": 0, "limit": 5, "entries": [...]}

    # Generate a validated reversing-entry document for the AC04 entries.
    xml = await call("generate_reversal",
                     {"xml": statement_xml, "reason_code": "AC04"})
    print(xml[:46])  # -> <?xml version="1.0" encoding="UTF-8"?> ...


asyncio.run(main())

直接运行:

python examples/mcp_tools.py

camt053 套件

camt053-mcp 是一组围绕 camt053 库构建、可独立安装的软件包之一——根据你的技术栈选择所需的软件包:

软件包角色
camt053核心库 + CLI + FastAPI REST API
camt053-mcpModel Context Protocol 服务(此软件包)
camt053-lspLanguage Server Protocol 服务(适用于编辑器)
camt053-writer-xlsx用于已解析对账单的 Excel .xlsx 写入器
camt053-loader-mt940SWIFT MT940 → camt.053 加载器

这里的每个工具都是对 camt053.services 的轻量类型化封装——CLI、REST API 和 LSP 使用的也是同一个门面——因此四种接口的行为完全一致。

何时不应使用 camt053-mcp

  • 你没有 MCP 客户端。 此服务只有搭配支持 MCP 的宿主(Claude Desktop、IDE 插件、Agent 框架)才有意义。对于脚本或 CI 场景,camt053 CLI 和 REST API 无需 stdio 协议开销即可实现相同功能。
  • 你需要在没有 MCP 客户端的情况下将其作为长期运行的守护进程。 此服务确实可以通过 streamable HTTP 传输(--transport=http)持久运行,但每个使用方仍必须使用 MCP JSON-RPC。若需要普通的 REST 语义,请使用 camt053 FastAPI 服务。
  • 你需要流式响应。 工具调用返回完整值,而不是数据流。较大的对账单通过现有的 list_entries(xml, offset, limit) 信封分页,而不是拆分为多个响应块。
  • 你需要由服务代为处理面向每位用户的 OAuth 流程。 HTTP 传输会对调用方进行身份验证(使用 RFC 9728 元数据的 OAuth 2.1 资源服务器,或开发模式下的静态 bearer token),并通过 Camt053-Account 租户标头限定请求范围,但它不运行授权服务器:请自备 IdP。
  • 你需要生成出站 pain.001 支付文件。 此功能不在范围内;请使用 pain001-mcp。

开发

camt053-mcp 使用 Poetry 和 mise。

git clone https://github.com/sebastienrousseau/camt053-mcp.git && cd camt053-mcp
mise install
poetry install
poetry shell

Makefile 负责协调质量门禁(与 CI 保持同步):

make check        # all gates (REQUIRED before commit)
make test         # pytest
make lint         # ruff + black
make type-check   # mypy --strict

安全

camt053-mcp 是一个轻量封装——每个工具都会委托给 camt053.services,纵深防御措施(defusedxml + xml_guard 字节数上限 + DOCTYPE / ENTITY 预检)都在其中。工具会捕获 (ValueError, Camt053Error),并按照套件约定返回 {"error": ...} 信封;它们绝不会将原始异常传播给 MCP 客户端。报告流程、支持的版本和完整的供应链安全状况见 SECURITY.md。漏洞请通过 GitHub Private Vulnerability Reporting 报告,不要在公开议题中披露。

文档

相关 MCP 服务

属于 ISO 20022 MCP 套件——面向银行和金融服务 AI Agent 的开源、采用 Apache-2.0 许可的 MCP 服务:

服务用途
pain001-mcp生成并验证 ISO 20022 pain.001 付款文件(v03–v12、pain.008、SEPA),并检查规则手册
pacs008-mcp生成、验证、解析并进行方案检查 ISO 20022 pacs.008 金融机构间贷记转账,以及 2026 年 11 月地址 lint 检查
acmt001-mcp生成并验证 ISO 20022 acmt 账户管理消息
noyalib-mcp无损解析、格式化并验证 YAML 1.2(Rust,100% 符合规范)

MCP 注册表

mcp-name: io.github.sebastienrousseau/camt053-mcp


许可证

采用 Apache License, Version 2.0 或 MIT License 双重许可。提交以供纳入的任何贡献均须按上述许可授权,且不得附加其他条款。

贡献

欢迎贡献——请参阅贡献指南。感谢所有贡献者。

致谢

基于 camt053 ISO 20022 银行对账单库和 Model Context Protocol Python SDK 构建。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。