{"_id":"@tensorfeed/x402-base-mcp","_rev":"6-316397f24c6651be1a6a7e76d157203c","name":"@tensorfeed/x402-base-mcp","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.0":{"name":"@tensorfeed/x402-base-mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","x402","base","ethereum","evm","usdc","afta","agent-payments","tensorfeed"],"author":{"name":"Pizza Robot Studios"},"license":"MIT","_id":"@tensorfeed/x402-base-mcp@0.1.0","maintainers":[{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"}],"homepage":"https://tensorfeed.ai","bugs":{"url":"https://github.com/RipperMercs/tensorfeed-x402-base-mcp/issues"},"bin":{"tensorfeed-x402-base-mcp":"dist/index.js"},"dist":{"shasum":"fed7ac7487e2aebafb0ad55c5a207bb8692e0c80","tarball":"https://registry.npmjs.org/@tensorfeed/x402-base-mcp/-/x402-base-mcp-0.1.0.tgz","fileCount":52,"integrity":"sha512-+xPv2030m56pZMrqLHki1eJrXb3nZXu2HG7MmSg5fsgwZKR4VitjBp6zcBQmX9O+Pv5Q+8cbK5DLa1AEVZOEGQ==","signatures":[{"sig":"MEQCID2F0r0S8qFnGSzpUWV6A9Uzz6TS8f4+Nt9KbHobxhHxAiA8I8+0gX8AlHl+p14hcoaEsmEwe+bS3QQYwCIlNywLEg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@tensorfeed%2fx402-base-mcp@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":742718},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"fe2f363d5e17ba777e283c9e1101e9c4fb7fdac3","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"},"repository":{"url":"git+https://github.com/RipperMercs/tensorfeed-x402-base-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Read-only MCP server for x402 payment verification on Base mainnet. The x402 ecosystem's canonical chain reader, with AFTA federation helpers.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.23.0","viem":"^2.21.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","vitest":"^1.4.0","typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/x402-base-mcp_0.1.0_1778549213820_0.8529550032238253","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@tensorfeed/x402-base-mcp","version":"0.1.1","keywords":["mcp","model-context-protocol","x402","base","ethereum","evm","usdc","afta","agent-payments","tensorfeed"],"author":{"name":"Pizza Robot Studios"},"license":"MIT","_id":"@tensorfeed/x402-base-mcp@0.1.1","maintainers":[{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"}],"homepage":"https://tensorfeed.ai","bugs":{"url":"https://github.com/RipperMercs/tensorfeed-x402-base-mcp/issues"},"bin":{"tensorfeed-x402-base-mcp":"dist/index.js"},"dist":{"shasum":"41708a473d121ffd3a62bff3e446ac67e59a2468","tarball":"https://registry.npmjs.org/@tensorfeed/x402-base-mcp/-/x402-base-mcp-0.1.1.tgz","fileCount":52,"integrity":"sha512-NsQY/UVkaOEEwl436xwngtVevmPnMDk3b2Zx/wlcS86ZLxf3FRIVH1u1aL+VMZsQteLvJcleqdj3FdHOVy/EGQ==","signatures":[{"sig":"MEUCIQCbQnbDywZTfkpSBQNmZ5Oo2WaxBDcyONOYxRNQZcsvBwIgAh81atWlMH2K0bkwbICVQ6+wqutCxgYKW6iO7VCFL1k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@tensorfeed%2fx402-base-mcp@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":743067},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"092e3f740f84e753682d5e1d4aa6a60347ff47a1","mcpName":"ai.tensorfeed/x402-base-mcp","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"},"repository":{"url":"git+https://github.com/RipperMercs/tensorfeed-x402-base-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Read-only MCP server for x402 payment verification on Base mainnet. The x402 ecosystem's canonical chain reader, with AFTA federation helpers.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.23.0","viem":"^2.21.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","vitest":"^1.4.0","typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/x402-base-mcp_0.1.1_1778550286675_0.8871574385461076","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@tensorfeed/x402-base-mcp","version":"0.1.2","keywords":["mcp","model-context-protocol","x402","base","ethereum","evm","usdc","afta","agent-payments","tensorfeed"],"author":{"name":"Pizza Robot Studios"},"license":"MIT","_id":"@tensorfeed/x402-base-mcp@0.1.2","maintainers":[{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"}],"homepage":"https://tensorfeed.ai/x402","bugs":{"url":"https://github.com/RipperMercs/tensorfeed-x402-base-mcp/issues"},"bin":{"tensorfeed-x402-base-mcp":"dist/index.js"},"dist":{"shasum":"5e15ea306263b702c31e7ec6101209b2a3d7e905","tarball":"https://registry.npmjs.org/@tensorfeed/x402-base-mcp/-/x402-base-mcp-0.1.2.tgz","fileCount":56,"integrity":"sha512-6LrY96evW6u/8s7Nm0KI30Vue0NyEc9OUHizYR5MfFMyjxrcMMUxpJJuP7P0XRLH9FUv6A07LYoyP+7EsYW6Iw==","signatures":[{"sig":"MEUCIC3QSV8LTX2des+JN6baXWTPm7uulsefUewN4fzHAwUqAiEApfqUrjTq4+MDeK0Fcx5kZfB5U04FICLt6W8Sa4fEQRU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@tensorfeed%2fx402-base-mcp@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":772352},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"9caa191e257d5c693871332d0425648b51247c62","mcpName":"ai.tensorfeed/x402-base-mcp","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"},"repository":{"url":"git+https://github.com/RipperMercs/tensorfeed-x402-base-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Read-only MCP server for x402 payment verification on Base mainnet. The x402 ecosystem's canonical chain reader, with AFTA federation helpers.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.23.0","viem":"^2.21.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","vitest":"^1.4.0","typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/x402-base-mcp_0.1.2_1778553092668_0.6221500262062123","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@tensorfeed/x402-base-mcp","version":"0.1.3","keywords":["mcp","model-context-protocol","x402","base","ethereum","evm","usdc","afta","agent-payments","tensorfeed"],"author":{"name":"Pizza Robot Studios"},"license":"MIT","_id":"@tensorfeed/x402-base-mcp@0.1.3","maintainers":[{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"}],"homepage":"https://tensorfeed.ai/x402","bugs":{"url":"https://github.com/RipperMercs/tensorfeed-x402-base-mcp/issues"},"bin":{"tensorfeed-x402-base-mcp":"dist/index.js"},"dist":{"shasum":"6ec3a60b8285d56b9437719d7ad26d3d11c55af6","tarball":"https://registry.npmjs.org/@tensorfeed/x402-base-mcp/-/x402-base-mcp-0.1.3.tgz","fileCount":56,"integrity":"sha512-xXErq09f6fC4w2q+d+BHHqy5uhaYY39Y+N3272Ipvl0+/mHE0wpkTT8Pu63qx11tDiudvYnSHaxFFQ/ci0FLVA==","signatures":[{"sig":"MEUCIE3noeJ0yeuRY6kdX1aNAGeyp5ncSa7aIvOKIj6E9eX/AiEAhCAqmGNlTOUKN7JHm5odu1NdUcWY1DFSfQBWIjfMbeQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@tensorfeed%2fx402-base-mcp@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":775271},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"c89e4f94c0c547a627db4631ba8234f729b271d8","mcpName":"ai.tensorfeed/x402-base-mcp","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"},"repository":{"url":"git+https://github.com/RipperMercs/tensorfeed-x402-base-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Read-only MCP server for x402 payment verification on Base mainnet. The x402 ecosystem's canonical chain reader, with AFTA federation helpers.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.23.0","viem":"^2.21.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","vitest":"^1.4.0","typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/x402-base-mcp_0.1.3_1778558137267_0.37760580952328837","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@tensorfeed/x402-base-mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","x402","base","ethereum","evm","usdc","afta","agent-payments","tensorfeed"],"author":{"name":"Pizza Robot Studios"},"license":"MIT","_id":"@tensorfeed/x402-base-mcp@0.2.0","maintainers":[{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"}],"homepage":"https://tensorfeed.ai/x402","bugs":{"url":"https://github.com/RipperMercs/tensorfeed-x402-base-mcp/issues"},"bin":{"tensorfeed-x402-base-mcp":"dist/index.js"},"dist":{"shasum":"af4075eb22eaeaf824964f06a77e209d1cc48780","tarball":"https://registry.npmjs.org/@tensorfeed/x402-base-mcp/-/x402-base-mcp-0.2.0.tgz","fileCount":56,"integrity":"sha512-RSmJgaVSomfVTnUjW51kBbvD6+RNq7LsXB/1DWmPSscmYFr6BvnlRrJ4z9SgnJkTAIukP0mwvnSKWgSW7p+ASw==","signatures":[{"sig":"MEUCIBT6tz6I3bIIWduFo8NB3NcyDmKV47YXe16/TIo8uwQbAiEAgC2GeIeKarFapTcofbEap7v6hUtjnGWpfzaNMDZ5BU8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@tensorfeed%2fx402-base-mcp@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":811914},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"8c69b1f8e35b82a4654c3659c3d6e24406f6744c","mcpName":"ai.tensorfeed/x402-base-mcp","scripts":{"dev":"tsx src/index.ts","test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"},"repository":{"url":"git+https://github.com/RipperMercs/tensorfeed-x402-base-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"Read-only MCP server for x402 payment verification on Base mainnet. The x402 ecosystem's canonical chain reader, with AFTA federation helpers.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod":"^3.23.0","viem":"^2.21.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","vitest":"^1.4.0","typescript":"^5.4.0","@types/node":"^20.11.0"},"_npmOperationalInternal":{"tmp":"tmp/x402-base-mcp_0.2.0_1778568332033_0.29520180903333126","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@tensorfeed/x402-base-mcp","version":"0.2.1","mcpName":"ai.tensorfeed/x402-base-mcp","description":"Read-only MCP server for verifying x402 USDC settlements on Base mainnet. The verify-side companion to Coinbase Base MCP, with AFTA federation helpers.","type":"module","main":"dist/index.js","types":"dist/index.d.ts","bin":{"tensorfeed-x402-base-mcp":"dist/index.js"},"scripts":{"build":"tsc","dev":"tsx src/index.ts","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"keywords":["mcp","model-context-protocol","x402","base","ethereum","evm","usdc","afta","agent-payments","tensorfeed"],"author":{"name":"Pizza Robot Studios"},"license":"MIT","homepage":"https://tensorfeed.ai/x402","repository":{"type":"git","url":"git+https://github.com/RipperMercs/tensorfeed-x402-base-mcp.git"},"bugs":{"url":"https://github.com/RipperMercs/tensorfeed-x402-base-mcp/issues"},"engines":{"node":">=18.0.0"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","viem":"^2.21.0","zod":"^3.23.0"},"devDependencies":{"@types/node":"^20.11.0","tsx":"^4.7.0","typescript":"^5.4.0","vitest":"^1.4.0"},"publishConfig":{"access":"public","provenance":true},"gitHead":"48673d0e5663796211973c3ed1c79205702d3fdd","_id":"@tensorfeed/x402-base-mcp@0.2.1","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-HJ9AQSt5ubl5GFdKal47UMHXnKfd5zu3BuSL9OFJZXwchJlmZFDh9vstuwr2u7yK35fYGVsbPnqTLctxs6wLqQ==","shasum":"5201ff8ed2f0f65a167b06ef1173240e2d1e503e","tarball":"https://registry.npmjs.org/@tensorfeed/x402-base-mcp/-/x402-base-mcp-0.2.1.tgz","fileCount":56,"unpackedSize":814038,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCxWew07dF3mWCnzOP0dN6n6nBF+7uxNoPQfV6QmdKf5AIhAOhVQ/ii2BDDp13KtB6I1OCugufB9MBoeORJxwVPpw07"}]},"_npmUser":{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"},"directories":{},"maintainers":[{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/x402-base-mcp_0.2.1_1779939941960_0.2245130314801722"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-12T01:26:53.745Z","modified":"2026-05-28T03:45:42.213Z","0.1.0":"2026-05-12T01:26:53.984Z","0.1.1":"2026-05-12T01:44:46.838Z","0.1.2":"2026-05-12T02:31:32.918Z","0.1.3":"2026-05-12T03:55:37.415Z","0.2.0":"2026-05-12T06:45:32.162Z","0.2.1":"2026-05-28T03:45:42.093Z"},"bugs":{"url":"https://github.com/RipperMercs/tensorfeed-x402-base-mcp/issues"},"author":{"name":"Pizza Robot Studios"},"license":"MIT","homepage":"https://tensorfeed.ai/x402","keywords":["mcp","model-context-protocol","x402","base","ethereum","evm","usdc","afta","agent-payments","tensorfeed"],"repository":{"type":"git","url":"git+https://github.com/RipperMercs/tensorfeed-x402-base-mcp.git"},"description":"Read-only MCP server for verifying x402 USDC settlements on Base mainnet. The verify-side companion to Coinbase Base MCP, with AFTA federation helpers.","maintainers":[{"name":"eatpizzarbt","email":"evan@pizzarobotstudios.com"}],"readme":"# @tensorfeed/x402-base-mcp\n\nRead-only MCP server for verifying x402 USDC settlements on Base mainnet. Drop it into any MCP-compatible agent (Claude Desktop, Claude Code, Cursor, ChatGPT) to independently audit x402 payment receipts on-chain, parse publisher `.well-known/x402` manifests, and check AFTA federation status. No private keys, no signing, no broadcasts.\n\n```\nnpm install -g @tensorfeed/x402-base-mcp\n```\n\n## Relationship to Coinbase Base MCP\n\nCoinbase shipped **Base MCP** (the official `mcp.base.org` server, launched May 2026) as the *transact-side* MCP: it connects an agent to a Base Account and lets the agent propose swaps, transfers, and x402 payments that the user approves in-wallet.\n\nThis package, `@tensorfeed/x402-base-mcp`, is the *verify-side* MCP. Once an x402 payment has been made (by Base MCP, by a server-side `@coinbase/x402` middleware, or by any other x402 client), this server lets the calling agent independently check the on-chain settlement, parse the publisher's `/.well-known/x402` manifest, and audit the receipt. Read-only chain visibility, no wallet.\n\nThe two are complementary, not competing. Use Base MCP to pay. Use this MCP to verify.\n\n## Why a separate verify MCP\n\nx402 is a payment protocol where agents pay merchants in USDC on Base for paid API responses. When an agent receives a payment receipt back, it has two options for confirming that the settlement actually happened the way the receipt claims:\n\n1. Trust the merchant\n2. Read the on-chain Transfer event itself\n\nMost existing EVM MCP servers either require a private key (so the agent can also send transactions, which is operationally risky and unnecessary for verification), or are generic multi-chain readers that don't speak x402. This server is the read-only, x402-aware option. Drop it into a Claude Desktop or Claude Code session and any agent can verify x402 payments without operating a wallet.\n\nThe TensorFeed-flavor tools (`verify_afta_federation`, `tf_payment_lookup`) compose the same primitives against TF's canonical surfaces and demonstrate the pattern. Use them or ignore them; the generic tools work fine on their own.\n\n## Installation\n\n### Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tensorfeed-x402-base\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@tensorfeed/x402-base-mcp\"]\n    }\n  }\n}\n```\n\n### Claude Code\n\n```bash\nclaude mcp add tensorfeed-x402-base -- npx -y @tensorfeed/x402-base-mcp\n```\n\n### Optional: bring your own RPC\n\nThe server defaults to the public Base RPC (`https://mainnet.base.org`), which is fine for casual use. For heavier workloads, set an Alchemy or Infura URL via `TENSORFEED_RPC_URL`. The URL must match the allowlist in `src/rpc/allowlist.ts`; anything else falls back to the public endpoint and logs a warning to stderr.\n\n```bash\nexport TENSORFEED_RPC_URL=\"https://base-mainnet.g.alchemy.com/v2/YOUR_KEY\"\n```\n\nAffiliate links if you don't already have an account:\n- Alchemy: https://www.alchemy.com/\n- Infura: https://www.infura.io/\n\n## Tools\n\n### Generic Base reads\n\n| Tool | Description |\n|------|-------------|\n| `balance` | Native ETH balance for an address |\n| `usdc_balance` | USDC (Circle native bridged) balance for an address |\n| `block_number` | Latest Base block number |\n| `get_tx_receipt` | Full tx receipt with status, gas, and logs summary |\n| `call` | Read-only contract call (eth_call, never broadcasts) |\n| `recent_transfers` | USDC Transfer events involving an address over N blocks |\n\n### x402-native verification\n\n| Tool | Description |\n|------|-------------|\n| `verify_x402_settlement` | Given a tx hash, expected recipient, and expected USDC amount, returns a structured verdict on whether the on-chain Transfer event matches. |\n| `parse_x402_manifest` | Fetches `https://{domain}/.well-known/x402.json`, returns the structured manifest. |\n| `usdc_recent_payments_to` | USDC transfers TO an address over N blocks; the merchant-side view. |\n| `probe_x402_endpoint` | Probes any https URL and reports whether it returns a canonical x402-paid 402 response with `accepts[]`. |\n| `decode_x402_payment_payload` | Offline decode of a base64 `X-PAYMENT` header (Coinbase x402 V2): returns scheme, network, version, EIP-3009 authorization, signature. |\n\n### TensorFeed flavor\n\n| Tool | Description |\n|------|-------------|\n| `verify_afta_federation` | Calls TensorFeed's AFTA certification endpoint for a domain, returns a scored checklist. |\n| `tf_payment_lookup` | Checks whether a tx hash is a USDC payment to TensorFeed's canonical wallet on Base. |\n| `x402_publisher_health` | Returns current outcome + 24h/7d uptime + recent series for a domain monitored by TensorFeed's hourly x402 status probe. |\n| `afta_federation_members` | Returns the canonical curated list of confirmed AFTA federation members (TF origin + federated members). |\n\n## Examples\n\nVerify an x402 settlement (works on TensorFeed's first canonical V2 payment):\n\n```\nverify_x402_settlement({\n  tx_hash: \"0xe20c57d8aa6df63f75ce7a4e4c0cab492eb7fa672a23cd8fd59967eb6b66bd67\",\n  expected_recipient: \"0x549c82e6bFC54bdaE9A2073744CBC2AF5D1FC6D1\",\n  expected_amount_usdc: \"0.02\"\n})\n// returns { ok: true, verified: true, matches: [...] }\n```\n\nInspect a publisher's x402 manifest:\n\n```\nparse_x402_manifest({ domain: \"tensorfeed.ai\" })\n```\n\nCheck AFTA certification:\n\n```\nverify_afta_federation({ domain: \"tensorfeed.ai\" })\n```\n\n## Threat model\n\nRead-only chain-visibility MCP. The full picture is in `SECURITY.md`; the short version:\n\n- **No private keys**, no signing, no broadcasts. The server cannot move funds.\n- **Input validators** on every tool reject malformed inputs (bad checksums, malformed hashes, URL-shaped domains, private/loopback hostnames).\n- **Output sanitization** strips C0/C1 control characters and zero-width / direction-override marks from every string returned to the calling agent.\n- **External strings** carry an `_origin: \"external\"` marker so the calling agent knows the value came from a third party.\n- **50 KB response cap** on serialized tool output; oversized responses collapse to a structured stub.\n- **RPC allowlist** limits self-hosters to known endpoints; arbitrary URLs are rejected and fall back to public Base RPC.\n- **No telemetry**, no phone-home, no analytics.\n- **Provenance**: npm releases are published via GitHub Actions OIDC with cryptographic provenance attestations. Verify with `npm audit signatures`.\n\nReport security issues to **security@tensorfeed.ai**. Please do not file a public issue or CVE for an unfixed vulnerability.\n\n## License\n\nMIT\n\n## Related\n\n- [Coinbase Base MCP](https://mcp.base.org) - the official transact-side MCP for Base. Pair with this package for a full pay + verify loop: Base MCP signs the x402 payment, this package independently confirms the settlement on-chain.\n- [@tensorfeed/mcp-server](https://www.npmjs.com/package/@tensorfeed/mcp-server) - companion package, the TensorFeed data MCP (news, status, models, benchmarks, premium endpoints). Complementary role: this server verifies x402 payments on-chain; mcp-server wraps the TF data API as MCP tools.\n- [TensorFeed](https://tensorfeed.ai) - AI ecosystem data layer\n- [TensorFeed developers](https://tensorfeed.ai/developers) - free + premium API for AI agents\n- [Agent Fair-Trade Agreement (AFTA)](https://tensorfeed.ai/agent-fair-trade) - open standard for honest agent commerce\n- [x402 spec](https://github.com/coinbase/x402) - the payment protocol this MCP verifies\n","readmeFilename":"README.md"}