MCP server for searching and discovering AI agents, MCP servers, CLI tools and agent skills via A2ASearch
A2ASearch MCP Server provides three well-named, focused tools with clear purposes. Tool names (search_agents, get_agent, list_agents) follow verb_noun conventions and are unambiguous. Descriptions are present and substantive (90-200 chars per tool). Input schemas are properly defined with JSON Schema types, enums where appropriate, and reasonable defaults. However, there are notable gaps: (1) Parameter descriptions lack detail about constraints and expected formats, e.g., 'limit' has no min/max bounds stated in the description, only in code logic; (2) Output schemas are undocumented, callers cannot predict what fields are returned or their types; (3) Error handling is minimal, API errors throw generic exceptions rather than guiding recovery; (4) No tool annotations (readOnlyHint, etc.) despite these being safe, read-only operations. The server is functionally sound but lacks the signal density and error resilience expected of production tools.
Get full details for a specific agent by its slug (name as kebab-case). Returns description, README, capabilities, stars, forks, languages and more.
List agents from A2ASearch, optionally filtered by type. Use this to browse top agents by category.
Search the A2ASearch directory for AI agents, MCP servers, CLI tools and agent skills. Returns name, description, type, stars, GitHub URL and capabilities for each result.
Output schemas are not documented. Callers cannot predict what fields are returned by search_agents, get_agent, or list_agents. The code constructs responses on the fly (mapping API fields, slicing arrays), but there is no formal schema declaration. LLMs cannot plan downstream operations or extract the right data without knowing the response structure.
Parameter constraints are not fully documented in descriptions. 'limit' accepts 1 - 20 according to the code, but the description only says 'Number of results to return (1-20, default 10)', unclear if the server enforces 1-20 or if it's advisory. The 'query' parameter in search_agents lacks guidance on minimum length, special characters, or expected format. LLMs cannot validate inputs on their own.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint). All three tools are read-only queries against the A2ASearch API, but the server does not declare this via readOnlyHint. This prevents clients from optimizing plan execution (e.g., safely retrying, caching results, or parallelizing calls). LLMs cannot infer safety from names alone.
Error handling does not guide recovery. When the A2ASearch API returns a 5xx error or times out, the code throws 'API error: {status}'. The LLM receives no actionable guidance, should it retry? Is the service down? Should it ask the user? Only get_agent partially recovers by catching 404 and returning a user-friendly message. Other tools lack this pattern.
The 'slug' parameter in get_agent has minimal description: 'Agent slug, e.g. playwright, ollama, claude-code, mem0'. While examples are helpful, there is no guidance on format rules (case sensitivity, allowed characters, max length). Example values like 'playwright' or 'ollama' may encourage the LLM to hallucinate slugs for agents it does not know. No validation is applied before the API call.