A Python-based MCP server providing agent orchestration, identity management, memory systems, emotion analysis, and A2A (Agent-to-Agent) protocol integration for the Cognisphere AI framework
Cognisphere ADK exhibits significant definition quality gaps. While 11 tools are defined with names, descriptions, and visible input schemas, the schemas are uniformly shallow (most parameters typed as 'string' or 'object' without constraints), descriptions lack actionable detail for LLM routing, parameter descriptions are often generic ('Tool context provided by the ADK framework (optional)'), and no output schemas are documented. The tool set shows composition problems (e.g., invoke_specialist_agent_tool and classify_and_route_query_tool overlap in responsibility), weak naming clarity (connect_external_agent is vague about success/failure semantics), and no visible error handling guidance in any tool. The code sample shows incomplete implementation (routing_tools.py is cut off mid-function). Parameter validation rules, enum constraints, and idempotency guidance are absent. No security controls visible in tool definitions (secrets, permissions, scope declarations). This server would require substantial rework to meet production standards.
Analyzes the emotional content of text.
Classifies the user's query intent and suggests a specialist agent. Also prepares the input for the target agent.
Conecta a um agente externo para processar uma consulta. Connects to an external agent to process a query.
Creates a new identity profile and saves it to persistent storage.
Creates a new memory in the system.
Descobre informações sobre vários agentes A2A. Discovers information about multiple A2A agents.
Dynamically loads and invokes a specialist agent. This version will attempt to use tool_context.actions.transfer_to_agent.
No output schemas documented. Tools return unstructured responses (e.g., 'status', 'message' dicts) with no shape guarantee. LLMs cannot plan downstream calls or extract required fields reliably.
Parameter schemas use generic type 'object' for tool_context without field definitions. LLMs cannot introspect what tool_context contains or validate what to pass.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 10 | - | v1 |
Lists all available identities.
Recalls memories based on a query and optional filters.
Switches the current context to a specific identity.
Updates an existing identity with new attributes.
Parameter descriptions for 'tool_context' are identical boilerplate ('Tool context provided by the ADK framework (optional)') across all 11 tools. Provides zero actionable guidance for LLMs or users.
Tool composition failure: classify_and_route_query_tool and invoke_specialist_agent_tool overlap in orchestration logic. classify routes to an agent, invoke then loads and runs it. No clear separation of concern, LLMs cannot determine which to call first or in what order.
connect_external_agent description is vague ('Conecta a um agente externo...'). Does it block waiting for response? Does it queue asynchronously? What constitutes success vs. failure? LLMs cannot reason about error recovery or retry logic.
No error handling or recovery guidance in any tool. No specification of retryable vs. fatal errors, no actionable error messages, no guidance for LLMs on what to do on failure.
discover_a2a_agents accepts 'urls' array but no limit, timeout, or validation constraints specified. Large URL lists or slow endpoints could hang the agent indefinitely.
create_memory and recall_memories define emotion_type as free-form string ('joy, sadness, fear, etc.') rather than enum. LLMs will hallucinate emotion values; emotion_type should be {enum: ['joy', 'sadness', 'fear', 'anger', 'surprise', 'disgust']}.
create_memory emotion_score documented as '0.0-1.0' range in text but no JSON Schema min/max constraints. LLMs ignore range text and may pass negative or >1.0 values.
No pagination support. discover_a2a_agents and recall_memories return unbounded arrays. Lists without offset/limit/total_count force the LLM to handle huge responses or risk truncation.
list_identities accepts no schema beyond tool_context. Returns all identities with no filtering, sorting, or pagination. For large deployments, this balloons context and wastes tokens.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. LLMs cannot determine which tools are safe to retry, which require confirmation, or which are read-only.
No visible security controls: credentials not mentioned as off-limits, no permission gates declared, no audit trail logging patterns present. update_identity and create_memory are destructive but show no access control guidance.