x402lint
Free x402 endpoint linter: unpaid 402 challenge, payTo/asset/amount, CORS, directory readiness.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"x402lint": {
"url": "https://x402lint.something-agent.workers.dev/mcp"
}
}
}Remote endpoints
https://x402lint.something-agent.workers.dev/mcpstreamable-httpWhat it can do
Tool inventory
Tools (3)
⚪lint_x402_endpoint(url, method)
Unpaid lint of an x402 endpoint: fetches the 402 (GET and POST), then checks the challenge (version, accepts[] fields, CAIP-2 network, payTo/asset/amount sanity, EIP-712 name/version, timeouts, resource), transport (redirects, cache headers, CORS) and discovery files. Returns findings with ids, severities and fixes. Never pays. Free.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The paid x402 URL"
},
"method": {
"type": "string",
"enum": [
"auto",
"GET",
"POST"
],
"description": "Default auto: tries both"
}
},
"required": [
"url"
]
}🟢check_directory_readiness(url, method)
Lint an x402 endpoint's unpaid 402 and report, per directory, whether it meets what x402dash (unpaid GET must return 402), x402scan (OpenAPI x-payment-info or /.well-known/x402, input schema), the402 (validator 'payable') and the CDP/PayAI Bazaar (bazaar extension, description <= 500 chars, non-tunnel https host; listing then needs one settled payment) were known to check. Never pays. Free.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The paid x402 URL"
},
"method": {
"type": "string",
"enum": [
"auto",
"GET",
"POST"
],
"description": "Default auto: tries both"
}
},
"required": [
"url"
]
}⚪lint_payment_required(payment_required, url)
Lint a PaymentRequired object you already have (decoded JSON, a JSON string, or the raw base64 PAYMENT-REQUIRED header). Same field/value checks as lint_x402_endpoint, no network access. Free.
Input Schema
{
"type": "object",
"properties": {
"payment_required": {
"description": "Object, JSON string, or base64 header value"
},
"url": {
"type": "string",
"description": "Optional: the URL it was served from, to check resource.url"
}
},
"required": [
"payment_required"
]
}Community
Evidence