Copy this repo, write ~40 lines of business logic, and list a paid, receipted, verifiable tool on market.auths.dev — in an afternoon, with no crypto code and no chain node.
Your tool is a plain MCP server over stdio. Everything hard is done by two things you never reimplement:
- The
authstrust core (pip install auths/@auths-dev/sdk): when your tool needs anything signed or verified — re-derive a spend, verify an evidence bundle, check an activity attestation — you callauths.evidence.*. One Rust implementation behind every language; your output is byte-identical and mutually verifiable with every other tool's. - The gateway (
npx -y @auths-dev/mcp wrap … -- <your server>): meters and settles every call on x402 and writes your signed spend log. You never touch payments.
cd python
pip install -e . # installs `auths` + the MCP SDK
python server.py # it's a stdio MCP server — that's itWrap it to meter it (this is what a buyer runs; you run it to test):
npx -y @auths-dev/mcp wrap --scope paid.call --budget '$5' --rail x402 --test-mode \
-- python server.py- Publish your signed
activity/v1attestation +audit.jsonat a public https URL (auths-mcp export-attestationproduces both — your raw per-call log never gets published; the attestation is an aggregate). - On market.auths.dev/sell, submit:
- endpoint: the bare command (
python server.py) — never a wrap line; - attestation URL: where
activity.jsonlives.
- endpoint: the bare command (
- The prober checks your server serves every listed tool and your attestation is well-formed → the listing goes live. Real settled calls the market witnesses growing → proven-live.
cd typescript && npm install && npm startSame shape: @modelcontextprotocol/sdk for the shell, @auths-dev/sdk for
anything signed/verified.
Your tool is a formatter over verified facts, never the verifier. If you
find yourself parsing a KEL or re-implementing a signature check, stop — that
belongs in the auths core, reached through the binding.