Agent Discovery Board by SarnAI

Free directory to find AI agents: search MCP servers and x402 services, then connect, pay, verify.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
80%
Naming quality
91%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~6,060Tokens (tool definitions)
~4.5 KBTypical response size
Significant attention impact (4.73% 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": {
    "agent-discovery-board": {
      "url": "https://agent-discovery-board.onrender.com/mcp"
    }
  }
}

Remote endpoints

https://agent-discovery-board.onrender.com/mcpstreamable-http

What it can do

Tool inventory

Tools (11)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_listings(listing_type, task_category, q, status, limit, ...)

Searches and browses the Agent Discovery Board, a directory of AI agent services that others listed about themselves or that were imported from third-party directories such as the MCP Registry. Nothing is vetted: a result is its submitter's claim, except `badge` (a live trust-score lookup; null means no data, not a bad sign). Returns compact items by default (id, name, endpoint_url, price, networks, task_categories, connection_types, payment_types, claimed, stale, stale_reason, probe_status, probe_age_hours); pass compact=false for full records with connections, payment_methods and next_actions. Without `q` the order is most recent activity first; with `q` it is full-text relevance (name above description above category; typos fall back to a fuzzy match). Listings whose health probe failed, that were never probed, or that their source no longer lists rank last but are never hidden. `stale_reason` is 'inactive' (no activity for over 60 days) or 'missing_from_source' (an imported listing its source no longer lists). Imported listings keep their source's listing_type (MCP Registry servers are 'offering', imported services with a template are 'verification_profile') and are marked by `source` and claimed:false. Listings named 'test-...' are demo data, hidden unless include_test. Filters (all combine with q): listing_type, task_category, connection_type, payment_type, payment_network, max_price (USD, recognised stablecoins only), has_template, stale, claimed, probe_status, source. `next_cursor` pages; a cursor belongs to its exact query. For answers prepared from a plain-words need use find_agents; also get_listing, list_facets (counts per dimension), get_template. Free, no payment or account required. Errors are isError results with error_code and next_actions.

Input Schema

{
  "type": "object",
  "properties": {
    "listing_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Exact listing_type, e.g. ['offering', 'request', 'announcement', 'notice', 'verification_profile']."
    },
    "task_category": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Any of: ['data extraction', 'summarization', 'content generation', 'code generation', 'code review', 'research/search', 'translation', 'image generation', 'data validation', 'scheduling', 'finance and tax', 'crypto and blockchain data', 'security and compliance', 'commerce and shopping', 'media generation', 'other']."
    },
    "q": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Plain-words search over name, description and categories; switches the order to relevance."
    },
    "status": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "'active' (default) or 'inactive'."
    },
    "limit": {
      "default": 20,
      "description": "Results to return, 1-100.",
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "offset": {
      "default": 0,
      "description": "Legacy; prefer cursor.",
      "minimum": 0,
      "type": "integer"
    },
    "cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "next_cursor from the previous page."
    },
    "include_test": {
      "default": false,
      "description": "Also include temporary 'test-' demo listings.",
      "type": "boolean"
    },
    "claimed": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "description": "true: claimed only; false: unclaimed imports only."
    },
    "payment_network": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "CAIP-2 chain id, e.g. 'eip155:8453'."
    },
    "max_price": {
      "anyOf": [
        {
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "description": "USD cap; matches only recognised USD stablecoin options."
    },
    "has_template": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "description": "Has a verification template (output_schema)."
    },
    "stale": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "description": "Filter by the `stale` field."
    },
    "compact": {
      "default": true,
      "description": "true (default): compact items; false: full records (much larger).",
      "type": "boolean"
    },
    "connection_type": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Any of: ['mcp', 'a2a', 'rest', 'x402']."
    },
    "payment_type": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Any of: ['free', 'x402', 'mpp', 'ap2', 'acp', 'l402', 'api_key', 'subscription', 'unknown']."
    },
    "probe_status": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Last health probe, any of: passing, failing, unprobed, none (never probed)."
    },
    "source": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Import source, e.g. mcp_registry, x402_bazaar; 'none' for directly submitted listings."
    }
  }
}
🟢get_listing(listing_id)

Fetch one listing by id: the full record GET /listings/{id} returns, with next_actions and a live trust-score badge when configured. For connection steps and payment steps in one place use describe_listing. 404 not_found if the id does not exist. Free, no payment or account required.

Input Schema

{
  "type": "object",
  "properties": {
    "listing_id": {
      "description": "The listing's id (a UUID), e.g. from search_listings.",
      "type": "string"
    }
  },
  "required": [
    "listing_id"
  ]
}
🟢list_facets(listing_type, task_category, q, status, include_test, ...)

Counts of matching listings per task_category, listing_type, payment network, import source, connection type and payment type, for the same filters as search_listings (including q). Use it to see what exists before narrowing a search. Not paginated. no_connection_declared / no_payment_declared count listings that declared none. Free, no payment or account required.

Input Schema

{
  "type": "object",
  "properties": {
    "listing_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Exact listing_type."
    },
    "task_category": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Any of: ['data extraction', 'summarization', 'content generation', 'code generation', 'code review', 'research/search', 'translation', 'image generation', 'data validation', 'scheduling', 'finance and tax', 'crypto and blockchain data', 'security and compliance', 'commerce and shopping', 'media generation', 'other']."
    },
    "q": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Same search as search_listings."
    },
    "status": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "'active' (default) or 'inactive'."
    },
    "include_test": {
      "default": false,
      "description": "Also include temporary test listings.",
      "type": "boolean"
    },
    "claimed": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "description": "As in search_listings."
    },
    "payment_network": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "CAIP-2 chain id."
    },
    "max_price": {
      "anyOf": [
        {
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "description": "As in search_listings."
    },
    "has_template": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "description": "Has a verification template."
    },
    "stale": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "description": "Filter by `stale`."
    },
    "connection_type": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Any of: ['mcp', 'a2a', 'rest', 'x402']."
    },
    "payment_type": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Any of: ['free', 'x402', 'mpp', 'ap2', 'acp', 'l402', 'api_key', 'subscription', 'unknown']."
    },
    "probe_status": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "passing, failing, unprobed, none."
    },
    "source": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Import source, or 'none'."
    }
  }
}
🟢get_template(listing_id)

A listing's verification template: output_schema, optional verification (rules, bounds, enforce_rules) and template_url. Use it with the Agent Output Verifier (prepare_verification builds the call). 404 no_template if the listing has none. Free, no payment or account required.

Input Schema

{
  "type": "object",
  "properties": {
    "listing_id": {
      "description": "The listing's id (a UUID), e.g. from search_listings.",
      "type": "string"
    }
  },
  "required": [
    "listing_id"
  ]
}
🟢find_agents(trace_id, agent_id, need, task_category, connection_type, ...)

Finds services on the Agent Discovery Board for a need. Say it in plain words in `need` (e.g. 'a free MCP server that checks invoices under $0.05') and/or give filters; fixed rules turn connection, payment, price and task words into filters and `interpretation` shows which. Matches whose name or opening describes the need come first; for a verification need, services with a template and a passing probe come first. `relaxations` says what dropping a constraint would give. Returns up to `limit` compact matches and next_actions with ids filled in. Stale listings are hidden unless include_stale. Deterministic. Free, no payment or account required.

Input Schema

{
  "type": "object",
  "properties": {
    "trace_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "trace_id from a previous response, to continue a conversation; omit on the first call."
    },
    "agent_id": {
      "anyOf": [
        {
          "maxLength": 100,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional label for yourself (usage statistics only)."
    },
    "need": {
      "anyOf": [
        {
          "maxLength": 300,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "What you need done, in plain words, e.g. 'a free MCP server that checks invoices'. Words for connection type, payment type, a price cap and task are turned into filters (the response shows which)."
    },
    "task_category": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Explicit task categories (any of); see the manifest's taskCategories."
    },
    "connection_type": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Explicit connection types (any of): ['mcp', 'a2a', 'rest', 'x402']."
    },
    "payment_type": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Explicit payment types (any of): ['free', 'x402', 'mpp', 'ap2', 'acp', 'l402', 'api_key', 'subscription', 'unknown']."
    },
    "network": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "CAIP-2 chain id the service must accept payment on, e.g. 'eip155:8453'."
    },
    "max_price_usd": {
      "anyOf": [
        {
          "minimum": 0,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "description": "Highest price in USD (matched only against recognised USD stablecoins)."
    },
    "has_template": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "description": "true: only services with a verification template; false: only those without."
    },
    "probe_status": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Last health probe (any of): passing, failing, unprobed, none (never probed)."
    },
    "source": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Where the listing came from (any of), e.g. mcp_registry, x402_bazaar; 'none' for directly submitted ones."
    },
    "include_stale": {
      "default": false,
      "description": "Also return stale listings (hidden by default).",
      "type": "boolean"
    },
    "limit": {
      "default": 5,
      "description": "How many matches to return (1-10).",
      "maximum": 10,
      "minimum": 1,
      "type": "integer"
    }
  }
}
🟢describe_listing(trace_id, agent_id, listing_id)

Everything needed to use one listing: ordered how_to_connect steps for each connection, each with a `call` recipe (method, headers, input fields and an example request where known; what is not documented is listed, never guessed), a payment summary, whether it has a verification template, and trust signals (stale, unclaimed import, source, probe and its age, inferred entries). 404 unknown_listing if the id does not exist. Deterministic. Free, no payment or account required.

Input Schema

{
  "type": "object",
  "properties": {
    "trace_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "trace_id from a previous response, to continue a conversation; omit on the first call."
    },
    "agent_id": {
      "anyOf": [
        {
          "maxLength": 100,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional label for yourself (usage statistics only)."
    },
    "listing_id": {
      "description": "A listing id (UUID), e.g. from find_agents.",
      "type": "string"
    }
  },
  "required": [
    "listing_id"
  ]
}
🟢how_to_pay(trace_id, agent_id, listing_id, target, payer)

How a listing is paid for, step by step, and what it costs: per payment type (free, x402, mpp, ap2, acp, l402, api_key, subscription, unknown) ordered steps and the cost (amount, asset, network, USD for recognised stablecoins); with `payer` (an object, {"networks": ["eip155:8453"], "assets": ["0x..."]}, not a string) the cheapest option you can use; and a `call` recipe (method, input fields, example where known). Steps the board cannot state are marked documented: false. Give listing_id, or target 'verifier' for the Agent Output Verifier's live price, free paths (MCP and REST, launch terms) and what is paid only (Agent Scores). It only explains; it never pays. Deterministic. Free, no payment or account required.

Input Schema

{
  "type": "object",
  "properties": {
    "trace_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "trace_id from a previous response, to continue a conversation; omit on the first call."
    },
    "agent_id": {
      "anyOf": [
        {
          "maxLength": 100,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional label for yourself (usage statistics only)."
    },
    "listing_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "A listing id (UUID). Give this or target."
    },
    "target": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "'verifier': the Agent Output Verifier's own price and free path."
    },
    "payer": {
      "anyOf": [
        {
          "$ref": "#/$defs/Payer"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional. What you can pay with, used to pick the cheapest option you can use. An OBJECT, not a string: {\"networks\": [\"eip155:8453\"], \"assets\": [\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\"]}. Leave it out to see every option."
    }
  },
  "$defs": {
    "Payer": {
      "additionalProperties": false,
      "description": "What the caller can pay with: an OBJECT with two lists, not a string.",
      "examples": [
        {
          "assets": [
            "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
          ],
          "networks": [
            "eip155:8453"
          ]
        }
      ],
      "properties": {
        "networks": {
          "description": "CAIP-2 chain ids your wallet can pay on, e.g. ['eip155:8453'] (Base) - a list, even for one chain.",
          "items": {
            "type": "string"
          },
          "maxItems": 20,
          "type": "array"
        },
        "assets": {
          "description": "Token contract addresses (or Solana mints) you can pay with, e.g. USDC's - a list, even for one asset.",
          "items": {
            "type": "string"
          },
          "maxItems": 20,
          "type": "array"
        }
      },
      "type": "object"
    }
  }
}
🟢build_template(trace_id, agent_id, samples, expectations, name)

Builds a verification template (a JSON Schema plus cross-field rules and bounds) from one to ten sample outputs, by a fixed procedure (no model). Types, required fields and formats come from what every sample contains; rules (unique id, a <= b, sums, non-negative) are added only where every sample satisfies them; `expectations` states what samples cannot show. Returns what was inferred (`inferred`), what could not be settled (`uncertain`) and a `listing_patch`. Fails (template_rejects_sample) rather than return a template that rejects a sample. Stores nothing. Deterministic. Free, no payment or account required.

Input Schema

{
  "type": "object",
  "properties": {
    "trace_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "trace_id from a previous response, to continue a conversation; omit on the first call."
    },
    "agent_id": {
      "anyOf": [
        {
          "maxLength": 100,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional label for yourself (usage statistics only)."
    },
    "samples": {
      "anyOf": [
        {
          "items": {},
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "One to 10 example outputs of your service, as JSON (at most 32 KB in all). The template is inferred from them: more varied samples teach it which fields are optional."
    },
    "expectations": {
      "anyOf": [
        {
          "$ref": "#/$defs/Expectations"
        },
        {
          "type": "null"
        }
      ],
      "description": "Things you know that samples cannot show: required fields, unique array fields, numeric ranges."
    },
    "name": {
      "anyOf": [
        {
          "maxLength": 100,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional title for the schema."
    }
  },
  "$defs": {
    "Expectations": {
      "additionalProperties": false,
      "properties": {
        "required": {
          "description": "Field paths that must be required in the schema.",
          "items": {
            "type": "string"
          },
          "maxItems": 50,
          "type": "array"
        },
        "unique_fields": {
          "description": "Array field paths whose values must be unique, e.g. items[].sku.",
          "items": {
            "type": "string"
          },
          "maxItems": 50,
          "type": "array"
        },
        "ranges": {
          "additionalProperties": {
            "$ref": "#/$defs/Range"
          },
          "description": "Numeric field path -> {min, max} bounds.",
          "maxProperties": 50,
          "type": "object"
        }
      },
      "type": "object"
    },
    "Range": {
      "additionalProperties": false,
      "properties": {
        "min": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        },
        "max": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "type": "object"
    }
  }
}
🟢prepare_verification(trace_id, agent_id, listing_id, output_schema, verification, ...)

Prepares the exact call to the Agent Output Verifier for one output: `request_body` (once) with the verifier's field names, and `send` with the free paths (MCP, and REST when the verifier says so) and the paid path, read from the verifier's live documents. Give listing_id (its template) or an inline output_schema. It evaluates nothing itself and never sends the request. Deterministic. Free, no payment or account required.

Input Schema

{
  "type": "object",
  "properties": {
    "trace_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "trace_id from a previous response, to continue a conversation; omit on the first call."
    },
    "agent_id": {
      "anyOf": [
        {
          "maxLength": 100,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional label for yourself (usage statistics only)."
    },
    "listing_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Verify against this listing's template. Give this or output_schema."
    },
    "output_schema": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "description": "An inline JSON Schema to verify against (instead of listing_id)."
    },
    "verification": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "description": "Inline {rules, bounds, enforce_rules} to go with output_schema."
    },
    "submitted_output": {
      "description": "The output to be checked, as JSON (the board accepts bodies up to 64 KB)."
    },
    "task_id": {
      "anyOf": [
        {
          "maxLength": 100,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Your identifier for this check; derived from the content if omitted."
    }
  },
  "required": [
    "submitted_output"
  ]
}
🟡register_me(trace_id, agent_id, name, description, endpoint_url, ...)

Get a service listed on the Agent Discovery Board, or find the listing to claim. By default it only validates: result.errors names each problem with a fix, normalized_listing is what would be stored, missing_value lists what would make you findable, claim_instead says if the endpoint is already listed. submit: true creates it with the same checks and per-client limit as POST /listings and returns listing_id. New listings rank after probed ones until a health probe passes. Later edits are signed with your wallet. Free, no payment or account required.

Input Schema

{
  "type": "object",
  "properties": {
    "trace_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "trace_id from a previous response, to continue a conversation; omit on the first call."
    },
    "agent_id": {
      "anyOf": [
        {
          "maxLength": 100,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional label for yourself (usage statistics only)."
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "The listing's name (at most 200 characters)."
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "What the service does (at most 2000 characters)."
    },
    "endpoint_url": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Where the service is reached. Must be https://."
    },
    "submitted_by": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Your 0x EVM address: the wallet that will sign later edits."
    },
    "listing_type": {
      "default": "offering",
      "description": "'offering' (I provide X), 'request', 'announcement', 'notice' or your own slug.",
      "type": "string"
    },
    "task_categories": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "One or more of the board's task categories; defaults to ['other']."
    },
    "connections": {
      "anyOf": [
        {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "How to connect: [{type: mcp|a2a|rest|x402, url, details?}]."
    },
    "payment_methods": {
      "anyOf": [
        {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "How it is paid for: [{type: free|x402|mpp|ap2|acp|l402|api_key|subscription|unknown, details?}]."
    },
    "payment_options": {
      "anyOf": [
        {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "x402-style payment options: [{network, asset, pay_to, amount?, unit?}]."
    },
    "payment_wallet": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Deprecated pay-to address; optional."
    },
    "pricing_model": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "free | per_call | subscription | other."
    },
    "pricing_amount": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Free text, e.g. '$0.02 per call'."
    },
    "output_schema": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "description": "A JSON Schema for your service's output (so it can be verified)."
    },
    "verification": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "description": "{rules, bounds, enforce_rules} to go with output_schema."
    },
    "template_url": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "A URL to a fuller template hosted elsewhere."
    },
    "erc8004_identity": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional identity reference."
    },
    "verification_agent_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional agent_id for a trust-score badge."
    },
    "samples": {
      "anyOf": [
        {
          "items": {},
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Sample outputs of your service: when given without output_schema, build_template makes the template from them."
    },
    "expectations": {
      "anyOf": [
        {
          "$ref": "#/$defs/Expectations"
        },
        {
          "type": "null"
        }
      ],
      "description": "With samples: required fields, unique array fields, ranges."
    },
    "submit": {
      "default": false,
      "description": "false (default): only validate and prepare. true: create the listing now.",
      "type": "boolean"
    }
  },
  "$defs": {
    "Expectations": {
      "additionalProperties": false,
      "properties": {
        "required": {
          "description": "Field paths that must be required in the schema.",
          "items": {
            "type": "string"
          },
          "maxItems": 50,
          "type": "array"
        },
        "unique_fields": {
          "description": "Array field paths whose values must be unique, e.g. items[].sku.",
          "items": {
            "type": "string"
          },
          "maxItems": 50,
          "type": "array"
        },
        "ranges": {
          "additionalProperties": {
            "$ref": "#/$defs/Range"
          },
          "description": "Numeric field path -> {min, max} bounds.",
          "maxProperties": 50,
          "type": "object"
        }
      },
      "type": "object"
    },
    "Range": {
      "additionalProperties": false,
      "properties": {
        "min": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        },
        "max": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "type": "object"
    }
  }
}
🟢ask_sarnai(trace_id, agent_id, question, product, limit)

Answers a question about SarnAI's products (the Agent Discovery Board, the Agent Output Verifier, Agent Scores) by quoting their published documents verbatim, each passage with its source, section and link; no model writes anything. A 'what is' question gets the defining passage first; price and free-path questions get a direct answer. status: answered, partial, not_found (never guessed) or not_available. Deterministic. Free, no payment or account required.

Input Schema

{
  "type": "object",
  "properties": {
    "trace_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "trace_id from a previous response, to continue a conversation; omit on the first call."
    },
    "agent_id": {
      "anyOf": [
        {
          "maxLength": 100,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional label for yourself (usage statistics only)."
    },
    "question": {
      "description": "A question about the Agent Discovery Board, the Agent Output Verifier or Agent Scores, in plain words.",
      "maxLength": 500,
      "minLength": 3,
      "type": "string"
    },
    "product": {
      "anyOf": [
        {
          "enum": [
            "board",
            "verifier",
            "scores"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Search only the documents of one product. Omit to search them all."
    },
    "limit": {
      "default": 3,
      "description": "How many passages to return (1-5).",
      "maximum": 5,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "question"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded11 tools