Memory Core MCP Server API Design
This guide documents the design of the Memory Core Model Context Protocol (MCP) server for Neo.mjs. This server provides a structured, agent-agnostic interface for AI agents to maintain persistent memory across sessions by exposing a collection of tools.
Overview
The Memory Core MCP server replaces the original shell-based memory scripts (ai:add-memory, ai:query-memory, etc.) with a formal set of tools. This provides:
- Structured Communication: JSON-based tool calls and responses instead of parsing stdout.
- Better Error Handling: Clear error messages within the tool response.
- Platform Independence: No shell-specific dependencies.
- Type Safety: Tool inputs and outputs are defined by a schema.
Architecture
The server is built using the @modelcontextprotocol/sdk and communicates with the client environment (e.g., Gemini CLI) over standard input/output (stdio). It no longer operates as an HTTP web server. The API is defined as a collection of tools in an openapi.yaml specification, which provides the single source of truth for the server's capabilities.
Data Model
The Memory Core manages two primary ChromaDB collections:
1. Memories Collection (neo-agent-memory)
Stores raw agent interaction data:
{
"id": "mem_2025-10-08T12:00:00.000Z",
"sessionId": "session_1696800000000",
"timestamp": "2025-10-08T12:00:00.000Z",
"prompt": "User's verbatim question",
"thought": "Agent's internal reasoning",
"response": "Agent's final answer",
"type": "agent-interaction"
}
2. Summaries Collection (neo-agent-sessions)
Stores high-level session summaries with structured metadata:
{
"id": "summary_session_1696800000000",
"sessionId": "session_1696800000000",
"timestamp": "2025-10-08T12:00:00.000Z",
"title": "Implement MCP Server Configuration",
"summary": "Detailed session summary...",
"category": "feature",
"memoryCount": 15,
"quality": 85,
"productivity": 90,
"impact": 75,
"complexity": 60,
"technologies": ["neo.mjs", "nodejs", "chromadb"]
}
Available Tools
The server exposes the following tools, which are derived from its OpenAPI specification:
| Tool Name | Description |
|---|---|
| Health | |
healthcheck |
Confirms the server is running and can connect to the ChromaDB instance. |
| Database Lifecycle | |
start_database |
Starts the ChromaDB database instance as a background process. |
stop_database |
Stops the running ChromaDB database instance. |
| Memories | |
add_memory |
Stores a new agent interaction (prompt, thought, response) as a memory. |
get_session_memories |
Retrieves all memories for a specific session, in chronological order. |
query_raw_memories |
Performs semantic search across all raw memories using vector similarity. |
| Summaries | |
get_all_summaries |
Retrieves all session summaries, sorted by timestamp. |
delete_all_summaries |
Deletes all session summaries from the database. |
query_summaries |
Performs semantic search across session summaries. |
| Sessions | |
summarize_sessions |
Triggers the session summarization process. |
| Database | |
export_database |
Exports the entire memory database to a JSONL file. |
import_database |
Imports a previously exported JSONL file back into the database. |
Tool Specifications
This section details the parameters and behavior of each tool exposed by the Memory Core server.
Health Tools
healthcheck
Confirms server health and database connectivity. This tool takes no parameters.
Database Lifecycle Tools
start_database
Starts the ChromaDB database instance as a background process. This tool takes no parameters.
stop_database
Stops the running ChromaDB database instance. This tool takes no parameters.
Memory Tools
add_memory
Adds a new agent interaction to the memory store.
Parameters:
prompt(string, required): The user's verbatim prompt.thought(string, required): The agent's internal reasoning.response(string, required): The agent's final response.sessionId(string, optional): The session ID. If not provided, one is generated.
Migration from CLI:
- Old way:
npm run ai:add-memory -- -p "..." - New way:
call_tool('add_memory', {prompt: "...", thought: "...", ...})
get_session_memories
Retrieves all memories for a specific session.
Parameters:
sessionId(string, required): The session to retrieve memories for.limit(integer, optional): Maximum memories to return (default: 100).offset(integer, optional): Pagination offset (default: 0).
query_raw_memories
Performs semantic search across all memories.
Parameters:
query(string, required): The natural language search query.nResults(integer, optional): Number of results to return (default: 10).sessionId(string, optional): An optional session ID to scope the search.
Migration from CLI:
- Old way:
npm run ai:query-memory -- -q "search query" - New way:
call_tool('query_raw_memories', {query: "search query"})
Summary Tools
get_all_summaries
Lists all session summaries with optional filtering.
Parameters:
limit(integer, optional): Maximum summaries to return (default: 50).offset(integer, optional): Pagination offset (default: 0).category(string, optional): Filter by category (bugfix,feature, etc.).
query_summaries
Searches session summaries semantically.
Parameters:
query(string, required): The natural language search query.nResults(integer, optional): Number of results to return (default: 10).category(string, optional): Filter by category.
delete_all_summaries
Deletes all session summaries (raw memories are preserved). This tool takes no parameters.
Session Tools
summarize_sessions
Triggers the session summarization process.
Parameters:
sessionId(string, optional): If provided, only this session will be summarized. If omitted, all unsummarized sessions are processed in batch.
Migration from CLI:
- Old way:
npm run ai:summarize-session - New way:
call_tool('summarize_sessions', {})
Database Tools
export_database
Exports the entire memory database to a JSONL file.
Parameters:
include(array, optional): Collections to export (memories,summaries, or both).
Migration from CLI:
- Old way:
npm run ai:export-memory - New way:
call_tool('export_database', {})
import_database
Imports a previously exported JSONL file.
Parameters:
file(string, required): The path to the JSONL backup file.mode(string, optional):merge(default) orreplace.
Migration from CLI:
- Old way:
npm run ai:import-memory -- --file ... - New way:
call_tool('import_database', {file: "path/to/file.jsonl"})
Error Handling
The server no longer uses HTTP status codes. Instead, errors are communicated within the CallToolResponse object. If a tool call fails, the response will have isError: true and the content will contain a descriptive error message.
Example Error Response:
{
"content": [
{
"type": "text",
"text": "Tool Error: Database connection failed. Message: Could not connect to ChromaDB."
}
],
"isError": true
}
Implementation Considerations
Authentication & Authorization
The initial implementation runs locally with no authentication. Future versions should consider:
- API key authentication for remote access
- Rate limiting to prevent abuse
- Role-based access control for multi-user scenarios
Performance Optimizations
- Pagination: Implemented for all list-based tools to handle large datasets.
- Caching: Consider caching frequently accessed summaries.
- Batch Operations: The
summarize_sessionstool supports batch mode. - Streaming: Future enhancement for large exports.
Database Consistency
- Atomic Operations: Use transactions where supported by the database.
- Validation: Validate all inputs before database operations.
- Idempotency: Ensure operations are idempotent where appropriate.
Monitoring & Logging
- Health Checks: The
healthchecktool should be monitored periodically. - Request Logging: Log all tool calls with timing information.
- Error Tracking: Capture and log all errors with stack traces.
- Metrics: Track memory growth, query performance, and summarization success rates.
OpenAPI Specification
The complete API specification is available in OpenAPI 3.0 format at:
ai/mcp/server/memory-core/openapi.yaml
This specification can be:
- Used to generate client libraries in multiple languages.
- Imported into API development tools (Postman, Insomnia).
- Used for automated API testing.