MCP server de memoria contextual sobre Redis (listas) para orquestación de agentes
This server provides 12 memory-management tools with complete JSON Schema definitions and descriptions for all tools and parameters. Naming follows verb_noun conventions consistently (get_, append_, search_, set_, clear_, publish_). Descriptions are detailed and include use-case guidance (e.g., 'Use when starting a subagent to recover recent memory'). However, there are moderate gaps: parameter descriptions contain Spanish text ('agent_key no puede estar vacío'), descriptions lack structured recovery guidance for error cases, and output schemas are not explicitly documented in the source. Error handling via errorToToolResult wrapper is present but the specific error messages and classifications are not visible in the provided code. Overall, the server demonstrates solid foundational quality but falls short of A-grade polish due to incomplete error taxonomy and undocumented response shapes.
Appends a step or milestone to the agent's log. Args: agent_key (e.g. MM/DD/YYYY-class), new_entry (text). Use when a subagent finishes (agent_key = MM/DD/YYYY-class) or when the orchestrator closes the flow (e.g. trymellon-orchestrator) so other agents can recover context.
Stores a memory with an embedding for later semantic search. Args: agent_key, embedding (vector), content, metadata (optional). Requires Redis Stack with vector module.
Deletes a scratchpad entry before TTL expiry. Args: agent_key, name (required). Use when closing a flow.
Returns the full log history for an agent. Args: agent_key (required). Use for orchestrator reports or before calling rollup_memory_segment.
Returns the latest messages published to a channel. Args: channel (required), limit (optional). Pair with publish_interagent_message for agent coordination.
Returns log stats for an agent: entry count and first/last timestamps. Args: agent_key (required). Use to decide whether to call rollup_memory_segment.
Spanish text in parameter descriptions ('no puede estar vacío', 'máximo 256 caracteres') reduces clarity for English-speaking LLMs and violates the pattern:tool-description convention to write descriptions as explicit prompt engineering for LLM consumption. LLMs may misinterpret constraint text or ignore non-English guidance.
Output schemas are not explicitly documented in the source code. While input schemas are comprehensive (type, required, descriptions, constraints), the response structure for each tool is inferred from descriptions alone (e.g., 'Returns the last N entries', 'Returns log stats'). This violates pattern:response-shaper; LLMs cannot reliably parse unstructured output or plan downstream tool calls without knowing field names, types, and cardinality.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 51 | - | v1 |
Returns the last N entries from the agent's log for context hydration. Args: agent_key (required), limit (optional, default 5). Use when starting a subagent to recover recent memory.
Reads a value previously stored with set_scratchpad_entry. Args: agent_key, name (required). Returns null if missing or expired.
Publishes a message to a channel (Pub/Sub). Args: channel, sender_agent_key, payload (required). Subscribers read it via get_channel_log. Use for light coordination between agents.
Rolls up old log entries into one summary entry; keeps the most recent keep_last entries. Args: agent_key, summary_entry (required), keep_last (optional, default 20, max 500). Use when the log is too long.
Searches stored memories by embedding similarity. Args: agent_key, embedding (required), top_k (optional), score_threshold (optional). Requires Redis Stack.
Stores a temporary value by agent and name; Redis deletes it after TTL seconds. Args: agent_key, name, value, ttl_seconds (optional). Use for handoffs. At flow close: name like session-{session_id}, value = summary + links, ttl_seconds e.g. 86400.
Error handling is abstracted via errorToToolResult() wrapper in wrapToolHandler, but error taxonomy, classification (retryable vs. user-fixable vs. fatal), and recovery guidance are not visible in the provided code. This violates pattern:recovery-guide; when tools fail (e.g., 'agent_key not found', 'Redis connection failed'), LLMs receive a generic error object with no hint on whether to retry, adjust input, or escalate.
Parameter 'limit' in get_recent_context defaults to 5 and is documented as 'optional, default 5, minimum 1, maximum 100'. However, descriptions do not explain the consequence of the limit or suggest a heuristic for selection (e.g., 'Start with 5 entries; increase to 20 if context is truncated'). This forces LLMs to guess appropriate values, increasing erroneous calls.
Compound parameters in append_semantic_memory (embedding array, content, metadata object) lack examples or JSON schema refinements. Descriptions state 'vector embedding' and 'content' but do not clarify: What embedding dimension? Is content plain text, markdown, JSON? What metadata format? LLMs may pass malformed inputs.
search_semantic_memory includes optional score_threshold (0 - 1) but does not document what the threshold represents or recommend a default. Is 0.8 high confidence? Is 0.5 a weak match? Without guidance, LLMs may invoke the tool with arbitrary thresholds, reducing result relevance.