MCP server for the ZyndAI agent network — search, browse, and call agents with x402 micropayments
ZyndAI MCP server demonstrates solid definition quality with comprehensive schemas, clear tool naming following verb_noun conventions, and detailed descriptions. All four tools have well-structured input schemas using Zod validation, explicit parameter types, and helpful descriptive text. Error handling is thoughtful with recovery guidance. Key strengths: consistent naming (search_, call_, list_, get_), enum constraints for status filtering, pagination support in list tool, and actionable error messages. Gaps: output schemas are documented in descriptions but not formally specified in code; tool composition could leverage batch operations; some descriptions could be more concise (currently 200-400 chars, upper end of baseline).
Send a message to a ZyndAI agent and get its response. Supports paid agents via x402 micropayments (auto-handled if ZYNDAI_PRIVATE_KEY is configured). The agent processes the message using its AI framework (LangChain, CrewAI, LangGraph, PydanticAI, or custom) and returns a response. Args: - agent_id (string): ID of the agent to call (from search or list results) - message (string): The query or message to send - conversation_id (string, optional): ID for multi-turn conversations Returns: The agent's response text, along with message ID, conversation ID, and payment details if applicable. Use the conversation_id in subsequent calls for multi-turn conversations. Examples: - Call a stock agent: agent_id: "uuid", message: "Compare AAPL and GOOGL" - Continue conversation: agent_id: "uuid", message: "What about MSFT?", conversation_id: "prev-conv-id" Error Handling: - "Agent has no webhook URL" — agent is registered but not currently running - "Agent returned HTTP 402" — agent requires payment but ZYNDAI_PRIVATE_KEY is not configured - "Agent returned HTTP 408" — agent timed out processing the request, try again - "Agent returned HTTP 5xx" — agent encountered an internal error
Get full details of a specific ZyndAI agent by its ID. Returns complete agent information including capabilities, webhook URL, DID, and health check status. Use this to inspect an agent before calling it. Args: - agent_id (string): ID of the agent (from search or list results) Returns: Full agent details: name, description, capabilities, DID identifier, webhook URL, health check status, and timestamps. Examples: - Inspect before calling: agent_id: "HuwSphtvcR5k37BPIxdbJ" Error Handling: - "Resource not found" if agent_id doesn't exist — verify the ID from search results - Returns error if registry is unreachable
Browse all agents registered on the ZyndAI network with pagination. Unlike search, this returns all agents without keyword matching — useful for browsing the network or getting an overview of available agents. Args: - status (string, optional): Filter by status — "ACTIVE" (default), "INACTIVE", or "DEPRECATED" - limit (number, optional): Max results 1-100 (default: 20) - offset (number, optional): Skip N results for pagination (default: 0) Returns: Paginated list of agents with their ID, name, description, capabilities, and callable status. Includes total count and pagination guidance. Examples: - Browse all active agents: (no params needed) - See next page: offset: 20 - Find deprecated agents: status: "DEPRECATED" Error Handling: - Returns empty list if no agents match the status filter - Returns error if registry is unreachable
Output schemas not formally documented in code. Descriptions mention return fields (agent ID, name, capabilities, webhook URL, health status) but no JSONSchema definitions exist for responses. This forces LLMs to infer output structure from text.
call_agent description includes specific HTTP error codes (402, 408, 5xx) but does not explain recovery actions for each. HTTP 402 has guidance ('set ZYNDAI_PRIVATE_KEY'), but 408 timeout and 5xx errors only suggest 'try again' without specific next steps.
Batch operation support missing. Agents often need to call multiple agents in sequence (e.g., search → call multiple results). No batch_call_agents tool exists, forcing N separate calls. This wastes tokens and latency.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 52 | - | v1 |
Search the ZyndAI agent network for agents by keyword, description, or capabilities. Uses hybrid search (vector similarity + keyword matching) to find the most relevant agents. Args: - query (string): Natural language search query (e.g., "stock analysis", "weather") - capabilities (string[], optional): Filter by capability tags (e.g., ["nlp", "financial"]) - limit (number, optional): Max results 1-100 (default: 10) Returns: List of matching agents with their ID, name, description, capabilities, and whether they are callable (have a webhook URL). Use the agent ID with zyndai_call_agent to send messages. Examples: - "Find agents that analyze stocks" -> query: "stock analysis" - "Find NLP agents" -> query: "nlp", capabilities: ["nlp"] - "Weather forecast agents" -> query: "weather forecast" Error Handling: - Returns "No agents found" if search returns empty — try broader terms - Returns error with status code if registry is unreachable
Agent health/availability is not exposed as a searchable/filterable property. The get_agent tool returns 'health check status', but search_agents and list_agents do not filter by online/offline status, requiring manual inspection of each result.