diff --git a/.well-known/x402.json b/.well-known/x402.json new file mode 100644 index 0000000..dea0ce9 --- /dev/null +++ b/.well-known/x402.json @@ -0,0 +1,23 @@ +{ + "name": "formulahendry/mcp-server-code-runner", + "description": "Code Runner MCP Server", + "accepts": [ + { + "network": "eip155:8453", + "asset": "USDC", + "address": "YOUR_WALLET_ADDRESS" + } + ], + "resources": [ + { + "path": "/code-runner", + "price": "0.01", + "description": "Pay-per-call access to code-runner" + }, + { + "path": "/server", + "price": "0.01", + "description": "Pay-per-call access to server" + } + ] +} diff --git a/x402-middleware-example.ts b/x402-middleware-example.ts new file mode 100644 index 0000000..ab52dda --- /dev/null +++ b/x402-middleware-example.ts @@ -0,0 +1,25 @@ +// x402 payment middleware - add before your protected routes +import { createPaymentMiddleware } from 'x402-express'; // or implement manually + +// Option A: use the x402-express package +app.use('/api', createPaymentMiddleware({ + walletAddress: process.env.X402_WALLET_ADDRESS, + network: 'eip155:8453', // Base mainnet + facilitatorUrl: 'https://facilitator.402.bot/verify', +})); + +// Option B: manual (just check the payment header) +app.use('/api', (req, res, next) => { + const payment = req.headers['x-payment']; + if (!payment) { + // Return 402 with payment requirements + res.status(402).json({ + accepts: [{ network: 'eip155:8453', asset: 'USDC', address: process.env.X402_WALLET_ADDRESS }], + price: '0.01', + }); + return; + } + // Verify payment with facilitator + // See: https://api.402.bot/mcp/setup + next(); +});