Proofmark Units

السجل الرسمي أخرى

Convert between units of length, mass, temperature and data size.

التثبيت

أضف هذا إلى إعدادات MCP في عميلك (Claude Desktop: claude_desktop_config.json، وCursor: ‏.cursor/mcp.json، ويستخدم VS Code وغيره الصيغة نفسها «mcpServers»).

NPM package proofmark-units
Claude Code
claude mcp add proofmark-units -- npx -y proofmark-units@1.0.0
إعداد JSON (Claude Desktop وCursor وVS Code)
{
    "mcpServers": {
        "proofmark-units": {
            "command": "npx",
            "args": [
                "-y",
                "proofmark-units@1.0.0"
            ]
        }
    }
}

التوثيق

مأخوذ من ملف README للمشروع على GitHub ويُحدَّث أسبوعيًا. تفتح الروابط على GitHub.

المحتويات
  1. Proofmark
  2. Contents
  3. The idea
  4. How it works, in one picture
  5. The flows
  6. Using Proofmark
  7. Proof it runs
  8. Track requirements
  9. Design details
  10. Run it yourself
  11. Repo map
  12. Limits, stated plainly
  13. Prior art
  14. How AI was used
  15. Credits

Proofmark

The trust gate between AI agents and the MCP servers they connect to.

x402 payments and audit on Hedera · identity on ENSv2 · uniqueness and spend authority from World

Live app · Check any server · On-chain console · Testing report · Page-by-page walkthrough · Sponsor feedback


Contents

  1. The idea
  2. How it works, in one picture
  3. The flows
  4. Using Proofmark
  5. Proof it runs
  6. Track requirements
  7. Design details
  8. Run it yourself
  9. Repo map
  10. Limits, stated plainly
  11. Prior art
  12. How AI was used

The idea

The problem

An MCP server is not a library. When an agent connects to one, the server is handed the agent's shell, filesystem, credentials and payment rails. Thousands of MCP servers already exist, installed with one line such as npx -y some-server. Most of them come from people the user has never heard of.

Today the best assurance available is a signature showing that some GitHub account built the code. That leaves four gaps:

GapWhat goes wrong
Tools change after approvalA server that was harmless yesterday quietly adds a read_env tool today. Nothing re-checks it.
Accounts are cheapOne person can run fifty GitHub accounts. A signature binds code to an account, not to anyone accountable.
Nothing revokesIf a maintainer's key leaks on Tuesday, every agent already connected keeps trusting it.
Nobody pays for checkingEvery verification proposal assumes someone checks for free, forever. In practice nobody does.
What Proofmark does

Before an agent connects to an MCP server, Proofmark:

  1. Looks the server up on ENS to find who maintains it, what they charge, and which key may vouch for it right now.
  2. Pays the maintainer $0.002 over x402 on Hedera, with no human approving the payment. The agent is allowed to spend because a person approved it once, through a World Agent Pass, and because its operator set an on-chain Hedera allowance.
  3. Gets a signed attestation of two hashes: the hash of the exact build, and the hash of its exact tool list.
  4. Starts the server and hashes the tools it actually offers. If the tools differ from what was attested, the connection is refused before the model ever sees the tool list.
  5. Keeps watching. A revoked key reaches every connected agent within seconds through a Hedera Consensus Service topic. ENS is re-read every 15 seconds as the source of truth.

A server is green only when its maintainer is backed by all three layers:

   ┌────────────────────┐   ┌──────────────────────┐   ┌──────────────────────┐
   │  UNIQUE            │   │  DOMAIN-VERIFIED     │   │  BONDED              │
   │  World ID          │ + │  GitHub gist or      │ + │  50 HBAR in a 2-of-2 │
   │  one person,       │   │  domain proof of the │   │  Hedera account,     │
   │  one claim         │   │  registry namespace  │   │  forfeited on malice │
   └────────────────────┘   └──────────────────────┘   └──────────────────────┘
              stops sockpuppets      ties name to owner      puts money at stake

World alone is deliberately not trusted for identity. A credential can be shared, so the namespace proof and the bond exist to cover that.

What Proofmark is not

It is not a code scanner. An honest, verified maintainer can still ship a backdoor. Proofmark proves who stands behind a build, and that they still stand behind it, as of seconds ago. It complements tools like Socket and Snyk; it does not replace them.


How it works, in one picture

The same system as text:

                                   ┌──────────────────────────────────────────────┐
  ┌──────────────┐   MCP (stdio)   │              PROOFMARK PROXY                 │
  │ Agent client │ ──────────────▶ │  resolve on ENS → pay x402 → verify hashes   │
  │ Claude Code, │ ◀────────────── │  → spawn server → watch for changes          │
  │ Cursor, ...  │  only permitted └───────┬───────────────┬─────────────┬────────┘
  └──────────────┘      tools              │ x402 HTTP     │ spawns      │ subscribes
                                           ▼               ▼             ▼
                ┌──────────────────────────────┐   ┌─────────────┐  ┌──────────────────┐
                │      PROOFMARK GATEWAY       │   │ MCP server  │  │ Hedera mirror    │
                │  Hono · x402 merchant        │   │ (sandboxed  │  │ node: revocation │
                │  attest · claim · revoke     │   │ if unclaimed)│ │ topic messages   │
                └──┬──────────┬──────────┬─────┘   └─────────────┘  └──────────────────┘
                   │          │          │
         ┌─────────▼───┐ ┌────▼──────┐ ┌─▼─────────────┐
         │   HEDERA    │ │  ENSv2    │ │    WORLD      │
         │ x402 settle │ │  Sepolia  │ │ IDKit (claim) │
         │ HCS audit   │ │ orgs,     │ │ Agent Pass    │
         │ HCS revoke  │ │ keys,     │ │ (spend)       │
         │ HTS certs   │ │ agents    │ │               │
         │ allowances  │ │ ERC-8004  │ │               │
         │ bond acct   │ │           │ │               │
         └─────────────┘ └───────────┘ └───────────────┘
PartJob
Proxy (apps/proxy)What the agent talks to instead of the server. It is the only place enforcement is possible, because a local MCP server runs with the user's full privileges.
Gateway (apps/gateway)x402 merchant. Sells signed attestations, runs the claim flow, writes ENS, logs to HCS, mints HTS certificates, verifies World proofs.
Worker (npm run worker)Runs on a machine with Docker. Derives a server's tool manifest inside a no-network sandbox. Holds no keys.
Web app (apps/web)Marketplace, public /check, Fleet, Claim, Maintain, On-chain console, Docs, Pitch.
Agent Kit plugin (packages/agent-kit-plugin)Lets any Hedera Agent Kit agent check a server and read its own identity.
The simple sequence
sequenceDiagram
  autonumber
  participant A as Agent
  participant P as Proofmark proxy
  participant G as Gateway
  participant E as ENS (Sepolia)
  participant H as Hedera
  participant S as MCP server
  A->>P: connect to "io.github.acme/files"
  P->>G: GET /attest (signed by the agent)
  G->>E: who maintains it? is the key live? is the agent allowed to spend?
  G-->>P: 402 Payment Required, $0.002
  P->>H: pay over x402 (no human)
  H-->>G: settled · logged on HCS
  G-->>P: signed {artifactHash, toolManifestHash}
  P->>S: start the pinned build
  S-->>P: tools/list
  P->>P: hash the tools it received and compare
  P-->>A: the permitted tools, or a refusal naming what changed

The same flow without Mermaid:

 Agent        Proxy            Gateway             ENS        Hedera        Server
   │  connect   │                 │                 │            │             │
   │──────────▶ │  GET /attest    │                 │            │             │
   │            │───────────────▶ │  read records   │            │             │
   │            │                 │───────────────▶ │            │             │
   │            │  402 · $0.002   │ ◀───────────────│            │             │
   │            │ ◀───────────────│                 │            │             │
   │            │  pay over x402 ────────────────────────────────▶ │             │
   │            │                 │ ◀── settled + HCS log ───────│             │
   │            │  signed hashes  │                 │            │             │
   │            │ ◀───────────────│                 │            │             │
   │            │  start pinned build ───────────────────────────────────────▶ │
   │            │ ◀──────────────────────────────────────── tools/list ────────│
   │            │  hash + compare │                 │            │             │
   │  tools ✓   │                 │                 │            │             │
   │ ◀──────────│   (or ✗ refused, naming the added tool)                      │

The flows

Flow 1 · A maintainer claims a server (about a minute)
  Maintainer                         Gateway                               Chains
  ──────────                         ───────                               ──────
  1. Enter registry name ─────────▶  Is it in the official MCP registry?
     connect MetaMask                Does this wallet control the
                                     namespace? (GitHub gist / domain)
                                              │ yes
  2. World ID proof ──────────────▶  Verify proof on the backend,
     (Proof of Human)                reject a reused nullifier
                                              │ valid
  3. Org name, payout   ──────────▶  Register  sam.proofmark.eth  ───────▶  ENSv2 · Sepolia
     account, price                  its own resolver + records            (registry, resolver,
                                     server name → org                      records, roles)
                                              │
  4. Bond: 50 HBAR from payout ───▶  Verify on the mirror node    ───────▶  Hedera
     account to 0.0.11344995         write bond.tx on ENS, log on HCS       (transfer + HCS)
                                              │
                                     Server leaves the sandbox once it has
                                     a live key and an attestation
Flow 2 · A release is attested
  ┌───────────────┐  pinned build   ┌──────────────────────────┐   tools/list    ┌────────────┐
  │ MCP registry  │ ──────────────▶ │ Worker (Docker sandbox)  │ ──────────────▶ │ canonical  │
  │ npm / OCI /   │  hash checked   │ --network none           │                 │ SHA-256 of │
  │ mcpb          │  against the    │ --read-only --cap-drop   │                 │ names,     │
  └───────────────┘  registry       └──────────────────────────┘                 │ schemas    │
                                                                                 └─────┬──────┘
          ┌──────────────────────────────────────────────────────────────────────────┘
          ▼
  { server, version, artifactHash, toolManifestHash, attestKey, validUntil }
          │ signed by a co-maintainer key that is live on ENS
          ▼
  Gateway re-checks everything ──▶ full record on HCS ──▶ HTS NFT certificate minted

The manifest is derived, never requested. Because it comes from running the hash-verified build, a server cannot show one tool list to the attester and another to the user without also changing the build, which the artefact hash catches.

Flow 3 · An agent connects (the hero flow)
   resolve        pay              verify              connect
 ┌─────────┐   ┌─────────┐   ┌──────────────────┐   ┌───────────┐
 │ ENS:    │──▶│ x402 on │──▶│ artefact hash  ✓ │──▶│ session   │
 │ org,    │   │ Hedera  │   │ manifest hash  ✓ │   │ with the  │
 │ price,  │   │ $0.002  │   │ key live       ✓ │   │ permitted │
 │ key     │   │ no human│   │ pass + allowance✓│   │ tools     │
 └─────────┘   └─────────┘   └──────────────────┘   └─────┬─────┘
                                                         │ keeps watching:
                                                         │ • tools/list_changed → re-hash
                                                         │ • HCS revocation topic → seconds
                                                         │ • ENS re-check every 15 s
Flow 4 · The attack is caught
  Yesterday (attested)                 Today (served)
  ┌──────────────────────┐             ┌──────────────────────┐
  │ list_dir             │             │ list_dir             │
  │ read_file            │             │ read_file            │
  │                      │             │ read_env   ◀── NEW   │
  └──────────┬───────────┘             └──────────┬───────────┘
             ▼                                    ▼
      0x0e05fb00…72d5f0        ≠           0x9c1a77e2…0b31d4
                          │
                          ▼
     ✗ BLOCKED · manifest-mismatch · "added: read_env"
       The model never sees the tool list. No connection is made.
Flow 5 · Revocation across a fleet
  Maintainer revokes bob.acme.proofmark.eth
        │
        ├──▶ ENS: attest.key cleared  (source of truth)
        │
        └──▶ HCS topic 0.0.11344888: {org, key, reason, ts}
                    │
                    │  mirror node subscription (measured 2.1 s)
         ┌──────────┼───────────┬─────────────┐
         ▼          ▼           ▼             ▼
     agent-1    agent-2      agent-3   ...  agent-n      → all go red
     ✗ blocked  ✗ blocked    ✗ blocked      ✗ blocked
     Alice's attestations are untouched: only Bob's key was revoked.
Flow 6 · Spend authority and the denied path
                        ┌──────────────── before ANY payment ───────────────┐
  agent asks to pay ──▶ │ World Agent Pass valid and fresh?  ── no ──▶ 403  │ ✗ no payment
                        │ Operator allowance on Hedera left? ── no ──▶ 403  │ ✗ no connect
                        │ Inside the ENS budget?             ── no ──▶ 403  │
                        └──────────────────────┬────────────────────────────┘
                                               │ all yes
                                               ▼
                                     pay $0.002 over x402
The three tiers
                    ┌──────────────────────────┐
     name unclaimed │        SANDBOXED         │  runs in a container:
   ───────────────▶ │ --network none --read-only│  read-only tools only
                    └────────────┬─────────────┘
                                 │ claimed + namespace proof + bond + live key
                                 ▼
                    ┌──────────────────────────┐
                    │          GREEN           │  full tool set,
                    │  both hashes match       │  maintainer paid
                    └────────────┬─────────────┘
       hash mismatch · key revoked/expired · bond forfeited · typosquat
                                 ▼
                    ┌──────────────────────────┐
                    │         BLOCKED          │  refused, reason shown,
                    │                          │  alternative offered
                    └──────────────────────────┘

There is no amber tier. "Pin to the last good version" would let an attacker freeze everyone on a vulnerable build simply by stopping attestation.


Using Proofmark

If you are a judge: two minutes
  1. Open /check and type any MCP server name, for example io.github.SamuelDharshi/proofmark-files. You see its tier, its reason and its three layers, all read live from ENS and Hedera.
  2. Open /log, the On-chain console. Every payment, HCS message, HTS mint and allowance appears live from the Hedera mirror node. Click any row to open it on HashScan. Press F12 to see each transaction printed to the console.
  3. Open /marketplace to browse real registry servers graded green, sandboxed or blocked, with prices in HBAR.
  4. Read docs/TESTING.md for every transaction from the live test runs.
If you maintain an MCP server
StepWhereWhat you doWhat happens on-chain
1/claim → ServerPress Connect wallet (top right). Enter your registry name. Publish the one-line gist the page shows, then Verify ownershipNothing yet. The gateway reads the registry and your gist
2/claim → HumanVerify with World IDThe proof is checked on the gateway and its nullifier stored
3/claim → OrganisationChoose an org name, a Hedera payout account and a priceOrg, resolver and records written to ENSv2 on Sepolia
4/maintain → BondSend 50 HBAR from your payout account to 0.0.11344995, paste the transaction id, signbond.tx on ENS, an HCS audit message
5/maintain → Co-maintainerAdd a name, a key address and an expiry, then signAn expiring ENS subname with a role that can only set attest.key
6/maintain → AttestStart the worker (below), press Derive, sign and publish, signThe full record on HCS, plus an HTS NFT certificate
7/maintain → RevokeRevoke a keyOne ENS write plus an HCS message. Connected agents block in seconds

The worker for step 6 runs on your machine, because deriving the manifest needs Docker:

wsl -u root service docker start        # Windows with Docker in WSL; skip on macOS/Linux
npm run worker -w @proofmark/gateway     # listens on 127.0.0.1:8788, holds no keys

All of steps 4 to 6 can also run from a terminal:

npm run bond:pay -w @proofmark/gateway -- <payout account> <payout key> 50
npm run maintain -w @proofmark/gateway -- <org> <registry name> <label> <days>
If you run agents
  1. Fleet page (/fleet): each agent card shows its ENS name, HCS-14 UAID, ERC-8004 id, budget, operator allowance and Agent Pass.
  2. Get pass: the gateway starts World's device flow, and you approve once in World. The validated pass is written to the agent's ENS name. Without it, the agent cannot pay, which is the denied path.
  3. Allowance: approve or withdraw the operator's Hedera allowance to the agent:
     npm run allowance -w @proofmark/gateway -- approve 5     # cap in HBAR
     npm run allowance -w @proofmark/gateway -- withdraw
  4. Point your agent at the proxy instead of the server, for example in Claude Code's MCP config:

     {
       "mcpServers": {
         "files": {
           "command": "npx",
           "args": ["tsx", "apps/proxy/src/cli.ts",
                    "--server", "io.github.SamuelDharshi/proofmark-files",
                    "--gateway", "https://proofmark-gateway.onrender.com",
                    "--", "npx", "-y", "proofmark-files", "."],
           "env": { "AGENT_ENS_NAME": "claude-1.agents.proofmark.eth" }
         }
       }
     }

    The agent also gets two tools of its own: proofmark_explain (why a server has its tier) and proofmark_budget (its spend, caps and pass).

If you build with the Hedera Agent Kit
import { proofmarkPlugin } from "@proofmark/agent-kit-plugin";
// adds PROOFMARK_CHECK_SERVER_TOOL and PROOFMARK_AGENT_IDENTITY_TOOL to any Agent Kit agent

Proof it runs

Every link below is a real transaction. The full list from the latest runs, including bond, revocation and allowance transactions, is in docs/TESTING.md.

Hedera testnet

WhatLink
x402 settlement: agent 0.0.11331191 pays maintainer 0.0.8149406 $0.002 (0.02 HBAR), no human approving0.0.7162784-1793921712-374513238
HCS audit topic: every attestation, payment and identity0.0.11331506
HCS revocation topic, subscribed to by proxies0.0.11344888
HTS attestation certificates (PMARK)0.0.11341242
Bond account, a 2-of-2 key list0.0.11344995
A 50 HBAR bond verified; a 5 HBAR one rejectedverified · rejected
Operator allowance withdrawn (payment refused), then approved againwithdraw · approve

Sepolia (ENSv2 and ERC-8004)

WhatLink
Root nameproofmark.eth
Org registry and resolver proxies for an orgresolver · registry
Co-maintainer added with an expiring key and a role scoped to attest.keysubname · role · key
...and revoked; a connected proxy saw it 2.1 s after the HCS submitrevoke
An unauthorised write to status by a co-maintainerreverts with EACUnauthorizedAccountRoles
Agent claude-1.agents.proofmark.eth registered in the ERC-8004 Identity Registry (#11294)register · ENS records

Automated

SuiteResult
npm test: canonical hashing, tiers, typosquats, proxy mismatch refusal, revocation watcher, HCS rebuild30 / 30 pass
npm run live:check -w @proofmark/gateway: the deployed system against both chains and World22 / 22 pass
npm run e2e -w @proofmark/gateway: real bond, revocation, allowance and sandbox transactions16 / 16 pass

Track requirements

Hedera · AI Agents That Pay: x402
RequirementHow Proofmark meets itCode
x402-protected endpoint settling on Hedera through a listed facilitatorGET /attest uses the @x402/hedera exact scheme with Blocky402x402.ts
An agent completes a paid request with no human approvingThe proxy pays on its own. The Agent Pass and allowance gate authority to spend, not each paymentconnect.ts
README with setup, architecture, payment flow and a settled transaction idThis file: How it works, Flow 3, Proof it runs
Extra: spending controlsPer-payment cap, ENS budget, on-chain operator allowanceallowance.ts
Extra: HCS audit logAttestations, payments, identity, bond and revocation messageshcs.ts
Extra: HCS-14 and ERC-8004 identityUAID on the agent's ENS name and anchored on HCS; ERC-8004 agent #11294identity.ts
Extra: HTSEach attestation minted as an NFT certificatehts.ts
Extra: Hedera Agent Kit@proofmark/agent-kit-pluginpackages/agent-kit-plugin
ENS · Best Use of ENSv2
RequirementHow Proofmark meets itCode
ENSv2 on Sepolia, addresses from the deployments tableAddresses and ABIs load from the deployments exportdeployments.sepolia.json
ENS central, not cosmeticEvery tier decision reads ENS: org, payout, price, keys, bond, domain, agentschain.ts
Permissioned Registry, a Permissioned Resolver per org, EAC roles scoped per recordOne resolver per org; co-maintainers can only set attest.keyens.ts
Expiring co-maintainer subnames, surgical revocationRevoke Bob and Alice's attestations standens.ts
Wildcard, public read-only pageAny unclaimed name resolves to sandboxed on /checkcheck.ts
Agents as namespacesclaude-1.agents.proofmark.eth holds budget, allowed tools, max risk, pass, UAID, ERC-8004chain.ts
World · Agent Pass and IDKit
RequirementHow Proofmark meets itCode
Official Agent Pass, protecting a meaningful actionThe protected action is an agent spending money and connecting to a server with shell accessidp.ts
Complete journeyDevice flow request → person approves in World → ID token validated on the gateway → pass written to ENS → paid connectagents.ts
Denied, expired or cancelled pathNo pass, expired pass or a declined request: HTTP 403 before any payment, no connectionattest.ts
Secure backend validationRP signing, proof and token checks happen only on the gatewayworld.ts
IDKit with a supported credential, verified on the serverProof of Human (or passport or national ID) on the maintainer claim, with the nullifier checkedworld.ts
Why this credential is the minimum sufficientThe trust event is claiming a server name, and it needs one person, one claim. A passport adds friction without proving the holder is the maintainer, so the namespace proof and bond carry identityWORLD_DEBRIEF.md
Integration debriefTime to first success, friction, missing docs, the one improvementWORLD_DEBRIEF.md

Design details

The two hashes
HashSourceCatches
ArtefactThe registry's integrity field: mcpb fileSha256, OCI digest, npm dist.integrityA changed binary
Tool manifestSHA-256 over sorted tool names, descriptions and input schemasThe same binary quietly offering a new tool

Canonicalisation sorts keys, normalises whitespace and strips volatile fields, so honest servers never trip a false mismatch: canonical.ts.

Rechecks
  • At connect: both hashes, key liveness, pass and allowance.
  • On every tools/list_changed: re-hash mid-session (cli.ts).
  • Revocation topic: a subscription through the mirror node drops a session within seconds (revocations.ts).
  • Every 15 seconds: liveness re-read from ENS through the gateway. A missed HCS message only delays a block; it never allows one.
  • Fail closed: if liveness cannot be confirmed for 3 checks in a row (45 s), the session blocks with liveness-unknown. A gateway outage never keeps a session trusted.
  • Each attestation carries revocationCheckedAt and a 24-hour validUntil, so it goes stale rather than becoming a free pass.
The ENS tree
proofmark.eth                          Permissioned Registry, run by Proofmark
├── *.proofmark.eth                    wildcard: any unclaimed server → sandboxed
├── sam.proofmark.eth                  maintainer org, owned by the claiming wallet
│     status · payto · x402.price · world.verified
│     bond.tx · bond.status · domain.verified
│   ├── main.sam.proofmark.eth         co-maintainer: attest.key, expires in 180 days
│   └── bob.sam.proofmark.eth          co-maintainer: attest.key, revocable alone
├── <server>.proofmark.eth             the server name → resolves to its org
└── agents.proofmark.eth
    └── claude-1.agents.proofmark.eth  agent: budget · allowed.tools · maxrisk
                                       pass.* · hcs14.uaid · erc8004 · operator

There is one resolver instance per org, because argument-scoped grants apply to every name an instance serves. Claim and revoke are one write each, and nothing is written per attestation.

What lives where
WhereWhat
ENSv2 on SepoliaWho may vouch, and whether they still may: orgs, keys, bonds, domains, agents
Hedera HCSThat it happened, and when: every attestation, payment, identity and revocation, replayable by anyone
Hedera HTSA certificate NFT for each attested version
Hedera accountsx402 settlement, operator allowances, the 2-of-2 bond account
GatewayOnly caches. Attestations are rebuilt from HCS after a restart

Run it yourself

npm install
cp .env.example .env                                  # fill in the values below
npm run keys -w @proofmark/gateway                    # a signing key for ATTEST_PRIVATE_KEY
npm run hcs:create -w @proofmark/gateway              # HCS_TOPIC_ID
npm run hcs:create -w @proofmark/gateway -- revocations   # REVOKE_TOPIC_ID
npm run hts:create -w @proofmark/gateway              # HTS_TOKEN_ID
npm run bond:create -w @proofmark/gateway             # BOND_ACCOUNT_ID
npm run ens:status -w @proofmark/gateway              # confirms the admin wallet owns the root name
npm run agents:create -w @proofmark/gateway -- 2 5 1  # 2 agents, 5 HBAR each, $1 budget
npm run gateway                                       # http://localhost:8787
npm run web                                           # http://localhost:3000
npm test                                              # 30 unit tests
npm run live:check -w @proofmark/gateway              # the deployed system, end to end
AccountWhat you need
HederaA testnet account with an ECDSA key: the gateway payee, HCS submitter and funder
ENSA Sepolia wallet that owns the root name, with Sepolia ETH
World Agent PassAn OIDC client from the World IdP portal
World IDKitAn app, RP id and signing key from the Developer Portal
DockerOnly on the machine that runs the attestation worker

Repo map

packages/core              canonical manifest hash, tier policy, typosquat check, explorer links
packages/runner            spawns an MCP server, in a hermetic container when available
packages/agent-kit-plugin  Hedera Agent Kit plugin
apps/gateway               Hono gateway: x402, attest, HCS, HTS, ENS, World, claim, bond, revoke
apps/gateway/src/scripts   live:check, e2e, worker, maintain, bond, allowance, setup scripts
apps/proxy                 the MCP proxy agents connect through
apps/demo-server           MCP test fixture for the proxy tests (the read_env attack)
apps/web                   Next.js app: landing, marketplace, check, fleet, claim, maintain, on-chain, docs, pitch
publish/files-server       proofmark-files, a real server published to npm and the MCP registry
docs                       TESTING.md, WALKTHROUGH.md, WORLD_DEBRIEF.md, architecture diagram
feedback                   one FEEDBACK.md per sponsor: Hedera, ENS, World

Limits, stated plainly

  • Not a scanner. A verified maintainer can still ship malicious code. Proofmark makes that attack cost a unique identity, a namespace and a bond, keeps it revocable, and leaves a record.
  • Hosted remote servers get liveness, identity and revocation, but no integrity guarantee. A remote endpoint can show the attester a different face. Clients report the hashes they observe so divergence is flagged.
  • The gateway is trusted to run the sandboxed derivation honestly and to mark a bond forfeited. A contract or HTS escrow for the bond is the next step.
  • World proves uniqueness, not identity. A shared credential is a known weakness, which is why the namespace proof and the bond exist.

Prior art

WorkWhat it doesWhat it leaves open
Stacklok ToolHiveSigstore signatures and build attestations on MCP images before deployNo revocation, no identity beyond a GitHub account, nothing after deploy
Tool-definition hash pinningCanonical SHA-256 over tool definitionsNobody ships or signs it; nothing binds it to a person
Official MCP registryVerifies name ownership. Proofmark uses itNo signing, no revocation, no identity
A trustworthy MCP registrySigstore signing plus runtime JWSNo revocation, no human identity, no payments

Proofmark adds three narrow things: revocation that reaches a running fleet, a unique, domain-verified, bonded maintainer instead of one account, and a recurring payment that keeps the freshness check sustainable.


How AI was used

Following ETHGlobal's rules: an AI coding assistant (Claude Code) was used throughout, to write and refactor code, tests and documentation, to run the on-chain test scripts, and to draft the pitch decks. The architecture, the product decisions and every on-chain approval were made by the team. Every transaction listed above was checked on HashScan or Etherscan.

Credits

Marks for Hedera, ENS, World, MetaMask and the Model Context Protocol belong to their owners and appear here only to show the technology Proofmark is built with.

الأسئلة الشائعة

ما هو Proofmark Units؟

Convert between units of length, mass, temperature and data size.

كيف أثبّت Proofmark Units؟

يعمل على جهازك. في Claude Code: claude mcp add proofmark-units -- npx -y proofmark-units@1.0.0. وفي العملاء الآخرين، الصق إعداد JSON من هذه الصفحة في إعدادات MCP الخاصة بهم.

هل يحتاج Proofmark Units إلى مفتاح API؟

لا يذكر إدراجه في السجل أي مفتاح أو سر إلزامي. قد تتطلب بعض الميزات حسابًا لدى الخدمة التي يتصل بها.

هل Proofmark Units مفتوح المصدر؟

شيفرته علنية على GitHub، لكن المستودع لا يعلن ترخيصًا قياسيًا.

من يصون Proofmark Units؟

ينشره SamuelDharshi. يدرجه AI.tn لكنه لا يصونه ولا يوصي به.

من سجل MCP الرسمي. الإدراج ليس توصية: راجع شيفرة الخادم وصلاحياته قبل منحه الوصول إلى بياناتك.