Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,551Letters: 14Defects: 1,323counted 2 min ago
teppi

Server definition

Hash
sha256:1cdc35b6712f362beae5b44ba816ff96d4fac95473c8a0e4529b78a0e8b02d9e
What it is
What a remote MCP server returned when asked what it offers: 23 tools

The blob, as servednamed by its sha256

{ "instructions": "Agentery (agentery.com) helps you research AI products and MCP servers for a task. For a new selection request, start with search_providers. Inspect promising candidates with get_provider_profile, then compare the shortlist with compare_providers. Use the returned provider IDs (handles). Check task fit, delivery type (provider / MCP server / API / platform), available pricing and billing units before recommending a product. Missing prices are unknown, not zero; contact-sales pricing is not a numeric quote; a related search result is a candidate to assess, not proof it fulfils every requirement. Use market_report or price_benchmark when market context is needed (price_benchmark takes `query`). research_capability is an optional combined research route (market + pricing context + shortlist in one call). get_price_index / get_price_index_history return the Agent Economy Price Index — an index level, never a market price; pass provider_type=agent|mcp for one delivery type. Demand tools (demand_signals, market_gaps) describe limited evidence from Agentery's own traffic and are not prerequisites for product selection. suggest_alternatives finds substitutes for one known provider (cheaper_only only when a valid price comparison exists). Use report_outcome only after actually using a listed provider. Worked examples: https://agentery.com/connect#examples. Public tools are rate-limited to 30 calls/min per IP (60 for outcome contributors). rank_providers_for_workflow is partner-only (Bearer key). Integration guidance and worked examples: https://agentery.com/connect", "tools": [ { "description": "Step 3 of the buyer path. Side-by-side capability + plan-level prices for 2–6 providers (e.g. the Pro tier). Inputs are resolved to REAL providers — exact handle, then exact display name — and are NEVER silently swapped for a fuzzy match: unknown inputs come back in `unresolved_inputs` with `suggested_matches` and a ready-to-retry `corrected_call`, and if EXACTLY ONE input is real (the other was invented/mistyped) it does NOT dead-end — it returns `comparison_status: compared_with_market_peers`, comparing the real provider against its actual in-market competitors — its nearest providers by text-embedding — (listed in `compared_against_peers`, with a `recovery_note`); only when ZERO inputs resolve does it return `comparison_status: insufficient_valid_providers`. When the compared providers are different delivery types it sets `provider_types_present` + a `mixed_provider_types_note` (a hosted agent and an MCP server are not directly equivalent). Full evidence-scored cards for 2-6 handles side by side, each with observed price, all-time community upvotes and provider type. Each card carries the full how_to_connect object (website, docs, MCP endpoint + config_snippet, A2A card, API) so you can act on the winner directly. Each card also carries `reported_success` — the machine-reported outcome rate from report_outcome (null until 5+ distinct correlated reporters in 90 days). Report your own outcome after using the winner. Accepts `provider_ids` (aliases: handles, ids; a comma-separated string is also accepted). Use after search_providers or research_capability; when a compared provider is over budget or weakly matched, inline `suggested_alternatives` are returned. Each card also carries `deployment` (hosted / self_hosted / both / unknown, with evidence excerpt, URL and age), `licence` (named licence only) and `price_applies_to` when the stored price belongs to the vendor platform rather than the compared connector — compare hosted prices with hosted prices.", "inputSchema": { "properties": { "optional": { "description": "Optional preferences: reported in service_view but never gating.", "items": { "type": "string" }, "type": "array" }, "provider_ids": { "description": "2-6 provider handles from search_providers/market_gaps, e.g. [\"openhands\",\"lexaclaw\"]", "items": { "type": "string" }, "type": "array" }, "requirements": { "description": "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.", "items": { "type": "string" }, "type": "array" }, "service": { "description": "Optional. A service recipe whose fixed requirements and evidence fields are applied (see service_view.requirements).", "enum": [ "supplier-verification", "contract-review", "developer-capabilities", "cheaper-alternatives" ], "type": "string" }, "task": { "description": "Optional. The buyer's job in plain words; used as the service_view heading.", "type": "string" } }, "required": [ "provider_ids" ], "type": "object" }, "name": "compare_providers", "outputSchema": null }, { "description": "Create 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.", "inputSchema": { "properties": { "add": { "description": "members to add", "items": { "type": "string" }, "type": "array" }, "allow_partial": { "description": "Create with only the resolved members when some inputs don't resolve (default false)", "type": "boolean" }, "base_niche": { "description": "Mode B: slug of the canonical market to fork", "type": "string" }, "members": { "description": "Mode A: exact handles (preferred), product names or domains", "items": { "type": "string" }, "type": "array" }, "name": { "description": "Optional private label", "type": "string" }, "remove": { "description": "Mode B: members to drop from the forked market", "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "name": "create_custom_benchmark", "outputSchema": null }, { "description": "Disable access to a custom benchmark. Keeps only a minimal audit record; no underlying Agentery data is touched. Pass `benchmark_id`.", "inputSchema": { "properties": { "benchmark_id": { "description": "Your cb_ token", "type": "string" } }, "required": [ "benchmark_id" ], "type": "object" }, "name": "delete_custom_benchmark", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "limit": { "description": "Max signals (1-50, default 20)", "type": "number" } }, "type": "object" }, "name": "demand_signals", "outputSchema": null }, { "description": "Map a natural-language task, capability or service to its live MARKET — the semantic neighbourhood of the closest-matching providers, found by text-embedding nearness (NO fixed category). For buyers ('a provider that monitors competitor pricing'), sellers ('what should I charge for lead-generation automation') or sizing a space. Pricing-intent boilerplate is stripped before matching. Returns the market label, how many providers are in the neighbourhood and how many are priced, `nearest` (the closest providers with observed price and relevance/cosine), and `pricing_by_tier` — median, mean, stdev, p25/p75, min–max range and n per buyer tier (individual/pro/team_sme/enterprise), computed by the canonical pricing engine over the priced neighbourhood. match_certainty is 'confident' when real neighbours exist and 'uncertain' when nothing is close (pricing WITHHELD). Accepts `task` (aliases: query, q). For the full market read + shortlist in ONE call, use research_capability instead. Read-only. When there is no strong market the response says so: status no_match or thin_coverage (nearest neighbourhood labelled partial_match) with a plain explanation and a next_step — it never invents a market.", "inputSchema": { "properties": { "query": { "description": "Alias for task (back-compat only) — prefer task", "type": "string" }, "task": { "description": "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.", "type": "string" } }, "required": [ "task" ], "type": "object" }, "name": "find_market", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "as_of": { "description": "Optional YYYY-MM-DD — reproduce the exact stats + index as they were on that date, using this version's fixed membership", "type": "string" }, "benchmark_id": { "description": "Your cb_ token (bearer secret; passed as an argument, never a URL)", "type": "string" }, "response_mode": { "description": "full includes the index series", "enum": [ "summary", "full" ], "type": "string" }, "version": { "description": "Optional benchmark version (default latest)", "type": "number" } }, "required": [ "benchmark_id" ], "type": "object" }, "name": "get_custom_benchmark", "outputSchema": null }, { "description": "Call this for the CURRENT level of the Agent Economy Price Index (AEPI) — a chained like-for-like index over observed provider/MCP pricing (base 100 = 29 Jun 2026). It is an INDEX LEVEL, not a market price or tradeable asset. Returns the whole-economy headline index level with change_1d/change_7d/change_30d, as_of, like_for_like_pair_count, status and the methodology version, PLUS the same fields for the four buyer tiers (Individual, Pro, Team/SME, Enterprise). `provider_type` returns the standalone index for one delivery type (provider or mcp, own base 100) — agents and MCPs price and move differently. `tier` filters to one buyer tier; response_mode 'full' adds exact sub-0.01% moves and repricing counts. Reads the SAME canonical series as the /aepi page, so the MCP and website agree for a given timestamp. (Also accepts a `benchmark_id` to read a private custom benchmark's current index.) The economy index is whole-market by design — for pricing on a specific capability use market_report or price_benchmark.", "inputSchema": { "properties": { "benchmark_id": { "description": "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.", "type": "string" }, "provider_type": { "description": "'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.", "enum": [ "all", "agent", "mcp", "subscription", "hybrid", "one_off", "payg" ], "type": "string" }, "response_mode": { "description": "'summary' (default) or 'full' (adds exact sub-0.01% moves and repricing counts).", "enum": [ "summary", "full" ], "type": "string" }, "tier": { "description": "Filter to one buyer tier ('team' = Team/SME). Default 'all'.", "enum": [ "all", "individual", "pro", "team", "enterprise" ], "type": "string" } }, "type": "object" }, "name": "get_price_index", "outputSchema": null }, { "description": "Call this for the canonical DATED index SERIES (to chart or analyse movement) of the AEPI — the same chained like-for-like series the /aepi page plots. Every point is an index level (base 100), never a price. Returns the whole-economy headline series, or a single buyer tier's series when `tier` is set. `provider_type` returns the standalone 'agent' / 'mcp' series (own base 100). `period` selects '30d' (default), '90d' or 'all'. response_mode 'summary' (default) returns date + index_level points plus the window change; 'full' adds gap flags. Returns an honest status (insufficient_history) rather than a fabricated series when data is too thin. (Also accepts a `benchmark_id` to read a private custom benchmark's history.) The economy index is whole-market by design — for pricing on a specific capability use market_report or price_benchmark.", "inputSchema": { "properties": { "benchmark_id": { "description": "Optional: a private custom benchmark token (cb_…) — returns that cohort's dated series instead of the economy series. Cannot be combined with niche.", "type": "string" }, "period": { "description": "History window. Default '30d'.", "enum": [ "30d", "90d", "all" ], "type": "string" }, "provider_type": { "description": "'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).", "enum": [ "all", "agent", "mcp", "subscription", "hybrid", "one_off", "payg" ], "type": "string" }, "response_mode": { "description": "'summary' (default, compact) or 'full'.", "enum": [ "summary", "full" ], "type": "string" }, "since": { "description": "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.", "type": "string" }, "tier": { "description": "Return one buyer tier's series ('team' = Team/SME). Default 'all' = the headline series.", "enum": [ "all", "individual", "pro", "team", "enterprise" ], "type": "string" } }, "type": "object" }, "name": "get_price_index_history", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "handle": { "description": "Provider handle, e.g. 'openhands'", "type": "string" }, "regNum": { "description": "Registration number, e.g. 2432", "type": "number" } }, "type": "object" }, "name": "get_provider", "outputSchema": null }, { "description": "Step 2 of the buyer path. Full profile for ONE provider — plans, pricing model, liveness, evidence — use after search_providers returns handles. Evidence-scored profile: task_performed, inputs/outputs, integrations, protocols, industry_fit, autonomy_level, human_approval_needed, observed price, trust signals, evidence_quality, entity_type, regulated_data_suitability, evidence_urls, last_checked. Includes the full how_to_connect object — website, docs, any vendor-published MCP endpoint (with a copy-paste client config_snippet), A2A agent card and API surface — the info needed to actually use the listing; fields are null when the vendor publishes no endpoint (never guessed). Also carries `reported_success` — machine-reported outcome rate from report_outcome (null until 5+ distinct correlated reporters in 90 days). If you use the listing, call report_outcome afterwards. Also (1.10.0) `deployment` — hosted / self_hosted / both / unknown with the evidence (excerpt, source URL, observation day, age) — `licence` (named licence only; a public repository is not a licence), `how_to_connect.install` and `how_to_connect.repository`, and `price_applies_to` when the price page is the vendor platform, not this connector.", "inputSchema": { "properties": { "history_days": { "description": "Window for price_history in days (1–400, default 90).", "type": "number" }, "history_limit": { "description": "Plans per page (1–50, default 10).", "type": "number" }, "history_offset": { "description": "Paging offset over plans (default 0).", "type": "number" }, "plan": { "description": "Optional plan name filter for price_history.", "type": "string" }, "price_history": { "description": "Optional (1.17.0): include this provider's dated plan prices from Agentery's stored observations — periods at one published price, changes, coverage gaps, promotion/anomaly flags. Dates are observation dates, not necessarily when the vendor changed the price; prices stay in their original currency.", "type": "boolean" }, "provider_id": { "description": "The provider_id/handle returned by search_providers or compare_providers", "type": "string" } }, "required": [ "provider_id" ], "type": "object" }, "name": "get_provider_profile", "outputSchema": null }, { "description": "Status and result of a research job created by request_research: queued / running / answered (with the vendor's quoted statement, source URL and actual fetch date) / still_unknown (pages checked are listed) / failed. Call it later to pick up the update.", "inputSchema": { "properties": { "job_id": { "description": "The job_id from request_research (rj_ + 12 hex).", "type": "string" } }, "required": [ "job_id" ], "type": "object" }, "name": "get_research", "outputSchema": null }, { "description": "Inspect query clusters with weak coverage among indexed paid providers — research leads, not buyer counts: request counts are not buyer counts, and a gap in this index does not establish a gap in the wider market. Computed demand-first in the raw text-embedding space (NO fixed categories). A gap = a cluster of user requests seen on this MCP server that sits FAR from any PAID provider. For each gap it returns: the demand phrasing, demand_mass (how many similar requests cluster with it), nearest_paid_similarity (cosine to the closest paid provider — low = under-served) and that closest paid provider. Also returns demand_queries and paid_supply counts. Honestly returns few or no gaps while query volume is still low — it sharpens as usage grows. No arguments needed ({}); `limit` caps the list.", "inputSchema": { "properties": { "limit": { "description": "Max gaps (1-50, default 15)", "type": "number" }, "rank": { "description": "gaps (default): whitespace with money, crowded excluded. hot: most active by market pulse, crowding ignored.", "enum": [ "gaps", "hot" ], "type": "string" }, "sector": { "description": "Optional sector filter, e.g. 'legal', 'healthcare'", "type": "string" } }, "type": "object" }, "name": "market_gaps", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "cohort_ref": { "description": "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.", "type": "string" }, "limit": { "description": "full mode: members per page (1–150, default 50).", "type": "number" }, "offset": { "description": "full mode: paging offset over members (default 0).", "type": "number" }, "query": { "description": "Natural-language capability or market, e.g. 'customer support chatbot' or 'ai phishing detection'.", "type": "string" }, "response_mode": { "description": "'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).", "enum": [ "summary", "full" ], "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "market_report", "outputSchema": null }, { "description": "Summarise observed prices for products related to a capability, separated by delivery type (provider / mcp) and buyer tier (individual / pro / team_sme / enterprise) and never blended across incompatible pricing units. Supply the capability with `query` (natural language, e.g. 'AI code review'); `task` and the legacy `niche` are accepted aliases. The market is the semantic neighbourhood of the query (nearest providers by text embedding, no fixed category). Each cohort reports median, mean, stdev, p25/p75, min–max and n. A benchmark describes the observed comparable sample — it is not a quote and not evidence of willingness to pay. Supply provider_type and buyer_tier when the user makes them known; otherwise the populated per-type/per-tier matrix is returned. When nothing priced is semantically close it returns resolved:false with a note, never a fabricated figure.", "inputSchema": { "properties": { "buyer_tier": { "description": "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.", "enum": [ "individual", "pro", "team_sme", "enterprise", "all" ], "type": "string" }, "cohort_ref": { "description": "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.", "type": "string" }, "commitment": { "description": "Billing commitment of proposed_price (default monthly).", "enum": [ "monthly", "annual" ], "type": "string" }, "currency": { "description": "Currency of proposed_price (ISO code, default USD).", "type": "string" }, "limit": { "description": "Observations per page in full mode (1–100, default 50).", "type": "number" }, "niche": { "description": "Legacy alias of `query`, kept for older clients — prefer `query`.", "type": "string" }, "offset": { "description": "Paging offset over the selected observations in full mode.", "type": "number" }, "pricing_unit": { "description": "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.", "enum": [ "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" ], "type": "string" }, "proposed_price": { "description": "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.", "type": "number" }, "provider_type": { "description": "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).", "enum": [ "agent", "mcp", "api", "all" ], "type": "string" }, "query": { "description": "The capability to benchmark, in natural language, e.g. 'AI code review' or 'supplier invoice reconciliation'. Preferred input.", "type": "string" }, "response_mode": { "description": "'summary' (default): the selected benchmark with its top observations. 'full': every included observation (paged), with plan, native price, unit, commitment, source and observed date.", "enum": [ "summary", "full" ], "type": "string" }, "sector": { "description": "Sector name, e.g. 'legal' (ignored if a query is given)", "type": "string" }, "task": { "description": "Alias of `query` (same text).", "type": "string" } }, "type": "object" }, "name": "price_benchmark", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "business_context": { "description": "company_description, industry, region, existing_tools[], automation_posture (cautious|balanced|agent_native), regulated_data (none|personal|health|financial|legal|children|unknown)", "type": "object" }, "limit_per_step": { "description": "Max candidates per step (1-25, default 8)", "type": "number" }, "workflow_steps": { "description": "Each: step_id, step_name, step_description, inputs[], desired_outputs[], required_integrations[], human_approval_preference (always|sometimes|not_needed|unknown)", "type": "array" } }, "required": [ "workflow_steps" ], "type": "object" }, "name": "rank_providers_for_workflow", "outputSchema": null }, { "description": "Refine an earlier search_providers or research_capability answer with a correction, and get a better answer back in the same call. Pass the request_ref returned with that answer and the correction in plain words: what was missing or wrong (e.g. 'I meant apps that reduce business costs', 'must integrate with Slack', 'budget is $20/month', 'data must stay in the EU'). Agentery re-reads the request with the correction (changed constraints change, the others are kept), runs the search again and returns the new answer plus a short explanation of what changed. Optional: source = 'human' (the user's own words), 'agent' (your own assessment) or 'follow_up' (an ordinary narrowing, not a complaint). A message with nothing actionable (e.g. 'thanks') is just acknowledged. Agentery only sees the request and correction you send, never your wider conversation.", "inputSchema": { "properties": { "correction": { "description": "What was missing or wrong, in plain words.", "type": "string" }, "request_ref": { "description": "The request_ref from the earlier answer (rq_ + 12 hex characters).", "type": "string" }, "source": { "description": "Where the correction came from. Default 'agent'.", "enum": [ "human", "agent", "follow_up" ], "type": "string" } }, "required": [ "request_ref", "correction" ], "type": "object" }, "name": "refine_results", "outputSchema": null }, { "description": "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).", "inputSchema": { "properties": { "agent_id": { "description": "Handle of the provider you used, as returned by search_providers/get_provider_profile/compare_providers", "type": "string" }, "error_class": { "description": "Optional failure class, e.g. 'timeout', 'auth', 'wrong-output', 'endpoint-down'", "type": "string" }, "latency_ms": { "description": "Optional end-to-end latency of the provider in milliseconds", "type": "number" }, "note": { "description": "Optional free-text detail (capped at 300 chars)", "type": "string" }, "outcome": { "description": "Did the provider accomplish the task you hired it for?", "enum": [ "worked", "failed", "partial" ], "type": "string" }, "task_type": { "description": "Optional short task label, e.g. 'code-review', 'lead-enrichment'", "type": "string" } }, "required": [ "agent_id", "outcome" ], "type": "object" }, "name": "report_outcome", "outputSchema": null }, { "description": "Opt in to research on a requirement Agentery could not answer (shown as status 'unknown', often with a research_offer). Creates a saved research job for one listing and one requirement, or joins the identical existing job. Agentery then fetches the vendor's own pages in the background and looks for its statement on the requirement. Retrieve the result later with get_research (this server does not push notifications). The result may remain unknown; a found statement is the vendor's own claim, not independent verification.", "inputSchema": { "properties": { "provider_id": { "description": "The listing (provider_id from search_providers).", "type": "string" }, "request_ref": { "description": "Optional: the request_ref of the answer that raised the question.", "type": "string" }, "requirement": { "description": "The requirement in plain words, e.g. 'EU data residency', 'integrates with Slack', 'SOC 2 Type II', 'commercial use permitted'.", "type": "string" } }, "required": [ "provider_id", "requirement" ], "type": "object" }, "name": "request_research", "outputSchema": null }, { "description": "Optional combined research route: ONE call turns a task into: (1) its live MARKET — the semantic neighbourhood of the closest-matching providers, found purely by text-embedding nearness (NO fixed category), with the relevance floor and how many providers cleared it; (2) current pricing context — comparable price range and median with mean, stdev and n, plus provider/priced counts; and (3) a ready-to-compare provider shortlist — each with observed price, market_position (below/in-line/above market), integration status, match score, and handles collected in `compare_ready`. Retrieval is 100% nearest-neighbour by text embedding: providers are matched on what they actually DO, never on an assigned label. REUSES the canonical pricing/search engines (no new pricing logic). Also returns `suggested_alternatives` (cheaper or stronger options) and a `result_fingerprint` (+ `cached`) so repeat calls are cheap. It does NOT run the comparison — pass `compare_ready` to compare_providers once you have finalists. For detailed inspection prefer the default path: search_providers → get_provider_profile → compare_providers. Aliases: `task` also accepts `query` / `q`.", "inputSchema": { "properties": { "buyer_tier": { "description": "Optional buyer tier to price against ('team' = Team/SME).", "enum": [ "individual", "pro", "team", "enterprise" ], "type": "string" }, "cohort_ref": { "description": "Optional (1.17.0): reuse the exact set of comparable providers selected by an earlier price_benchmark / market_report / research_capability call.", "type": "string" }, "integrations": { "description": "Optional required integrations, e.g. [\"zendesk\",\"slack\"] — soft preference; integration status is reported per provider.", "items": { "type": "string" }, "type": "array" }, "limit": { "description": "Shortlist size (1-12, default 5).", "type": "number" }, "max_monthly_usd": { "description": "Optional budget ceiling in USD/month — filters the shortlist and drives suggested_alternatives.", "type": "number" }, "provider_type": { "description": "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.", "enum": [ "auto", "agent", "mcp", "api", "any" ], "type": "string" }, "response_mode": { "description": "'summary' (default) or 'full' (adds tier cohorts, coverage and raw results).", "enum": [ "summary", "full" ], "type": "string" }, "sort": { "description": "Shortlist ordering. Default 'match'.", "enum": [ "match", "price_asc" ], "type": "string" }, "task": { "description": "Required — the natural-language capability/task, e.g. 'reconcile supplier invoices' or 'litigation-analysis provider'. Aliases: query, q.", "type": "string" } }, "required": [ "task" ], "type": "object" }, "name": "research_capability", "outputSchema": null }, { "description": "Find candidates for a described task — example: 'supplier invoice reconciliation'. Check the strongest matches with get_provider_profile before recommending them, then use compare_providers for the shortlist. Results may include different delivery types (provider / MCP server / API / platform) and products without a numeric price: inspect the returned `priced`, `observed_price` and `provider_type` fields before treating a result as a recommendation. Set require_public_price to keep only products with an observed public price (then every returned result has one; if nothing priced is close you get an honest thin_coverage/no_match answer with the unpriced candidates labelled, never padding). max_monthly_usd drops products whose observed lowest paid tier exceeds it; sort price_asc lists cheapest observed price first. Each result carries the website URL (and pricing page URL when observed); get_provider_profile has the full evidence, plans and how_to_connect. Accepts `query` (aliases: q, text). research_capability is the optional combined route (market + pricing context + shortlist in one call). Each result also carries `deployment` (hosted | self_hosted | both | unknown — evidenced, never guessed), `mcp_endpoint` / `install` when held, and `price_note` when the observed price belongs to the vendor platform page rather than this connector; filter with `deployment`.", "inputSchema": { "properties": { "billing": { "description": "Only providers with one of these observed billing models, e.g. [\"free\",\"freemium\",\"subscription\",\"usage\"]", "items": { "type": "string" }, "type": "array" }, "deployment": { "description": "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.", "enum": [ "hosted", "self_hosted", "both", "unknown" ], "type": "string" }, "filters": { "description": "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)", "type": "object" }, "limit": { "description": "Max results (1-50, default 20)", "type": "number" }, "max_monthly_usd": { "description": "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.", "type": "number" }, "provider_type": { "description": "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.", "enum": [ "agent", "mcp", "api", "platform", "infrastructure" ], "type": "string" }, "query": { "description": "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.", "type": "string" }, "require_public_price": { "description": "Only return providers with an observed public price (default false)", "type": "boolean" }, "sort": { "description": "match (default) or price_asc (cheapest observed price first; unpriced providers last)", "enum": [ "match", "price_asc" ], "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "search_providers", "outputSchema": null }, { "description": "Stop watching a research job (the result stays retrievable with get_research).", "inputSchema": { "properties": { "job_id": { "type": "string" } }, "required": [ "job_id" ], "type": "object" }, "name": "stop_research_updates", "outputSchema": null }, { "description": "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).", "inputSchema": { "properties": { "agent_id": { "description": "Handle of the provider to find substitutes for, e.g. 'openhands'", "type": "string" }, "cheaper_only": { "description": "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.", "type": "boolean" }, "limit": { "description": "Max alternatives (1-10, default 5)", "type": "number" } }, "required": [ "agent_id" ], "type": "object" }, "name": "suggest_alternatives", "outputSchema": null }, { "description": "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`.", "inputSchema": { "properties": { "add": { "items": { "type": "string" }, "type": "array" }, "benchmark_id": { "description": "Your cb_ token", "type": "string" }, "remove": { "items": { "type": "string" }, "type": "array" }, "rename": { "type": "string" } }, "required": [ "benchmark_id" ], "type": "object" }, "name": "update_custom_benchmark", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:1cdc35b6712f362beae5b44ba816ff96d4fac95473c8a0e4529b78a0e8b02d9e | sha256sum