Discover x402 services, MCP servers and A2A agents by intent — agent-tools.cloud directory.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Ask for the best x402/MCP services for an agent intent. This is the high-level discovery tool: it retrieves candidates from the directory, asks the configured backend LLM to rank only those candidates, and returns service cards for the selected recommendations. If the LLM is unavailable, it falls back to the directory ranker. Args: intent: Natural-language job the agent wants to accomplish. top_k: Max recommendations to return (1-10). max_price_usd: Optional per-call budget cap. category: Optional directory category filter. chain: Optional payment network filter, e.g. "base" or "solana". require_healthy: When true, only consider services marked health=ok. min_confidence: Optional x402scan quality floor (0.0-1.0). has_mcp: When true, only consider services with MCP endpoints. use_llm: Set false for deterministic retrieval-only fallback.
Natural-language job the agent wants to accomplish.
Optional payment network filter, e.g. "base" or "solana".
Max recommendations to return (1-10).
When true, only consider services with MCP endpoints.
Set false for deterministic retrieval-only fallback.
Optional directory category filter.
Optional per-call budget cap.
Optional x402scan quality floor (0.0-1.0).
When true, only consider services marked health=ok.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http agent-tools-mcp https://agent-tools.cloud/mcp-discovery/
Ask for the best x402/MCP services for an agent intent. This is the high-level discovery tool: it retrieves candidates from the directory, asks the configured backend LLM to rank only those candidates, and returns service cards for the selected recommendations. If the LLM is unavailable, it falls back to the directory ranker. Args: intent: Natural-language job the agent wants to accomplish. top_k: Max recommendations to return (1-10). max_price_usd: Optional per-call budget cap. category: Optional directory category filter. chain: Optional payment network filter, e.g. "base" or "solana". require_healthy: When true, only consider services marked health=ok. min_confidence: Optional x402scan quality floor (0.0-1.0). has_mcp: When true, only consider services with MCP endpoints. use_llm: Set false for deterministic retrieval-only fallback.
| Argument | Type | Description |
|---|---|---|
| chain | any | Optional payment network filter, e.g. "base" or "solana". |
| top_k | integer | Max recommendations to return (1-10). |
| intent* | string | Natural-language job the agent wants to accomplish. |
| has_mcp | boolean | When true, only consider services with MCP endpoints. |
| use_llm | boolean | Set false for deterministic retrieval-only fallback. |
| category | any | Optional directory category filter. |
| max_price_usd | any | Optional per-call budget cap. |
| min_confidence | any | Optional x402scan quality floor (0.0-1.0). |
| require_healthy | boolean | When true, only consider services marked health=ok. |
{
"type": "object",
"title": "ask_servicesArguments",
"required": [
"intent"
],
"properties": {
"chain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Chain",
"default": null,
"description": "Optional payment network filter, e.g. \"base\" or \"solana\"."
},
"top_k": {
"type": "integer",
"title": "Top K",
"default": 5,
"description": "Max recommendations to return (1-10)."
},
"intent": {
"type": "string",
"title": "Intent",
"description": "Natural-language job the agent wants to accomplish."
},
"has_mcp": {
"type": "boolean",
"title": "Has Mcp",
"default": false,
"description": "When true, only consider services with MCP endpoints."
},
"use_llm": {
"type": "boolean",
"title": "Use Llm",
"default": true,
"description": "Set false for deterministic retrieval-only fallback."
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Category",
"default": null,
"description": "Optional directory category filter."
},
"max_price_usd": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Max Price Usd",
"default": null,
"description": "Optional per-call budget cap."
},
"min_confidence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Min Confidence",
"default": null,
"description": "Optional x402scan quality floor (0.0-1.0)."
},
"require_healthy": {
"type": "boolean",
"title": "Require Healthy",
"default": true,
"description": "When true, only consider services marked health=ok."
}
}
}Issue a fresh ownership token for one exact public HTTPS URL. Authenticate in the MCP Authorization: Bearer header. Publishing and verifying the token is required before editing; URL input alone grants no rights. Args: url: Complete public HTTPS service URL, including its query when present. method: Optional proof method; otherwise inferred from the complete URL.
| Argument | Type | Description |
|---|---|---|
| url* | string | Complete public HTTPS service URL, including its query when present. |
| method | any | Optional proof method; otherwise inferred from the complete URL. |
{
"type": "object",
"title": "claim_service_urlArguments",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"title": "Url",
"description": "Complete public HTTPS service URL, including its query when present."
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Method",
"default": null,
"description": "Optional proof method; otherwise inferred from the complete URL."
}
}
}Create a free account API key. No sign-up, email or existing key needed. The key is returned once and cannot be recovered. Store it in your secret store; do not print it back to the user or write it to logs. Send it as `Authorization: Bearer <key>` (or the `api_key` argument where offered) to get complete `directory_stats` lists, run paid verifications and claim your own listings. The claim and listing tools read the key only from the Authorization header; without header support use the REST claim API. Shares the HTTP limit of POST /api/v1/keys (a few keys per IP per day). Args: name: Optional label to recognise the key later, e.g. your agent name.
| Argument | Type | Description |
|---|---|---|
| name | any | Optional label to recognise the key later, e.g. your agent name. |
{
"type": "object",
"title": "create_api_keyArguments",
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name",
"default": null,
"description": "Optional label to recognise the key later, e.g. your agent name."
}
}
}Daily statistics on the agent-tool ecosystem as seen by our probes. Args: view: "all", "mcp", "x402" or "a2a" to scope the figures to one protocol. topic: Optional topic word (e.g. "payment", "weather") to get that topic instead: supply per protocol, readiness, best listings, searches. month: Optional "YYYY-MM" to get that monthly report instead. api_key: Optional account key (free from create_api_key) for complete lists when you cannot send the Authorization header. Returns counts (indexed, reachable, protocol-verified, readiness A/B), one finding sentence per topic, key facts (x402 prices and networks, MCP and A2A protocol versions, MCP auth, A2A card signatures, how every listing's latest probe ended), the most searched terms (view "all"), the snapshot time, and links to the full JSON snapshot, the daily CSV, the methodology, the "how many work" page, per-protocol and per-topic pages and the monthly reports. With an account API key (Authorization: Bearer header or `api_key`; free from `create_api_key`) the topic and search lists are complete (10 listings per protocol, up to 100 terms); without one they are shortened.
| Argument | Type | Description |
|---|---|---|
| view | string | "all", "mcp", "x402" or "a2a" to scope the figures to one protocol. |
| month | any | Optional "YYYY-MM" to get that monthly report instead. |
| topic | any | Optional topic word (e.g. "payment", "weather") to get that topic instead: supply per protocol, readiness, best listings, searches. |
| api_key | any | Optional account key (free from create_api_key) for complete lists when you cannot send the Authorization header. |
Edit only metadata covered by your verified claim, with the public audit trail. An endpoint change requires verified control of the exact destination or its whole host and clears measurements tied to the old primary endpoint. Args: kind: Listing type: x402, mcp, or a2a. slug: Slug of the listing you are authorized to edit. fields: Editable fields to change; measured fields are rejected.
| Argument | Type | Description |
|---|---|---|
| kind* | string | Listing type: x402, mcp, or a2a. |
| slug* | string | Slug of the listing you are authorized to edit. |
| fields* | object | Editable fields to change; measured fields are rejected. |
{
"type": "object",
"title": "edit_owned_listingArguments",
"required": [
"kind",
"slug",
"fields"
],
"properties": {
"kind": {
"type": "string",
"title": "Kind",
"description": "Listing type: x402, mcp, or a2a."
},
"slug": {
"type": "string",
"title": "Slug",
"description": "Slug of the listing you are authorized to edit."
},
"fields": {
"type": "object",
"title": "Fields",
"description": "Editable fields to change; measured fields are rejected.",
"additionalProperties": true
}
}
}Send the signed payment to the service once and score the result. Aborts without paying if price or recipient changed. Never retried; a timeout returns `indeterminate`. status: succeeded | delivery_failed | payment_rejected | indeterminate. Args: id: `id` returned by `prepare_paid_verification`. signature: 0x EIP-712 signature of its `typed_data` by the payer. api_key: Optional if the Authorization header is sent.
| Argument | Type | Description |
|---|---|---|
| id* | string | `id` returned by `prepare_paid_verification`. |
| api_key | any | Optional if the Authorization header is sent. |
| signature* | string | 0x EIP-712 signature of its `typed_data` by the payer. |
{
"type": "object",
"title": "execute_paid_verificationArguments",
"required": [
"id",
"signature"
],
"properties": {
"id": {
"type": "string",
"title": "Id",
"description": "`id` returned by `prepare_paid_verification`."
},
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Api Key",
"default": null,
"description": "Optional if the Authorization header is sent."
},
"signature": {
"type": "string",
"title": "Signature",
"description": "0x EIP-712 signature of its `typed_data` by the payer."
}
}
}Get full details + ready-to-paste call template for a service. Returns the service card with payment, call, quality, resource samples, and ready-to-use MCP/x402 call hints. Use this after `search` or `ask_services` before paying/calling an external service. Args: slug: Service slug as returned by `search` items.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Service slug as returned by `search` items. |
{
"type": "object",
"title": "getArguments",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"title": "Slug",
"description": "Service slug as returned by `search` items."
}
}
}Read one published Blog article: metadata plus the full Markdown body. Args: slug: The article slug, as returned by list_articles.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The article slug, as returned by list_articles. |
{
"type": "object",
"title": "get_articleArguments",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"title": "Slug",
"description": "The article slug, as returned by list_articles."
}
}
}Get the full card for one MCP server by slug. Args: slug: MCP server slug as returned by `search_mcp_servers` items.
| Argument | Type | Description |
|---|---|---|
| slug* | string | MCP server slug as returned by `search_mcp_servers` items. |
{
"type": "object",
"title": "get_mcp_serverArguments",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"title": "Slug",
"description": "MCP server slug as returned by `search_mcp_servers` items."
}
}
}How every score and statistic on agent-tools.cloud is computed. Returns the quality-score components and grade bands per protocol, the nine readiness criteria with weights, payment-evidence grades, the probing schedule and the definitions behind the daily statistics.
No arguments.
{
"type": "object",
"title": "get_methodologyArguments",
"properties": {}
}Read editable metadata for a listing covered by your verified claim. Args: kind: Listing type: x402, mcp, or a2a. slug: Slug from the verified claim's listings or directory search.
| Argument | Type | Description |
|---|---|---|
| kind* | string | Listing type: x402, mcp, or a2a. |
| slug* | string | Slug from the verified claim's listings or directory search. |
{
"type": "object",
"title": "get_owned_listingArguments",
"required": [
"kind",
"slug"
],
"properties": {
"kind": {
"type": "string",
"title": "Kind",
"description": "Listing type: x402, mcp, or a2a."
},
"slug": {
"type": "string",
"title": "Slug",
"description": "Slug from the verified claim's listings or directory search."
}
}
}Read one of your own paid verifications. Args: id: Verification id. api_key: Optional if the Authorization header is sent.
| Argument | Type | Description |
|---|---|---|
| id* | string | Verification id. |
| api_key | any | Optional if the Authorization header is sent. |
{
"type": "object",
"title": "get_paid_verificationArguments",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"title": "Id",
"description": "Verification id."
},
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Api Key",
"default": null,
"description": "Optional if the Authorization header is sent."
}
}
}List published Blog articles, newest first (metadata only). Args: query: Optional words to match in title, summary or body. tag: Optional tag to filter by. page: Page number, 20 articles per page. Use get_article(slug) for the full Markdown body.
| Argument | Type | Description |
|---|---|---|
| tag | string | Optional tag to filter by. |
| page | integer | Page number, 20 articles per page. |
| query | string | Optional words to match in title, summary or body. |
{
"type": "object",
"title": "list_articlesArguments",
"properties": {
"tag": {
"type": "string",
"title": "Tag",
"default": "",
"description": "Optional tag to filter by."
},
"page": {
"type": "integer",
"title": "Page",
"default": 1,
"description": "Page number, 20 articles per page."
},
"query": {
"type": "string",
"title": "Query",
"default": "",
"description": "Optional words to match in title, summary or body."
}
}
}List all available service categories in the directory.
No arguments.
{
"type": "object",
"title": "list_categoriesArguments",
"properties": {}
}Quote a sponsored paid verification of an x402 service. You pay the service once from your own wallet (Base USDC, <= $1; funds go to its payTo). Sign the returned `typed_data` (EIP-712), then call `execute_paid_verification` before `valid_before`. We never sign or hold funds. Auth: API key from POST https://agent-tools.cloud/api/v1/keys, as the `Authorization: Bearer` header or `api_key`. Args: slug: Service slug from `search` / `get`. payer: 0x address of the wallet that will sign and pay. api_key: Optional if the Authorization header is sent. Returns: { id, amount_usd, pay_to, valid_before, typed_data, ... } or { error, message }.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Service slug from `search` / `get`. |
| payer* | string | 0x address of the wallet that will sign and pay. |
| api_key | any | Optional if the Authorization header is sent. |
{
"type": "object",
"title": "prepare_paid_verificationArguments",
"required": [
"slug",
"payer"
],
"properties": {
"slug": {
"type": "string",
"title": "Slug",
"description": "Service slug from `search` / `get`."
},
"payer": {
"type": "string",
"title": "Payer",
"description": "0x address of the wallet that will sign and pay."
},
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Api Key",
"default": null,
"description": "Optional if the Authorization header is sent."
}
}
}Self-register an x402 / MCP service in the agent-tools directory. Service owners and agents may submit new services here. Submissions are auto-reviewed instantly by x402 verification (no human gate): if the URL proves x402 payment support it is listed immediately and shows up in `search`; otherwise it is rejected or retried automatically. Listing is FREE. Dedup: if a service with the same canonical origin (scheme://host) already exists in the directory we return its slug instead of creating a duplicate submission. Same goes for a still-pending submission with the same origin. Rate limit: at most 5 pending submissions per client IP per 24h. Hits beyond that get `{error: rate_limited}` — try again later or email [email protected] for bulk imports. Args: url: Public HTTPS URL of the service (the x402-payable endpoint or its homepage). Required. name: Human-friendly name. Defaults to the URL hostname. description: One-paragraph description (max ~2000 chars). mcp_url: If the service speaks MCP, its streamable-http endpoint. category: Free-form (e.g. "defi", "search", "social"). Use `list_categories` to align with existing taxonomy. chains: Networks the service accepts payment on (e.g. ["base", "solana"]). price_min_usdc: Lower bound of per-call price in USDC. price_max_usdc: Upper bound of per-call price in USDC. contact: Optional email / handle the directory team can reach you on for clarifications.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public HTTPS URL of the service (the x402-payable endpoint or its homepage). Required. |
| name | any | Human-friendly name. Defaults to the URL hostname. |
| chains | any | Networks the service accepts payment on (e.g. ["base", "solana"]). |
Check an MCP server for malware / prompt-injection lures by its endpoint URL. Give the server's streamable-http endpoint URL. Two paths: * **Already in the agent-tools directory** → returns our LATEST stored rule verdict. Every indexed server is re-scanned hourly, so you get a consistent, continuously-refreshed answer without re-probing. * **Not yet indexed** → we probe the endpoint live, statically scan its advertised tools + metadata, and return the fresh verdict. It is ADDED to the directory (so the next caller gets the stored verdict instantly) only if it answered or you supplied metadata; documentation hosts such as example.com / *.test / *.invalid are scanned but never listed. Two dimensions are reported. `verdict` is authoritative and comes from deterministic static rules — pure pattern-matching over the *advertised* text only, NO code execution. It flags the social-engineering / RCE tricks listing-spam servers use: * `curl … | bash` and `base64 -d | sh` install lures * `eval "$(curl …)"` / PowerShell `IEX(...DownloadString)` cradles * base64 blobs that decode to a shell command * bare-IP payload hosts and cheap throwaway TLDs * prompt-injection / credential-exfiltration phrasing ("ignore previous instructions", "send your .env / api key") * MCP tool-poisoning coercion — descriptions that hijack an agent's tool-calling ("always call this tool first", "before using any other tool you must…"), hidden `<IMPORTANT>` instructions, "list all API keys / include secrets in your response", and coercion to read & forward `.key`/`.pem`/`.ssh`/`.env` files Source-code-oriented rules (SQL / command / code injection) are deliberately not applied to natural-language descriptions, to avoid false positives. `llm_reference` is an advisory frontier-LLM second opinion over the same text. Because the LLM is slow it is computed LIVE on this call only and is never stored (the hourly job never runs it), so it may be null on timeout. It never overrides the rule verdict; when it is *more* severe than the rules an `advisory` note is attached as a safety-net signal. Security/defense products that merely *name* these attacks are not flagged. Args: endpoint_url: The MCP server's streamable-http URL (required). This is the identity we look up / index by. name: Optional advertised name (used when the server is new and gets added; falls back to the URL host). description: Optional description / README blurb (scanned when new). tools_text: Optional tool names + descriptions; used only if the live probe cannot fetch the server's tools/list. Returns: { verdict: "clean"|"suspicious"|"malicious", score: 0-100, reasons: [{rule, weight, snippet}], llm_reference: {model, verdict, reason, confidence} | null, advisory: str | null, slug, name, endpoint_url, source: "stored" (existing) | "new_scan" (just added), indexed: bool }
Find x402 / MCP services matching an intent or filter set. Two usage modes (agents pick whichever fits): A. Natural-language: `search(intent="fetch tweets for @user")` B. Pure browse: `search(has_mcp=True, category="defi", top_k=10)` At least one of `intent`, `category`, `chain`, `has_mcp`, `min_confidence` must be supplied — otherwise the call is rejected (we won't dump 2300+ rows). Results are ranked by: (health=ok AND tx_30d>0) → health=ok → has-quality-signal → confidence → tx_30d → recency. So the highest-quality real-traffic services appear first. Each item includes (when available): - confidence : 0.0–1.0 x402scan quality score. - tx_30d : 30-day x402 payment count (proxy for real usage). - match_snippet : FTS snippet showing where `intent` hit ([[token]]). - match_reason : list[str] of human-readable ranking signals. - mcp_url : populated when the service exposes an MCP endpoint (you can call it directly via streamable-http). Agents should prefer items with non-null confidence and tx_30d > 0 unless the user explicitly wants experimental endpoints. Args: intent: What the agent wants to do (English or Chinese). Optional when at least one structured filter is set. Synonym expansion covers twitter↔X↔推特, whale↔巨鲸, price↔价格 etc. top_k: Max services to return (default 5, hard cap 25). max_price_usd: Upper bound on per-call price in USD. category: Filter (see `list_categories`). chain: "base", "polygon", "solana", "arbitrum", ... min_confidence: Minimum confidence (0.0–1.0). 0.8+ keeps only services x402scan rates as high-quality. has_mcp: When true, return only services with a callable MCP endpoint. Use this when the agent wants to chain another MCP server rather than perform raw HTTP+x402.
| Argument | Type | Description |
|---|---|---|
| chain | any | "base", "polygon", "solana", "arbitrum", ... |
Find A2A agents you can delegate a task to. Args: intent: Natural-language description of the task to delegate. top_k: Max agents to return (1-20). x402_only: When true, only return agents that advertise x402 payment.
| Argument | Type | Description |
|---|---|---|
| top_k | integer | Max agents to return (1-20). |
| intent | any | Natural-language description of the task to delegate. |
| x402_only | boolean | When true, only return agents that advertise x402 payment. |
{
"type": "object",
"title": "search_a2a_agentsArguments",
"properties": {
"top_k": {
"type": "integer",
"title": "Top K",
"default": 5,
"description": "Max agents to return (1-20)."
},
"intent": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Intent",
"default": null,
"description": "Natural-language description of the task to delegate."
},
"x402_only": {
"type": "boolean",
"title": "X402 Only",
"default": false,
"description": "When true, only return agents that advertise x402 payment."
}
}
}Find MCP servers in the directory. Searches the standalone MCP directory (PulseMCP / official MCP registry import) unioned with x402 services that also expose an MCP endpoint. Returns normalised entries with a ready-to-use streamable-http `call_hint.mcp.url`. Args: intent: Natural-language description of the tool/capability needed. top_k: Max servers to return (1-20). chain: Optional payment-network filter for paid MCP servers. require_healthy: When true, only return servers marked health=ok.
| Argument | Type | Description |
|---|---|---|
| chain | any | Optional payment-network filter for paid MCP servers. |
| top_k | integer | Max servers to return (1-20). |
| intent | any | Natural-language description of the tool/capability needed. |
| require_healthy | boolean | When true, only return servers marked health=ok. |
{
"type": "object",
"title": "search_mcp_serversArguments",
"properties": {
"chain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Chain",
"default": null,
"description": "Optional payment-network filter for paid MCP servers."
},
"top_k": {
"type": "integer",
"title": "Top K",
"default": 5,
"description": "Max servers to return (1-20)."
},
"intent": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Intent",
"default": null,
"description": "Natural-language description of the tool/capability needed."
},
"require_healthy": {
"type": "boolean",
"title": "Require Healthy",
"default": false,
"description": "When true, only return servers marked health=ok."
}
}
}Unified search across x402 services, MCP servers and A2A agents. Args: intent: Natural-language query. protocol: Optional filter: "x402", "mcp" or "a2a". top_k: Max resources to return (1-50).
| Argument | Type | Description |
|---|---|---|
| top_k | integer | Max resources to return (1-50). |
| intent | any | Natural-language query. |
| protocol | any | Optional filter: "x402", "mcp" or "a2a". |
{
"type": "object",
"title": "search_resourcesArguments",
"properties": {
"top_k": {
"type": "integer",
"title": "Top K",
"default": 10,
"description": "Max resources to return (1-50)."
},
"intent": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Intent",
"default": null,
"description": "Natural-language query."
},
"protocol": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Protocol",
"default": null,
"description": "Optional filter: \"x402\", \"mcp\" or \"a2a\"."
}
}
}High-level stats about the directory: x402 total, healthy count and chains, plus `snapshot`, the daily digest across x402, MCP and A2A (see directory_stats).
No arguments.
{
"type": "object",
"title": "statsArguments",
"properties": {}
}Verify public ownership proof for your own exact service URL claim. This reads public proof only. It never calls business tools, requests private service credentials, or grants whole-platform permissions. Args: claim_id: Claim id returned by claim_service_url. token: The issued token after publishing it in the instructed location.
| Argument | Type | Description |
|---|---|---|
| token* | string | The issued token after publishing it in the instructed location. |
| claim_id* | integer | Claim id returned by claim_service_url. |
{
"type": "object",
"title": "verify_service_urlArguments",
"required": [
"claim_id",
"token"
],
"properties": {
"token": {
"type": "string",
"title": "Token",
"description": "The issued token after publishing it in the instructed location."
},
"claim_id": {
"type": "integer",
"title": "Claim Id",
"description": "Claim id returned by claim_service_url."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 14, 2026.
Takes a password, API key or token as an argument, so the secret passes through the model's context and chat logs.
Fix: Read credentials from the server's own configuration (environment, OAuth) instead of a tool argument.
{
"type": "object",
"title": "directory_statsArguments",
"properties": {
"view": {
"type": "string",
"title": "View",
"default": "all",
"description": "\"all\", \"mcp\", \"x402\" or \"a2a\" to scope the figures to one protocol."
},
"month": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Month",
"default": null,
"description": "Optional \"YYYY-MM\" to get that monthly report instead."
},
"topic": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Topic",
"default": null,
"description": "Optional topic word (e.g. \"payment\", \"weather\") to get that topic instead: supply per protocol, readiness, best listings, searches."
},
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Api Key",
"default": null,
"description": "Optional account key (free from create_api_key) for complete lists when you cannot send the Authorization header."
}
}
}| contact | any | Optional email / handle the directory team can reach you on for clarifications. |
| mcp_url | any | If the service speaks MCP, its streamable-http endpoint. |
| category | any | Free-form (e.g. "defi", "search", "social"). Use `list_categories` to align with existing taxonomy. |
| description | any | One-paragraph description (max ~2000 chars). |
| price_max_usdc | any | Upper bound of per-call price in USDC. |
| price_min_usdc | any | Lower bound of per-call price in USDC. |
{
"type": "object",
"title": "registerArguments",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"title": "Url",
"description": "Public HTTPS URL of the service (the x402-payable endpoint or its homepage). Required."
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name",
"default": null,
"description": "Human-friendly name. Defaults to the URL hostname."
},
"chains": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Chains",
"default": null,
"description": "Networks the service accepts payment on (e.g. [\"base\", \"solana\"])."
},
"contact": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Contact",
"default": null,
"description": "Optional email / handle the directory team can reach you on for clarifications."
},
"mcp_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Mcp Url",
"default": null,
"description": "If the service speaks MCP, its streamable-http endpoint."
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Category",
"default": null,
"description": "Free-form (e.g. \"defi\", \"search\", \"social\"). Use `list_categories` to align with existing taxonomy."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description",
"default": null,
"description": "One-paragraph description (max ~2000 chars)."
},
"price_max_usdc": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Price Max Usdc",
"default": null,
"description": "Upper bound of per-call price in USDC."
},
"price_min_usdc": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Price Min Usdc",
"default": null,
"description": "Lower bound of per-call price in USDC."
}
}
}| Argument | Type | Description |
|---|---|---|
| name | string | Optional advertised name (used when the server is new and gets added; falls back to the URL host). |
| tools_text | string | Optional tool names + descriptions; used only if the live probe cannot fetch the server's tools/list. |
| description | string | Optional description / README blurb (scanned when new). |
| endpoint_url* | string | The MCP server's streamable-http URL (required). This is the identity we look up / index by. |
{
"type": "object",
"title": "scan_mcp_safetyArguments",
"required": [
"endpoint_url"
],
"properties": {
"name": {
"type": "string",
"title": "Name",
"default": "",
"description": "Optional advertised name (used when the server is new and gets added; falls back to the URL host)."
},
"tools_text": {
"type": "string",
"title": "Tools Text",
"default": "",
"description": "Optional tool names + descriptions; used only if the live probe cannot fetch the server's tools/list."
},
"description": {
"type": "string",
"title": "Description",
"default": "",
"description": "Optional description / README blurb (scanned when new)."
},
"endpoint_url": {
"type": "string",
"title": "Endpoint Url",
"description": "The MCP server's streamable-http URL (required). This is the identity we look up / index by."
}
}
}| top_k | integer | Max services to return (default 5, hard cap 25). |
| intent | any | What the agent wants to do (English or Chinese). Optional when at least one structured filter is set. Synonym expansion covers twitter↔X↔推特, whale↔巨鲸, price↔价格 etc. |
| has_mcp | boolean | When true, return only services with a callable MCP endpoint. Use this when the agent wants to chain another MCP server rather than perform raw HTTP+x402. |
| category | any | Filter (see `list_categories`). |
| max_price_usd | any | Upper bound on per-call price in USD. |
| min_confidence | any | Minimum confidence (0.0–1.0). 0.8+ keeps only services x402scan rates as high-quality. |
{
"type": "object",
"title": "searchArguments",
"properties": {
"chain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Chain",
"default": null,
"description": "\"base\", \"polygon\", \"solana\", \"arbitrum\", ..."
},
"top_k": {
"type": "integer",
"title": "Top K",
"default": 5,
"description": "Max services to return (default 5, hard cap 25)."
},
"intent": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Intent",
"default": null,
"description": "What the agent wants to do (English or Chinese). Optional when at least one structured filter is set. Synonym expansion covers twitter↔X↔推特, whale↔巨鲸, price↔价格 etc."
},
"has_mcp": {
"type": "boolean",
"title": "Has Mcp",
"default": false,
"description": "When true, return only services with a callable MCP endpoint. Use this when the agent wants to chain another MCP server rather than perform raw HTTP+x402."
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Category",
"default": null,
"description": "Filter (see `list_categories`)."
},
"max_price_usd": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Max Price Usd",
"default": null,
"description": "Upper bound on per-call price in USD."
},
"min_confidence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Min Confidence",
"default": null,
"description": "Minimum confidence (0.0–1.0). 0.8+ keeps only services x402scan rates as high-quality."
}
}
}