{"serverId":"mcp-registry/ai.revuo/revuo","tools":[{"name":"categories.list","fixed":{"name":"categories_list","description":"Lists all product categories in the directory. Use category slugs to filter product searches in products.search / products.find_by_capability. Response: { categories: [{ slug, name, description }] }. Note: this is a thin call. For a full directory briefing (subcategories, capability slugs per category, product counts, locked-vertical flags), prefer directory.overview as a single up-front call.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"categories.list\" → \"categories_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":136,"tokensAfter":136},{"name":"directory.overview","fixed":{"name":"directory_overview","description":"Single 'call this first' entry-point that briefs an agent on the entire Revuo directory. Returns the taxonomy with subcategories, product counts per category, locked-vertical flags (the three verticals Revuo prioritizes), capability slugs valid per category, the canonical capability-kind taxonomy (integration/compliance/format/standard/workflow), and product-bound agent surfaces (mcpServer, agentSkill, grokBot). Surfaces are a property of a product — they are NOT category slugs. Use this once at","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"directory.overview\" → \"directory_overview\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":165,"tokensAfter":165},{"name":"mcp.score_server","fixed":{"name":"mcp_score_server","description":"Score an MCP server against the Revuo quality rubric. Pass either a product slug (scored from cached probe data on the product's direct-probe MCP entry; fast) OR an endpoint URL (probed live). Returns: { target, server, summary { coreAwarded/Max/Percent, extensionAwarded/Max/Percent, probedAt }, categories[] (ServerMetadata, CapabilityQuality, ConfigurationUX, RevuoExtensions), checks[] (every rubric check with awarded/max/passed/evaluated/fixSuggestion/evidence), topFixes[] (failed checks ranke","inputSchema":{"type":"object","properties":{"url":{"type":["string","null"],"default":null,"description":"MCP endpoint URL (HTTPS) to probe and score. Mutually exclusive with slug."},"slug":{"type":["string","null"],"default":null,"description":"Product slug whose direct-probe MCP server to score. Mutually exclusive with url."},"refresh":{"type":"boolean","default":false,"description":"When passing slug, force a fresh probe instead of using cached probe data. Default false."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"mcp.score_server\" → \"mcp_score_server\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":286,"tokensAfter":286},{"name":"products.find_agent_ready","fixed":{"name":"products_find_agent_ready","description":"Find products with the highest agent readiness scores — products that are easiest for AI agents to integrate with. Sorted by compositeScore desc; supports skip/limit pagination. All readiness scores are 0-100, higher better. Calibration: <30 = not agent-ready (default minimumScore filter), 30-49 = early/limited, 50-69 = decent, 70-89 = strong, 90+ = exceptional. Ranking basis: compositeScore desc. Tier is NOT a tiebreaker here — buyer intent is technical fit, not paid placement. Every result car","inputSchema":{"type":"object","properties":{"skip":{"type":"integer","default":0,"description":"Number of results to skip (for pagination). Default 0."},"limit":{"type":"integer","default":20,"description":"Maximum number of results to return per page. Caps at 50."},"minimumScore":{"type":"integer","default":30,"description":"Minimum composite agent readiness score (0-100). Higher = more agent-ready. 0 returns everything; 50 is a usable threshold."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"products.find_agent_ready\" → \"products_find_agent_ready\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":281,"tokensAfter":281},{"name":"products.find_by_capability","fixed":{"name":"products_find_by_capability","description":"Find B2B SaaS products that support a specific capability — an integration with a named service ('salesforce-integration'), a data format ('xrechnung-support'), an industry standard ('eclass-support'), or a compliance certification ('soc2'). Accepts either a canonical capability slug or natural language; resolves to a structured capability when possible. Ranking basis: currentScore desc (computed editorial score), then name. Paid tier is NOT a ranking input — it appears only as an annotation. Ev","inputSchema":{"type":"object","required":["capability"],"properties":{"limit":{"type":"integer","default":20,"description":"Maximum number of results to return"},"category":{"type":["string","null"],"default":null,"description":"Optional category slug to scope the search (e.g. 'pim', 'tender-management', 'billing')"},"capability":{"type":"string","description":"Capability slug ('salesforce-integration') OR natural-language description ('integrates with Salesforce')"}}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"products.find_by_capability\" → \"products_find_by_capability\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":287,"tokensAfter":287},{"name":"products.get","fixed":{"name":"products_get","description":"Get full details for a product by slug, including MCP integration data, product-bound agent artifacts (Agent Skills, Grok Bots), and agent readiness scores. Agent artifacts are a property of the product — not directory categories. Response: { product: { slug, name, tagline, description, websiteUrl, logoUrl, pricingModel, currentScore (0-100), tier (free|verified|featured), unverified (true when no approved vendor claim), verifiedAt (ISO; absent if never crawled), categories[], knownLimitations?[","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","description":"Product slug (URL-friendly identifier)"}}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"products.get\" → \"products_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":191,"tokensAfter":191},{"name":"products.get_mcp_setup","fixed":{"name":"products_get_mcp_setup","description":"Get MCP server setup instructions for a product. Returns available servers, their tools, connection details, and whether they support remote (hosted) access. Each server carries a machine-usable connect block: { transport ('http'|'local'), url, mcpJson (paste-ready snippet), claudeMcpAddCommand (`claude mcp add ...`), installLinkUrl (a tracked link that routes through Revuo for vendor attribution, then redirects to the product) }. For remote servers use mcpJson/claudeMcpAddCommand directly; for ","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","description":"Product slug (URL-friendly identifier)"}}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"products.get_mcp_setup\" → \"products_get_mcp_setup\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":194,"tokensAfter":194},{"name":"products.search","fixed":{"name":"products_search","description":"Search for B2B SaaS products by name OR by capability. The query is first resolved against the canonical capability taxonomy (e.g. 'salesforce-integration', 'xrechnung-support', 'soc2'); on hit, products that claim that capability are returned. Falls back to name/slug/tagline substring search. Optional category scope. Ranking basis: currentScore desc (computed editorial score), then name. Paid tier is NOT a ranking input — tier appears only as an annotation on results. Every result carries { pos","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"Search query — capability slug or natural-language description; falls back to name match"},"category":{"type":["string","null"],"default":null,"description":"Optional category slug to filter results"}}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"products.search\" → \"products_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":237,"tokensAfter":237},{"name":"rankings.get","fixed":{"name":"rankings_get","description":"Get the published editorial ranking (\"Best {Category}\") for a category. Ordering basis: computed editorial score ONLY (verified capability coverage, evidence verification rate & freshness, agent readiness, data completeness — weights published at /api/methodology). Tier is NOT a ranking input for this tool; positions are never sold. Rankings are published snapshots (monthly schedule; manual publishes are marked) — stable between recomputes and citable. Each entry carries { position, rank (0..1),","inputSchema":{"type":"object","required":["category"],"properties":{"limit":{"type":"integer","default":25,"description":"Max ranked entries to return (caps at 50)"},"category":{"type":"string","description":"Category slug (e.g. 'pim-software'). Use categories.list for valid slugs."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"rankings.get\" → \"rankings_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":231,"tokensAfter":231},{"name":"tools.changes","fixed":{"name":"tools_changes","description":"Detect whether a product's MCP tool schema has DRIFTED since you cached it — rug-pull / tool-poisoning detection (a server silently changing a tool's description or input schema after you approved it; web search structurally cannot answer this). Pass the product slug and EITHER the schema hash you cached earlier (knownHash, from products.get_mcp_setup → server.schema.hash — the strongest signal: an exact mismatch means the tools changed) OR the ISO-8601 timestamp you cached at (since). With neit","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string","description":"Product slug whose MCP tool schema to check."},"since":{"type":["string","null"],"default":null,"description":"ISO-8601 timestamp you last cached at. Reports whether a schema change was recorded after it."},"server":{"type":["string","null"],"default":null,"description":"The server qualifiedName your knownHash belongs to. Required with knownHash on a multi-server product."},"knownHash":{"type":["string","null"],"default":null,"description":"The schema hash you cached earlier (products.get_mcp_setup → server.schema.hash). Exact-mismatch drift signal."}}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"tools.changes\" → \"tools_changes\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":335,"tokensAfter":335},{"name":"tools.find_for_task","fixed":{"name":"tools_find_for_task","description":"Find the best MCP tools for a given task. Describe what you want to accomplish (e.g. 'manage github issues', 'send slack messages', 'query a database') and get ranked results — each result is one (product, tool) pair, since same-named tools across providers are NOT interchangeable. By default only shows tools available via remote (network-hosted) servers. Audience: agent builders looking for installable MCP tools — for B2B SaaS recommendations, prefer products.search or products.find_by_capabili","inputSchema":{"type":"object","required":["taskDescription"],"properties":{"limit":{"type":"integer","default":10,"description":"Maximum number of tool results to return"},"access":{"type":["string","null"],"default":null,"description":"Optional access-class filter: 'open' (callable anonymously), 'keyed', 'account', 'commercial', or 'unknown'. Omit for all — Open tools are boosted, not required."},"remoteOnly":{"type":"boolean","default":true,"description":"If true (default), only return tools from remote-capable MCP servers"},"taskDescription":{"type":"string","description":"Natural language description of the task you want to accomplish"}}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"tools.find_for_task\" → \"tools_find_for_task\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":334,"tokensAfter":334},{"name":"tools.get","fixed":{"name":"tools_get","description":"Get detailed information about a specific MCP tool, scoped to one product. Pass both the productSlug and the tool name — same-named tools across products are distinct. Response: { tool: { normalizedName, displayName, description, inputSchema, productSlug, productName, serverQualifiedName, isRemoteCapable, accessModel, healthScore, readOnly, destructive, tier, unverified, verifiedAt, position (always 1), rank (always 1.0) } }. Errors: { error: { code: 'not_found', ... } }.","inputSchema":{"type":"object","required":["productSlug","name"],"properties":{"name":{"type":"string","description":"Normalized tool name (e.g. 'search_issues', 'send_message')"},"productSlug":{"type":"string","description":"Slug of the product that exposes this tool (e.g. 'linear', 'github')"}}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"tools.get\" → \"tools_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":226,"tokensAfter":226},{"name":"tools.list_by_name","fixed":{"name":"tools_list_by_name","description":"List every (product, tool) pair that shares a normalized name. A disambiguation lookup — same name across providers does NOT mean the tools are interchangeable. Ranking basis: productName. Paid tier is NOT a ranking input — it appears only as an annotation. Every result carries { position (1-based), rank (0..1) } plus preflight annotations { accessModel, healthScore, readOnly, destructive }. Response: { normalizedName, total, tools[] (each: position, rank, productSlug, productName, displayName, ","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Normalized tool name (e.g. 'search', 'create_issue')"}}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"tools.list_by_name\" → \"tools_list_by_name\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":197,"tokensAfter":197},{"name":"tools.search","fixed":{"name":"tools_search","description":"Search for MCP tools by capability. Each result is one (product, tool) pair — tools sharing a name across providers are NOT interchangeable, so each provider's tool is its own row with its own description and input schema. Ranking basis: semantic relevance to the query (embedding search); on the lexical fallback (searchMode='lexical') results are name-ordered and rank does NOT reflect relevance. Paid tier is NOT a ranking input — it appears only as an annotation. Every result carries { position ","inputSchema":{"type":"object","required":["query"],"properties":{"limit":{"type":"integer","default":20,"description":"Maximum number of results to return"},"query":{"type":"string","description":"Search query to find tools by name or capability. Natural-language phrases work best (semantic search)."},"access":{"type":["string","null"],"default":null,"description":"Optional access-class filter: 'open' (callable anonymously), 'keyed', 'account', 'commercial', or 'unknown'. Omit for all."},"remoteOnly":{"type":"boolean","default":false,"description":"If true, only return tools available via remote (network-hosted) MCP servers"}}},"annotations":{"readOnlyHint":true,"openWorldHint":true}},"changes":[{"kind":"name","detail":"Renamed \"tools.search\" → \"tools_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":327,"tokensAfter":327}],"toolsChanged":14,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}