Anamnesis MCP
Integrates with GitHub Copilot agents to enable long-term memory recall and storage of significant learnings, patterns, and decisions across development sessions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Anamnesis MCPRecall how we solved the Lambda cold-start issue."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Anamnesis MCP
"Learning is not acquiring new knowledge. It is recollecting what was already known."
— Plato
Anamnesis is a Model Context Protocol (MCP) server that gives AI coding agents persistent, traceable memory across all your projects and sessions.
Not summaries. Not lossy compression. Cue-pointer records that link back to the full original context — the conversations, decisions, and breakthroughs you already had — so your agent can recollect them when they matter.
The Problem
Every AI agent session starts cold. Your agent has no memory of:
The Lambda cold-start issue you debugged together last week
The architectural decision you made in a different project that applies here
The pattern that worked in CutIndex that would save two hours right now
The conversation yesterday where you figured out exactly this problem
Claude Code can search your local session files — but it searches blind, without knowing what's inside. What's missing is an index of meaning: lightweight cue records that fire when context is similar and point the agent back to the full original artifact.
That is Anamnesis.
Related MCP server: Memory MCP
How It Works
Anamnesis does not store summaries of your conversations. It stores cue vectors that point at full traceable artifacts.
Memory record = {
cue_vector: embedding of "what this context felt like"
context_tags: ["aws-lambda", "cold-start", "python", "2026-03"]
project: "CutIndex"
artifact_type: "conversation" | "diff" | "trace" | "decision"
artifact_ptr: path to full original → ~/.claude/sessions/uuid.jsonl
outcome: "solved" | "eureka" | "abandoned" | "partial"
summary: "Solved Lambda cold-start by increasing reserved concurrency"
}The vector is not the memory. The vector is the trigger that tells the agent where to look. The full conversation is preserved, untouched, on your machine.
When similar context fires in a new session, Anamnesis surfaces the cue and fetches the original artifact. The agent recollects — it does not guess.
The Memory SDLC
Memories in Anamnesis go through a lightweight review process before they become trusted context — exactly like code changes go through a PR review before they merge.
Agent detects significant event (Eureka, decision, pattern)
→ writes proposed memory to pending/ queue
Reviewer agent scans pending/ (scheduled or on-demand)
→ checks for secrets, evaluates quality, flags duplicates
→ proposes accept / modify / reject
Human reviews (one-click in most cases)
→ accepts → memory promoted to confirmed/ store
→ rejects → discarded
Periodic maintenance agent
→ scans confirmed/ for staleness and redaction needsThis means Anamnesis memories are earned, not automatic. The confirmed store is a curated record of what you and your agent have genuinely learned together — not a dump of everything that was ever said.
Security: The Moral Compass
Agents encounter secrets in conversation. Anamnesis strips them before they reach the memory store.
Fast redaction runs at write time using pattern matching:
REDACT_PATTERNS = [
r"(api_key|secret|password|token|credential)\s*[=:]\s*\S+",
r"[A-Za-z0-9+/]{40,}={0,2}", # base64 blobs
r"[0-9a-f]{32,}", # hex keys
r"aws_\w+\s*=\s*\S+", # AWS credentials
r"(sk|pk|rk)[-_][a-zA-Z0-9]{20,}", # API key prefixes
]Deeper LLM-assisted redaction runs periodically against the confirmed store. The agent's standing instruction in any JARVIS.md or AGENTS.md configuration is explicit: store the shape of what happened, never the values.
MCP Tools
Tool | Description |
| Primary read tool. Called at session start or when context feels familiar. Searches confirmed memories by cue similarity. Returns matched summaries and optionally fetches full artifacts. |
| Primary write tool. Called when the agent solves something significant, recognises a pattern, or makes a non-obvious decision. Writes to pending queue for review. |
| Lightweight keyword + tag search. Faster than recall for when you know what you're looking for. |
| Returns pending memory queue for human review. |
| Human accepts, rejects, or edits a pending memory. |
| Usage overview: memories by project, by outcome, recent activity, top tags. |
Tool Descriptions (Engineered for Agent Triggering)
The descriptions below are crafted so that a properly configured agent reaches for the right tool at the right moment — not only when explicitly instructed.
anamnesis_recall
Use this tool at the start of any non-trivial problem, and whenever the current context feels familiar — a similar error, a similar architecture pattern, a similar library issue. This is your long-term memory across all projects. Do not rely only on training data when you may have directly relevant experience stored here.
anamnesis_remember
Use this tool when you solve something that took real effort, discover a pattern that wasn't obvious, make an architectural decision with non-obvious reasoning, or find a fix that contradicted what documentation said. Do not use for routine work. Set eureka_flag=true if this is something the broader developer community would benefit from knowing.
Installation
Requirements
Python 3.11+
uv(recommended) orpipOpenAI API key (for remote embeddings) OR Ollama running locally (for private local embeddings)
Install
# Via uv (recommended)
uv tool install anamnesis-mcp
# Via pip
pip install anamnesis-mcpConfigure in Claude Code
Add to ~/.claude/settings.json:
{
"mcpServers": {
"anamnesis": {
"command": "uvx",
"args": ["anamnesis-mcp"],
"env": {
"EMBEDDING_MODEL": "text-embedding-3-small",
"OPENAI_API_KEY": "sk-...",
"ANAMNESIS_STORE": "~/.anamnesis"
}
}
}
}Configure in GitHub Copilot (.agent.md)
Create ~/.config/github-copilot/agents/jarvis.agent.md:
---
name: jarvis
description: Personal developer context engine with persistent memory
tools:
- anamnesis_recall
- anamnesis_remember
- anamnesis_search
---
You are a persistent developer assistant with access to long-term memory
across all projects via Anamnesis.
Before starting any non-trivial problem, call anamnesis_recall with the
current context. When you solve something significant or discover a
non-obvious pattern, call anamnesis_remember. Never store secrets,
credentials, or proprietary business logic in memories.File Structure
~/.anamnesis/
├── config.json # Embedding model, API keys, optional AIOverflow connection
├── memories.db # SQLite — all memory records and cue vectors
├── artifacts/ # Full original artifacts (Markdown, preserved verbatim)
│ ├── [uuid].md
│ └── ...
├── pending/ # Memory PRs awaiting human review
│ ├── [uuid].json
│ └── ...
└── exports/ # Human-readable exportsAll data is local. Nothing leaves your machine unless you configure a hosted sync (see Roadmap).
Roadmap
Phase 1 — Core MCP (current)
Repo setup and BUSL 1.1 licence
SQLite memory store with cue-pointer schema
Embedding pipeline (remote: OpenAI, local: Ollama/nomic-embed-text)
anamnesis_recalltool with cue similarity searchanamnesis_remembertool with redaction at write timeanamnesis_searchkeyword + tag searchMemory SDLC: pending → review → confirmed lifecycle
anamnesis_reviewandanamnesis_confirmtoolsClaude Code session ingestion (
~/.claude/JSONL parser)CLI review interface (Rich terminal UI)
PyPI publish as
anamnesis-mcpSubmit to MCP registries (mcp.so, pulsemcp.com, awesome-mcp-servers)
Phase 2 — Enriched Sources
claude.ai conversation export ingestion (JSON dump parser)
Git diff and commit message ingestion
Local Ollama embedding support (fully private, no API cost)
anamnesis_statstoolWeb review UI (lightweight local server)
Periodic maintenance agent (staleness detection, deep redaction)
Phase 3 — Hosted Sync
Encrypted cloud sync across devices (hosted service, commercial licence)
Team/shared memory namespace
AIOverflow MCP integration (Eureka flag → community post draft)
Cross-device review interface
Architecture
The Cue-Pointer Record (Schema)
@dataclass
class MemoryRecord:
id: str # UUID
cue_vector: list[float] # 1536-dim embedding (text-embedding-3-small)
# or 768-dim (nomic-embed-text local)
context_tags: list[str] # Technology and domain tags
project: str # Project name (auto-detected from cwd)
project_path: str # Absolute path to project root
artifact_type: str # conversation | diff | trace | decision | note
artifact_ptr: str # Pointer to full original artifact
summary: str # 1-3 sentences, human-readable, no secrets
outcome: str # solved | eureka | abandoned | partial
eureka_flag: bool # True = community-worthy, triggers AIOverflow draft
status: str # pending | confirmed | archived
redacted: bool # True if redaction was applied
created_at: datetime
confirmed_at: datetime | NoneArtifact Pointer Format
file:///home/user/.anamnesis/artifacts/uuid.md # stored locally
claude-code:///session/uuid # Claude Code JSONL session
git:///path/to/repo@commitHash # git commit reference
aioverflow:///post/id # published community postTech Stack
Component | Choice | Rationale |
MCP server | Python + FastMCP | Fastest to build, native to Claude Code ecosystem |
Memory store | SQLite + sqlite-vss | Zero dependencies, local-first, portable |
Remote embeddings | OpenAI text-embedding-3-small | $0.02/million tokens — effectively free |
Local embeddings | nomic-embed-text via Ollama | Fully private, no API cost |
Vector search | sqlite-vss or numpy cosine | Lightweight, no external DB required |
Redaction | Python regex + scheduled LLM pass | Fast at write time, deep on schedule |
CLI | Rich (Python) | Clean terminal UI for memory review |
Licence
Anamnesis MCP is licensed under the Business Source License 1.1 (BUSL-1.1).
You may:
Use Anamnesis freely for personal use and development
Self-host Anamnesis for non-commercial purposes
Read, modify, and contribute to the source code
Use Anamnesis internally within your organisation
You may not (without a commercial licence):
Offer Anamnesis as a hosted or managed service to third parties
Embed Anamnesis in a commercial product you sell or license to others
Use Anamnesis to build a competing offering
Change Date: 2030-03-15
Change License: Apache License 2.0
After the Change Date, this software will be available under Apache 2.0.
For commercial licensing enquiries: [contact details]
See LICENSE for full terms.
Why "Anamnesis"?
In Platonic philosophy, anamnesis is the doctrine that learning is not the acquisition of new knowledge but the recollection of what the soul already knew. The knowledge was always there — it needed only the right context to surface it.
Your agent already spoke to you about this. The conversation happened. The solution was found. Anamnesis gives it back.
Contributing
Contributions are welcome under the BUSL terms above. Please open an issue before submitting a PR for significant changes.
A Contributor Licence Agreement (CLA) will be required for contributions — this is standard practice for BUSL projects and protects both contributors and the project. Details in CONTRIBUTING.md (coming soon).
Built by Arek Kulpa · Part of the SDLC.AI developer tooling ecosystem
Available Tools
7 toolsanamnesis_create_memoryB
Store a new memory that you have crafted from reading a source or from the current conversation. The summary should be 2-3 focused sentences emphasizing keywords for future recollection. Include relevant technology names, pattern types, and problem descriptions. If source_id is provided, the source chunk will be marked as processed.
| Name | Required | Description | Default |
|---|---|---|---|
| outcome | No | solved | |
| project | Yes | ||
| summary | Yes | ||
| source_id | No | ||
| artifact_ptr | No | ||
| context_tags | Yes | ||
| project_path | No | ||
| artifact_type | No | note |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It usefully discloses a side effect: providing source_id marks the source chunk as processed. However it says nothing about permissions, whether existing memories are overwritten, deduplication, or mutation scope for the remaining parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core action and the format requirement. Mostly every sentence earns its place, though the keyword/technology-name guidance is somewhat list-like and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with 0% schema coverage and no annotations, the description is thin: it explains summary content and one side effect but leaves most parameters and the overall mutation model unexplained. An output schema exists, so return values need not be covered, but the input contract is largely unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 8 parameters, so the description must compensate, but it only addresses summary (format guidance) and source_id (processed-marking side effect). The six other parameters (outcome, project, artifact_ptr, context_tags, project_path, artifact_type) get no explanation at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Store a new memory") and clarifies the two sources it can come from (reading a source or the current conversation). An agent can distinguish it from the read-oriented siblings (recall, search, fetch_source), though it doesn't name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage context (after crafting a memory from a source or conversation), which frames when to call it, but never states when NOT to use it or how it differs from sibling write paths like split_source. The condition for providing source_id is given, which is helpful, but overall usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
anamnesis_fetch_sourceA
Read the raw text of a source chunk by its ID. Returns the actual conversation or plan text from the file at the registered line range. After reading and understanding the content, call anamnesis_create_memory to store a summary as a memory.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It reveals useful behavior — that the returned text is the raw chunk from the file at the registered line range and that the intended follow-up is create_memory — but it says nothing about permissions, whether fetching is side-effect free, or handling of invalid source IDs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences that are front-loaded with the core action, followed by the return payload and the next-step directive. No filler, though the workflow sentence is somewhat tangential to defining the tool itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be spelled out, yet the description still characterizes the content helpfully. For a one-parameter read tool with no annotations, the description covers what it does, what comes back, and the intended follow-up, leaving only minor gaps in IDs/permissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter, so the description must compensate. It only implies that source_id identifies a 'source chunk' and mentions the 'registered line range', adding modest meaning without explaining ID format or how a chunk ID is obtained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read the raw text of a source chunk by its ID', and clarifies the return is actual conversation or plan text from a registered line range. It is clear what the tool does, though it never names the siblings (recall/search) it might be confused with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through the pipeline hint: read the content, then call anamnesis_create_memory to store a summary. There is no explicit statement of when to choose this over anamnesis_recall or anamnesis_search, so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
anamnesis_pingA
Quick health check — returns server status and whether the embedding model is loaded. Use this to verify the MCP server is running before calling heavier tools like anamnesis_recall.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It does disclose the operation's nature (read-only, lightweight, 'quick') and its return content, but since an output schema already exists, the return description adds limited value; there is no explicit statement about side effects, auth, or rate limits, though a ping implies none.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the purpose and followed by the routing guidance. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-argument health check with an output schema present, the description covers everything an agent needs: what it does, what it returns, and when to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('health check') and enumerates exactly what it returns: server status and embedding-model load state. An agent can distinguish it from anamnesis_recall/search/fetch_source purely from the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit condition ('before calling heavier tools') and names the sibling that condition applies to (anamnesis_recall). This is exactly the when-to-use routing guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
anamnesis_recallA
Search your long-term memory by semantic similarity. Use this at the start of any non-trivial problem, when the current context feels familiar, or when the user asks what you remember about a topic. Pass a natural-language description of what you're working on or looking for.
| Name | Required | Description | Default |
|---|---|---|---|
| cue | Yes | ||
| top_k | No | ||
| project | No | ||
| threshold | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It implies a read-only recall operation and supplies usage context, but never explicitly confirms no side effects, nor does it explain ranking, scoping, or result-volume behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, then triggers, then the call pattern. Each sentence carries distinct information and nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values need not be described. Still, for a four-parameter tool with no annotations and no schema descriptions, the definition leaves the numeric parameters and the overlap with anamnesis_search unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, yet it only explains cue (natural-language query). top_k, project, and threshold — including what a 0.3 threshold means or how project scopes results — are left entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) plus resource (long-term memory) and mechanism (semantic similarity), which is more than a restatement of the name. However, it never distinguishes itself from the sibling anamnesis_search, leaving the agent to guess which search flavor applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives three concrete trigger conditions — start of a non-trivial problem, context feels familiar, user asks what you remember — which is unusually actionable. It omits when NOT to use it and never names anamnesis_search as the alternative for keyword/other lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
anamnesis_scan_sourcesA
Discover Claude session and plan files that have not yet been imported into Anamnesis. Returns a paginated list of files with their paths, types, projects, and line counts. Use this as the first step when importing the user's conversation history into memory. Call again with offset to get more.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It reveals the return fields (paths, types, projects, line counts), the paginated nature, and the offset continuation pattern, but says nothing about permissions/auth needs, rate limits, or whether the scan has any side effects on the filesystem.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler: what it discovers, what it returns, and how to page. The scope constraint and first-step guidance are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only scan with an output schema present, the description covers purpose, pagination, and workflow position adequately. Minor gaps remain around read-only safety guarantees and the handoff to fetch_source, but nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for both parameters. It explains the offset continuation pattern ('Call again with offset to get more'), which gives real semantics for `offset`, but `limit` is never mentioned and its default of 20 is left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Discover') on a specific resource ('Claude session and plan files that have not yet been imported into Anamnesis'), with a scope filter (not-yet-imported) that separates it from sibling tools like anamnesis_fetch_source and anamnesis_split_source. An agent knows exactly what this returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions the tool as 'the first step when importing the user's conversation history into memory' and explains the pagination follow-up ('Call again with offset to get more'). It gives clear usage context but does not name the downstream alternative (e.g. fetch_source) or state when NOT to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
anamnesis_searchB
Keyword and tag search across memories. Faster than recall when you know specific terms to search for. Supports filtering by tags and project.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| limit | No | ||
| query | No | ||
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions filtering capabilities, which is useful, but doesn't describe whether this is a read-only operation, how results are ordered, pagination behavior, or any rate limits. For a search tool, basic behavioral traits are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three succinct sentences with no filler. The purpose is front-loaded, the efficiency comparison follows, and filtering details close. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so returning values needn't be described. However, with 4 parameters at 0% schema coverage, the description only partially documents the interface. For a search tool with no annotations, more behavioral context (e.g., result ordering, empty query handling) would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions 'filtering by tags and project' but doesn't explain the 'limit' parameter, the 'query' behavior (e.g., whether empty query returns all), or how tags are combined (AND/OR). Only 2 of 4 parameters get any semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Keyword and tag search across memories') and distinguishes from the sibling recall tool by noting it's 'Faster than recall when you know specific terms to search for.' This gives a clear functional boundary, though it could be more explicit about the exact difference from recall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear when-to-use condition ('when you know specific terms to search for') that contrasts with recall. It doesn't state when not to use it, but the comparative framing gives good context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
anamnesis_split_sourceA
Register a source file in the Anamnesis database, split into chunks by line range. Call this after anamnesis_scan_sources to break a large file into manageable pieces for reading and memory creation. Each chunk becomes a source record that can be fetched and processed into a memory.
| Name | Required | Description | Default |
|---|---|---|---|
| chunks | Yes | ||
| project | Yes | ||
| file_path | Yes | ||
| file_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that each chunk becomes a source record that can be fetched and processed into a memory, and that it must follow scan_sources. However, it does not cover permissions, idempotency, duplicate handling, error behavior, or other side effects an agent would want for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the action, the second gives the workflow context, and the third explains the outcome. The purpose is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. But for a tool with four required, undocumented parameters and no annotations, the description omits critical operational details: expected parameter formats, chunk object structure, and file_type/project semantics. An agent could not invoke this reliably without inspecting the schema and guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all four required parameters. The description hints that chunks are split by line range, but it never explains the format of chunks, the meaning of file_path, file_type, or project, or expected values. It adds minimal semantic value over an entirely undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Register') and resource ('source file'), plus the key mechanism ('split into chunks by line range'). It also distinguishes this from the sibling scan tool by naming anamnesis_scan_sources as the prerequisite, so an agent can tell what this tool does versus alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit timing and context: 'Call this after anamnesis_scan_sources to break a large file into manageable pieces for reading and memory creation.' This tells the agent when to use it and what workflow it belongs to, though it does not state when not to use it or name other alternatives beyond the prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
anamnesis_create_memory - First observed
anamnesis_fetch_source - First observed
anamnesis_ping - First observed
anamnesis_recall - First observed
anamnesis_scan_sources - First observed
anamnesis_search - First observed
anamnesis_split_source
TDQS
Scored across 7 tools
Each tool has a distinct role in a clear import-then-recall pipeline (scan → split → fetch → create_memory, plus recall/search/ping). The only mild overlap is anamnesis_recall vs anamnesis_search, but the descriptions clearly differentiate semantic vs keyword/tag lookup.
All tools share the anamnesis_ prefix and use a verb_noun pattern (fetch_source, scan_sources, split_source, create_memory). Minor deviations are the single-word ping and recall/search, which are still readable and consistent in style.
Seven tools is well-scoped for a memory store: a coherent import pipeline plus retrieval and a health check, with each tool earning its place and no redundancy.
The ingest-and-retrieve lifecycle is largely covered, but memory lifecycle operations are missing—no update_memory, delete_memory, or fetch_memory-by-id—so agents cannot correct or prune stored memories. These are notable gaps, though the core workflow still functions.
Maintenance
Related MCP Connectors
Persistent cross-session memory shared by Codex, Claude Code, ChatGPT, and other AI agents.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Project memory for coding agents: requirements, decisions, code graph and delivery telemetry.
Knowledge accumulation for AI coding agents. Records decisions, problems, and insights as context.
Related MCP Servers
- AlicenseAqualityCmaintenanceLong-term memory for AI coding assistants. Remembers context once and recalls it across sessions.722MIT
- AlicenseAqualityCmaintenanceGives AI coding agents persistent, evolving knowledge about a codebase, enabling them to store and retrieve observations about architecture, conventions, gotchas, and recent work context.1040 npm2MIT
- AlicenseNot gradedqualityCmaintenanceProvides persistent, searchable memory and knowledge capture for AI-assisted development, enabling agents to retain decisions, bugs, and patterns across sessions and projects.MIT
- AlicenseNot gradedqualityCmaintenancePersistent memory for AI coding tools, enabling AI assistants to store and recall project decisions, conventions, and context across sessions.26 npmMIT