{"_id":"@chainvue/v402-mcp","_rev":"3-a219e12c347797e7ff701e0af504d268","name":"@chainvue/v402-mcp","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@chainvue/v402-mcp","version":"0.1.0","author":{"url":"chainvue","name":"Robert Lech"},"license":"Apache-2.0","_id":"@chainvue/v402-mcp@0.1.0","maintainers":[{"name":"devdudeio","email":"fLoAtivErImE@proton.me"}],"homepage":"https://github.com/chainvue/v402/tree/main/packages/mcp#readme","bugs":{"url":"https://github.com/chainvue/v402/issues"},"bin":{"v402-mcp":"dist/main.js"},"dist":{"shasum":"155b6b912a999c0a768268324ebcbbb95c926e00","tarball":"https://registry.npmjs.org/@chainvue/v402-mcp/-/v402-mcp-0.1.0.tgz","fileCount":19,"integrity":"sha512-OjGzGZuwE9ti1HQHCbQ+8gMpfihaRFsR0Gd5hIbBMog9chBKL19K6JZmoSRn+uY+EEvR87V4WSORnv7CuPFSJg==","signatures":[{"sig":"MEQCIDWlj8u3mAsK8MK6qriN7OOkA7B2E0e2GYnx/52DweCfAiAOkCgnSSpg30mAkByzVE05Kt8h5jlaxUOjgKeeqKt6sQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38011},"main":"./dist/index.js","type":"module","_from":"file:chainvue-v402-mcp-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","start":"node --enable-source-maps dist/main.js","typecheck":"tsc -p tsconfig.json"},"_npmUser":{"name":"devdudeio","email":"fLoAtivErImE@proton.me"},"_resolved":"/private/var/folders/lc/_1dmy3kd06b9ryyyvv7pk9vw0000gn/T/b6ad64b320e02b633ae0ae45f1a4fb98/chainvue-v402-mcp-0.1.0.tgz","_integrity":"sha512-OjGzGZuwE9ti1HQHCbQ+8gMpfihaRFsR0Gd5hIbBMog9chBKL19K6JZmoSRn+uY+EEvR87V4WSORnv7CuPFSJg==","repository":{"url":"git+https://github.com/chainvue/v402.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.11.0","description":"MCP server for v402: gives Claude (or any MCP host) tools to autonomously pay for APIs mid-conversation — paid fetch with spending caps, balance, topup instructions and service discovery over a prepaid VerusID balance.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.4.3","@chainvue/v402-protocol":"^0.1.0","@modelcontextprotocol/sdk":"^1.29.0","@chainvue/v402-client-fetch":"^0.1.1","@chainvue/v402-signer-verus":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.2","@nestjs/core":"^11.1.28","@nestjs/common":"^11.1.28","@nestjs/testing":"^11.1.28","reflect-metadata":"^0.2.2","@chainvue/v402-nestjs":"^0.1.1","@chainvue/v402-storage":"^0.1.0","@chainvue/v402-verus-rpc":"^0.1.0","@chainvue/v402-facilitator":"^0.1.3"},"_npmOperationalInternal":{"tmp":"tmp/v402-mcp_0.1.0_1783795795024_0.03080578540183354","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@chainvue/v402-mcp","version":"0.1.1","author":{"url":"chainvue","name":"Robert Lech"},"license":"Apache-2.0","_id":"@chainvue/v402-mcp@0.1.1","maintainers":[{"name":"devdudeio","email":"fLoAtivErImE@proton.me"}],"homepage":"https://github.com/chainvue/v402/tree/main/packages/mcp#readme","bugs":{"url":"https://github.com/chainvue/v402/issues"},"bin":{"v402-mcp":"dist/main.js"},"dist":{"shasum":"9b89855afe63bbdbfa8c181906ac5d66e743affe","tarball":"https://registry.npmjs.org/@chainvue/v402-mcp/-/v402-mcp-0.1.1.tgz","fileCount":19,"integrity":"sha512-GB0KiBybtPlU1oAZpm7dNkHVsAYbZ2wKxlN5r5La/daRp4kyttcYvjD38DBd/NAHglgp5m8xY9ovr/AHp0dryQ==","signatures":[{"sig":"MEUCIQDDd1TdfgO2yUbq2NfvpmNOP3+gm7XNaNyqISCBh+HfHQIgIqBkbiYTl4IdpGawzXItqG6vX/UPBSLcPqUn+4hlgOI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@chainvue%2fv402-mcp@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":38011},"main":"./dist/index.js","type":"module","_from":"file:chainvue-v402-mcp-0.1.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","start":"node --enable-source-maps dist/main.js","typecheck":"tsc -p tsconfig.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3047f60c-3505-4df2-9d38-b2e5a8d09966"}},"_resolved":"/tmp/7d542f646955111a82ecda446bbce377/chainvue-v402-mcp-0.1.1.tgz","_integrity":"sha512-GB0KiBybtPlU1oAZpm7dNkHVsAYbZ2wKxlN5r5La/daRp4kyttcYvjD38DBd/NAHglgp5m8xY9ovr/AHp0dryQ==","repository":{"url":"git+https://github.com/chainvue/v402.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.17.0","description":"MCP server for v402: gives Claude (or any MCP host) tools to autonomously pay for APIs mid-conversation — paid fetch with spending caps, balance, topup instructions and service discovery over a prepaid VerusID balance.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","dependencies":{"zod":"^4.4.3","@chainvue/v402-protocol":"^0.2.0","@modelcontextprotocol/sdk":"^1.29.0","@chainvue/v402-client-fetch":"^0.2.0","@chainvue/v402-signer-verus":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.2","@nestjs/core":"^11.1.28","@nestjs/common":"^11.1.28","@nestjs/testing":"^11.1.28","reflect-metadata":"^0.2.2","@chainvue/v402-nestjs":"^0.1.3","@chainvue/v402-storage":"^0.2.0","@chainvue/v402-verus-rpc":"^0.1.0","@chainvue/v402-facilitator":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/v402-mcp_0.1.1_1783985712967_0.11682554517398058","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@chainvue/v402-mcp","version":"0.1.2","description":"MCP server for v402: gives Claude (or any MCP host) tools to autonomously pay for APIs mid-conversation — paid fetch with spending caps, balance, topup instructions and service discovery over a prepaid VerusID balance.","repository":{"type":"git","url":"git+https://github.com/chainvue/v402.git","directory":"packages/mcp"},"homepage":"https://github.com/chainvue/v402/tree/main/packages/mcp#readme","bugs":{"url":"https://github.com/chainvue/v402/issues"},"license":"Apache-2.0","author":{"name":"Robert Lech"},"type":"module","sideEffects":false,"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"bin":{"v402-mcp":"dist/main.js"},"dependencies":{"@chainvue/v402-client-fetch":"0.2.1","@chainvue/v402-protocol":"0.2.0","@chainvue/v402-signer-verus":"0.1.2","@modelcontextprotocol/sdk":"^1.29.0","zod":"^4.4.3"},"devDependencies":{"@chainvue/v402-facilitator":"0.3.0","@chainvue/v402-nestjs":"0.1.4","@chainvue/v402-storage":"0.3.0","@chainvue/v402-verus-rpc":"0.1.0","@nestjs/common":"^11.1.28","@nestjs/core":"^11.1.28","@nestjs/testing":"^11.1.28","reflect-metadata":"^0.2.2","rxjs":"^7.8.2"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json","test":"vitest run","start":"node --enable-source-maps dist/main.js"},"_id":"@chainvue/v402-mcp@0.1.2","_integrity":"sha512-530oTFOUnA6piOPiF6wqr5incY8TMKio4psfKbrqVo9frsYaktxlTfwrz+IiBolgwsJpe2UvN4EdZYB7kU/YLg==","_resolved":"/tmp/71742ca5ea1f20b3fd2b78a8fedea45f/chainvue-v402-mcp-0.1.2.tgz","_from":"file:chainvue-v402-mcp-0.1.2.tgz","_nodeVersion":"26.5.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-530oTFOUnA6piOPiF6wqr5incY8TMKio4psfKbrqVo9frsYaktxlTfwrz+IiBolgwsJpe2UvN4EdZYB7kU/YLg==","shasum":"0e69069b0adde329f66efbaf77d79cdd9cb3dddc","tarball":"https://registry.npmjs.org/@chainvue/v402-mcp/-/v402-mcp-0.1.2.tgz","fileCount":19,"unpackedSize":37993,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@chainvue%2fv402-mcp@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCtokKt2XQSbXYY3wBe3zAG/Vza/FsmDGByVEf5OCjN7AIhAKem+XD8jx37ZPeG9jDIwR/y/LvPFDJOS79mS2Ubxvg4"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3047f60c-3505-4df2-9d38-b2e5a8d09966"}},"directories":{},"maintainers":[{"name":"devdudeio","email":"fLoAtivErImE@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/v402-mcp_0.1.2_1784047006438_0.06860621814106382"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-11T18:49:54.745Z","modified":"2026-07-14T16:36:46.886Z","0.1.0":"2026-07-11T18:49:55.168Z","0.1.1":"2026-07-13T23:35:13.111Z","0.1.2":"2026-07-14T16:36:46.599Z"},"bugs":{"url":"https://github.com/chainvue/v402/issues"},"author":{"name":"Robert Lech"},"license":"Apache-2.0","homepage":"https://github.com/chainvue/v402/tree/main/packages/mcp#readme","repository":{"type":"git","url":"git+https://github.com/chainvue/v402.git","directory":"packages/mcp"},"description":"MCP server for v402: gives Claude (or any MCP host) tools to autonomously pay for APIs mid-conversation — paid fetch with spending caps, balance, topup instructions and service discovery over a prepaid VerusID balance.","maintainers":[{"name":"devdudeio","email":"fLoAtivErImE@proton.me"}],"readme":"# @chainvue/v402-mcp\n\nMCP server for [v402](https://github.com/chainvue/v402): gives Claude (or\nany MCP host) the ability to **pay for APIs mid-conversation** from a\nprepaid VerusID balance — with hard, operator-controlled spending limits.\n\n| Tool | What it does |\n|---|---|\n| `v402_paid_fetch` | fetch a URL; if it answers 402, pay and retry — within the caps |\n| `v402_balance` | signature-authenticated balance/reserved/available |\n| `v402_topup_instructions` | how to fund the identity (text, URI, QR) |\n| `v402_discover` | a service's `/.well-known/v402` incl. the endpoint rate card |\n\n## Spending protection\n\nGuardrails live on the agent boundary, not in the model's goodwill:\n\n- `V402_MCP_MAX_PER_REQUEST` — refuse any single price above this (checked\n  against the 402 challenge **before** signing anything).\n- `V402_MCP_MAX_TOTAL` — cumulative cap per server process.\n- `V402_MCP_ALLOWED_HOSTS` — comma list of hosts the agent may call at all.\n\n## Claude Desktop / Claude Code setup\n\n```json\n{\n  \"mcpServers\": {\n    \"v402\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@chainvue/v402-mcp\"],\n      \"env\": {\n        \"V402_MCP_FACILITATOR\": \"https://facilitator.example.com\",\n        \"V402_MCP_IDENTITY\": \"myagent@\",\n        \"VERUS_SIGNING_KEY\": \"<WIF of a primary key of myagent@>\",\n        \"V402_MCP_IDENTITY_ADDRESS\": \"<i-address of myagent@>\",\n        \"V402_MCP_SYSTEM_ID\": \"<chain i-address, e.g. iJhCez… for VRSCTEST>\",\n        \"V402_MCP_MAX_PER_REQUEST\": \"0.01\",\n        \"V402_MCP_MAX_TOTAL\": \"1\",\n        \"V402_MCP_ALLOWED_HOSTS\": \"api.example.com\"\n      }\n    }\n  }\n}\n```\n\n`V402_MCP_IDENTITY_ADDRESS` + `V402_MCP_SYSTEM_ID` switch the signer to\nidentity-mode signatures — **required against a real chain** (address-mode\nsignatures do not verify for `…@` payers). Resolve both once via\n`getidentity myagent@` (`identityaddress`, `systemid`); block heights come\nfrom the facilitator's health endpoint automatically.\n\nThen ask Claude things like *\"check my v402 balance\"* or *\"fetch\nhttps://api.example.com/api/report and summarize it\"* — the 402 handshake,\nsigning and two-phase payment happen transparently, and every paid call\nreports the price and the session total back into the conversation.\n\n## Trying it on VRSCTEST\n\n1. Run the demo stack: `docker compose up` in the\n   [v402 repo](https://github.com/chainvue/v402) (facilitator + priced demo\n   API), or point at any deployed v402 service.\n2. Register/fund an agent identity (see\n   [`docs/integration/discovery-topup.md`](https://github.com/chainvue/v402/blob/main/docs/integration/discovery-topup.md)).\n3. Wire the MCP config above at the facilitator/demo URLs.\n\nThe security model in one line: the model decides *what* to fetch, the\noperator decides *how much it may ever spend* — keys never leave the MCP\nprocess, prices are verified against the signed canonical payload\nserver-side, and every request is replay-protected.\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md"}