{
  "markdown": "# ECZ-ID MCP Verifier(TM)\n\n**Check public ECZ-ID Resolver posture from the CLI, CI or an MCP host. No sign-in, source upload or telemetry. Local policy decides.**\n\nA local-first, privacy-first tool that **classifies** a target, **checks** its public ECZ-ID Resolver posture where applicable, **reports** a deterministic result, **explains** it, and **routes** you onward. It **only reads, reports, and routes** — it never writes truth, activates proof, marks anything BOUND, performs checkout, or inspects artifact contents.\n\n## Quick start\n\n```sh\nnpx @ecocitizenz/ecz-id-mcp-verifier check --target ECZ-GB-A93K7Q\n```\n\n`check` is an accepted leading subcommand; `--target` does the work. Add `--report` for the human-readable soft report, `--policy REQUIRE` to fail closed when proof is missing, or `--offline` for classification and routing with no network call.\n\n> **First useful result in under a minute:** run the command above, read a real JSON result, and follow the routed next action. No sign-in, no account, no config. Install it with a plain `npm install @ecocitizenz/ecz-id-mcp-verifier`; pin an exact version only when you need reproducibility (see [Reproducible version pinning](#reproducible-version-pinning)).\n\n### Representative result\n\nReal output for `--target ECZ-GB-A93K7Q --policy OPEN --offline` (representative excerpt; the full JSON also includes `setup_handoff`, `request_to_resolve` and additional boundary flags):\n\n```json\n{\n  \"schema_version\": 1,\n  \"verifier\": \"ECZ-ID MCP Verifier\",\n  \"verifier_version\": \"0.9.0\",\n  \"target\": \"ECZ-GB-A93K7Q\",\n  \"target_type\": \"ecz_id\",\n  \"policy_mode\": \"OPEN\",\n  \"result_state\": \"NO_PUBLIC_RESOLVER_PROOF_FOUND\",\n  \"reason_codes\": [\"NO_PUBLIC_RESOLVER_PROOF_FOUND\", \"RESOLVER_READ_ONLY\", \"LOCAL_POLICY_DECIDES\"],\n  \"resolver_url\": \"https://resolver.ecocitizenz.org/p/ECZ-GB-A93K7Q\",\n  \"machine_json_url\": null,\n  \"local_policy_decides\": true,\n  \"recheck_before_reliance\": true,\n  \"no_safety_or_approval_inference\": true,\n  \"no_source_uploaded\": true,\n  \"no_secrets_uploaded\": true,\n  \"no_telemetry\": true,\n  \"exit_code\": 0\n}\n```\n\n`NO_PUBLIC_RESOLVER_PROOF_FOUND` here means no public proof was located (offline run); it does **not** mean the target is unsafe. Local policy decides.\n\n## Use it from\n\n| Surface | How |\n| --- | --- |\n| **CLI** | `npx @ecocitizenz/ecz-id-mcp-verifier check --target <value>` |\n| **CI / GitHub Action** | `uses: Ecocitizenz/ecz-id-mcp-verifier@v0.9.0` |\n| **MCP host** | run the `ecz-id-mcp-server` stdio binary (three read-only tools) |\n| **Node library** | `import { verify } from \"@ecocitizenz/ecz-id-mcp-verifier\"` |\n\nNext actions: check a target · add to CI · add to an MCP host · inspect public Resolver proof · improve the posture of a target you operate · build an integration.\n\n## Common workflows\n\n| You are… | Do this | You get |\n| --- | --- | --- |\n| A developer checking a target | `npx @ecocitizenz/ecz-id-mcp-verifier check --target <value>` | Deterministic classification + public Resolver posture, with routing. |\n| A CI owner adding a gate | Add the [GitHub Action](#github-action) with a `policy`, or run the CLI with `--policy REQUIRE` | A deterministic exit code + JSON/SARIF for your pipeline. |\n| An MCP-host user | `--print-mcp-config` → paste into your host | Three read-only MCP tools over stdio. |\n| A Node developer | `import { verify } from \"@ecocitizenz/ecz-id-mcp-verifier\"` | The canonical result contract in-process, no side effects. |\n| A platform reviewer | `--capabilities` and inspect public Resolver posture | An honest, machine-readable statement of scope and limits. |\n| An operator improving your own target | Follow the TrustOps route from the result | Guidance to improve the target's public Resolver posture. |\n| A machine or agent | Read `--capabilities` and the [canonical machine discovery](#public-routes) pointer | Agent-readable capabilities and discovery, never treated as proof. |\n\n## Supported target shapes\n\nThe classifier is deterministic (regex only — no LLM, no network). A public **Resolver lookup is performed only for a valid ECZ-ID**; every other shape is classified and routed but **not** resolved, and **no shape has its artifact contents, manifest, or runtime protocol inspected**.\n\n| Target shape | Example | Classified | Resolver lookup | Artifact / manifest / runtime inspected |\n| --- | --- | --- | --- | --- |\n| ECZ-ID (parent) | `ECZ-GB-A93K7Q` | yes | **yes** (GET `…/api/p/{parent}.json`, online) | no / no / no |\n| ECZ-ID (child) | `ECZ-GB-A93K7Q::AGENT-4F9Q2A` | yes | no (human URL only; no child machine endpoint) | no / no / no |\n| MCP server URL | `https://api.example.com/.well-known/ecz-mcp.json` | yes | no (not directly resolvable) | no / no / no |\n| Agent manifest URL | `…/.well-known/ecz-agent.json` | yes | no | no / no / no |\n| API URL | `https://api.example.com/...` | yes | no | no / no / no |\n| GitHub repo | `https://github.com/org/repo` | yes | no | no / no / no |\n| npm package | `left-pad` or `npm:left-pad` | yes | no | no / no / no |\n| PyPI package | `pypi:requests` | yes | no | no / no / no |\n| Container image | `ghcr.io/org/img@sha256:…` | yes | no | no / no / no |\n| Anything else | free text, whitespace, malformed ECZ-ID | classified `unsupported_target` | no | no / no / no |\n\nFor a non-ECZ-ID shape the verifier returns `NO_PUBLIC_RESOLVER_PROOF_FOUND` with `resolver_url: null` (it never fabricates a Resolver path). Classification is **not** security inspection.\n\n## What this package does\n\n- Classifies a target deterministically (no LLM).\n- For a valid ECZ-ID, GETs the public Resolver machine projection (read-only) and reports its **posture**.\n- Reports a canonical `ResultState` and uppercase `ReasonCode`s.\n- Emits JSON, an optional human-readable soft report, an optional local Action Envelope (routing-only metadata), and an optional SARIF 2.1.0 file.\n- Exposes deterministic exit codes for CI integration.\n- Ships a GitHub Action wrapper and a read-only MCP stdio server.\n\n## What this package does not do\n\n- It does **not** write truth.\n- It does **not** activate proof.\n- It does **not** mark anything BOUND.\n- It does **not** inspect artifact contents, manifests, or runtime protocol of any target.\n- It does **not** certify the safety of any server, agent, product, or API.\n- It does **not** approve agents.\n- It does **not** decide global trust.\n- It does **not** upload source code.\n- It does **not** upload secrets, API keys, prompts, or tool payloads.\n- It does **not** emit telemetry, analytics, Sentry, or PostHog beacons.\n- It does **not** call Backend/Core.\n- It does **not** write to the Resolver.\n- It does **not** call TrustOps as a verifier backend.\n- It does **not** perform checkout.\n- It does **not** create a client-side trust badge.\n- It does **not** issue a reusable trust credential.\n- It does **not** treat npm or Official MCP Registry presence as ECZ-ID proof.\n- It does **not** infer safety or approval state for any third party.\n- It does **not** run autonomous LLM or agent behaviour.\n\n## Privacy\n\nThe verifier:\n\n- no source upload,\n- no secrets upload (no API keys, no environment variables),\n- never uploads prompts or tool payloads,\n- never uploads private logs or raw telemetry,\n- never uploads customer data,\n- never sends a body to the Resolver (GET-only),\n- never sends private headers,\n- never emits analytics, Sentry, or PostHog beacons,\n- never phones home,\n- never auto-updates.\n\nNetwork is opt-out via `--offline` / `--no-network`. No sign-in is required for normal checks. The public **Resolver** remains the proof surface; package and Registry metadata are discovery only, never proof.\n\n## Install\n\nInstall from the public registry (this gives you the current release):\n\n```sh\nnpm install @ecocitizenz/ecz-id-mcp-verifier\n# or global: npm install -g @ecocitizenz/ecz-id-mcp-verifier\n```\n\nOr run it on demand without installing:\n\n```sh\nnpx @ecocitizenz/ecz-id-mcp-verifier check --target ECZ-GB-A93K7Q\n```\n\nFrom source (contributors):\n\n```sh\ngit clone https://github.com/Ecocitizenz/ecz-id-mcp-verifier.git\ncd ecz-id-mcp-verifier\nnpm install\nnpm run build\nnode dist/bin/cli.js --help\n```\n\n## CLI\n\n```\necz-mcp-verify --target <value> [options]\n```\n\nTwo equivalent command names are installed: `ecz-id-mcp-verifier` and `ecz-mcp-verify` (both run the same CLI). A third binary, `ecz-id-mcp-server`, starts the MCP stdio server.\n\n### Options\n\n| Flag                | Default                                | Description                              |\n| ------------------- | -------------------------------------- | ---------------------------------------- |\n| `--target`          | (required)                             | URL, package, repo, image, or ECZ-ID.    |\n| `--target-type`     | `auto`                                 | `mcp_server` \\| `agent_manifest` \\| `api_url` \\| `github_repo` \\| `npm_package` \\| `pypi_package` \\| `container_image` \\| `ecz_id` \\| `auto` |\n| `--policy`          | `OPEN`                                 | `OPEN` \\| `PREFER` \\| `REQUIRE`          |\n| `--operator`        | `unknown`                              | `self` \\| `third_party` \\| `unknown` (never auto-inferred). |\n| `--json`            | on                                     | Emit JSON output.                        |\n| `--report`          | off                                    | Emit human-readable soft report.         |\n| `--actions`         | off                                    | Include action envelope in JSON output.  |\n| `--resolver-base`   | `https://resolver.ecocitizenz.org`     | Override resolver base.                  |\n| `--trustops-url`    | `https://trustops.ecocitizenz.com/start` | Override TrustOps URL.                 |\n| `--developer-base`  | `https://developers.ecocitizenz.com`   | Override Developer Gateway.              |\n| `--offline`         | off                                    | Offline mode (no network).               |\n| `--no-network`      | off                                    | Same as `--offline`.                     |\n| `--timeout-ms`      | `5000`                                 | Network timeout (ms).                    |\n| `--output <path>`   | stdout                                 | Write output to file.                    |\n| `--sarif <path>`    | off                                    | Also write a minimal SARIF 2.1.0 file.   |\n| `--capabilities`    |                                        | Print the machine-readable capability profile (JSON) and exit. |\n| `--print-mcp-config`|                                        | Print a ready-to-paste MCP host config (JSON) and exit. |\n| `--doctor`          |                                        | Run a local self-test (no network, no secret); add `--report` for human output. |\n| `--version`         |                                        | Print version and exit.                  |\n| `--help`            |                                        | Print help and exit.                     |\n\n### CLI examples\n\n```sh\n# Offline classification + JSON output\necz-mcp-verify --target \"ECZ-GB-A93K7Q\" --offline\n\n# REQUIRE policy with action envelope\necz-mcp-verify --target \"https://api.example.com/.well-known/ecz-mcp.json\" \\\n  --policy REQUIRE --actions\n\n# Human-readable soft report\necz-mcp-verify --target \"https://github.com/org/repo\" --report\n\n# Write JSON + SARIF files for CI\necz-mcp-verify --target \"ECZ-GB-A93K7Q\" --output result.json --sarif result.sarif\n```\n\n### Self-test, capabilities, and MCP config\n\nThree deterministic, offline helpers make setup and integration fast — none require a target, a network call, or a secret:\n\n```sh\n# Confirm a healthy install (no network, no secret):\necz-id-mcp-verifier --doctor\n\n# Print the machine-readable capability profile (what it does and does not do):\necz-id-mcp-verifier --capabilities\n\n# Print a ready-to-paste MCP host configuration:\necz-id-mcp-verifier --print-mcp-config\n```\n\n`--capabilities` returns a stable `capability_profile` (`ecz-resolver-posture-v1`) with the supported target types, result states, outputs, exit codes, MCP tools, privacy posture, and explicit scope flags (`artifact_binding_performed: false`, `manifest_inspection_performed: false`, `runtime_protocol_inspection_performed: false`, `local_policy_decides: true`) — a truthful, agent-readable description of the tool.\n\n### Operator modes\n\n`--operator` is never auto-inferred. The caller declares whether they operate the target or are a third-party reader. The verifier uses this only to route guidance (TrustOps for operators, Developer Gateway for third-party readers).\n\n```sh\n# You operate the target -> routes to TrustOps setup.\necz-mcp-verify --target \"https://api.example.com/.well-known/ecz-mcp.json\" \\\n  --operator self --actions\n\n# You are a third party reader -> routes to Developer Gateway guidance.\necz-mcp-verify --target \"https://api.example.com/.well-known/ecz-mcp.json\" \\\n  --operator third_party --actions\n```\n\n## Policy modes\n\n| Mode      | Missing public proof                                    | Mismatch / Revoked / Suspended / Expired |\n| --------- | ------------------------------------------------------- | ---------------------------------------- |\n| `OPEN`    | informational, exit 0                                   | deterministic non-zero                   |\n| `PREFER`  | warning on stderr, exit 0                               | deterministic non-zero                   |\n| `REQUIRE` | fail-closed (exit 1, or exit 5 on network failure)      | deterministic non-zero                   |\n\nLocal policy decides. The verifier does not enforce a global gate.\n\n## Result states and reason codes\n\nThere are 18 canonical `result_state` values, including `RESOLVER_VERIFIABLE`, `NO_PUBLIC_RESOLVER_PROOF_FOUND`, `DEGRADED`, `MISMATCH`, `EXPIRED`, `SUSPENDED`, `REVOKED`, `NOT_APPLICABLE` and `UNSUPPORTED_TARGET`. An HTTP 200 alone is **never** proof: only an explicit active/current Resolver projection yields `RESOLVER_VERIFIABLE`; malformed, unknown-schema, subject-mismatched, revoked, suspended, expired, stale or abuse-flagged bodies map deterministically to non-positive states and are never cached as proof.\n\nReason codes are uppercase snake-case (e.g. `NO_PUBLIC_RESOLVER_PROOF_FOUND`, `RESOLVER_READ_ONLY`, `RESOLVER_RESPONSE_UNVERIFIABLE`, `PULSEGUARD_STALE`, `LOCAL_POLICY_DECIDES`). Use `ecz_explain_result` (MCP) or read the canonical lists exported from the library.\n\n## Exit codes\n\n| Code | Meaning                                                          |\n| ---- | ---------------------------------------------------------------- |\n| 0    | OK / informational / resolver-verifiable / OPEN missing proof    |\n| 1    | Policy-required proof missing or unresolved under REQUIRE        |\n| 2    | Deterministic mismatch                                           |\n| 3    | Revoked / suspended / expired                                    |\n| 4    | Unsupported target or invalid input                              |\n| 5    | Network / timeout error where policy requires fail-closed        |\n| 6    | Internal verifier error                                          |\n\n## Machine-readable output\n\nDefault output is JSON (see the representative result above). Key fields: `schema_version`, `verifier`, `verifier_version`, `target`, `target_type`, `policy_mode`, `result_state`, `reason_codes`, `resolver_url`, `machine_json_url`, `trustops_action_url`, `developer_guidance_url`, the boundary flags (`local_policy_decides`, `recheck_before_reliance`, `no_safety_or_approval_inference`, `no_source_uploaded`, `no_secrets_uploaded`, `no_telemetry`), `timestamp` and `exit_code`.\n\n- `--sarif <path>` also writes a minimal SARIF 2.1.0 file for code-scanning surfaces.\n- `--actions` adds an `action_envelope` (routing/guidance metadata only — **not** a proof authority).\n\n## Node library\n\n```js\nimport { verify, RESULT_STATES, REASON_CODES } from \"@ecocitizenz/ecz-id-mcp-verifier\";\n\nconst result = await verify({ target: \"ECZ-GB-A93K7Q\", policy: \"OPEN\", noNetwork: true });\nconsole.log(result.result_state, result.reason_codes);\n```\n\nImporting the package has **no side effects** — it never runs the CLI and never makes a network request on import. The canonical `RESULT_STATES`, `REASON_CODES`, exit-code constants and result types are exported for integrators.\n\n## MCP stdio server\n\nThe package ships a read-only MCP server over stdio with **exactly three tools**, all delegating to the same canonical verifier core. No secret or environment variable is required to start it; it writes no truth and exposes no remote transport. Run `ecz-id-mcp-verifier --print-mcp-config` to emit the block below for your host.\n\n| Tool | Purpose |\n| --- | --- |\n| `ecz_check_target` | Classify a target and return the canonical result contract. |\n| `ecz_recheck_resolver` | Read-only re-check of the public Resolver posture (GET only). |\n| `ecz_explain_result` | Public-safe explanation of existing `result_state` / `reason_codes`. |\n\n### MCP host configuration\n\nAdd to your MCP host (e.g. an `mcpServers` block). Using the installed/global binary:\n\n```json\n{\n  \"mcpServers\": {\n    \"ecz-id\": {\n      \"command\": \"ecz-id-mcp-server\",\n      \"args\": []\n    }\n  }\n}\n```\n\nOr via `npx` without a global install:\n\n```json\n{\n  \"mcpServers\": {\n    \"ecz-id\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"-p\", \"@ecocitizenz/ecz-id-mcp-verifier\", \"ecz-id-mcp-server\"]\n    }\n  }\n}\n```\n\nThis is **local stdio** use. The Official MCP Registry is a separate discovery lane, and Registry discovery is **not** ECZ-ID proof — proof comes only from the public Resolver.\n\n### Official MCP Registry (discovery)\n\nDiscoverable in the Official MCP Registry as `io.github.Ecocitizenz/ecz-id-mcp-verifier`:\n\n- <https://registry.modelcontextprotocol.io/v0/servers?search=ecz-id-mcp-verifier>\n\nRegistry discovery is not ECZ-ID proof. Re-check the public [Resolver](https://resolver.ecocitizenz.org) before reliance.\n\n## GitHub Action\n\nThe repository ships a node24 action that wraps the same CLI.\n\n```yaml\nname: ECZ-ID MCP Verifier\non: [push]\n\n# Minimum recommended permissions. The Action only reads and reports — it never\n# writes to the repository, opens PRs/issues, or needs any write scope.\npermissions:\n  contents: read\n\njobs:\n  verify:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: Ecocitizenz/ecz-id-mcp-verifier@v0.9.0\n        with:\n          target: \"ECZ-CC-ABC123\"\n          target-type: \"ecz_id\"\n          policy: \"PREFER\"\n          resolver-base: \"https://resolver.ecocitizenz.org\"\n          no-network: \"false\"\n          timeout-ms: \"5000\"\n```\n\nOutputs: `result-state`, `reason-codes`, `action-envelope-json`, `setup-handoff-json`, `mcp-action-envelope-json`, `request-to-resolve-json`, `primary-action`, `trustops-action-url`, `developer-guidance-url`. The Action also writes a concise GitHub **step summary**.\n\n**Minimum permissions:** `contents: read`. The action does **not** upload source. It does **not** upload secrets. It does **not** write truth. It does **not** mutate the repository, open PRs, or open issues. It does **not** call TrustOps checkout. It does **not** require an ECZ-ID token for public checks.\n\n## Offline mode\n\n`--offline` (alias `--no-network`) performs deterministic classification and routing with **no** network call. The Resolver lookup is skipped and any ECZ-ID is reported as `NO_PUBLIC_RESOLVER_PROOF_FOUND` (the verifier never invents proof). Use offline mode in air-gapped CI or when you only need classification + routing.\n\n## Human report\n\nThe human report uses only approved soft copy. When no public resolver proof is found, the verifier emits this exact wording:\n\n> No public resolver proof was found for this MCP target yet. This does not mean the target is unsafe. It means ECZ-ID could not locate machine-readable public proof for the accountable operator. Your local policy decides the action.\n\nFollowed by the operator route:\n\n> Operate this server? Improve its resolver posture: https://trustops.ecocitizenz.com/start\n\nAnd the closing reminders: \"Re-check before reliance.\" and \"Local policy decides.\" If you do not operate the target, share resolver guidance with the operator.\n\n## Troubleshooting\n\n- **No output?** Run `npx @ecocitizenz/ecz-id-mcp-verifier --doctor` to confirm a healthy install; every command prints JSON (or a report with `--report`) and returns a deterministic exit code.\n- **`UNSUPPORTED_TARGET` (exit 4):** the target is empty, contains whitespace, or is a malformed ECZ-ID. Quote the target and check the supported-shapes table.\n- **`REQUIRE` exits 1 offline:** expected — `REQUIRE` fails closed when no public proof is confirmed; use `OPEN`/`PREFER` for informational runs, or drop `--offline`.\n- **A non-ECZ-ID target shows `resolver_url: null`:** expected — only ECZ-IDs are resolvable; other shapes are classified and routed, not resolved.\n- **Network errors under `REQUIRE`:** exit 5; raise `--timeout-ms` or run `--offline`.\n\n## Public routes\n\n- **Resolver (public proof):** `https://resolver.ecocitizenz.org`\n- **Developer Gateway (docs/integration):** `https://developers.ecocitizenz.com`\n- **TrustOps (operator setup):** `https://trustops.ecocitizenz.com/start`\n- **Canonical machine discovery:** `https://machine.ecocitizenz.org/.well-known/ecz-machine.json` (a read-only pointer for agents and machines; discovery only, never proof)\n\nWhen setup is required, the verifier routes the operator to TrustOps; it never performs setup itself. When documentation or guidance is required, it routes to the Developer Gateway. The verifier only **GET**s from the Resolver, requires HTTPS, treats any non-2xx as missing proof rather than inventing proof, and never POSTs, PUTs, PATCHes, or DELETEs.\n\nIf you operate the target, TrustOps can guide setup and posture improvement. The verifier never requires a purchase to run, never requires a third party to buy an ECZ-ID, and absence of public proof never means \"unsafe\" — local policy decides.\n\n## Role split\n\n| Component         | Owns                                          | This verifier may   |\n| ----------------- | --------------------------------------------- | ------------------- |\n| Backend / Core    | Writing truth.                                | Never write.        |\n| Resolver          | Projecting public proof.                      | Read only (GET).    |\n| TrustOps          | Setup, acquisition, lifecycle.                | Route users to.     |\n| Developer Gateway | Explaining and routing developers.            | Route users to.     |\n| **MCP Verifier**  | Local checks, reporting, routing.             | This.               |\n\nBackend remains final authority. Local policy decides. This verifier does **not** write truth.\n\n## No certification / safety / approval / compliance / insurance claims\n\nThe verifier does **not** assert that any target is trustworthy, low-risk, sanctioned, insured, or endorsed by any registry, platform, or regulator. It makes no safety, certification, approval, or compliance claim about any target. Every report says: re-check before reliance, local policy decides, backend remains final authority.\n\n## ECZ-ID format\n\nOnly a strictly valid identifier classifies as `ecz_id`, builds a Resolver URL, or triggers a lookup; a malformed identifier is reported as an unsupported / invalid target and never produces a Resolver request.\n\n| Form | Template | Example |\n| --- | --- | --- |\n| Parent (operator) | `ECZ-CC-XXXXXX` | `ECZ-GB-A93K7Q` |\n| Child (passport instance) | `ECZ-CC-XXXXXX::PASSPORT_CODE-YYYYYY` | `ECZ-GB-A93K7Q::AGENT-4F9Q2A` |\n\n- `CC` is exactly two uppercase letters (operator country/class code).\n- `XXXXXX` and `YYYYYY` are each exactly six uppercase Base36 characters (`0-9A-Z`).\n- `PASSPORT_CODE` is one of the **33 public passport-number codes** below; it may contain hyphens, and the six-character instance suffix is split off the final hyphen. Only these public codes are valid; other identifiers and obsolete codes are **not** valid public child codes.\n\nResolver routes: a parent resolves to `…/p/{parent}`; a child resolves to `…/p/{parent}/{passport_code}/{instance_suffix}`.\n\n<details>\n<summary>Public passport-number codes (33)</summary>\n\n| # | Passport | Public code |\n| --- | --- | --- |\n| 1 | Agent Credential | `AGENT` |\n| 2 | Cyber Resilience | `CYBER` |\n| 3 | API Passport | `API` |\n| 4 | AI Model | `AI` |\n| 5 | Dataset | `DATASET` |\n| 6 | IoT Device | `IOT` |\n| 7 | Software Supply Chain | `SSCM` |\n| 8 | Product | `PRODUCT` |\n| 9 | Custody Transfer | `CUSTODY` |\n| 10 | Risk Policy | `RISKPOL` |\n| 11 | Industrial Robot | `ROBOT-IND` |\n| 12 | Public-Space Robot | `ROBOT-PUB` |\n| 13 | Domestic Robot | `ROBOT-DOM` |\n| 14 | Robotaxi | `ROBOTAXI` |\n| 15 | Autonomous Car | `AUTO-CAR` |\n| 16 | Autonomous Haulage Truck | `AUTO-TRUCK` |\n| 17 | Cross-Border Haulage Truck | `XHAUL` |\n| 18 | High-Value Cargo Truck | `HV-CARGO` |\n| 19 | D1 Drone | `D1-DRONE` |\n| 20 | D2 Drone | `D2-DRONE` |\n| 21 | D3 Drone | `D3-DRONE` |\n| 22 | D4 Drone | `D4-DRONE` |\n| 23 | Intermodal Transfer | `INTERMODAL` |\n| 24 | Industrial Site | `IND-SITE` |\n| 25 | Critical Infrastructure | `CRITICAL-INFRA` |\n| 26 | Financial Authority & Funds Flow | `FUNDS-FLOW` |\n| 27 | Marine Vessel | `MARINE-VESSEL` |\n| 28 | Cargo Container | `CARGO-CONTAINER` |\n| 29 | Aircraft | `AIRCRAFT` |\n| 30 | Aviation Component | `AVIATION-COMP` |\n| 31 | Platform Safe-Harbour | `SAFE-HARBOUR` |\n| 32 | Identity Continuity | `ID-CONTINUITY` |\n| 33 | Licensed Infrastructure Operator | `LIC-INFRA` |\n\nOnly the public passport names and codes are shown. Child `machine_json_url` is `null` (no proven child machine endpoint); the parent machine projection `…/api/p/{parent}.json` is read-only.\n\n</details>\n\n## Security & responsible disclosure\n\nReport suspected vulnerabilities privately via the repository's **GitHub Security tab** — <https://github.com/Ecocitizenz/ecz-id-mcp-verifier/security> (use *Report a vulnerability* / private advisories) — do **not** open public issues for security reports. Include the affected version and reproduction steps. See also [`docs/PRIVACY.md`](docs/PRIVACY.md) and [`docs/ROLE_SPLIT.md`](docs/ROLE_SPLIT.md).\n\n## Support & uninstall\n\n- **Support / issues:** <https://github.com/Ecocitizenz/ecz-id-mcp-verifier/issues>\n- **Uninstall:** `npm uninstall -g @ecocitizenz/ecz-id-mcp-verifier` (global) or remove it from your project and delete `node_modules`. For the GitHub Action, remove the `uses:` step. No background services, daemons, or cached credentials are left behind.\n\n## Reproducible version pinning\n\nA plain install uses the current release. Pin the exact release only when reproducibility is required:\n\n```sh\nnpm install @ecocitizenz/ecz-id-mcp-verifier@0.9.0\nnpx @ecocitizenz/ecz-id-mcp-verifier@0.9.0 --doctor\n```\n\n## Publication status\n\n- **npm:** `@ecocitizenz/ecz-id-mcp-verifier` is live on the public registry; a plain `npm install` (or `npx`) uses the current release.\n- **GitHub Action:** `Ecocitizenz/ecz-id-mcp-verifier@v0.9.0` on the GitHub Actions Marketplace.\n- **Trusted publishing:** npm releases use protected OIDC trusted publishing with published provenance through a GitHub `npm-release` environment. The canonical Git remote (`https://github.com/Ecocitizenz/ecz-id-mcp-verifier.git`) is configured, and `package.json` `repository`/`bugs` URLs match it exactly.\n- Published package versions and Action release tags are **immutable**.\n\n## Licence\n\nThe official, unmodified package and its bundled GitHub Action are **free forever** under the ECZ-ID Proprietary Limited-Use License ([`LICENSE.md`](LICENSE.md)) — free to install and run for personal, organisational, development, CI/CD, and internal business use.\n\nThis is **not** open source. Public visibility of the source (for transparency or installation) grants no redistribution, modification, derivative, or competing-product rights — see `LICENSE.md`.\n\nBackend writes truth. TrustOps handles setup. Resolver proves. Machines re-check.\n",
  "bytes": 27937,
  "sha": "105408a827c1be02981a24f919d039c24418a1ef3cb5f0e93dc0b92a7075708b",
  "repo_slug": "ecocitizenz/ecz-id-mcp-verifier",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_ecocitizenz_ecz_id_mcp_verifie_57a53770/readme"
}