memora-mcp
v1.0.3
Published
MCP server for saving and retrieving prompts, memories and plans
Maintainers
Readme
memora-mcp
MCP server for saving and retrieving prompts, memories, and plans. Gives your AI agent a persistent knowledge repository that survives across sessions.
Installation
npx memora-mcpTools (17)
Memories — facts, decisions, and context
| Tool | Description |
| ------------------ | --------------------------------------------------------------------------------------------- |
| save_memory | Persist a fact, decision, observation, or context that should survive across sessions |
| get_memory_by_id | Fetch the full content of a memory by its exact ID |
| list_memories | List saved memories (id, title, summary, tags — content omitted). Supports tag filter + pagination |
| update_memory | Partially update a memory — omitted fields are preserved |
| delete_memory | Permanently delete a memory |
Prompts — reusable instructions and templates
| Tool | Description |
| ------------------ | --------------------------------------------------------------------------------------------- |
| save_prompt | Save a reusable instruction, system prompt, or template |
| get_prompt_by_id | Fetch the full text of a prompt by its exact ID |
| list_prompts | List saved prompts (id, title, summary, tags — content omitted). Supports tag filter + pagination |
| update_prompt | Partially update a prompt — bump version when making breaking changes |
| delete_prompt | Permanently delete a prompt |
Plans — multi-step implementation plans and ADRs
| Tool | Description |
| --------------- | ------------------------------------------------------------------------------------------ |
| save_plan | Save a structured, multi-step implementation plan or architectural decision record |
| get_plan_by_id| Fetch the full content of a plan by its exact ID |
| list_plans | List saved plans (id, title, summary, tags — content omitted). Supports tag filter + pagination |
| update_plan | Partially update a plan — use to mark steps complete or revise scope |
| delete_plan | Permanently delete a plan |
Global search
| Tool | Description |
| --------------------- | ------------------------------------------------------------------------------------------------- |
| search_knowledge | Free-text search across all items (memories, prompts, plans). Matches title, summary, content, and tags |
| get_recent_knowledge| Retrieve the most recently updated items across all types — useful at session start to regain context |
Configuration
Claude Desktop
Add to your claude_desktop_config.json:
With external API (recommended for production)
{
"mcpServers": {
"memora": {
"command": "npx",
"args": ["-y", "memora-mcp"],
"env": {
"STORAGE_TYPE": "http",
"SAVE_PROMPT_API_URL": "https://your-api.com",
"API_KEY": "your-api-key-here"
}
}
}
}With local JSON file (no API required)
{
"mcpServers": {
"memora": {
"command": "npx",
"args": ["-y", "memora-mcp"],
"env": {
"STORAGE_TYPE": "json"
}
}
}
}Data is stored at ~/.save-prompt/data.json.
With local Markdown files (human-readable, git-friendly)
{
"mcpServers": {
"memora": {
"command": "npx",
"args": ["-y", "memora-mcp"],
"env": {
"STORAGE_TYPE": "markdown"
}
}
}
}Each item is stored as an individual .md file at ~/.save-prompt/items/<uuid>.md with YAML frontmatter for metadata and a markdown body for content. Files are human-readable and can be edited directly or committed to git.
VS Code / Cursor
Add to your .vscode/mcp.json (or user settings):
{
"servers": {
"memora": {
"command": "npx",
"args": ["-y", "memora-mcp"],
"env": {
"STORAGE_TYPE": "json"
}
}
}
}Environment Variables
| Variable | Required | Default | Description |
| --------------------- | ---------------------- | ------- | ----------------------------------- |
| STORAGE_TYPE | No | http | http, json, or markdown |
| SAVE_PROMPT_API_URL | If STORAGE_TYPE=http | — | API base URL |
| API_KEY | If STORAGE_TYPE=http | — | Sent as x-api-key header |
| API_TIMEOUT | No | 10000 | HTTP request timeout in milliseconds |
API Contract
When using STORAGE_TYPE=http, your API must implement:
| Method | Path | Description |
| -------- | ----------------------- | ---------------------------------------- |
| POST | /knowledge-items | Create item |
| GET | /knowledge-items/:id | Get by ID (404 if not found) |
| GET | /knowledge-items | List with filters (see query params below) |
| PATCH | /knowledge-items/:id | Partial update |
| DELETE | /knowledge-items/:id | Delete |
List query parameters:
| Parameter | Type | Description |
| --------- | ------ | -------------------------------------------- |
| type | string | Filter by prompt, memory, or plan |
| tags | string | Comma-separated tags (ALL must match) |
| query | string | Free-text search across title, summary, content, and tags |
| limit | number | Max items to return (1–100) |
| offset | number | Items to skip for pagination |
| orderBy | string | createdAt, updatedAt, or title |
KnowledgeItem schema:
{
"id": "uuid",
"type": "prompt | memory | plan",
"title": "string",
"summary": "string (max 500 chars, optional) — shown in list views",
"content": "string (markdown, JSON, or plain text)",
"tags": ["string"],
"version": "string",
"createdAt": "ISO8601",
"updatedAt": "ISO8601"
}List and search responses omit
contentfor context efficiency. Useget_*_by_idto fetch the full content of a specific item.
Development
npm install
npm run build
npm testLicense
MIT
