ihmt-memory
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| IHMT_HOME | No | Selects the memory store ($IHMT_HOME/ihmt_memory), created on first use. Point every project at one shared directory for a single cross-project memory, or give each project its own. Defaults to ~/.ihmt. | |
| ANTHROPIC_API_KEY | No | Optional API key used only when the AnthropicSummarizer backend is selected and the anthropic package is installed. Every failure path falls back to the heuristic backend. | |
| IHMT_PROJECTS_DIR | No | Directory for the per-project code index stores used by ProjectIndex (default $IHMT_HOME/ihmt_projects). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_memoryA | Search the user's long-term memory (IHMT): decisions, setup, preferences, people, earlier sessions. Use several distinctive words, not a bare name. Returns the best memory with its date
(plus one line per other match). AMBIGUOUS means several memories fit equally: ask the
user or call again with Args: query: What to look for, in any language. clue: Distinguishing detail, only after an AMBIGUOUS reply. detail: "compact" (default) or "full" (adds ids, tree paths and excerpts). |
| save_memoryA | Store durable knowledge in the user's long-term memory (IHMT). Save decisions and why, setup, preferences, people and projects, procedures. Not transient chat, not secrets. Write it to make sense months later, and start with the date ("2026-02-03: ...") when it belongs to one. Reports how it was filed and any contradiction with an earlier memory — relay that notice. Args:
content: The text to remember, self-contained.
domain: Leave "general" to let IHMT classify it, or e.g. "software.java".
content_type: "auto" (recommended), "code", "narrative", "clinical", "personal",
"process" or "generic".
replaces: When this corrects or updates something saved earlier, a few distinctive
words describing that earlier memory ("RainDesktop version 1.3"). It is then
flagged OUTDATED and searches answer with this one first. If several memories
fit, nothing is flagged and the candidates are listed for |
| mark_outdatedA | Flag one memory as corrected by another, after save_memory listed candidates. The old memory is kept (it was true on its date) but carries an OUTDATED notice, and searches answer with the new one first. Use the ids save_memory or a full search printed. Args: old_id: Id of the memory that is no longer current. new_id: Id of the memory that replaces it. |
| project_mapA | Compact map of a codebase: files with their size in tokens, optionally their symbols and line ranges. Call it before exploring a project instead of listing directories and opening files. Indexes the project on first use and resyncs changed files by checksum on every call. Args: path: Project root directory (absolute). detail: "files" (cheapest) or "symbols" (adds methods/classes with first-last line). subpath: Restrict to a directory inside the project, e.g. "src/main". |
| find_codeA | Find the method or class that answers a question about a codebase; returns only that symbol. Output: "file:first-last Symbol" and its code, instead of whole files. Name the class or
method if you know it ("PedidoJpaMapper aDominio"). AMBIGUOUS lists candidates in different
files: refine the query or pass Args: query: What you are looking for: identifiers plus a few words. path: Project root directory (absolute). scope: "main" (skip tests, default), "test" or "all". subpath: Restrict to a directory inside the project. clue: Extra detail after an AMBIGUOUS reply. max_tokens: Cap on the returned code. |
| read_fileA | Read a text file, remembering what you were given this session. Reading it again returns "UNCHANGED" (a few tokens) or only a unified diff against your earlier copy. Prefer it over re-reading a file you already read in this session. Pass force=true if the earlier copy is no longer in your context (e.g. after a context compaction). With start_line/end_line (e.g. a range from project_map) only those lines are returned. Args: path: Absolute path of the file. force: Return the full content even if it has not changed. start_line: First line to return (1-based); 0 for the whole file. end_line: Last line to return (inclusive); 0 for the end of the file. |
| noteA | Keep something you learned in this session (where a thing lives, what a method does, a result). Session notes are cheap to recall later and survive a context compaction; they vanish when the session ends. Include file:line when relevant. Durable facts belong in save_memory instead. |
| recallA | Search what you kept earlier in this session with note or digest_output (not long-term memory). Cheaper than re-reading files or re-running commands to remember what you already found out. |
| digest_outputA | Condense a long command output (build log, test report) and keep the full text for recall. Returns the first lines, every line that mentions errors, failures, warnings or test totals, and the last lines. The whole output stays queryable with recall(" ...") this session. Args: text: The raw output. label: A short name to recall it by, e.g. "maven-build". |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 9 tools
Tools are largely distinct and descriptions explicitly delineate the tricky boundaries (search_memory vs recall: long-term vs session; note vs save_memory: session vs durable). The pairs digest_output/note and recall/search_memory could still be momentarily confused, so it falls just short of perfect.
Seven of nine tools follow a clear verb_noun snake_case pattern (search_memory, save_memory, mark_outdated, project_map, find_code, read_file, digest_output). The bare 'note' and 'recall' deviate from that pattern but remain readable and unambiguous.
Nine tools is well-scoped: a compact memory lifecycle (search, save, note, recall, mark_outdated) plus a small, focused code-exploration set (project_map, find_code, read_file, digest_output). Each tool earns its place with no filler.
Memory lifecycle is well covered (capture, retrieve across sessions/session, supersede via replaces/mark_outdated), and code exploration has map, symbol lookup and file read. Minor gaps remain: no explicit forgetting/deleting of memories and no way to list or browse stored memories beyond search.