Skip to main content

iqa-mcp

PyPI License self-test M8ven Score

The IQA attestation primitives — derived intent addressing and AE-128 envelope verification — exposed as Model Context Protocol tools, so any MCP agent (Claude Desktop, Cline, your own client, an Uber-style MCP Gateway) can verify trust offline, fail-closed.

A thin, stateless wrapper around the published iqa-org 1.3.2 reference implementation. No network. No accounts. No key storage. No state.

PyPI · iqa-mcp · Apache-2.0 Spec · draft-li-rttp-iqa-addressing — Independent Submission, in review Landing page · iqa.org/MCP/


Why

Agent platforms are converging on MCP as the tool-calling layer, at industrial scale. What none of them standardize is trust semantics: what intent is being addressed, and whether the counterparty holds standing — verifiable without a network call. These four tools make that layer native to any MCP agent.

Install

Requires Python ≥ 3.11.

# from PyPI — installs the `iqa-mcp` console command
pip install iqa-mcp

# launcher equivalents — same `iqa-mcp` command, they fetch and wrap the Python package above
npm install -g iqa-mcp        # or run once: npx iqa-mcp
cargo install iqa-mcp

# or run from source
pip install "iqa-org>=1.3.2" "mcp>=2"
python server.py            # stdio transport

All three install paths end at the same iqa-mcp command; the MCP client configuration below works unchanged for any of them.

MCP client configuration (Claude Desktop / Cline style):

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

(From source, use "command": "python", "args": ["/path/to/server.py"] instead.)


Tools

Tool Input Returns Key needed
derive_route_shard authority string SHA-256(authority)[0:16] hex — the derived, action-independent intent address no
parse_envelope AE-128 frame hex structural decode: version, lease, shard, organ, nonce, standing — fails closed on every layout rule no
verify_envelope frame hex + organ key full verification: constant-time HMAC-SHA256 over the whole 128-byte frame (attestation zeroed) + lease check. REJECT is a result, not an error yes (caller-supplied)
published_vector — the published AE128-VECTOR-1 (authority, test key, frame hex — see iqa-org) for byte-for-byte self-test —

Try it in thirty seconds

published_vector            -> AE128-VECTOR-1: authority + test key + frame hex
parse_envelope(frame)       -> standing radiant · nonce 1 · lease unexpired
verify_envelope(frame, key) -> PASS
flip one byte of standing   -> REJECT (HMAC mismatch)

That last line is the point: tampering is not detected by anyone watching — the frame simply stops verifying, offline, for any verifier, forever.

Self-test

# installed from PyPI — runs against the iqa-mcp console script
python -m test_mcp

# or from a source checkout — runs against ./server.py
python test_mcp.py
# [PASS] 1 · list_tools        -> 4 tools
# [PASS] 2 · derive_route_shard -> 5c378581f92754d0bc88adaed84b7c5a
# [PASS] 3 · published_vector   -> f3b2a1c4.pillar.example
# [PASS] 4 · parse_envelope     -> standing radiant
# [PASS] 5 · verify_envelope    -> [PASS] radiant · nonce 1
# [PASS] 6 · tampered frame     -> REJECT (HMAC mismatch)
# [PASS] 7 · malformed hex      -> REJECT
# ALL 7/7 PASS

Design invariants

Inherited from the schemes:

  • Zero-parser — fixed offsets, no TLV, no heap-shaped parsing.
  • Fail-closed — malformed input is a REJECT result, never a normalised partial answer.
  • Offline — verification needs the frame, the key, and a hash function. Nothing else.
  • Stateless — the server stores nothing; the organ key is passed per call by the client and never persisted.

What this is not

Stated plainly, because evidence tooling that oversells is just marketing:

  • Not real-time governance. Gateways and policy engines decide in the moment; this server proves after the fact. The two compose; neither replaces the other.
  • Not a delegation scheme. v1.3.x intentionally specifies no delegation semantics — see the draft's honest-boundary notes.
  • Not a key custodian. The organ key never touches this server's state; verification is caller-supplied, per call. Never pass a production organ key through a host you do not control — whoever sees the key holds the verification power.
  • Not a benchmark. The demos at iqa.org execute real WebCrypto in the browser; this server wraps the same published primitives.

Status

  • Published on PyPI: https://pypi.org/project/iqa-mcp/ — current version in the badge above.
  • Transport: stdio. A hosted streamable-HTTP endpoint is under consideration; the tools are stateless, so hosting adds no custody.
  • Underlying schemes: iqa-org 1.3.2 (PyPI / npm / crates.io — four registries, byte-exact vectors, offline self-test).
  • Specification: draft-li-rttp-iqa-addressing — Independent Submission, in review.

Sister repositories

  • iqa-org — the reference implementation (addressing, envelope, verification).
  • rttp — the addressing scheme: design notes and open questions.
  • Organization discussions — start-here map and cross-repo threads.

Public record

Everything this tool wraps is public and checkable — no asking us:


Status update — revision -02 (2026-11-01)

The specification reference above is now:

draft-li-rttp-iqa-addressing — revision -02 (40 pp., 2026-11-01), Independent Submission, in review: https://datatracker.ietf.org/doc/draft-li-rttp-iqa-addressing/

Three -02 sections map directly onto these tools:

  • §6 — the trust lease. verify_envelope performs its lease check against the verifier's own clock; deployments use 120 seconds, configurable. An expired lease is a REJECT result — fail-closed, in line with the section's normative rule that an expired answer MUST be refused.
  • §8 — the closed refusal vocabulary with grant references. REJECT results are asked to surface the reason as one of the five closed-set values (evidence_binding_mismatch, evidence_expired, authority_not_determined, authority_revoked, operation_not_permitted) plus a grant reference, so that agents across different MCP clients see the same refusal words for the same failure.
  • The attestation envelope these tools parse and verify is specified as a normative wire format in §7 of the I-D; parse_envelope and verify_envelope implement exactly that layout (fixed offsets, HMAC over the whole frame with the attestation field zeroed).

Nothing about the tools, their inputs, or their self-test output changes; this is a specification-pointer update only.

License

Apache-2.0 — © RTTP & IQA Organization

Metadata

Release files for iqa-mcp 1.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for iqa-mcp 1.0.3
File Size Uploaded Provenance Actions
iqa_mcp-1.0.3.tar.gz 12.5 kB Without provenance Details for iqa_mcp-1.0.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for iqa-mcp 1.0.3
File Interpreter ABI Platform Actions
iqa_mcp-1.0.3-py3-none-any.whl Python 3 none any Details for iqa_mcp-1.0.3-py3-none-any.whl

Total release size: 25.6 kB

Release files / iqa_mcp-1.0.3.tar.gz

Download URL iqa_mcp-1.0.3.tar.gz
Size 12.5 kB
Tags Source
SHA-256 checksum
How to use checksums
bb581877109bf9ab46259a47e4d73dda6020dfb4e41e1784b843fe403696bdeb
BLAKE2b-256 checksum
How to use checksums
e4a55565d6e8f667444a4156df1c243376beca620956b46d9e9edae75a554891
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.2

Release files / iqa_mcp-1.0.3-py3-none-any.whl

Download URL iqa_mcp-1.0.3-py3-none-any.whl
Size 13.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d16c82d547eb0f939eb2ae83e6e5c0da9465f0edfbe2b68cbd37604a7633ad66
BLAKE2b-256 checksum
How to use checksums
fab94381d545d8b02e25f4c599c7b14e0c6bdeb1ac4c261c188bf2584dce674c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.2

Security for iqa-mcp 1.0.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page