vokko
Multi-protocol capability index: lookup, live refresh, pay-preflight, endpoint health.
Should I use this
Quality & Safety
Findings (1)
- LOWin find_payable
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": {
"vokko": {
"url": "https://www.vokko.eu/api/v1/mcp"
}
}
}Remote endpoints
https://www.vokko.eu/api/v1/mcpstreamable-httpWhat it can do
Tool inventory
Tools (12)
⚪lookup_host(domain)
Cached host report. Free. Does not 402. Body includes cache.presenceStale, cache.callabilityStale, and refresh (payable live re-probe: priceUsd, network, rest.url, mcp.tool refresh_host). Does not re-probe.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Public hostname without a scheme. A scheme, port, path, and leading www. are stripped if present. After normalize: two or more DNS labels, each [a-z0-9] with optional interior hyphens (max 63 chars), total length at most 253. Empty input, literal IPs, and bare labels are rejected."
}
},
"required": [
"domain"
]
}⚪refresh_host(domain)
Paid live re-probe named by lookup_host refresh.rest. Unpaid calls return HTTP 402 with x402Version and accepts. Price matches refresh.priceUsd ($0.02 USDC on Base by default). Vokko never pays the target.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Public hostname without a scheme. A scheme, port, path, and leading www. are stripped if present. After normalize: two or more DNS labels, each [a-z0-9] with optional interior hyphens (max 63 chars), total length at most 253. Empty input, literal IPs, and bare labels are rejected."
}
},
"required": [
"domain"
]
}🟢participation_check(domain)
Cached participation status and evidence. Not a legal finding.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Public hostname without a scheme. A scheme, port, path, and leading www. are stripped if present. After normalize: two or more DNS labels, each [a-z0-9] with optional interior hyphens (max 63 chars), total length at most 253. Empty input, literal IPs, and bare labels are rejected."
}
},
"required": [
"domain"
]
}🟢list_changes(domain, limit)
Newest-first drift. Anonymous: last 5 summaries. Subscriber for that origin: full history.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Public hostname without a scheme. A scheme, port, path, and leading www. are stripped if present. After normalize: two or more DNS labels, each [a-z0-9] with optional interior hyphens (max 63 chars), total length at most 253. Empty input, literal IPs, and bare labels are rejected."
},
"limit": {
"type": "integer",
"description": "Optional result cap. Anonymous callers always get the last 5 summaries. A subscriber for that origin: default 20, minimum 1, maximum 50. Only a number is forwarded; other types are ignored."
}
},
"required": [
"domain"
]
}⚪refresh_host_protocol(domain, protocol)
Paid live probe of one protocol. Args domain, protocol (ucp, mcp, a2a, x402, and the other detector ids). Unpaid calls return HTTP 402 at $0.005 USDC on Base. Full-host refresh_host stays $0.02.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Public hostname without a scheme. A scheme, port, path, and leading www. are stripped if present. After normalize: two or more DNS labels, each [a-z0-9] with optional interior hyphens (max 63 chars), total length at most 253. Empty input, literal IPs, and bare labels are rejected."
},
"protocol": {
"type": "string",
"description": "Detector id, trimmed and lowercased. Must be one of ucp, acp, ap2, tap, mcp, a2a, x402, mpp, llms, ai-plugin, openapi."
}
},
"required": [
"domain",
"protocol"
]
}⚪refresh_hosts_batch(domains, mode)
Paid live re-probe of up to 10 hosts. Args domains (string array) and mode "full". Unpaid calls return one HTTP 402. Price is $0.01 + $0.002 × N USDC on Base.
Input Schema
{
"type": "object",
"properties": {
"domains": {
"type": "array",
"description": "Hostnames to re-probe. Length 1 to 10. Each item is normalized like domain; duplicates collapse after normalize. Empty after normalize is rejected.",
"items": {
"type": "string",
"description": "Public hostname without a scheme. A scheme, port, path, and leading www. are stripped if present. After normalize: two or more DNS labels, each [a-z0-9] with optional interior hyphens (max 63 chars), total length at most 253. Empty input, literal IPs, and bare labels are rejected."
}
},
"mode": {
"type": "string",
"description": "Must be the literal \"full\"."
}
},
"required": [
"domains",
"mode"
]
}🟢find_payable(query)
Alphabetical hosts whose index row includes x402. Evidence only. Not a rank and not a payable proof.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Optional case-insensitive substring filter on the host domain. Omitted or empty matches every indexed x402 host. The result list is capped at 20."
}
}
}⚪pay_preflight(domain, intent)
Can an agent pay at this host? Rails, endpoint, price, freshness. Unpaid calls return HTTP 402 at $0.001 USDC. Same resource URL as the REST route.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Public hostname without a scheme. A scheme, port, path, and leading www. are stripped if present. After normalize: two or more DNS labels, each [a-z0-9] with optional interior hyphens (max 63 chars), total length at most 253. Empty input, literal IPs, and bare labels are rejected."
},
"intent": {
"type": "string",
"enum": [
"checkout",
"api",
"any"
],
"description": "Payment intent filter. Omit or send empty to default to any. Must be checkout, api, or any."
}
},
"required": [
"domain"
]
}⚪endpoint_health(url, method)
Is this paid API up, and what does it charge right now? Unpaid calls return HTTP 402 at $0.001 USDC. Same resource URL as the REST route.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Absolute https URL, max 2048 characters. Port must be omitted or 443. Userinfo is rejected. Private, loopback, and literal IP hosts are refused."
},
"method": {
"type": "string",
"enum": [
"GET",
"POST"
],
"description": "HTTP method to probe. Omit or send empty to default to GET. Must be GET or POST."
}
},
"required": [
"url"
]
}🟢find_provider(query, maxPriceUsd, network, type, limit)
Cheapest live x402 providers for a task. Placement is never sold. Unpaid calls return HTTP 402 at $0.005 USDC. Same resource URL as the REST route.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Search string. After trim: 1 to 200 characters. Whitespace is collapsed."
},
"maxPriceUsd": {
"type": "number",
"minimum": 0,
"description": "Optional numeric upper bound on a matched provider's advertised priceUsd. Must be finite and at least 0."
},
"network": {
"type": "string",
"description": "CAIP-2 of the live settlement network. Omit or send empty to use the configured default. A non-empty value must equal the schema enum exactly.",
"enum": [
"eip155:8453"
]
},
"type": {
"type": "string",
"enum": [
"http",
"mcp",
"any"
],
"description": "Provider transport filter. Omit or send empty to default to any. Must be http, mcp, or any."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Optional maximum number of results. Integer from 1 to 20. Omit to default to 10."
}
},
"required": [
"query"
]
}🟢payto_check(domain, address, network)
Does this payTo address belong to the domain? Evidence, not a guarantee. Unpaid calls return HTTP 402 at $0.002 USDC. Same resource URL as the REST route.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Public hostname without a scheme. A scheme, port, path, and leading www. are stripped if present. After normalize: two or more DNS labels, each [a-z0-9] with optional interior hyphens (max 63 chars), total length at most 253. Empty input, literal IPs, and bare labels are rejected."
},
"address": {
"type": "string",
"description": "0x-prefixed 40-hex-character EVM address."
},
"network": {
"type": "string",
"description": "CAIP-2 of the live settlement network. Omit or send empty to use the configured default. A non-empty value must equal the schema enum exactly.",
"enum": [
"eip155:8453"
]
}
},
"required": [
"domain",
"address"
]
}⚪verify_receipt(txHash, tx, payTo, amount, amountUsd, ...)
Did this USDC transfer settle to the expected address and amount? Unpaid calls return HTTP 402 at $0.001 USDC. Same resource URL as the REST route.
Input Schema
{
"type": "object",
"properties": {
"txHash": {
"type": "string",
"description": "0x-prefixed 64-hex-character transaction hash. Required by the validator (tx is an accepted alias)."
},
"tx": {
"type": "string",
"description": "Alias of txHash. Same 0x-prefixed 64-hex format. If both are sent they must match case-insensitively."
},
"payTo": {
"type": "string",
"description": "Expected recipient. 0x-prefixed 40-hex-character EVM address."
},
"amount": {
"type": "string",
"description": "Atomic USDC amount: 1 to 30 digits, no leading zeros. Exactly one of amount or amountUsd is required."
},
"amountUsd": {
"type": "string",
"description": "Decimal USDC amount: up to 12 digits before the point and up to 6 after. Exactly one of amount or amountUsd is required."
},
"asset": {
"type": "string",
"description": "USDC (case-insensitive) or the USDC contract address for the selected network. Omit to default to USDC."
},
"network": {
"type": "string",
"description": "CAIP-2 of the live settlement network. Omit or send empty to use the configured default. A non-empty value must equal the schema enum exactly.",
"enum": [
"eip155:8453"
]
}
},
"required": [
"payTo"
]
}Community
Evidence