Iso20022 Bank Profile Mcp

io.github.sebastienrousseau由 GitHub 帳號 sebastienrousseau 發布v0.0.6更新於 Oct 24, 2026

Local MCP server that serves and validates bank-specific ISO 20022 clearing profiles.

已驗證STDIO僅桌面金融開發者工具

概覽

AI 產生的概覽

本機 MCP 伺服器,用來提供、依規則檢查並驗證銀行專屬的 ISO 20022 清算設定檔與規則包。

可以做什麼
列出可用的清算設定檔及其市場慣例、層級與規則數量,並完整取得某個設定檔(含規則內容)。以指定設定檔評估原始 ISO 20022 報文,回傳合規性檢查結果。驗證以原始 JSON 提供的銀行自訂設定檔或規則包定義,確認其結構與規則動詞是否有效。
適用情境
當助理需要依高於 XSD 驗證的清算市場慣例規則檢查支付報文(例如 CBPR+、SEPA Instant、FedNow 設定檔),或在採用前審查候選規則包時使用。它不負責 XSD 結構驗證、報文產生或端到端就緒評分,這些屬於同系列其他伺服器。
執行需求
本機 Python 套件(需 Python 3.10+ 與 pip,或使用 uvx)。預設透過 stdio 執行;可選用 streamable HTTP、SSE 或帶驗證的 HTTP 傳輸。帶驗證的 HTTP 傳輸需要 OAuth 2.1 設定(ISO20022_BANK_PROFILE_OAUTH_ISSUER 與 ISO20022_BANK_PROFILE_OAUTH_AUDIENCE,可選 JWKS 位址與 scope),或使用 ISO20022_BANK_PROFILE_TOKEN 中的靜態權杖。進階設定檔需透過 OAuth scope 或 ISO20022_BANK_PROFILE_ENTITLEMENTS 取得授權。
安裝前請注意
streamable HTTP 與 SSE 傳輸本身不帶驗證,應只綁定回環位址或置於可信任的閘道之後。靜態開發模式權杖是單一共用密鑰,沒有到期時間與 scope,僅適用於本機開發。進階規則包與具狀態的版本歷史為付費附加項目;內建的進階範例設定檔僅用於示範授權控管。工具皆為唯讀,伺服器不開放網路通訊埠。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Iso20022 Bank Profile Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

iso20022-bank-profile-mcp: The ISO 20022 Bank Clearing-Profile Server

[PyPI Version] [Python Versions] [License] [Tests] [Quality] [OpenSSF Scorecard] [Documentation] [Glama MCP server score]

[iso20022-bank-profile-mcp Demo]

A fully local, closed-world Model Context Protocol server that manages, validates, and serves bank-specific ISO 20022 clearing profiles / rule packs — the market-practice rules that sit beyond structural XSD validation. It is a foundational member of the ISO 20022 MCP Suite and a sibling of iso20022-readiness-suite-mcp, whose readiness gateway can consume the profiles this server serves.

The November 2026 milestones. As the major schemes (CBPR+, HVPS+, T2, FedNow) tighten their ISO 20022 requirements — structured postal addresses chief among them — a payment that was fine yesterday can be rejected tomorrow. iso20022-bank-profile-mcp turns those scheme rules into versioned, agent-callable clearing profiles: list_profiles and get_profile serve them, lint_payload evaluates a payload against one, and validate_profile_definition vets a bank-supplied rule pack. v0.0.6, 4 read-only tools over stdio (the default), streamable HTTP, SSE or authenticated OAuth 2.1 HTTP, premium rule-pack entitlement gating, Python 3.10+.

Contents

Overview

The Model Context Protocol (MCP) is an open standard that lets AI agents and assistants discover and call external tools in a uniform way. iso20022-bank-profile-mcp owns the market-practice profile layer of the ISO 20022 MCP Suite: the scheme-specific and bank-specific rules a payment must satisfy to clear, which live above the XSD and vary by clearing system.

A clearing profile is pure data — a profile_id, its market_practice, the messages it supports, and a list of declarative custom_rules. The server ships open baseline profiles (Generic, CBPR+, SEPA_Instant, FedNow) and exposes four read-only tools to discover them, fetch them in full, lint a payload against one, and validate a candidate rule pack.

It is a fully local, closed-world server: no network surface, no sub-servers, no meta-client. Every tool computes from the bundled profile data and returns typed, JSON-serialisable output; on any failure — a bad input, an unparseable payload, an unknown profile — it returns an {"error": ...} payload rather than raising into the client transport. XML payloads are parsed with defusedxml only (no XXE / billion-laughs).

mermaid
flowchart TD    A["MCP client<br/>(Claude Desktop, IDE, agent)"] -->|stdio, streamable HTTP, SSE| B["iso20022-bank-profile-mcp<br/>(clearing-profile server)"]    B --> C["ProfileEngine<br/>(bundled JSON + register() seam)"]    C --> D["Generic"]    C --> E["CBPR+"]    C --> F["SEPA_Instant"]    C --> G["FedNow"]    H["iso20022-readiness-suite-mcp<br/>(readiness gateway)"] -.consumes profiles.-> B

The ISO 20022 MCP Suite

iso20022-bank-profile-mcp is one of a set of coordinated, vendor-neutral MCP servers for the ISO 20022 migration. Dependency ranges are kept aligned across the suite, so the servers co-install cleanly in a single Python environment.

ServerScopeInstall
iso20022-readiness-suite-mcpOrchestration gateway: readiness scoring, remediation, clearing-profile linting, and bank-response simulation over the foundational serverspip install iso20022-readiness-suite-mcp
iso20022-evidence-pack-mcpCompiles readiness findings, remediation diffs and simulated responses into a sealed, Ed25519-signable audit evidence packpip install iso20022-evidence-pack-mcp
structured-address-fix-mcpISO 20022 postal-address classification, assessment, and remediation for the Nov 2026 structured-address cliffpip install structured-address-fix-mcp
iso20022-mcpUnified gateway meta-tools (search / describe / validate / generate / parse) across the ISO 20022 message cataloguepip install iso20022-mcp
camt053-mcpISO 20022 camt.05x bank statements: parse, validate, filter, reverse; MT94x migration; CBPR+ readinesspip install camt053-mcp
pain001-mcpGenerate & validate ISO 20022 pain.001 payment-initiation files (v03–v12, pain.008, SEPA) with rulebook checkspip install pain001-mcp
reconcile-mcpReconcile ISO 20022 payments and statements; match initiations to their bank-side outcomespip install reconcile-mcp
bankstatementparser-mcpParse bank statements (MT940/MT942 and camt) into structured, agent-friendly datapip install bankstatementparser-mcp

Where the foundational servers each do one message job well and the readiness gateway composes them, this server owns the clearing profiles: it manages, validates, and serves the market-practice rule packs the rest of the suite lints against.

Install

iso20022-bank-profile-mcp runs on macOS, Linux, and Windows and requires Python 3.10+ and pip. It pulls in the MCP SDK, pydantic, and defusedxml automatically — all published on PyPI.

sh
python -m pip install iso20022-bank-profile-mcp

Or run it without installing, straight from PyPI, with uvx:

sh
uvx iso20022-bank-profile-mcp
Using an isolated virtual environment (recommended)
sh
python -m venv venvsource venv/bin/activate        # macOS/Linuxvenv\Scripts\activate           # Windowspython -m pip install -U iso20022-bank-profile-mcp

Quick Start

For the 10-minute install → MCP client config → first conversation tutorial, see docs/quickstart.md.

Launch the server over stdio (the default transport):

sh
iso20022-bank-profile-mcp

Register it with any MCP client (e.g. Claude Desktop) by adding it to the client's configuration:

json
{  "mcpServers": {    "iso20022-bank-profile": { "command": "iso20022-bank-profile-mcp" }  }}

The command speaks MCP on stdin/stdout — it is meant to be launched by an MCP client, not used interactively. The agent can then call the tools below.

You can also invoke the tools in-process — without a transport — straight through the FastMCP instance. This mirrors what an agent receives over stdio; everything is local, so no other servers are needed:

python
import asyncio
from iso20022_bank_profile_mcp import server

async def main() -> None:    async def call(name, args):        result = await server.server.call_tool(name, args)        # mcp 2.x returns a CallToolResult (use .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 ""
    # Which clearing profiles can I target?    print(await call("list_profiles", {}))    # -> {"profile_id": "...", "market_practice": "...", "rule_count": ...}, ...
    # Lint a payload against a profile: a CBPR+ address missing its town.    payload = "<Document><PstlAdr><Ctry>DE</Ctry></PstlAdr></Document>"    print(await call("lint_payload",                     {"payload_content": payload, "profile_id": "CBPR+"}))    # -> {"profile_id": "CBPR+", "is_compliant": false,    #     "findings": [{"code": "CBPR_MISSING_TOWN", "locator": "TwnNm", ...}]}

asyncio.run(main())

Transports

One command line, four transports:

CommandTransportEndpointProtocol revisions
iso20022-bank-profile-mcpstdiothe client spawns the process2026-07-28, 2025-11-25
iso20022-bank-profile-mcp --transport streamable-httpStreamable HTTPhttp://127.0.0.1:8000/mcp2026-07-28 (stateless, server/discover) and 2025-11-25 (initialize, Mcp-Session-Id) on the same endpoint; responses stream as server-sent events, GET opens the server-to-client stream
iso20022-bank-profile-mcp --transport sseHTTP+SSE (2024-11-05)http://127.0.0.1:8000/sse and /messages/for clients that still expect the older transport
iso20022-bank-profile-mcp --transport httpAuthenticated streamable HTTP (see http/transport.py)http://127.0.0.1:8080/mcp (--bind)OAuth 2.1 resource server or a static dev-mode token, X-MCP-Tenant scoping, scope-based premium entitlement

--host and --port change the bind address of streamable-http and sse (defaults 127.0.0.1 and 8000). Those two carry no authentication of their own: bind loopback, or put the server behind a gateway you trust before binding a routable address; --transport http is the authenticated option. Every release is verified over streamable HTTP with scout in both protocol eras and over SSE with the MCP SDK client; see ADR 0001.

json
{  "mcpServers": {    "iso20022-bank-profile": { "url": "http://127.0.0.1:8000/mcp" }  }}

Tools

All tools return JSON-serialisable data; on a domain, validation, or value error they return an {"error": ...} payload rather than raising. Every tool is a pure, local, read-only, idempotent, closed-world lookup — no network, no sub-servers.

  • list_profiles — List the available clearing profiles as lightweight summaries (profile_id, market_practice, tier, entitled, supported_messages, rule_count). Use it to discover the profile_id values the other tools accept and see which ones the current caller is entitled to.
  • get_profile — Return one clearing profile in full, including its rule bodies. On a premium profile the caller must be entitled, otherwise it returns a BP_NOT_ENTITLED error (see Open-core vs premium).
  • lint_payload — Evaluate a raw ISO 20022 payload against a clearing profile and return the findings (a compliant payload yields none). Like get_profile, a premium profile requires an entitlement or it returns BP_NOT_ENTITLED.
  • validate_profile_definition — Validate a bank-supplied profile / rule-pack definition supplied as raw JSON, confirming its shape and that every rule uses a known assertion verb.

HTTP transport & authentication

stdio is the default and needs no authentication — one process per operator, launched by the client, no network surface. The suite's streamable-http and sse transports above are unauthenticated too. For shared, multi-tenant deployments the server also speaks an authenticated streamable-HTTP transport:

sh
iso20022-bank-profile-mcp --transport=http --bind=127.0.0.1:8080

--bind defaults to 127.0.0.1:8080 (loopback-only), so exposing the server beyond the host is an explicit opt-in (e.g. --bind=0.0.0.0:8080). The HTTP transport refuses to start without authentication — it never serves an unauthenticated endpoint. Two auth modes apply, strongest first:

  • OAuth 2.1 resource server (RFC 9728) — set ISO20022_BANK_PROFILE_OAUTH_ISSUER and ISO20022_BANK_PROFILE_OAUTH_AUDIENCE (both required), with optional ISO20022_BANK_PROFILE_OAUTH_JWKS_URL (defaults to <issuer>/.well-known/jwks.json) and ISO20022_BANK_PROFILE_OAUTH_SCOPES. Every request must carry Authorization: Bearer <jwt>; the token is validated against the JWKS and its iss / aud / exp / nbf / required scopes. Failures are rejected 401 / 403 with an RFC 9728 WWW-Authenticate challenge, and protected-resource metadata is served at /.well-known/oauth-protected-resource. This server validates tokens from your existing authorization server (Okta, Auth0, Entra ID, …); running the authorization server is out of scope.

    sh
    ISO20022_BANK_PROFILE_OAUTH_ISSUER=https://auth.example.com \ISO20022_BANK_PROFILE_OAUTH_AUDIENCE=https://mcp.example.com/mcp \  iso20022-bank-profile-mcp --transport=http --bind=0.0.0.0:8080
  • Static dev-mode token — set ISO20022_BANK_PROFILE_TOKEN to a shared secret; every request must then send Authorization: Bearer <secret>. This is a single shared secret with no expiry and no scopes — intended for local development, not production.

An optional X-MCP-Tenant request header is forwarded into the tool-visible request context for multi-tenant scoping. See docs/transport.md for the full setup.

How it fits the suite

This server is the profile authority for the ISO 20022 MCP Suite. The sibling iso20022-readiness-suite-mcp gateway scores and remediates payments against clearing profiles; those profiles are exactly what this server manages, validates, and serves. Aligning on one profile source keeps the readiness gateway and any bank's own tooling evaluating a payment against the same market-practice rules.

The profile catalogue is extensible at the seam the whole suite shares. The ProfileEngine loads the open baseline from bundled JSON with ProfileEngine.from_bundled(), and exposes ProfileEngine.register(profile) to add (or replace) a profile at runtime. A premium, bank-specific rule pack is the same shape as a bundled profile — a ClearingProfile with a profile_id, a market_practice, its supported_messages, and a list of custom_rules — so a deployment that embeds this server can register its licensed packs and serve them alongside the open baseline without changing the tool surface. See docs/profiles.md for the rule mini-language and the register() seam.

Open-core vs premium

The server is open core: the baseline scheme profiles and the profile engine are open source and always available. Higher-tier, institution-specific capabilities are commercial add-ons that plug into the same profile-engine seam (the engine already exposes a register() hook for runtime-loaded rule packs).

CapabilityTier
Profile engine + rule mini-languageOpen Source
Baseline scheme profiles (Generic, CBPR+, SEPA_Instant, FedNow)Open Source
Entitlement gate for premium profiles (tier, scopes, allowlist)Open Source
Bank-specific / proprietary scheme rule packsPaid
Stateful profile-version history & audit logsPaid

Nothing in the open-source tier is time-limited or feature-gated.

How the entitlement gate works

Every clearing profile carries a tier: "open" (the baseline profiles — unrestricted and always accessible) or "premium" (a licensed rule pack). A bundled premium sample profile, ACME_Premium, ships so you can exercise the gate. list_profiles reports each profile's tier and a per-caller entitled boolean; get_profile and lint_payload on a premium profile return a BP_NOT_ENTITLED error unless the caller is entitled.

Entitlement is granted by either of two independent sources (ORed):

  • OAuth scope (HTTP transport) — a token bearing the profile:premium scope is entitled to every premium profile; a token bearing profile:<profile_id> is entitled to just that one.
  • Environment allowlist (stdio / dev) — ISO20022_BANK_PROFILE_ENTITLEMENTS lists the premium profile_id values (comma- or space-separated) the operator is licensed for; * grants all of them.
sh
# stdio: license the ACME_Premium sample pack for this processISO20022_BANK_PROFILE_ENTITLEMENTS=ACME_Premium iso20022-bank-profile-mcp

The gate ships in this release; the premium rule packs themselves (and stateful version history / audit logs) remain a paid, out-of-tree concern. See docs/profiles.md for the full entitlement model.

When not to use iso20022-bank-profile-mcp

  • You have no MCP client. This server only makes sense paired with an MCP-aware host (Claude Desktop, the IDE plugins, an agent framework).
  • You need structural XSD validation or message generation. Those live in the foundational suite servers (iso20022-mcp, camt053-mcp, pain001-mcp). This server evaluates market-practice rules above the XSD; it does not parse, generate, or structurally validate messages.
  • You want an end-to-end readiness score and remediation. That is the job of iso20022-readiness-suite-mcp, which consumes these profiles. Use it if you want scoring, remediation, and bank-response simulation composed together.
  • You need a long-lived network service on a routable address without auth. stdio is the default (one process per operator, no network surface); --transport streamable-http and --transport sse bind loopback and carry no authentication, so a routable deployment belongs behind a gateway you trust; the --transport http option exists for shared, multi-tenant deployments and always requires authentication (OAuth 2.1 or a static dev-mode token) — it will not serve an unauthenticated endpoint.
  • You need streaming responses. Tool calls return whole values, not streams.

Development

iso20022-bank-profile-mcp uses Poetry and mise.

bash
git clone https://github.com/sebastienrousseau/iso20022-bank-profile-mcp.git && cd iso20022-bank-profile-mcpmise installpoetry installpoetry shell

Note: the server is fully local and closed-world, so the test suite runs with nothing else installed. See CONTRIBUTING.md.

A Makefile orchestrates the quality gates (kept in lockstep with CI):

bash
make check        # all gates (REQUIRED before commit): lint + type-check + testmake test         # pytest (100% line + branch coverage)make lint         # ruff + blackmake type-check   # mypy --strictmake security     # bandit

Security

iso20022-bank-profile-mcp returns errors as data — every tool catches the documented domain, validation, and value errors and returns an {"error": ...} envelope; it never propagates raw exceptions to the MCP client. Payloads reached through the clearing-profile engine are parsed with defusedxml only (no XXE / billion-laughs), and the server opens no network sockets. Reporting practice, supported versions, the attack surface, and the full supply-chain posture (SLSA L3 provenance, PEP 740 attestations, SBOMs, and the NIST SP 800-218 SSDF practice mapping) are documented in SECURITY.md. Vulnerabilities go via GitHub Private Vulnerability Reporting, not public issues.

Documentation


MCP Registry

mcp-name: io.github.sebastienrousseau/iso20022-bank-profile-mcp


License

Licensed under the Apache License, Version 2.0. Any contribution submitted for inclusion shall be licensed as above, without additional terms.

Contributing

Contributions are welcome — see the contributing instructions. Thanks to all contributors.

Acknowledgements

Built alongside the foundational servers of the ISO 20022 MCP Suite and the Model Context Protocol Python SDK.

來源:README.md,提交 d0a5c58

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

2
  1. v0.0.6最新Oct 4, 2026
  2. v0.0.5Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分