Skip to main content
Glama
api.md12.2 kB
# Mnemex API Reference Complete reference for all MCP tools provided by Mnemex. ## Core Memory Tools ### save_memory Save a new memory to short-term storage. **Parameters:** | Name | Type | Required | Description | |------|------|----------|-------------| | `content` | string | Yes | The content to remember | | `tags` | array[string] | No | Tags for categorization | | `source` | string | No | Source of the memory | | `context` | string | No | Context when memory was created | | `meta` | object | No | Additional custom metadata | **Returns:** ```json { "success": true, "memory_id": "abc-123-def-456", "message": "Memory saved with ID: abc-123-def-456", "has_embedding": false } ``` **Example:** ```json { "content": "The project deadline is December 15th", "tags": ["project", "deadline"], "source": "team meeting", "context": "Q4 planning discussion" } ``` --- ### search_memory Search for memories with optional filters and scoring. **Parameters:** | Name | Type | Required | Default | Description | |------|------|----------|---------|-------------| | `query` | string | No | - | Text query to search for | | `tags` | array[string] | No | - | Filter by tags | | `top_k` | integer | No | 10 | Maximum number of results | | `window_days` | integer | No | - | Only search last N days | | `min_score` | float | No | - | Minimum decay score threshold | | `use_embeddings` | boolean | No | false | Use semantic search | **Returns:** ```json { "success": true, "count": 3, "results": [ { "id": "abc-123", "content": "Project deadline is Dec 15", "tags": ["project", "deadline"], "score": 0.8234, "similarity": null, "use_count": 3, "last_used": 1699012345, "age_days": 2.3 } ] } ``` **Example:** ```json { "query": "deadline", "tags": ["project"], "top_k": 5, "window_days": 7, "min_score": 0.1 } ``` --- ### search_unified Search across STM (JSONL) and LTM (Obsidian vault index) with unified ranking and deduplication. **Parameters:** | Name | Type | Required | Default | Description | |------|------|----------|---------|-------------| | `query` | string | No | - | Text query to search for | | `tags` | array[string] | No | - | Filter by tags | | `limit` | integer | No | 10 | Maximum total results | | `stm_weight` | number | No | 1.0 | Weight for STM results | | `ltm_weight` | number | No | 0.7 | Weight for LTM results | | `window_days` | integer | No | - | Only include STM from last N days | | `min_score` | number | No | - | Minimum STM decay score | | `verbose` | boolean | No | false | Include metadata (IDs, paths) | **Returns:** formatted text block combining STM and LTM results ordered by score. **Example:** ```json { "query": "typescript preferences", "tags": ["preferences"], "limit": 8, "stm_weight": 1.0, "ltm_weight": 0.7, "window_days": 14, "min_score": 0.1, "verbose": true } ``` --- ### touch_memory Reinforce a memory by updating its access time and use count. **Parameters:** | Name | Type | Required | Default | Description | |------|------|----------|---------|-------------| | `memory_id` | string | Yes | - | ID of memory to reinforce | | `boost_strength` | boolean | No | false | Boost base strength | **Returns:** ```json { "success": true, "memory_id": "abc-123", "old_score": 0.4521, "new_score": 0.7832, "use_count": 4, "strength": 1.1, "message": "Memory reinforced. Score: 0.45 -> 0.78" } ``` **Example:** ```json { "memory_id": "abc-123", "boost_strength": true } ``` --- ### observe_memory_usage Record that memories were actively used in conversation for natural spaced repetition. This tool should be called when memories are actually **incorporated into responses**, not just retrieved. Enables natural reinforcement through: - Updates usage statistics (last_used, use_count) - Detects cross-domain usage (via tag Jaccard similarity) - Automatically boosts strength for cross-domain usage - Recalculates review priority for next search **Parameters:** | Name | Type | Required | Default | Description | |------|------|----------|---------|-------------| | `memory_ids` | array[string] | Yes | - | IDs of memories that were used | | `context_tags` | array[string] | No | [] | Tags representing current conversation context | **Returns:** ```json { "reinforced": true, "count": 2, "cross_domain_count": 1, "results": [ { "id": "mem-123", "status": "reinforced", "cross_domain": false, "new_use_count": 4, "new_review_count": 3, "strength": 1.0 }, { "id": "mem-456", "status": "reinforced", "cross_domain": true, "new_use_count": 2, "new_review_count": 1, "strength": 1.1 } ] } ``` **Example:** ```json { "memory_ids": ["mem-123", "mem-456"], "context_tags": ["api", "authentication", "backend"] } ``` **Use Case:** ``` User asks: "Can you help with authentication in my API?" → System searches and retrieves JWT preference memory (tags: [security, jwt, preferences]) → System uses memory to answer question → System calls observe_memory_usage: { "memory_ids": ["jwt-pref-123"], "context_tags": ["api", "authentication", "backend"] } → Cross-domain usage detected (0% tag overlap) → Memory strength boosted: 1.0 → 1.1 → Next search naturally surfaces this memory if in danger zone ``` **Configuration:** ```bash # Enable/disable automatic reinforcement MNEMEX_AUTO_REINFORCE=true # If disabled, returns: { "reinforced": false, "reason": "auto_reinforce is disabled in config", "count": 0 } ``` --- ## Management Tools ### gc Perform garbage collection on low-scoring memories. **Parameters:** | Name | Type | Required | Default | Description | |------|------|----------|---------|-------------| | `dry_run` | boolean | No | true | Preview without removing | | `archive_instead` | boolean | No | false | Archive instead of delete | | `limit` | integer | No | - | Max memories to process | **Returns:** ```json { "success": true, "dry_run": true, "removed_count": 0, "archived_count": 15, "freed_score_sum": 0.4523, "memory_ids": ["mem-1", "mem-2", "..."], "total_affected": 15, "message": "Would remove 15 low-scoring memories (threshold: 0.05)" } ``` **Example:** ```json { "dry_run": false, "archive_instead": true, "limit": 50 } ``` --- ### promote_memory Promote high-value memories to long-term storage. **Parameters:** | Name | Type | Required | Default | Description | |------|------|----------|---------|-------------| | `memory_id` | string | No | - | Specific memory to promote | | `auto_detect` | boolean | No | false | Auto-detect candidates | | `dry_run` | boolean | No | false | Preview without promoting | | `target` | string | No | "obsidian" | Target for promotion | | `force` | boolean | No | false | Force even if criteria not met | **Returns:** ```json { "success": true, "dry_run": false, "candidates_found": 3, "promoted_count": 3, "promoted_ids": ["mem-1", "mem-2", "mem-3"], "candidates": [ { "id": "mem-1", "content_preview": "Important project information...", "reason": "High score (0.82 >= 0.65)", "score": 0.8234, "use_count": 7, "age_days": 5.2 } ], "message": "Promoted 3 memories to obsidian" } ``` **Example - Specific Memory:** ```json { "memory_id": "abc-123", "dry_run": false } ``` **Example - Auto-detect:** ```json { "auto_detect": true, "dry_run": true } ``` --- ### cluster_memories Cluster similar memories for potential consolidation. **Parameters:** | Name | Type | Required | Default | Description | |------|------|----------|---------|-------------| | `strategy` | string | No | "similarity" | Clustering strategy | | `threshold` | float | No | 0.83 | Similarity threshold | | `max_cluster_size` | integer | No | 12 | Max memories per cluster | | `find_duplicates` | boolean | No | false | Find duplicates instead | | `duplicate_threshold` | float | No | 0.88 | Threshold for duplicates | **Returns - Clustering:** ```json { "success": true, "mode": "clustering", "clusters_found": 5, "strategy": "similarity", "threshold": 0.83, "clusters": [ { "id": "cluster-abc-123", "size": 4, "cohesion": 0.87, "suggested_action": "llm-review", "memory_ids": ["mem-1", "mem-2", "mem-3", "mem-4"], "content_previews": [ "Project meeting notes...", "Follow-up on project...", "Project status update..." ] } ], "message": "Found 5 clusters using similarity strategy" } ``` **Returns - Duplicate Detection:** ```json { "success": true, "mode": "duplicate_detection", "duplicates_found": 3, "duplicates": [ { "id1": "mem-1", "id2": "mem-2", "content1_preview": "Meeting scheduled for Tuesday...", "content2_preview": "Tuesday meeting confirmed...", "similarity": 0.92 } ], "message": "Found 3 potential duplicate pairs" } ``` **Example - Clustering:** ```json { "strategy": "similarity", "threshold": 0.85, "max_cluster_size": 10 } ``` **Example - Find Duplicates:** ```json { "find_duplicates": true, "duplicate_threshold": 0.90 } ``` --- ### consolidate_memories Consolidate similar memories using LLM-driven merging (NOT YET IMPLEMENTED). **Parameters:** | Name | Type | Required | Default | Description | |------|------|----------|---------|-------------| | `cluster_id` | string | Yes | - | Cluster ID to consolidate | | `mode` | string | No | "dry_run" | "dry_run" or "apply" | **Returns:** ```json { "success": false, "message": "Consolidation tool is not yet implemented...", "status": "not_implemented", "cluster_id": "cluster-abc", "mode": "dry_run" } ``` --- ## Memory Scoring ### Decay Score Formula ``` score = (use_count ^ beta) * exp(-lambda * (now - last_used)) * strength ``` **Default Parameters:** - `lambda` (λ): 2.673e-6 (3-day half-life) - `beta` (β): 0.6 - `strength`: 1.0 (range: 0.0-2.0) ### Interpretation | Score | Meaning | |-------|---------| | > 0.65 | High value, candidate for promotion | | 0.10 - 0.65 | Active, decaying normally | | 0.05 - 0.10 | Low value, approaching forgetting | | < 0.05 | Will be garbage collected | --- ## Error Responses All tools return errors in this format: ```json { "success": false, "message": "Error description" } ``` Common errors: - Memory not found - Invalid parameters - Database errors - Integration failures (e.g., vault not accessible) --- ## Configuration ### Environment Variables | Variable | Default | Description | |----------|---------|-------------| | `MNEMEX_STORAGE_PATH` | `~/.config/mnemex/jsonl` | JSONL storage directory | | `MNEMEX_DECAY_MODEL` | `power_law` | Decay model (power_law\|exponential\|two_component) | | `MNEMEX_PL_HALFLIFE_DAYS` | `3.0` | Power-law half-life in days | | `MNEMEX_DECAY_LAMBDA` | `2.673e-6` | Exponential decay constant | | `MNEMEX_DECAY_BETA` | `0.6` | Use count exponent | | `MNEMEX_FORGET_THRESHOLD` | `0.05` | Forgetting threshold | | `MNEMEX_PROMOTE_THRESHOLD` | `0.65` | Promotion threshold | | `MNEMEX_PROMOTE_USE_COUNT` | `5` | Use count for promotion | | `MNEMEX_ENABLE_EMBEDDINGS` | `false` | Enable semantic search | | `LTM_VAULT_PATH` | - | Obsidian vault path | ### Tuning Recommendations **Fast Decay** (1-day half-life): ```bash MNEMEX_PL_HALFLIFE_DAYS=1.0 # Or exponential: MNEMEX_DECAY_LAMBDA=8.02e-6 ``` **Slow Decay** (7-day half-life): ```bash MNEMEX_PL_HALFLIFE_DAYS=7.0 # Or exponential: MNEMEX_DECAY_LAMBDA=1.145e-6 ``` **Aggressive Promotion**: ```bash MNEMEX_PROMOTE_THRESHOLD=0.5 MNEMEX_PROMOTE_USE_COUNT=3 ``` **Conservative Forgetting**: ```bash MNEMEX_FORGET_THRESHOLD=0.01 ``` --- ## Maintenance Use the CLI to manage JSONL storage: - `mnemex-maintenance stats` — prints `get_storage_stats()` including active counts and compaction hints - `mnemex-maintenance compact` — compacts JSONL files to remove tombstones and duplicates Optionally specify a path: `mnemex-maintenance --storage-path ~/.config/mnemex/jsonl stats`

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mnemexai/mnemex'

If you have feedback or need assistance with the MCP directory API, please join our Discord server