handoff-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HANDOFF_VAULT | No | Path to the vault directory. Defaults to ~/.handoff-mcp/vault. | |
| HANDOFF_PROJECT | No | Project name for scoping memory. | |
| HANDOFF_EMBEDDER | No | Embedding backend: hashing, local, or openai. Default: hashing. | |
| HANDOFF_SEMANTIC | No | Set to 1 to enable semantic recall layer. Default: not set (off). | |
| HANDOFF_AUTO_SYNC | No | Set to 1 to automatically sync memory across devices. | |
| HANDOFF_LLM_MODEL | No | Set to enable the consolidate tool (e.g., gpt-4o-mini). | |
| HANDOFF_EMBED_MODEL | No | Model name for embeddings. Default: Qwen/Qwen3-Embedding-0.6B for local backend. | |
| HANDOFF_EMBED_API_KEY | No | API key for OpenAI-compatible embedding endpoint. | |
| HANDOFF_EMBED_BASE_URL | No | Base URL for OpenAI-compatible embedding endpoint. | |
| HANDOFF_EMBED_TRUST_REMOTE_CODE | No | Set to 1 to trust remote code for embedding models that require it. |
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
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| log_eventA | Record a progress signal for the current work session. Call this proactively as work happens — every time you set or change the goal, make a non-trivial decision (and why), hit a dead-end worth not repeating, touch an important file, surface an open question, or decide the next step. Keep each event ATOMIC and concise: one item per call, 1-2 sentences. Log several small events rather than dumping a whole session summary into one — the brief is meant to stay skimmable. Reference durable notes inline as [[Entity]] so they link in the brief's "Related knowledge". This is how the next session inherits your context. Returns the new event
id (use it later in |
| get_briefA | Load the prioritised hand-off brief for a project. Call this at the START of a session, before doing anything else, to learn where the previous session left off: the goal, the next step, key decisions and their rationale, dead-ends already ruled out, and open questions. Retracted decisions are omitted. This is a curated brief, not a raw context dump. |
| search_memoryA | Search memory across sessions and projects. Call this whenever the user references past work, a prior decision, or
ANOTHER project — e.g. "in one of my projects we did X", "how did we solve
Y before", "what did we decide about Z", "last time". Use scope='all'
(the default) to recall across every project; scope='current' to stay in
this one. Returns matching past events with their project, content, and
id — the id can be fed straight into log_event's |
| checkpointA | Close out the current session and produce its hand-off brief. Call this at the END of a session, or when the user signals they're stopping or switching context. It finalises the session note and returns the brief the next session will read. |
| note_entityA | Record durable, long-lived project knowledge on an entity note. Use this (rather than log_event) for facts that outlive a single session: the system's architecture, coding conventions, what a component does, or standing open questions. These notes are linked from sessions via [[wiki-links]] and form the project's knowledge graph. Returns the entity name. |
| consolidateA | Compress old finished sessions into durable entity notes ('sleep'). Call this when a project's session log has grown large and you want to reclaim space while keeping the lasting knowledge: it distils old sessions into the durable entity notes and archives the originals. Requires a configured LLM (HANDOFF_LLM_MODEL); it is the only step that uses one. |
| syncA | Sync this device's memory vault with its private git remote. Use when the user wants their memory on another device, or to push/pull now. If the vault isn't configured yet, this returns setup instructions — relay them and ask the user for a private repo URL, then call again with remote_url. Once configured, a bare call pulls remote work, commits local changes, and pushes. Safe to call repeatedly. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| resume | A ready-to-send prompt that primes a new session with the brief. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| brief_resource | The current project's hand-off brief, as a readable MCP resource. |
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose: checkpoint ends sessions, consolidates compresses old sessions, get_brief loads the brief, log_event records progress, note_entity stores durable knowledge, search_memory searches across projects, and sync synchronizes with git. No overlap in functionality.
All tool names use a consistent snake_case pattern (e.g., get_brief, log_event, note_entity), which is predictable and easy to understand. No mixing of styles.
7 tools is well-scoped for the server's purpose of managing handoff briefs and memory. Each tool covers a necessary operation without being excessive or insufficient.
The tool set covers the full lifecycle: starting a session (get_brief), recording progress (log_event, note_entity), searching memory (search_memory), ending sessions (checkpoint), compressing old sessions (consolidate), and syncing (sync). No obvious gaps.