
Ecz Id Mcp Verifier
io.github.Ecocitizenz由 GitHub 帳號 Ecocitizenz 發布v0.9.0更新於 Oct 24, 2026
Local-first, read-only ECZ-ID verifier over MCP (stdio): checks, reports, explains, routes.
概覽
一個在本機執行、唯讀的 MCP 伺服器,可對目標進行分類並檢查其公開 ECZ-ID Resolver 狀態,回傳確定性結果、說明與後續指引。
- 可以做什麼
- 對目標(ECZ-ID、MCP 伺服器 URL、代理清單、API URL、GitHub 儲存庫、npm 或 PyPI 套件、容器映像)進行分類,回傳包含結果狀態與原因代碼的標準結果,可離線執行且不發出網路請求。對有效的 ECZ-ID 以唯讀 GET 重新檢查公開 Resolver 狀態,並回報是否有公開證明。以公開安全的措辭說明既有的結果狀態或原因代碼。依宣告的操作者模式,將呼叫端導向操作者設定或開發者指引。
- 適用情境
- 適合讓助理對套件、儲存庫、映像、API 或 ECZ-ID 進行分類,並回報是否有公開的 ECZ-ID Resolver 證明,例如作為 CI 關卡或快速狀態檢查。它不是安全掃描,也不判斷目標是否安全。
- 執行需求
- 以本機 stdio 程序形式從 npm 套件執行,需要 Node.js 以及 npx 或全域安裝。無需帳號、登入、API 金鑰或環境變數。僅在查詢 Resolver 時需要網路存取;離線模式會略過查詢。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Ecz Id Mcp Verifier,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
ECZ-ID MCP Verifier(TM)
Check public ECZ-ID Resolver posture from the CLI, CI or an MCP host. No sign-in, source upload or telemetry. Local policy decides.
A 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.
Quick start
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.
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).
Representative result
Real 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):
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.
Use it from
Next 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.
Common workflows
Supported target shapes
The 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.
For 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.
What this package does
- Classifies a target deterministically (no LLM).
- For a valid ECZ-ID, GETs the public Resolver machine projection (read-only) and reports its posture.
- Reports a canonical
ResultStateand uppercaseReasonCodes. - Emits JSON, an optional human-readable soft report, an optional local Action Envelope (routing-only metadata), and an optional SARIF 2.1.0 file.
- Exposes deterministic exit codes for CI integration.
- Ships a GitHub Action wrapper and a read-only MCP stdio server.
What this package does not do
- It does not write truth.
- It does not activate proof.
- It does not mark anything BOUND.
- It does not inspect artifact contents, manifests, or runtime protocol of any target.
- It does not certify the safety of any server, agent, product, or API.
- It does not approve agents.
- It does not decide global trust.
- It does not upload source code.
- It does not upload secrets, API keys, prompts, or tool payloads.
- It does not emit telemetry, analytics, Sentry, or PostHog beacons.
- It does not call Backend/Core.
- It does not write to the Resolver.
- It does not call TrustOps as a verifier backend.
- It does not perform checkout.
- It does not create a client-side trust badge.
- It does not issue a reusable trust credential.
- It does not treat npm or Official MCP Registry presence as ECZ-ID proof.
- It does not infer safety or approval state for any third party.
- It does not run autonomous LLM or agent behaviour.
Privacy
The verifier:
- no source upload,
- no secrets upload (no API keys, no environment variables),
- never uploads prompts or tool payloads,
- never uploads private logs or raw telemetry,
- never uploads customer data,
- never sends a body to the Resolver (GET-only),
- never sends private headers,
- never emits analytics, Sentry, or PostHog beacons,
- never phones home,
- never auto-updates.
Network 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.
Install
Install from the public registry (this gives you the current release):
Or run it on demand without installing:
From source (contributors):
CLI
Two 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.
Options
CLI examples
Self-test, capabilities, and MCP config
Three deterministic, offline helpers make setup and integration fast — none require a target, a network call, or a secret:
--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.
Operator modes
--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).
Policy modes
Local policy decides. The verifier does not enforce a global gate.
Result states and reason codes
There 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.
Reason 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.
Exit codes
Machine-readable output
Default 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.
--sarif <path>also writes a minimal SARIF 2.1.0 file for code-scanning surfaces.--actionsadds anaction_envelope(routing/guidance metadata only — not a proof authority).
Node library
Importing 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.
MCP stdio server
The 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.
MCP host configuration
Add to your MCP host (e.g. an mcpServers block). Using the installed/global binary:
Or via npx without a global install:
This 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.
Official MCP Registry (discovery)
Discoverable in the Official MCP Registry as io.github.Ecocitizenz/ecz-id-mcp-verifier:
Registry discovery is not ECZ-ID proof. Re-check the public Resolver before reliance.
GitHub Action
The repository ships a node24 action that wraps the same CLI.
Outputs: 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.
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.
Offline mode
--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.
Human report
The human report uses only approved soft copy. When no public resolver proof is found, the verifier emits this exact wording:
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.
Followed by the operator route:
Operate this server? Improve its resolver posture: https://trustops.ecocitizenz.com/start
And the closing reminders: "Re-check before reliance." and "Local policy decides." If you do not operate the target, share resolver guidance with the operator.
Troubleshooting
- No output? Run
npx @ecocitizenz/ecz-id-mcp-verifier --doctorto confirm a healthy install; every command prints JSON (or a report with--report) and returns a deterministic exit code. 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.REQUIREexits 1 offline: expected —REQUIREfails closed when no public proof is confirmed; useOPEN/PREFERfor informational runs, or drop--offline.- A non-ECZ-ID target shows
resolver_url: null: expected — only ECZ-IDs are resolvable; other shapes are classified and routed, not resolved. - Network errors under
REQUIRE: exit 5. The lookup already retries a cold or transient Core up to 3 times within a 32 s budget, so a failure here means it was unavailable for the whole budget. Raise--timeout-msonly if your Core is slower than that; or run--offline. An unavailable result is never a judgment about the identity.
Public routes
- Resolver (public proof):
https://resolver.ecocitizenz.org - Developer Gateway (docs/integration):
https://developers.ecocitizenz.com - TrustOps (operator setup):
https://trustops.ecocitizenz.com/start - Canonical machine discovery:
https://machine.ecocitizenz.org/.well-known/ecz-machine.json(a read-only pointer for agents and machines; discovery only, never proof)
When 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 GETs from the Resolver, requires HTTPS, treats any non-2xx as missing proof rather than inventing proof, and never POSTs, PUTs, PATCHes, or DELETEs.
If 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.
Role split
Backend remains final authority. Local policy decides. This verifier does not write truth.
No certification / safety / approval / compliance / insurance claims
The 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.
ECZ-ID format
Only 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.
CCis exactly two uppercase letters (operator country/class code).XXXXXXandYYYYYYare each exactly six uppercase Base36 characters (0-9A-Z).PASSPORT_CODEis 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.
Resolver routes: a parent resolves to …/p/{parent}; a child resolves to …/p/{parent}/{passport_code}/{instance_suffix}.
Public passport-number codes (33)
Only 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.
Security & responsible disclosure
Report 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 and docs/ROLE_SPLIT.md.
Support & uninstall
- Support / issues: https://github.com/Ecocitizenz/ecz-id-mcp-verifier/issues
- Uninstall:
npm uninstall -g @ecocitizenz/ecz-id-mcp-verifier(global) or remove it from your project and deletenode_modules. For the GitHub Action, remove theuses:step. No background services, daemons, or cached credentials are left behind.
Reproducible version pinning
A plain install uses the current release. Pin the exact release only when reproducibility is required:
Publication status
- npm:
@ecocitizenz/ecz-id-mcp-verifieris live on the public registry; a plainnpm install(ornpx) uses the current release. - GitHub Action:
Ecocitizenz/[email protected]on the GitHub Actions Marketplace. - Trusted publishing: npm releases use protected OIDC trusted publishing with published provenance through a GitHub
npm-releaseenvironment. The canonical Git remote (https://github.com/Ecocitizenz/ecz-id-mcp-verifier.git) is configured, andpackage.jsonrepository/bugsURLs match it exactly. - Published package versions and Action release tags are immutable.
Licence
The official, unmodified package and its bundled GitHub Action are free forever under the ECZ-ID Proprietary Limited-Use License (LICENSE.md) — free to install and run for personal, organisational, development, CI/CD, and internal business use.
This 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.
Backend writes truth. TrustOps handles setup. Resolver proves. Machines re-check.
來源:README.md,提交 3bcde06
工具
0版本歷史
1- v0.9.0最新Sep 16, 2026
評分
已滿足適用檢查項的 40%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
請在儲存庫或註冊中心條目中宣告授權條款。
