{
  "markdown": "# iso20022-evidence-pack-mcp: Sealed ISO 20022 Audit Evidence Packs\n\n[![PyPI Version][pypi-badge]][07]\n[![Python Versions][python-versions-badge]][07]\n[![License][license-badge]][01]\n[![Tests][tests-badge]][tests-url]\n[![Quality][quality-badge]][quality-url]\n[![OpenSSF Scorecard][scorecard-badge]][scorecard-url]\n[![Documentation][docs-badge]][docs-url]\n\n**A fully local, closed-world [Model Context Protocol (MCP)][mcp] server** that\ncompiles ISO 20022 readiness findings, remediation diffs, and simulated bank\nresponses into one **sealed, exportable audit evidence pack**. It is the audit\nand certification sibling of\n[`iso20022-readiness-suite-mcp`](https://github.com/sebastienrousseau/iso20022-readiness-suite-mcp)\n(which produces those findings) and\n[`iso20022-bank-profile-mcp`](https://github.com/sebastienrousseau/iso20022-bank-profile-mcp)\nin the [ISO 20022 MCP Suite](#the-iso-20022-mcp-suite).\n\n> **Tamper-evident by construction.** The pack's seal is a deterministic\n> SHA-256 digest over the pack's canonical JSON (the `digest` field excluded).\n> Re-sealing identical content yields the identical digest, and changing any\n> field breaks verification — so an auditor can detect undetected change. There\n> is **no network surface, no sub-servers, and no XML**: every tool is a pure,\n> local, deterministic transform over the JSON structures it is handed.\n> **v0.0.2**, stdio transport (plus an optional authenticated HTTP transport),\n> 6 tools including Ed25519 pack signing, Python 3.10+.\n\n## Contents\n\n- [Overview](#overview)\n- [The ISO 20022 MCP Suite](#the-iso-20022-mcp-suite)\n- [Install](#install)\n- [Quick Start](#quick-start)\n- [Tools](#tools)\n- [HTTP transport & authentication](#http-transport--authentication)\n- [Signing evidence packs](#signing-evidence-packs)\n- [Examples](#examples)\n- [How it fits the suite](#how-it-fits-the-suite)\n- [Open-core vs premium](#open-core-vs-premium)\n- [Seal vs signature](#seal-vs-signature)\n- [When not to use iso20022-evidence-pack-mcp](#when-not-to-use-iso20022-evidence-pack-mcp)\n- [Development](#development)\n- [Security](#security)\n- [Documentation](#documentation)\n- [License](#license)\n- [Contributing](#contributing)\n- [Acknowledgements](#acknowledgements)\n\n## Overview\n\nThe [Model Context Protocol][mcp] (MCP) is an open standard that lets AI agents\nand assistants discover and call external tools in a uniform way.\n**iso20022-evidence-pack-mcp** is the audit/certification end of the ISO 20022\nMCP Suite: it takes the results that\n[`iso20022-readiness-suite-mcp`](https://github.com/sebastienrousseau/iso20022-readiness-suite-mcp)\nproduces — a readiness score with findings, an optional remediation result,\nand any simulated bank responses — and folds them into one strongly-typed,\ngraded, **sealed** evidence pack that can be exported, verified, and rendered\nas a compliance report.\n\nAn `EvidencePack` folds three loosely-typed inputs into one self-describing\ndocument: a **readiness result** (message type, validity, score, findings), an\noptional **remediation result** (fixes applied, residual findings), and any\n**simulated bank responses** (accepted / rejected statuses). The pack is graded\n(A / B / C / F from the readiness score) and sealed.\n\nThe seal is the point: it is a deterministic SHA-256 digest computed over the\npack's canonical JSON form (sorted keys, tight separators, with the `digest`\nfield itself excluded). Sealing the same content always yields the same value,\nwhich is exactly what makes the pack **tamper-evident** — recomputing the seal\nand comparing it to the one carried in the pack tells an auditor whether any\nbyte changed since it was sealed.\n\nEvery tool returns typed, JSON-serialisable data; on any failure — bad input,\nunparseable JSON, a shape that does not match the pack schema — it returns an\n`{\"error\": ...}` payload rather than raising into the client transport.\n\n- **Website:** <https://sebastienrousseau.github.io/iso20022-evidence-pack-mcp/>\n- **Source code:** <https://github.com/sebastienrousseau/iso20022-evidence-pack-mcp>\n- **Bug reports:** <https://github.com/sebastienrousseau/iso20022-evidence-pack-mcp/issues>\n\n```mermaid\nflowchart LR\n    A[\"iso20022-readiness-suite-mcp<br/>(readiness + remediation + simulation)\"] -->|JSON results| B[\"iso20022-evidence-pack-mcp<br/>(build + seal)\"]\n    B -->|sealed pack + digest| C[\"verify_seal<br/>(tamper check)\"]\n    B -->|markdown report| D[\"render_markdown<br/>(compliance report)\"]\n```\n\nThe server is fully local and closed-world: it holds no state, opens no\nsockets, and spawns no processes. You hand it JSON, it hands you a sealed pack.\n\n## The ISO 20022 MCP Suite\n\n`iso20022-evidence-pack-mcp` is the **audit and certification** server of a set\nof coordinated, vendor-neutral MCP servers for the ISO 20022 migration.\nDependency ranges are kept aligned across the suite, so the servers co-install\ncleanly in a single Python environment.\n\n| Server | Scope | Install |\n|------|------|------|\n| [`iso20022-readiness-suite-mcp`](https://github.com/sebastienrousseau/iso20022-readiness-suite-mcp) | Orchestration gateway: readiness scoring, remediation, clearing-profile linting, and bank-response simulation — the results this server folds in | `pip install iso20022-readiness-suite-mcp` |\n| [`iso20022-bank-profile-mcp`](https://github.com/sebastienrousseau/iso20022-bank-profile-mcp) | Manage and serve bank-specific clearing profiles / rule packs as a first-class server | `pip install iso20022-bank-profile-mcp` |\n| [`structured-address-fix-mcp`](https://github.com/sebastienrousseau/structured-address-fix-mcp) | ISO 20022 postal-address classification, assessment, and remediation for the Nov 2026 structured-address cliff | `pip install structured-address-fix-mcp` |\n| [`iso20022-mcp`](https://github.com/sebastienrousseau/iso20022-mcp) | Unified gateway meta-tools (`search` / `describe` / `validate` / `generate` / `parse`) across the ISO 20022 message catalogue | `pip install iso20022-mcp` |\n| [`camt053-mcp`](https://github.com/sebastienrousseau/camt053-mcp) | ISO 20022 camt.05x bank statements: parse, validate, filter, reverse; MT94x migration; CBPR+ readiness | `pip install camt053-mcp` |\n| [`pain001-mcp`](https://github.com/sebastienrousseau/pain001-mcp) | Generate & validate ISO 20022 pain.001 payment-initiation files (v03–v12, pain.008, SEPA) with rulebook checks | `pip install pain001-mcp` |\n| [`reconcile-mcp`](https://github.com/sebastienrousseau/reconcile-mcp) | Reconcile ISO 20022 payments and statements; match initiations to their bank-side outcomes | `pip install reconcile-mcp` |\n| [`bankstatementparser-mcp`](https://github.com/sebastienrousseau/bankstatementparser-mcp) | Parse bank statements (MT940/MT942 and camt) into structured, agent-friendly data | `pip install bankstatementparser-mcp` |\n\nWhere the readiness suite decides *whether a payment is ready and fixes it*,\n**this server certifies the outcome**: it turns those findings into a sealed,\nauditable artifact.\n\n## Install\n\n**iso20022-evidence-pack-mcp** runs on macOS, Linux, and Windows and requires\n**Python 3.10+** and **pip**. It pulls in only the MCP SDK and `pydantic`\nautomatically — there are no other runtime dependencies.\n\n```sh\npython -m pip install iso20022-evidence-pack-mcp\n```\n\n<details>\n<summary>Using an isolated virtual environment (recommended)</summary>\n\n```sh\npython -m venv venv\nsource venv/bin/activate        # macOS/Linux\nvenv\\Scripts\\activate           # Windows\npython -m pip install -U iso20022-evidence-pack-mcp\n```\n</details>\n\n## Quick Start\n\nFor the 10-minute install → MCP client config → first conversation tutorial,\nsee [`docs/quickstart.md`](docs/quickstart.md).\n\nLaunch the server over stdio (the FastMCP default transport):\n\n```sh\niso20022-evidence-pack-mcp\n```\n\nRegister it with any MCP client (e.g. Claude Desktop) by adding it to the\nclient's configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"iso20022-evidence-pack\": { \"command\": \"iso20022-evidence-pack-mcp\" }\n  }\n}\n```\n\nThe command speaks MCP on stdin/stdout — it is meant to be launched by an MCP\nclient, not used interactively. The agent can then call the tools below.\n\nYou can also invoke the tools in-process — without a transport — straight\nthrough the FastMCP instance. This mirrors what an agent receives over stdio.\nThe example below builds a sealed pack from a small readiness result, then\nshows the seal round-tripping (and breaking on tamper):\n\n```python\nimport asyncio\nimport json\n\nfrom iso20022_evidence_pack_mcp import server\n\n\nasync def main() -> None:\n    async def call(name, args):\n        result = await server.server.call_tool(name, args)\n        # mcp 2.x returns a CallToolResult (read .content); 1.x\n        # returns the content list, or a (content, meta) tuple.\n        content = getattr(result, \"content\", None)\n        if content is None:\n            content = result[0] if isinstance(result, tuple) else result\n        return content[0].text if content else \"\"\n\n    readiness = json.dumps({\n        \"message_type\": \"pacs.008.001.08\",\n        \"is_valid\": True,\n        \"readiness_score\": 92,\n        \"structural_errors\": [],\n        \"profile_findings\": [],\n    })\n\n    # Fold the readiness result into a graded, sealed evidence pack.\n    built = json.loads(await call(\"build_evidence_pack\",\n                                  {\"readiness_content\": readiness}))\n    pack, digest = built[\"pack\"], built[\"digest\"]\n    print(pack[\"grade\"], digest)      # -> A sha256:01388e3dfbea7d21...\n\n    # The seal round-trips: re-verifying the pack against its digest holds.\n    ok = json.loads(await call(\"verify_seal\", {\n        \"pack_content\": json.dumps(pack),\n        \"expected_digest\": digest,\n    }))\n    print(ok[\"verified\"])             # -> True\n\n    # Change any field and verification against the old digest fails.\n    tampered = {**pack, \"grade\": \"F\"}\n    bad = json.loads(await call(\"verify_seal\", {\n        \"pack_content\": json.dumps(tampered),\n        \"expected_digest\": digest,\n    }))\n    print(bad[\"verified\"])            # -> False\n\n\nasyncio.run(main())\n```\n\n## Tools\n\nAll tools are read-only, local, idempotent, and closed-world. They return\nJSON-serialisable data; on a validation or shape error they return an\n`{\"error\": ...}` payload rather than raising.\n\n- `build_evidence_pack` — Fold a readiness result (plus an optional remediation result, optional simulated bank responses, and free-form metadata) into a graded, sealed evidence pack; returns the pack, its digest, and a rendered markdown report.\n- `seal_pack` — Compute the deterministic SHA-256 seal for an evidence pack (raw JSON).\n- `verify_seal` — Recompute a pack's seal and compare it to an expected digest.\n- `render_markdown` — Render an evidence pack as a markdown compliance report.\n- `sign_pack` — Sign a pack's canonical bytes with the operator's Ed25519 key (configured via the environment); returns the base64 detached signature, the PEM public key, and a `key_id`. Fails with `EP_NO_SIGNING_KEY` when no key is configured. See [Signing evidence packs](#signing-evidence-packs).\n- `verify_pack_signature` — Verify a detached Ed25519 signature over a pack's canonical bytes against a public key passed as an argument; returns `verified` and `key_id`.\n\n## HTTP transport & authentication\n\nThe server speaks **stdio by default** — launched by a local MCP client, one\nprocess per operator, with no network surface and no authentication. For shared,\nmulti-tenant deployments, v0.0.2 adds an **optional streamable-HTTP transport**:\n\n```sh\niso20022-evidence-pack-mcp --transport=http --bind=127.0.0.1:8080\n```\n\n`--bind` defaults to loopback `127.0.0.1:8080`, so exposing the server (e.g.\n`--bind=0.0.0.0:8080`) is an explicit opt-in. **Starting the HTTP transport with\nno auth configured is refused** rather than serving an unauthenticated endpoint.\nTwo auth modes apply, strongest first:\n\n- **OAuth 2.1 resource server (RFC 9728)** — set the `ISO20022_EVIDENCE_PACK_OAUTH_*`\n  variables:\n\n  | Variable | Required | Meaning |\n  |---|---|---|\n  | `ISO20022_EVIDENCE_PACK_OAUTH_ISSUER` | yes | Authorization-server issuer; the JWT `iss` must match it exactly. |\n  | `ISO20022_EVIDENCE_PACK_OAUTH_AUDIENCE` | yes | This server's canonical resource URI (RFC 8707); the JWT `aud` must contain it. |\n  | `ISO20022_EVIDENCE_PACK_OAUTH_JWKS_URL` | no | JWKS document URL (defaults to `<issuer>/.well-known/jwks.json`). |\n  | `ISO20022_EVIDENCE_PACK_OAUTH_SCOPES` | no | Space-separated scopes every token must carry. |\n\n  Every request must present `Authorization: Bearer <jwt>`; the JWT is validated\n  against the JWKS (`iss` / `aud` / `exp` / `nbf` and any required scopes).\n  Protected-resource metadata is served at\n  `/.well-known/oauth-protected-resource`; failures are rejected `401` (or `403`\n  for insufficient scope) with a `WWW-Authenticate` challenge.\n- **Static dev-mode bearer token** — set `ISO20022_EVIDENCE_PACK_TOKEN` to a\n  non-empty secret. Every request must then send `Authorization: Bearer <secret>`.\n  This is a single shared secret with no expiry and no scopes; use OAuth 2.1 in\n  production.\n\nHTTP callers may also send an optional `X-MCP-Tenant` header, forwarded into a\ntool-visible request context for multi-tenant scoping. The HTTP transport pulls\nin extra dependencies (`pyjwt[crypto]`, `httpx`, `starlette`, `uvicorn`); the\ndefault stdio transport needs none of them. See\n[`docs/transport.md`](docs/transport.md) for the full reference.\n\n## Signing evidence packs\n\nA pack's **seal** proves *integrity* — the content has not changed. A\n**signature** proves *authenticity* — a specific key attests to that content.\nv0.0.2 adds Ed25519 signing via two tools:\n\n- `sign_pack` signs the pack's **canonical bytes** — the exact same\n  serialization the seal digests, with the `digest` field excluded. Because the\n  signature covers the sealed content, it **stays valid if only the `digest`\n  field changes** but **breaks if any sealed field changes**. It returns the\n  base64 detached signature, `algorithm` `\"ed25519\"`, the PEM public key, and a\n  `key_id` (`ed25519:<16 hex>`).\n- `verify_pack_signature` verifies a detached signature over a pack's canonical\n  bytes against a **public** key passed as a tool argument. Public keys are safe\n  to pass across the tool boundary; it returns `verified` and `key_id`.\n\nThe Ed25519 **private key is configured by the operator at launch**, via the\nenvironment:\n\n- `ISO20022_EVIDENCE_PACK_SIGNING_KEY` — the PEM private key inline, or\n- `ISO20022_EVIDENCE_PACK_SIGNING_KEY_FILE` — a path to a PEM key file.\n\n**The private key never crosses the MCP tool boundary.** The server never\ngenerates or persists private keys — key material is generated and custodied by\nthe operator, ideally in an HSM/KMS. With no key configured, `sign_pack` returns\n`EP_NO_SIGNING_KEY`; a malformed key or signature returns `EP_INVALID_INPUT`.\n\nSigning with an operator-supplied key is available today. **Keyless (sigstore)\nand PKI signing with a verification trust root remain [roadmap](ROADMAP.md)\nitems.**\n\n## Examples\n\nRunnable, self-contained examples live in [`examples/`](examples/). Each script\ndrives the public tools directly and needs no network or sub-server:\n\n```sh\npython examples/01_build_full_pack.py\n```\n\nSee [`examples/README.md`](examples/README.md) for the full catalogue, or run\nthem all with `make examples`.\n\n## How it fits the suite\n\nThe readiness suite and the evidence-pack server form a two-stage pipeline:\n\n1. **Readiness → results.**\n   [`iso20022-readiness-suite-mcp`](https://github.com/sebastienrousseau/iso20022-readiness-suite-mcp)\n   runs `run_readiness_check` (score + findings), `remediate_payload`\n   (automated fixes), and `simulate_bank_response` (a mocked pacs.002 outcome).\n   Each returns typed JSON.\n2. **Results → sealed pack.** You hand those JSON results to\n   `build_evidence_pack` here. It normalises them into a strongly-typed pack,\n   grades the readiness score (A/B/C/F), and seals the whole thing with a\n   deterministic SHA-256 digest. `verify_seal` later proves the pack is\n   unchanged; `render_markdown` turns it into a human-readable compliance\n   report.\n\nBecause the seal is deterministic, the same inputs always produce the same\ndigest — so a pack built today and re-sealed next quarter is provably the same\npack, or provably not. The two servers stay decoupled: the readiness suite\nknows nothing about sealing, and this server knows nothing about how the\nfindings were produced — it only folds and certifies them.\n\n## Open-core vs premium\n\nThe server is **open core**: building, sealing, verifying, and rendering packs\nare open source and always available. Higher-tier capabilities that turn a\ntamper-evident pack into an *authenticatable*, durably archived artifact are\ncommercial add-ons on the [roadmap](ROADMAP.md).\n\n| Capability | Tier |\n|---|---|\n| Pack assembly + grading (`build_evidence_pack`) | **Open Source** |\n| Deterministic SHA-256 sealing + verification (`seal_pack`, `verify_seal`) | **Open Source** |\n| Markdown compliance reports (`render_markdown`) | **Open Source** |\n| Ed25519 signing with an operator key (`sign_pack`, `verify_pack_signature`, authenticity) | **Open Source** |\n| Authenticated HTTP transport (OAuth 2.1 / RFC 9728, multi-tenant) | **Open Source** |\n| Keyless (sigstore) / PKI signing + verification trust root | **Paid / Roadmap** |\n| Long-term evidence storage + export formats (PDF/A, WORM archives) | **Paid / Roadmap** |\n| White-label reports + premium entitlement gating | **Paid / Roadmap** |\n\nNothing in the open-source tier is time-limited or feature-gated: the seal and\nthe reports are fully functional today.\n\n## Seal vs signature\n\n**The seal is an integrity digest, not a cryptographic signature.** It proves\nthat a pack has not changed since it was sealed (tamper-evidence); it does\n**not** prove *who* produced the pack (authenticity). Anyone who can build a\npack can also compute a valid seal for it, so a seal is a checksum, not a\nproof of origin.\n\n**Authenticity** — binding a pack to a specific key — is what\n[`sign_pack` / `verify_pack_signature`](#signing-evidence-packs) add on top of\nthe seal: an Ed25519 signature over the pack's canonical bytes attests that the\nholder of the operator's key produced that content. The seal and the signature\nare complementary: the seal is integrity, the signature is authenticity. Note\nthat a signature is only as trustworthy as your provenance for the public key —\n**keyless (sigstore) / PKI signing with a verification trust root remains a\nroadmap item** (see [`ROADMAP.md`](ROADMAP.md)). If you have configured no\nsigning key, treat a sealed-but-unsigned pack as integrity-checked only:\ntransmit and store it over channels you already trust, and do not represent it\nas a signed one. See [`SECURITY.md`](SECURITY.md) for the full threat-model\nnote.\n\n## When not to use iso20022-evidence-pack-mcp\n\n- **You have no MCP client.** This server only makes sense paired with an\n  MCP-aware host (Claude Desktop, the IDE plugins, an agent framework).\n- **You need the readiness findings themselves.** This server *certifies*\n  results; it does not produce them. Run\n  [`iso20022-readiness-suite-mcp`](https://github.com/sebastienrousseau/iso20022-readiness-suite-mcp)\n  to score, remediate, and simulate first, then fold its output in here.\n- **You need keyless / PKI signatures against a public trust root.** The seal\n  is a tamper-evidence digest, not a signature (see\n  [Seal vs signature](#seal-vs-signature)). Ed25519 signing with an\n  operator-supplied key ships in v0.0.2\n  ([Signing evidence packs](#signing-evidence-packs)), but keyless (sigstore) /\n  PKI signing with a verification trust root remains on the\n  [roadmap](ROADMAP.md).\n- **You want a zero-dependency network service.** The default transport is\n  **stdio** — one process per operator, launched by the client, no network\n  surface. An optional authenticated HTTP transport (OAuth 2.1 / RFC 9728) ships\n  in v0.0.2 ([HTTP transport & authentication](#http-transport--authentication))\n  for shared, multi-tenant deployments, but it pulls in extra dependencies and\n  must be explicitly enabled.\n- **You need streaming responses.** Tool calls return whole values, not\n  streams.\n\n## Development\n\n**iso20022-evidence-pack-mcp** uses [Poetry](https://python-poetry.org/) and\n[mise](https://mise.jdx.dev/).\n\n```bash\ngit clone https://github.com/sebastienrousseau/iso20022-evidence-pack-mcp.git && cd iso20022-evidence-pack-mcp\nmise install\npoetry install\npoetry shell\n```\n\nA `Makefile` orchestrates the quality gates (kept in lockstep with CI):\n\n```bash\nmake check        # all gates (REQUIRED before commit): lint + type-check + test\nmake test         # pytest (100% line + branch coverage)\nmake lint         # ruff + black\nmake type-check   # mypy --strict\nmake security     # bandit\nmake examples     # run every examples/*.py end to end\n```\n\n## Security\n\n`iso20022-evidence-pack-mcp` returns errors as data — every tool catches the\ndocumented validation and value errors and returns an `{\"error\": ...}`\nenvelope; it never propagates raw exceptions to the MCP client. Over the default\nstdio transport the server has no network surface, spawns no sub-processes, and\nparses no XML — its whole attacker-reachable surface is JSON parsed with the\nstandard library and validated against pydantic models. The optional HTTP\ntransport is off by default and, when enabled, refuses to start without OAuth 2.1\n(RFC 9728) or a static dev-mode bearer token (see\n[HTTP transport & authentication](#http-transport--authentication)). **The pack\nseal is a tamper-evidence digest, not a signature**; Ed25519 signing\n(`sign_pack`) adds authenticity on top (see\n[Seal vs signature](#seal-vs-signature)). Reporting\npractice, supported versions, the seal threat-model note, and the full\nsupply-chain posture (SLSA L3 provenance, PEP 740 attestations, SBOMs, and the\nNIST SP 800-218 SSDF practice mapping) are documented in\n[`SECURITY.md`](SECURITY.md). Vulnerabilities go via GitHub Private\nVulnerability Reporting, not public issues.\n\n## Documentation\n\n- [`README.md`](README.md) — this file\n- [`CHANGELOG.md`](CHANGELOG.md) — release notes\n- [`SECURITY.md`](SECURITY.md) — disclosure + supported versions + seal threat model\n- [`SUPPORT.md`](SUPPORT.md) — how to get help\n- [`ROADMAP.md`](ROADMAP.md) — what's next (keyless/PKI signing, long-term storage, premium entitlement)\n- [`MAINTAINERS.md`](MAINTAINERS.md) — who can merge\n- [`docs/quickstart.md`](docs/quickstart.md) — 10-minute install → first conversation\n- [`docs/evidence-packs.md`](docs/evidence-packs.md) — the pack schema, the SHA-256 sealing model, Ed25519 signing, and the readiness → evidence pipeline\n- [`docs/transport.md`](docs/transport.md) — the optional HTTP transport and OAuth 2.1 (RFC 9728) authentication\n- [`glama.json`](glama.json) — Glama directory manifest\n\n---\n\n## MCP Registry\n\n`mcp-name: io.github.sebastienrousseau/iso20022-evidence-pack-mcp`\n\n---\n\n## License\n\nLicensed under the [Apache License, Version 2.0][01]. Any contribution submitted\nfor inclusion shall be licensed as above, without additional terms.\n\n## Contributing\n\nContributions are welcome — see the [contributing instructions][04]. Thanks to\nall [contributors][05].\n\n## Acknowledgements\n\nBuilt alongside the servers of the ISO 20022 MCP Suite and the\n[Model Context Protocol][mcp] Python SDK.\n\n[01]: https://opensource.org/license/apache-2-0/\n[04]: https://github.com/sebastienrousseau/iso20022-evidence-pack-mcp/blob/main/CONTRIBUTING.md\n[05]: https://github.com/sebastienrousseau/iso20022-evidence-pack-mcp/graphs/contributors\n[07]: https://pypi.org/project/iso20022-evidence-pack-mcp/\n[mcp]: https://modelcontextprotocol.io\n[docs-badge]: https://img.shields.io/badge/Docs-iso20022--evidence--pack-blue?style=for-the-badge\n[docs-url]: https://sebastienrousseau.github.io/iso20022-evidence-pack-mcp/\n[license-badge]: https://img.shields.io/pypi/l/iso20022-evidence-pack-mcp?style=for-the-badge\n[pypi-badge]: https://img.shields.io/pypi/v/iso20022-evidence-pack-mcp?style=for-the-badge\n[python-versions-badge]: https://img.shields.io/pypi/pyversions/iso20022-evidence-pack-mcp.svg?style=for-the-badge\n[quality-badge]: https://img.shields.io/github/actions/workflow/status/sebastienrousseau/iso20022-evidence-pack-mcp/ci.yml?branch=main&label=Quality&style=for-the-badge\n[quality-url]: https://github.com/sebastienrousseau/iso20022-evidence-pack-mcp/actions/workflows/ci.yml\n[scorecard-badge]: https://api.scorecard.dev/projects/github.com/sebastienrousseau/iso20022-evidence-pack-mcp/badge?style=for-the-badge\n[scorecard-url]: https://scorecard.dev/viewer/?uri=github.com/sebastienrousseau/iso20022-evidence-pack-mcp\n[tests-badge]: https://img.shields.io/github/actions/workflow/status/sebastienrousseau/iso20022-evidence-pack-mcp/ci.yml?branch=main&label=Tests&style=for-the-badge\n[tests-url]: https://github.com/sebastienrousseau/iso20022-evidence-pack-mcp/actions/workflows/ci.yml\n",
  "bytes": 24920,
  "sha": "7e7c4d0021230f420d528c6904a2ab8b14bcc9e497b3dde9e8c742bdc464c39c",
  "repo_slug": "sebastienrousseau/iso20022-evidence-pack-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_sebastienrousseau_iso20022_evi_2bbdd3d6/readme"
}