Privacy-first, self-hosted MCP server for organizing chat history, summarizing messages, and searching across past conversations with AI
MemCord presents significant definition quality issues across its 29-tool suite. While tool names follow verb_noun patterns correctly (memcord_save, memcord_read, memcord_search), descriptions are generic and often too brief (10-30 chars). Input schemas are visible in package.json and source code but lack depth: many parameters have minimal type information and no enum constraints for categorical inputs. Parameters like 'setting' and 'value' in memcord_configure are dangerously vague with no guidance on valid options. Output schemas are not documented anywhere. Error handling is absent from descriptions, no guidance on what happens on failure or how to recover. The server declares 29 tools but only 11 are marked as 'basicTools' in package.json, suggesting the advanced tools are under-documented. Critically, no per-tool descriptions provide context for when to use one tool over a similar one (e.g., memcord_search vs memcord_query both search memory, but their distinction is unstated). The tool list itself reveals composition problems: memcord_name (set or display), memcord_use (switch to slot), and memcord_select_entry (select entry) appear to overlap in purpose but are never disambiguated.
Archive memory slots for long-term storage
Automatically save chat content with optional summarization
Close the current memory slot
Compress memory slot content to reduce storage size
Configure memory slot settings and behavior
Run diagnostic checks on the server and memory storage
Export memory slot content to file or external format
memcord_configure has vague, undescribed parameters ('setting' and 'value' are free-form strings with no enum constraints or guidance on valid options). This violates the constrained-input pattern, LLMs will guess at setting names and values, causing frequent failures.
Most tool descriptions are 25 - 45 characters, below the 50-char minimum for LLM-readable docstrings. E.g., 'Test server connectivity and responsiveness' (41 chars) for memcord_ping does not explain WHEN to call it, WHAT it checks, or WHAT failure modes look like. Descriptions should state purpose, preconditions, and use case.
No output schemas are documented for any of the 29 tools. LLMs cannot plan downstream tool calls or extract required data (e.g., slot_id, entry_id) without knowing what fields are returned. Every tool needs a documented response structure.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 19 | 1.25.0+ | v1 |
Group memory entries by category or attribute
Import memory content from external sources (PDF, URL, text files)
Initialize and bind memcord to a project
List all available memory slots
List all available tags across memory slots
Retrieve and display server logs
Intelligently merge content from multiple memory slots
Get detailed performance and usage metrics
Set or display the current memory slot name
Test server connectivity and responsiveness
Query memory slots using natural language questions
Read and display memory slot content
Save chat text to memory slot
Save progress or work-in-progress content to memory slot
Search across memory slots using keywords
Select and interact with a specific memory entry
Share memory slots with other users or systems
Get current server status and memory metrics
Add or manage tags for memory slots and entries
Unbind memcord from a project
Switch to a different memory slot
Enter zero mode - content is not saved until a slot is selected
Semantic overlap between memcord_search (keyword search) and memcord_query (natural language questions) is never explained. LLMs cannot decide which to call without clear distinguishing guidance in the descriptions.
memcord_name ('Set or display the current memory slot name') conflates two actions (set vs display). This violates the single-responsibility rule. Split into memcord_get_current_slot (read-only) and memcord_set_current_slot (write).
No error handling guidance in any tool descriptions. LLMs do not know which errors are retryable, which require user input, or which are unrecoverable. E.g., memcord_save does not state what happens if the slot does not exist or if storage is full.
Parameters for import/export/share tools ('format', 'source') lack enum constraints. memcord_export accepts 'json, markdown, txt, pdf' but this is only stated in the description, not as a formal enum. LLMs cannot parse free-text constraints reliably.
Tools returning lists (memcord_list, memcord_search, memcord_query, memcord_list_tags) lack pagination parameters (limit, offset, page_size). Without pagination, returning thousands of slots or search results will blow context windows. Add documented limit (default 20) and offset.
Advanced tools like memcord_import, memcord_merge, memcord_archive, memcord_compress are listed in package.json but not visibly registered in the provided source code (optimized_server.py excerpt ends mid-class). Tool definitions are inferred rather than explicitly verified, violating the 'see actual tool definition' rule. This caps those tools at 50 overall.