Documentation.
Setup, tools, parameters, responses and errors for MCP, REST and A2A.
Setup
Three interfaces share one set of handlers, so the same question returns the same answer. Public reads need no account or key.
MCP
Server URL https://agentery.com/api/mcp. Streamable HTTP with JSON responses, protocol 2025-03-26. Your client discovers the tools with tools/list.
claude mcp add --transport http agentery https://agentery.com/api/mcp
{
"mcpServers": {
"agentery": {
"url": "https://agentery.com/api/mcp"
}
}
}https://agentery.com/api/mcp
{
"servers": {
"agentery": {
"type": "http",
"url": "https://agentery.com/api/mcp"
}
}
}codex mcp add agentery --url https://agentery.com/api/mcp
gemini mcp add --transport http -s user agentery https://agentery.com/api/mcp
curl -s https://agentery.com/api/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'REST
Base URL https://agentery.com/api/v1. Plain GET requests returning JSON, with CORS enabled. The OpenAPI description is at /api/v1/openapi.json (version 1.21.0).
curl "https://agentery.com/api/v1/search?q=customer%20support%20chatbot&limit=5"
curl "https://agentery.com/api/v1/agent/chat_thing"
curl "https://agentery.com/api/v1/compare?ids=chat_thing,chatbase"
curl "https://agentery.com/api/v1/openapi.json"
A2A
Agent Card at https://agentery.com/.well-known/agent-card.json. JSON-RPC endpoint https://agentery.com/api/a2a, protocol versions 1.0 and 0.3. Messages are plain text such as search: …, profile: … or compare: a, b, or JSON naming a skill and its arguments.
curl "https://agentery.com/.well-known/agent-card.json"
curl -s https://agentery.com/api/a2a \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":"1","method":"message/send","params":{"message":{"role":"user","messageId":"docs-example-1","parts":[{"kind":"text","text":"compare: chat_thing, chatbase"}]}}}'Available tools
24 MCP tools. A typical journey is search_providers → get_provider_profile → compare_providers; add get_group_fair_price when the question is what a service should cost. Four tools write, and only to your own outcome reports or private benchmarks.
Choose a service
Search by task, inspect evidence, compare a shortlist.
search_providersUse when someone wants to find or shortlist AI products, AI agents, MCP servers or APIs for a task, e.g.get_provider_profileUse to check one specific listing before recommending or connecting it: plans and prices with billing units, what it does, integrations, deployment (hosted / self_hosted / both / unknown, with evidence), licence (named licence only), liveness and how to connect (website, docs, MCP endpoint with a copy-paste config_snippet, A2A agent card, API, install).compare_providersUse to compare 2–6 shortlisted listings side by side — plan-level prices (e.g.suggest_alternativesFind related alternatives to a known provider, ranked by text-embedding nearness to that provider's OWN profile (NO category lookup), each with observed price, endpoint liveness, community upvotes and how_to_connect (website, docs, mcp endpoint).find_marketUse when someone asks what a kind of product typically costs or who competes in a space, e.g.research_capabilityUse for a quick first overview of a buying task in one call: the closest-matching listings (matched on what they do, no fixed categories), the price range and median for comparable products (with n), and a shortlist with observed prices, market_position (below / in line / above market) and handles in compare_ready for compare_providers.refine_resultswriteUse when an earlier search_providers or research_capability answer missed what was meant: pass its request_ref and the correction in plain words (e.g.get_providerCall this for the public directory card of one provider by handle or registration number: bio, source URLs, X-verification status, entity type, community rating and structured profile when available.
Check a price
Fair market prices and benchmarks for comparable services.
get_group_fair_priceUse to check what a product of a given kind typically costs: give a task or product type (or a group_id from the group price league) and get its product group's fair price for each buyer tier (individual, pro, team / small business, enterprise) — the median entry monthly price in that tier with its typical range — plus which payment models the group typically uses (free, subscription, usage, one-time, contact sales), usage and one-time medians where at least 3 listings publish them, and the group's price-index change over 90 days.price_benchmarkUse to judge whether a price is fair or what a capability typically costs, e.g.market_reportDeep-dive ONE market before building or investing — the market is the semantic neighbourhood of your natural-language query (nearest providers by text embedding, NO fixed category).
Follow the market
The Agent Economy Price Index and market signals.
get_price_indexUse when asked whether prices of AI agents, tools or MCP servers are rising or falling overall.get_price_index_historyUse to show how AI agent and MCP prices have moved over time: the dated Agent Economy Price Index series, the same chained like-for-like series agentery.com/aepi charts.market_gapsUse when a seller or investor asks which tasks people look for that few paid products serve.demand_signalsInspect eligible zero-result or weak-match capability queries observed on this MCP server, aggregated and ranked by miss count.
Research a question
One specific question about one product, answered with sources.
request_researchwriteUse when a buying decision hinges on one specific fact about one listing that its profile does not settle, e.g.get_researchStatus and result of a research job created by request_research.stop_research_updateswriteStop watching a research job (the result stays retrievable with get_research).
Private benchmarks
Your own peer cohort. The cb_ token returned on creation is the only key.
create_custom_benchmarkwriteUse when someone wants to keep watching the prices of products they choose (e.g.get_custom_benchmarkGet a private custom benchmark's current report: members, current stats (headline median/quartiles only when ≥3 comparable priced members — monthly, per-seat and per-call prices are never blended), buyer-tier / provider-type / pricing-unit cohorts, historical index, and data coverage.update_custom_benchmarkwriteAdd/remove members or rename a custom benchmark.delete_custom_benchmarkwriteDisable access to a custom benchmark. Keeps only a minimal audit record; no underlying Agentery data is touched.
Feedback
Report how a listed provider worked after you used it.
report_outcomewriteReport the result of ACTUALLY USING a listed provider for a task.
Partner only
Needs a Bearer key; public callers receive an error naming the public alternatives.
rank_providers_for_workflowPARTNER-ONLY (Bearer key required). Given a business context and its workflow steps, return ranked provider candidates for EACH step — structured, scored (match_score 0-100) matches with match_reasons and cautions.
REST endpoints
GET /searchFind providers for a described job (same as MCP search_providers)GET /agent/{handle}Full evidence profile for one provider (same as MCP get_provider_profile)GET /compareCompare 2–6 providers side by side (same as MCP compare_providers)GET /alternativesRelated alternatives to a known provider (same as MCP suggest_alternatives)GET /priceObserved price benchmark for a task or market (same as MCP price_benchmark)GET /price-indexCurrent AEPI level and 1d/7d/30d change (same as MCP get_price_index)GET /price-index/historyDated AEPI series (same as MCP get_price_index_history)GET /moversDay/week/month index change per niche and tierGET /gapsDemand clusters with weak paid supplyGET /niche/{slug}Measured report for one marketGET /demandZero-result capability queries seen here (honest insufficient_evidence when none)GET /indicesAEPI plus companion and sector indices
A2A skills
search_providersFind providers for a job. Free-text search over indexed AI agents, MCP servers, APIs and platforms with observed prices, evidenced deployment model (hosted / self-run / both / unknown) and connection details.get_provider_profileInspect a provider. Full evidence profile for one provider: plans and observed price (null when unobserved, never zero), liveness, deployment and licence evidence with source URL and age, how_to_connect (website, docs, MCP endpoint, install line, repository).compare_providersCompare a shortlist. 2–6 providers side by side with plan-level prices.suggest_alternativesFind alternatives. Related alternatives to a known provider ranked by nearness to its own profile, each with observed price, liveness, deployment and connection details; optional cheaper_only.price_benchmarkBenchmark prices for a task. Observed price distribution (median, quartiles, counts, reliability) for a task or market, per buyer tier.get_price_indexAgent Economy Price Index (AEPI). Current AEPI level with 1d/7d/30d change for the whole economy, a buyer tier or a market, plus the dated history on request (skill get_price_index_history).
Parameters
Inputs as published in tools/list and the OpenAPI description. Open a tool to see its parameters.
MCP tools
search_providers
Use when someone wants to find or shortlist AI products, AI agents, MCP servers or APIs for a task, e.g. 'AI tool that transcribes sales calls' or 'MCP server to reply to Zendesk tickets'. Returns ranked candidates with what each does, a fit label (match / partial / weak, naming any mismatch), delivery type, price status (known / free / contact_sales / unknown; unknown is never free) and links. Requirements in the wording are checked per result; unverified ones are marked unknown. Results are candidates to check: open strong ones with get_provider_profile and compare finalists with compare_providers. Thin coverage returns no_match, never padding.
| Parameter | Type | Description |
|---|---|---|
queryrequired | string | REQUIRED. Free-text description of the product job you are buying, e.g. 'customer support provider with Zendesk integration' or 'supplier invoice reconciliation'. Not for questions about Agentery itself (upvotes, endpoints): those return status unsupported_request. |
filters | object | Optional: industry_fit[], integrations_available[], entity_type[] (agent|tool|infrastructure|service|marketplace|content-community), autonomy_level[] (assistant|workflow automation|agentic|infrastructure), minimum_evidence_quality (low|medium|high) |
max_monthly_usd | number | Drop providers whose observed lowest paid tier exceeds this (USD/month). Providers with no observed public price still pass unless require_public_price is true. |
require_public_price | boolean | Only return providers with an observed public price (default false) |
billing | array | Only providers with one of these observed billing models, e.g. ["free","freemium","subscription","usage"] |
sort | string | match (default) or price_asc (cheapest observed price first; unpriced providers last) One of: match price_asc |
provider_type | string | Filter to one provider type — the audited classification dimension (same as the website type chips and AEPI facets); result labels always match this filter. Omit for all types. One of: agent mcp api platform infrastructure |
deployment | string | Optional (1.10.0). Keep only providers whose EVIDENCED deployment model matches: hosted = a vendor-published MCP endpoint exists (connect, nothing to install); self_hosted = a published install line (npx/uvx/docker/pip/git clone) and no vendor endpoint; both = both are documented; unknown = no evidence held. 'both' listings satisfy hosted and self_hosted. Evidence comes from the vendor's own pages and source directories (Glama/MCP registry attributes) — never guessed from a repository's existence. One of: hosted self_hosted both unknown |
limit | number | Max results (1-50, default 20) |
request_ref | string | Optional task reference (rq_ + 12 hex) from an earlier answer. Continues that task: its remembered facts (quantities, budget, requirements, benchmark selection) apply to this call, and the answer keeps the same request_ref. |
get_provider_profile
Use to check one specific listing before recommending or connecting it: plans and prices with billing units, what it does, integrations, deployment (hosted / self_hosted / both / unknown, with evidence), licence (named licence only), liveness and how to connect (website, docs, MCP endpoint with a copy-paste config_snippet, A2A agent card, API, install). Fields are null when the vendor publishes nothing; nothing is guessed. price_applies_to flags a stored price that belongs to the vendor's platform rather than this connector. product_group names the listing's product group with its fair price per buyer tier and 90-day price-index change. reported_success stays null until 5+ distinct reporters in 90 days; after actually using a listing, call report_outcome.
| Parameter | Type | Description |
|---|---|---|
provider_idrequired | string | The provider_id/handle returned by search_providers or compare_providers |
compare_providers
Use to compare 2–6 shortlisted listings side by side — plan-level prices (e.g. the Pro tier), capabilities, deployment, licence and how to connect — or to check a quote against alternatives. Inputs resolve to real listings by exact handle, then exact name, never a silent fuzzy swap: unknown inputs come back in unresolved_inputs with suggested_matches and a corrected_call; if only one input is real it is compared with its nearest market peers (comparison_status says so); if none resolve, comparison_status is insufficient_valid_providers. Mixed delivery types are flagged: a hosted agent and an MCP server are not directly equivalent, so compare hosted prices with hosted prices. Over-budget or weak matches get suggested_alternatives. Returns a concise decision view by default (fit, observed plans and prices with source and date, job cost, requirement verdicts, unknowns); pass detail:"full" for every field. Accepts `provider_ids` (aliases: handles, ids, or a comma-separated string).
| Parameter | Type | Description |
|---|---|---|
requirements | array | Optional. Mandatory requirements as plain phrases (e.g. "sanctions screening", "documented MCP interface"). Adds an ADDITIVE service_view: per-provider evidence matrix from stored first-party page text — supported / not_supported / unknown with the excerpt and observation date; unknown never means unsupported. |
service | string | Optional. A service recipe whose fixed requirements and evidence fields are applied (see service_view.requirements). One of: supplier-verification contract-review developer-capabilities cheaper-alternatives |
task | string | Optional. The buyer's job in plain words; used as the service_view heading. |
optional | array | Optional preferences: reported in service_view but never gating. |
detail | string | Optional. concise (default): the decision view. full: the complete comparison (all plan lines, evidence checks, deployment, licence, how to connect, requirement evidence excerpts). One of: concise full |
provider_idsrequired | array | 2-6 provider handles from search_providers/market_gaps, e.g. ["openhands","lexaclaw"] |
request_ref | string | Optional task reference (rq_ + 12 hex) from an earlier answer. Continues that task: its remembered facts (quantities, budget, requirements, benchmark selection) apply to this call, and the answer keeps the same request_ref. |
suggest_alternatives
Find related alternatives to a known provider, ranked by text-embedding nearness to that provider's OWN profile (NO category lookup), each with observed price, endpoint liveness, community upvotes and how_to_connect (website, docs, mcp endpoint). For cheaper_only, inspect whether the reference price and candidate prices support a valid comparison: an empty response may reflect a missing or incompatible reference price rather than the absence of alternatives (the response says which). Accepts `agent_id` (aliases: handle, id). These substitutes are also surfaced inside research_capability and compare_providers. Each alternative also carries `deployment` (evidenced model) and how_to_connect.install / repository (1.10.0).
| Parameter | Type | Description |
|---|---|---|
agent_idrequired | string | Handle of the provider to find substitutes for, e.g. 'openhands' |
cheaper_only | boolean | Only keep alternatives priced below the subject's lowest monthly price. Free/freemium providers always qualify; providers with no observed price are excluded. Default false. |
limit | number | Max alternatives (1-10, default 5) |
find_market
Use when someone asks what a kind of product typically costs or who competes in a space, e.g. 'what should I charge for lead-generation automation' or 'tools that monitor competitor pricing'. Maps the task to its market (the nearest providers by meaning, no fixed categories) and returns the market label, provider and priced counts, the nearest providers with observed prices, and pricing_by_tier (median, p25/p75, range and n per buyer tier). When nothing is close it returns no_match or thin_coverage and withholds pricing rather than invent a market. For market plus shortlist in one call use research_capability.
| Parameter | Type | Description |
|---|---|---|
taskrequired | string | REQUIRED. A natural-language task, capability or service in plain words, e.g. 'reconcile supplier invoices'. Call as {"task": "…"}; an empty call returns status needs_input with an example and searches nothing. |
query | string | Alias for task (back-compat only) — prefer task |
research_capability
Use for a quick first overview of a buying task in one call: the closest-matching listings (matched on what they do, no fixed categories), the price range and median for comparable products (with n), and a shortlist with observed prices, market_position (below / in line / above market) and handles in compare_ready for compare_providers. Also returns suggested_alternatives. It does not run the comparison. For careful selection prefer search_providers → get_provider_profile → compare_providers. Accepts `task` (aliases: query, q).
| Parameter | Type | Description |
|---|---|---|
cohort_ref | string | Optional (1.17.0): reuse the exact set of comparable providers selected by an earlier price_benchmark / market_report / research_capability call. |
taskrequired | string | Required — the natural-language capability/task, e.g. 'reconcile supplier invoices' or 'litigation-analysis provider'. Aliases: query, q. |
buyer_tier | string | Optional buyer tier to price against ('team' = Team/SME). One of: individual pro team enterprise |
max_monthly_usd | number | Optional budget ceiling in USD/month — filters the shortlist and drives suggested_alternatives. |
integrations | array | Optional required integrations, e.g. ["zendesk","slack"] — soft preference; integration status is reported per provider. |
sort | string | Shortlist ordering. Default 'match'. One of: match price_asc |
limit | number | Shortlist size (1-12, default 5). |
provider_type | string | Preferred delivery type. 'auto' (default) infers from the task; note 'AI agent' phrasing is treated as generic (neutral), not an agent-only filter. When a type is explicit (mcp/api/agent) matching providers are SOFT-RANKED to the top and the rest are kept as clearly-labelled cross_type_alternative entries — never hard-filtered (no zero-result cliff), and the functional match is never changed. Every provider is labelled with provider_type (public values: agent | mcp | api | unknown) + type_match_score; provider_type{type_rank_boost_applied, boosted_provider_type, result_counts_by_type} is returned. One of: auto agent mcp api any |
response_mode | string | 'summary' (default) or 'full' (adds tier cohorts, coverage and raw results). One of: summary full |
request_ref | string | Optional task reference (rq_ + 12 hex) from an earlier answer. Continues that task: its remembered facts (quantities, budget, requirements, benchmark selection) apply to this call, and the answer keeps the same request_ref. |
refine_results
Use when an earlier search_providers or research_capability answer missed what was meant: pass its request_ref and the correction in plain words (e.g. 'must integrate with Slack', 'budget is $20/month', 'data must stay in the EU'). Agentery re-runs the search with the changed constraints (the others are kept) and returns the new answer plus what changed. source: 'human' (the user's words), 'agent' (your assessment, default) or 'follow_up'. Agentery sees only the request and correction you send, never your wider conversation. Task answers (search_providers, compare_providers, research_capability, price_benchmark, market_report) carry ONE request_ref plus a 'conversation' block: the facts remembered for the task, any optional clarification questions (at most two, one round) and the exact refine_results call to continue. Answer with plain words, 'unknown' or 'skip'; source is one of human, agent, follow_up. Pass the same request_ref to another task tool to continue the task there. References expire 24 h after the last turn.
| Parameter | Type | Description |
|---|---|---|
request_refrequired | string | The request_ref from the earlier answer (rq_ + 12 hex characters). |
correctionrequired | string | What was missing or wrong, in plain words. |
source | string | Where the correction came from. Default 'agent'. One of: human agent follow_up |
get_provider
Call this for the public directory card of one provider by handle or registration number: bio, source URLs, X-verification status, entity type, community rating and structured profile when available.
| Parameter | Type | Description |
|---|---|---|
handle | string | Provider handle, e.g. 'openhands' |
regNum | number | Registration number, e.g. 2432 |
get_group_fair_price
Use to check what a product of a given kind typically costs: give a task or product type (or a group_id from the group price league) and get its product group's fair price for each buyer tier (individual, pro, team / small business, enterprise) — the median entry monthly price in that tier with its typical range — plus which payment models the group typically uses (free, subscription, usage, one-time, contact sales), usage and one-time medians where at least 3 listings publish them, and the group's price-index change over 90 days. Groups are built from what products do, not from price. Medians of current published prices only; individual listings are not returned — use search_providers for candidates.
| Parameter | Type | Description |
|---|---|---|
query | string | The task or product type, e.g. 'AI meeting notes for sales teams'. |
group_id | number | Optional: a group id from agentery.com/aepi/groups or from get_provider_profile's product_group. |
price_benchmark
Use to judge whether a price is fair or what a capability typically costs, e.g. 'Is $49/month reasonable for an AI SDR for a small team?'. Pass the capability as `query` (aliases: task, niche). Returns observed prices of comparable products — median, p25/p75, range, mean, stdev and n — split by delivery type (agent | mcp) and buyer tier (individual / pro / team_sme / enterprise), never blended across incompatible pricing units. Comparables are the products closest in what they do (no fixed categories). A benchmark describes an observed sample; it is not a quote and not evidence of willingness to pay. Set provider_type and buyer_tier when known. If nothing priced is close it returns resolved:false with a note, never an invented figure.
| Parameter | Type | Description |
|---|---|---|
query | string | The capability to benchmark, in natural language, e.g. 'AI code review' or 'supplier invoice reconciliation'. Preferred input. |
task | string | Alias of `query` (same text). |
niche | string | Legacy alias of `query`, kept for older clients — prefer `query`. |
sector | string | Sector name, e.g. 'legal' (ignored if a query is given) |
provider_type | string | Delivery type being priced. Set when the user says provider, MCP or API. Omit (or 'all') to get the per-type matrix instead of a blended figure. 'api' is recognised but not yet a separate commercial cohort (folded into provider). One of: agent mcp api all |
buyer_tier | string | Buyer tier being priced. Set when the user describes who is buying (an individual, a professional, a team/SME, or an enterprise). An individual licence must never be represented by the SME or enterprise price. One of: individual pro team_sme enterprise all |
pricing_unit | string | Billing unit the benchmark is FOR (1.17.0: honoured). Selects the comparable observations; units are never converted into one another, and a thin unit returns its observations and the gap — never a flat-monthly substitute. A query such as 'cost per support ticket' sets it when omitted. One of: flat per_seat per_agent per_call per_ticket per_conversation per_resolution per_transaction per_invoice per_document per_page per_minute per_message per_email per_credit per_token percent_of_spend |
cohort_ref | string | Optional (1.17.0): reuse the exact set of comparable providers selected by an earlier price_benchmark / market_report / research_capability call (its cohort_ref), instead of re-selecting the market from new wording. |
proposed_price | number | Optional (sellers): a proposed price to position against the selected comparable offers (same unit; currency below). Returns where it sits in the observed range; a percentile only with ≥5 comparable providers. A market reference, not an optimal price. |
currency | string | Currency of proposed_price (ISO code, default USD). |
commitment | string | Billing commitment of proposed_price (default monthly). One of: monthly annual |
offset | number | Paging offset over the selected observations in full mode. |
limit | number | Observations per page in full mode (1–100, default 50). |
response_mode | string | 'summary' (default): the selected benchmark with its top observations. 'full': every included observation (paged), with plan, native price, unit, commitment, source and observed date. One of: summary full |
request_ref | string | Optional task reference (rq_ + 12 hex) from an earlier answer. Continues that task: its remembered facts (quantities, budget, requirements, benchmark selection) apply to this call, and the answer keeps the same request_ref. |
market_report
Deep-dive ONE market before building or investing — the market is the semantic neighbourhood of your natural-language query (nearest providers by text embedding, NO fixed category). Every field is MEASURED: the observed-pricing benchmark separated by provider type and buyer tier (median, mean, stdev, p25/p75, min–max range and n via the canonical pricing engine), how many providers are in the neighbourhood and how many are priced, and the top providers already competing there with their observed price and relevance. Pass `query` (a natural-language capability or market, e.g. 'customer support chatbot'). For market + pricing + a ready shortlist in one call, use research_capability.
| Parameter | Type | Description |
|---|---|---|
queryrequired | string | Natural-language capability or market, e.g. 'customer support chatbot' or 'ai phishing detection'. |
response_mode | string | 'summary' (DEFAULT): neighbourhood counts, per-type/per-tier price cohorts and the top 12 providers. 'full' (1.17.0): EVERY member of the neighbourhood, paged with offset / limit, each with its price reading (plan, unit, currency, source, observed date). One of: summary full |
cohort_ref | string | Optional (1.17.0): reuse the exact set of comparable providers selected by an earlier price_benchmark / market_report / research_capability call (its cohort_ref), instead of re-selecting the market from new wording. |
offset | number | full mode: paging offset over members (default 0). |
limit | number | full mode: members per page (1–150, default 50). |
request_ref | string | Optional task reference (rq_ + 12 hex) from an earlier answer. Continues that task: its remembered facts (quantities, budget, requirements, benchmark selection) apply to this call, and the answer keeps the same request_ref. |
get_price_index
Use when asked whether prices of AI agents, tools or MCP servers are rising or falling overall. Returns the current Agent Economy Price Index (AEPI), a like-for-like index of observed agent and MCP pricing (base 100 = 29 Jun 2026; an index level, not a price), with 1-, 7- and 30-day change, plus the same for the four buyer tiers (Individual, Pro, Team/SME, Enterprise). provider_type=agent|mcp gives the standalone index for that delivery type; tier narrows to one tier. For the trend over time use get_price_index_history; for what a particular kind of product costs use get_group_fair_price or price_benchmark.
| Parameter | Type | Description |
|---|---|---|
benchmark_id | string | Optional: a private custom benchmark token (cb_…) from create_custom_benchmark — returns that cohort's current index instead of the economy index. Cannot be combined with niche. |
provider_type | string | 'all' (default) = the combined whole-economy index; 'agent' or 'mcp' = the standalone index over just that delivery type (own base 100); 'payg' = the standalone pay-as-you-go sub-index (usage rates purchasable without a subscription, engine v2). Agents and MCPs price and move differently, so an MCP buyer should read the 'mcp' index and an agent buyer the 'agent' index. One of: all agent mcp subscription hybrid one_off payg |
tier | string | Filter to one buyer tier ('team' = Team/SME). Default 'all'. One of: all individual pro team enterprise |
response_mode | string | 'summary' (default) or 'full' (adds exact sub-0.01% moves and repricing counts). One of: summary full |
get_price_index_history
Use to show how AI agent and MCP prices have moved over time: the dated Agent Economy Price Index series, the same chained like-for-like series agentery.com/aepi charts. Points are index levels (base 100), never prices. Whole-economy series by default; `tier` for one buyer tier; provider_type agent|mcp for one delivery type (own base 100); `period` 30d (default) / 90d / all; response_mode summary (default) or full (adds gap flags). Thin data returns insufficient_history, never an invented series. For what one capability costs use price_benchmark or market_report. Also reads a private custom benchmark's history via benchmark_id.
| Parameter | Type | Description |
|---|---|---|
benchmark_id | string | Optional: a private custom benchmark token (cb_…) — returns that cohort's dated series instead of the economy series. Cannot be combined with niche. |
provider_type | string | 'all' (default) = the combined whole-economy series, or the standalone 'agent' / 'mcp' / 'subscription' / 'hybrid' / 'one_off' / 'payg' = the billing-LENS series (they cut across provider/mcp; a rate sits in one delivery type AND one lens; own base 100) — 'payg' (pay-as-you-go, engine v2) series (own base 100). One of: all agent mcp subscription hybrid one_off payg |
tier | string | Return one buyer tier's series ('team' = Team/SME). Default 'all' = the headline series. One of: all individual pro team enterprise |
period | string | History window. Default '30d'. One of: 30d 90d all |
response_mode | string | 'summary' (default, compact) or 'full'. One of: summary full |
since | string | Optional, for providers that poll: the `cursor` (or `next_cursor`) from your previous call, or an ISO timestamp of your last check. Returns only what changed since then: new_points (newly published days), corrected_points (earlier days whose published level changed, with previous_level) and withdrawn_points, plus next_cursor for the next call. status 'no_changes' when nothing changed. Omit for the full history. |
market_gaps
Use when a seller or investor asks which tasks people look for that few paid products serve. Clusters requests seen on this MCP server by meaning and returns those far from any paid provider: the request phrasing, distinct_callers, raw_requests, the nearest paid provider and its similarity (low = under-served). headline = jobs asked by two or more callers; weak_leads = one caller; information_requests = questions about a named product. These are research leads from limited traffic, not buyer counts or proof of a market-wide gap; few or none is normal while volume is low. Marked test traffic is excluded. No arguments needed.
| Parameter | Type | Description |
|---|---|---|
sector | string | Optional sector filter, e.g. 'legal', 'healthcare' |
rank | string | gaps (default): whitespace with money, crowded excluded. hot: most active by market pulse, crowding ignored. One of: gaps hot |
limit | number | Max gaps (1-50, default 15) |
demand_signals
Inspect eligible zero-result or weak-match capability queries observed on this MCP server, aggregated and ranked by miss count. These are limited coverage signals from Agentery's own callers — not proof that a product does not exist, and not proof that a market has paying demand. Not a prerequisite for choosing a product. Empty args ({}) return the current list; an empty response means there is insufficient qualifying evidence (status insufficient_evidence + next_step) — it is never filled from search popularity, page views or trending queries.
| Parameter | Type | Description |
|---|---|---|
limit | number | Max signals (1-50, default 20) |
request_research
Use when a buying decision hinges on one specific fact about one listing that its profile does not settle, e.g. {"provider_id":"flux_operator","requirement":"Is there a Helm chart for Kubernetes?"} or 'Does the Business plan go to checkout or to contact sales?'. Agentery reads the vendor's own pages, its code repository (read, never run) and the pricing page's buttons, and answers yes / no / partly / unknown with quotes, URLs and observation dates. Usually answered in this response within about 15 s; otherwise call get_research with the job_id after poll_after_seconds. Identical questions share one job. A found statement is the vendor's own claim, not independent verification.
| Parameter | Type | Description |
|---|---|---|
provider_idrequired | string | The listing (provider_id from search_providers). |
requirementrequired | string | The requirement in plain words, e.g. 'EU data residency', 'integrates with Slack', 'SOC 2 Type II', 'commercial use permitted'. |
request_ref | string | Optional: the request_ref of the answer that raised the question. |
get_research
Status and result of a research job created by request_research. status: queued / running / answered / partly_answered / still_unknown / failed; phase: queued | running | retry_scheduled | completed_answer | completed_unknown | failed. Poll no more often than poll_after_seconds — polling is free and never repeats the work. result: answer (yes/no/partly/unknown), short_answer, evidence per claim (quote, URL, observed date; file path and revision for repositories; element for pricing-page buttons), facts assessed separately (e.g. Dockerfile vs published image vs Helm chart), conflicts and what remains unresolved.
| Parameter | Type | Description |
|---|---|---|
job_idrequired | string | The job_id from request_research (rj_ + 12 hex). |
stop_research_updates
Stop watching a research job (the result stays retrievable with get_research).
| Parameter | Type | Description |
|---|---|---|
job_idrequired | string |
create_custom_benchmark
Use when someone wants to keep watching the prices of products they choose (e.g. five named writing tools). Creates a PRIVATE custom benchmark (a saved, calculated peer cohort) over Agentery's data — no account needed. Two modes: (A) explicit members: pass `members` (a list of exact handles; product names/domains resolve where unambiguous). (B) fork a market: pass `base_niche` (its slug) plus optional `remove`/`add`. Returns a one-time secret `benchmark_id` (cb_… token) — store it; it's your only key. Use it later in get/update/delete and in market_report/get_price_index/get_price_index_history. Ambiguous names are returned as candidates, never silently resolved; unresolved inputs block creation unless allow_partial:true. All prices/history are computed from Agentery's immutable observations; canonical market data is never changed.
| Parameter | Type | Description |
|---|---|---|
name | string | Optional private label |
members | array | Mode A: exact handles (preferred), product names or domains |
base_niche | string | Mode B: slug of the canonical market to fork |
remove | array | Mode B: members to drop from the forked market |
add | array | members to add |
allow_partial | boolean | Create with only the resolved members when some inputs don't resolve (default false) |
get_custom_benchmark
Get a private custom benchmark's current report: members, current stats (headline median/quartiles only when ≥3 comparable priced members — monthly, per-seat and per-call prices are never blended), buyer-tier / provider-type / pricing-unit cohorts, historical index, and data coverage. Pass `benchmark_id` (your cb_ token) as an ARGUMENT.
| Parameter | Type | Description |
|---|---|---|
benchmark_idrequired | string | Your cb_ token (bearer secret; passed as an argument, never a URL) |
version | number | Optional benchmark version (default latest) |
as_of | string | Optional YYYY-MM-DD — reproduce the exact stats + index as they were on that date, using this version's fixed membership |
response_mode | string | full includes the index series One of: summary full |
update_custom_benchmark
Add/remove members or rename a custom benchmark. Creates a NEW immutable version (the previous version stays fully reproducible) and returns the exact change-impact on the median/quartiles/index. Pass `benchmark_id`.
| Parameter | Type | Description |
|---|---|---|
benchmark_idrequired | string | Your cb_ token |
add | array | |
remove | array | |
rename | string |
delete_custom_benchmark
Disable access to a custom benchmark. Keeps only a minimal audit record; no underlying Agentery data is touched. Pass `benchmark_id`.
| Parameter | Type | Description |
|---|---|---|
benchmark_idrequired | string | Your cb_ token |
report_outcome
Report the result of ACTUALLY USING a listed provider for a task. Testing Agentery's connection or retrieval does not establish that the listed provider worked — do not report those. Reports are self-reported evidence subject to eligibility checks: they are correlated with your recent retrievals, improve ranking accuracy, and unlock higher rate limits for contributors. Only reports we can match to one of YOUR retrievals (search_providers / get_provider_profile / compare_providers / suggest_alternatives naming that provider, last 48h) carry weight; unmatched reports are stored but unweighted. Aggregates surface as `reported_success` on profile/comparison cards once 5+ distinct reporters exist (90-day window). Callers with 5+ correlated reports in 30 days get a doubled per-minute rate limit. Send an x-agentery-key header to keep one reporter identity across IPs (it is stored only as a hash).
| Parameter | Type | Description |
|---|---|---|
agent_idrequired | string | Handle of the provider you used, as returned by search_providers/get_provider_profile/compare_providers |
outcomerequired | string | Did the provider accomplish the task you hired it for? One of: worked failed partial |
task_type | string | Optional short task label, e.g. 'code-review', 'lead-enrichment' |
error_class | string | Optional failure class, e.g. 'timeout', 'auth', 'wrong-output', 'endpoint-down' |
latency_ms | number | Optional end-to-end latency of the provider in milliseconds |
note | string | Optional free-text detail (capped at 300 chars) |
rank_providers_for_workflow
PARTNER-ONLY (Bearer key required). Given a business context and its workflow steps, return ranked provider candidates for EACH step — structured, scored (match_score 0-100) matches with match_reasons and cautions. Built for app builders (e.g. Builtery) assembling automations. Reads each provider's analysed site profile; never invents capabilities; returns 'unclear' where evidence is missing.
| Parameter | Type | Description |
|---|---|---|
business_context | object | company_description, industry, region, existing_tools[], automation_posture (cautious|balanced|agent_native), regulated_data (none|personal|health|financial|legal|children|unknown) |
workflow_stepsrequired | array | Each: step_id, step_name, step_description, inputs[], desired_outputs[], required_integrations[], human_approval_preference (always|sometimes|not_needed|unknown) |
limit_per_step | number | Max candidates per step (1-25, default 8) |
REST endpoints
GET /api/v1/search
Find providers for a described job (same as MCP search_providers)
| Parameter | Type | Description |
|---|---|---|
qrequired | string | Free-text description of the job, e.g. 'supplier invoice reconciliation' |
provider_type | string | agent | mcp | api | platform | infrastructure One of: agent mcp api platform infrastructure |
deployment | string | Evidenced deployment model filter One of: hosted self_hosted both unknown |
sort | string | match (default) or price_asc One of: match price_asc |
max_monthly_usd | number | Drop providers whose observed lowest paid tier exceeds this |
require_public_price | boolean | true = only providers with an observed public price |
billing | string | Comma-separated observed billing models, e.g. free,subscription,usage |
limit | integer | 1–50, default 20 |
GET /api/v1/agent/{handle}
Full evidence profile for one provider (same as MCP get_provider_profile)
| Parameter | Type | Description |
|---|---|---|
handle (path)required | string | Provider handle from /search (agent_id) |
GET /api/v1/compare
Compare 2–6 providers side by side (same as MCP compare_providers)
| Parameter | Type | Description |
|---|---|---|
idsrequired | string | 2–6 comma-separated handles taken verbatim from /search |
service | string | Optional evidence view: supplier-verification | contract-review | developer-capabilities | cheaper-alternatives |
task | string | Optional task text for the evidence matrix |
requirements | string | Optional comma-separated requirements |
GET /api/v1/alternatives
Related alternatives to a known provider (same as MCP suggest_alternatives)
| Parameter | Type | Description |
|---|---|---|
idrequired | string | Provider handle |
cheaper_only | boolean | true = only alternatives with a lower observed price |
limit | integer | 1–10, default 5 |
GET /api/v1/price
Observed price benchmark for a task or market (same as MCP price_benchmark)
| Parameter | Type | Description |
|---|---|---|
query | string | Task or market description, e.g. 'AI customer support agent' |
niche | string | Legacy niche slug (alias) |
provider_type | string | agent | mcp | all |
buyer_tier | string | individual | pro | team_sme | enterprise |
GET /api/v1/price-index
Current AEPI level and 1d/7d/30d change (same as MCP get_price_index)
| Parameter | Type | Description |
|---|---|---|
scope | string | aepi | niche |
niche | string | Niche slug when scope=niche |
provider_type | string | all | agent | mcp |
tier | string | individual | pro | team_sme | enterprise |
GET /api/v1/price-index/history
Dated AEPI series (same as MCP get_price_index_history)
| Parameter | Type | Description |
|---|---|---|
scope | string | aepi | niche |
niche | string | Niche slug |
tier | string | Buyer tier |
period | string | 30d | 90d | all |
GET /api/v1/movers
Day/week/month index change per niche and tier
| Parameter | Type | Description |
|---|---|---|
tier | string | composite | individual | pro | team_sme | enterprise |
GET /api/v1/gaps
Demand clusters with weak paid supply
| Parameter | Type | Description |
|---|---|---|
sector | string | Scope text |
limit | integer | 1–50 |
GET /api/v1/niche/{slug}
Measured report for one market
| Parameter | Type | Description |
|---|---|---|
slug (path)required | string |
GET /api/v1/demand
Zero-result capability queries seen here (honest insufficient_evidence when none)
| Parameter | Type | Description |
|---|---|---|
limit | integer | 1–50 |
GET /api/v1/indices
AEPI plus companion and sector indices
No parameters.
A2A skills
search_providers
Free-text search over indexed AI agents, MCP servers, APIs and platforms with observed prices, evidenced deployment model (hosted / self-run / both / unknown) and connection details. Same handler as the MCP tool search_providers and GET /api/v1/search.
Examples
search: supplier invoice reconciliationsearch: AI customer support agent under $50/month{"skill":"search_providers","arguments":{"query":"web scraping","provider_type":"mcp","deployment":"hosted"}}
get_provider_profile
Full evidence profile for one provider: plans and observed price (null when unobserved, never zero), liveness, deployment and licence evidence with source URL and age, how_to_connect (website, docs, MCP endpoint, install line, repository).
Examples
profile: zendesk{"skill":"get_provider_profile","arguments":{"provider_id":"foiagras_mcp"}}
compare_providers
2–6 providers side by side with plan-level prices. Inputs are never silently swapped for fuzzy matches; pricing_summary says when billing units are not comparable; price_applies_to flags prices that belong to a vendor platform rather than the connector.
Examples
compare: zendesk, intercom, gorgias{"skill":"compare_providers","arguments":{"provider_ids":["zendesk","intercom"]}}
suggest_alternatives
Related alternatives to a known provider ranked by nearness to its own profile, each with observed price, liveness, deployment and connection details; optional cheaper_only.
Examples
alternatives: zendesk{"skill":"suggest_alternatives","arguments":{"provider_id":"zendesk","cheaper_only":true}}
price_benchmark
Observed price distribution (median, quartiles, counts, reliability) for a task or market, per buyer tier. States market_uncertain or ambiguous_name explicitly instead of inventing a number.
Examples
benchmark: AI customer support agent{"skill":"price_benchmark","arguments":{"query":"helpdesk software"}}
get_price_index
Current AEPI level with 1d/7d/30d change for the whole economy, a buyer tier or a market, plus the dated history on request (skill get_price_index_history). Same data as aepi.ai.
Examples
aepi{"skill":"get_price_index","arguments":{"scope":"aepi"}}{"skill":"get_price_index_history","arguments":{"period":"30d"}}
Responses
Every interface returns the same JSON. MCP wraps it as a string in result.content[0].text; A2A returns it as the data part of a completed task, with a one-line text summary.
- Missing is not zero. An unobserved price is
nullwithpriced: false; aggregates leave it out. - Check comparability.
compare_providersreturnspricing_summary.numeric_comparison_possibleand says when billing units differ. - Empty answers explain themselves. No result carries
status(for exampleno_matchorthin_coverage), anexplanationand anext_step. - Dates. Prices carry the date they were checked; fair prices carry
as_of.
MCP · get_group_fair_price for a customer-support chatbot
Tested on 10 October 2026: HTTP 200 in 585 ms.
curl -s https://agentery.com/api/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_group_fair_price","arguments":{"query":"customer support chatbot"}}}'{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [
{
"type": "text",
"text": "<JSON below, as a string>"
}
]
}
}
// result.content[0].text, parsed (excerpt):
{
"status": "ok",
"group_id": 54,
"group": "Customer support automation",
"listings": 44,
"priced_listings": 42,
"fair_price_by_tier": {
"individual": {
"median_monthly_usd": 21.35,
"typical_range_usd": [
10,
40
],
"listings": 17
},
"pro": {
"median_monthly_usd": 59,
"typical_range_usd": [
29,
139
],
"listings": 25
},
"team / small business": {
"median_monthly_usd": 199.5,
"typical_range_usd": [
90.71,
321.76
],
"listings": 20
},
"enterprise": {
"median_monthly_usd": 999.5,
"typical_range_usd": [
535.29,
1092.2
],
"listings": 8
}
},
"typical_payment_model": "subscription",
"method": "Fair price is given per buyer tier: the median of the group's listings' entry monthly price within that tier (individual, pro, team / small business, enterprise), with the typical range (middle half), from current published plans converted to USD. A tier's median is shown only when at least 3 listings price that tier.",
"as_of": "2026-10-10",
"currency": "USD (converted from published currencies)",
"note": "Medians of current published prices in the group. Missing prices are unknown, not zero; contact-sales plans have no numeric price."
}REST · Compare two products (excerpt: entry offers and pricing summary)
Tested on 10 October 2026: HTTP 200 in 315 ms.
curl "https://agentery.com/api/v1/compare?ids=chat_thing,chatbase"
{
"comparison_status": "ok",
"count": 2,
"agents": [
{
"agent_id": "chat_thing",
"name": "Chat Thing",
"provider_type": "platform",
"entry_offer": {
"line": "Basic",
"monthly_native": 14,
"monthly_usd": 14,
"commitment": "monthly",
"basis": "$14/month"
},
"currency": "USD",
"last_checked": "2026-06-16"
},
{
"agent_id": "chatbase",
"name": "Chatbase",
"provider_type": "platform",
"entry_offer": {
"line": "Hobby",
"monthly_native": 40,
"monthly_usd": 40,
"commitment": "monthly",
"basis": "$40/month"
},
"currency": "USD",
"last_checked": null
}
],
"pricing_summary": {
"providers": 2,
"priced_numeric": 2,
"priced_by_rate": 0,
"contact_sales": 0,
"unpriced": 0,
"code_host_withheld": 0,
"numeric_comparison_possible": true,
"note": "2 of 2 providers carry an observed monthly price; the numeric price comparison covers those 2."
}
}A2A · Compare two products over A2A (excerpt of the completed task)
Tested on 10 October 2026: HTTP 200 in 293 ms.
curl -s https://agentery.com/api/a2a \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":"1","method":"message/send","params":{"message":{"role":"user","messageId":"docs-example-1","parts":[{"kind":"text","text":"compare: chat_thing, chatbase"}]}}}'{
"jsonrpc": "2.0",
"id": "1",
"result": {
"kind": "task",
"status": {
"state": "completed",
"message": {
"role": "agent",
"parts": [
{
"kind": "text",
"text": "comparison_status ok; 2 of 2 providers carry an observed monthly price; the numeric price comparison covers those 2."
},
{
"kind": "data",
"data": {
"comparison_status": "ok",
"count": 2,
"pricing_summary": {
"providers": 2,
"priced_numeric": 2,
"priced_by_rate": 0,
"contact_sales": 0,
"unpriced": 0,
"code_host_withheld": 0,
"numeric_comparison_possible": true,
"note": "2 of 2 providers carry an observed monthly price; the numeric price comparison covers those 2."
}
}
}
]
}
}
}
}Fair market price
The fair market price is the median monthly price of comparable services: the products in one group, for one buyer tier. Groups are formed from what products do, never from their prices.
Buyer tier
Individual, Pro, Team / small business and Enterprise are calculated separately. A plan is placed by its name first: enterprise, on-premises or dedicated plans are Enterprise; team or business plans are Team; pro, premium or plus plans are Pro; starter, basic or personal plans are Individual. Unnamed plans go by monthly price: under $25 Individual, under $100 Pro, under $500 Team, otherwise Enterprise.
Currency
US dollars. Prices published in other currencies are converted at daily exchange rates. Crypto and unrecognised currencies are left out.
Billing basis
Monthly. Annual prices are divided by 12; when a plan shows both, the month-to-month price is used. Per-seat prices count one seat. Usage prices are reported separately for each unit and never mixed into the monthly median.
Sample size
Each product counts once per tier, at its cheapest plan in that tier. listings gives the number behind each median. A tier needs at least three priced products; below that the median is null with a note.
Typical range
The middle half of prices: the 25th to 75th percentile. It is not a minimum and maximum, and not a confidence interval.
Exclusions
Free plans, contact-sales plans without a price, optional add-ons and components (from 11 October 2026), one-time fees and usage-only prices. They still appear in payment_models_pct, and usage medians appear in usage_prices.
Where to get it
MCP: get_group_fair_price with a task as query, or a group_id. It returns fair_price_by_tier (each tier has median_monthly_usd, typical_range_usd and listings), with method, currency, as_of and note. See the MCP example under Responses.
Profiles: get_provider_profile and GET /api/v1/agent/{handle} include product_group with the group’s tier medians.
Website: sector pages under Indices show the same benchmark and a quote check.
Fair price or price benchmark?
get_group_fair_price describes the whole group. price_benchmark (REST GET /api/v1/price) compares only the closest comparable products and can place a quoted price against them. To judge a specific quote, use the benchmark with the same task and buyer tier; the group median shows what entry plans across the wider group cost.
What a fair price is not
It describes published list prices, not negotiated discounts, sales volumes or product quality. A low price is not a recommendation, and products in one group can differ in scope and limits.
Errors
MCP tool errors are returned as a normal result with isError: true and a message saying what to change. Protocol errors use JSON-RPC error. REST uses HTTP status codes with an error message.
| Interface | Case | HTTP | Body (tested 10 October 2026) |
|---|---|---|---|
| MCP | Missing required argument | 200 | {"jsonrpc":"2.0","id":3,"result":{"content":[{"type":"text","text":"Error: provider_id is required"}],"isError":true}} |
| MCP | Unknown tool | 200 | {"jsonrpc":"2.0","id":4,"result":{"content":[{"type":"text","text":"Error: unknown tool: no_such_tool. Call tools/list to see the available tools."}],"isError":true}} |
| MCP | Malformed JSON-RPC body | 400 | {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"expected a single JSON-RPC request object"}} |
| REST | Missing required query parameter | 400 | {"error":"q is required (a free-text description of the job, e.g. ?q=supplier+invoice+reconciliation)"} |
| A2A | Unsupported method | 200 | {"jsonrpc":"2.0","id":"2","error":{"code":-32602,"message":"Invalid method parameters.","data":[{"@type":"type.googleapis.com/google.rpc.ErrorInfo","reason":"INVALID_PARAMS","domain":"a2a-protocol.org"}]}} |
| MCP | Unknown product | 200 | found: false with a message. The name is queued for research and is usually listed within about 15 minutes if it is a real product. |
| REST | Unknown product | 404 | {"error": "… isn't in the index yet …"} |
| MCP | Rate limited | 200 | isError: true, “rate limited: max 30 tool calls per minute … Retry in Ns.” |
| REST | Rate limited | 429 | Retry-After header and “rate limited: max 60 requests/min per IP …” |
| A2A | Rate limited | 429 | JSON-RPC error -32029 with Retry-After. |
| MCP | Partner-only tool without a key | 200 | isError: true, naming search_providers and suggest_alternatives as public alternatives. |
Limits
- MCP: 30 tool calls per minute per session (
mcp-session-id) or IP; 60 once a caller has five or more correlatedreport_outcomereports in 30 days; 300 per minute per origin IP across sessions. - REST: 60 requests per minute per IP.
- A2A: 60 requests per minute per IP.
- Access: public reads need no account.
rank_providers_for_workflowneeds a partner Bearer key. - Freshness: prices are read from vendors’ published pricing pages in a daily scan.
This page is checked against the live service; the live tools/list, OpenAPI and Agent Card are authoritative. Method details: Data & methodology.