vokko

Multi-protocol capability index: lookup, live refresh, pay-preflight, endpoint health.

Should I use this

Quality & Safety

A
Description quality
94%
Schema completeness
99%
Naming quality
87%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'find_payable' description lacks action verbin find_payable

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,299Tokens (tool definitions)
~1.7 KBTypical response size
Moderate attention impact (1.80% of 128k context)

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-http

What it can do

Tool inventory

Tools (12)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded12 tools