openhandoff-mcp
OpenHandoff
Tragbare, lokal-first Kontextübergaben zwischen KI-Codierungsagenten.
OpenHandoff bewahrt die beständige Projektwahrheit in zwei kleinen Dateien:
CONTEXT.mdfür Menschen und Obsidian;context.jsonfür Agenten, MCP-Adapter und Automatisierung.
Das erste MVP ist bewusst langweilig und überprüfbar: kein Cloud-Konto, keine versteckte Datenbank, und die Schwärzung erfolgt, bevor die Übergabe geschrieben wird. Zukünftige Adapter können Codex-, Claude-Code-, Cursor- und Windsurf-Transkripte lesen, ohne ein herstellerspezifisches Speicherformat zu erzwingen.
OpenHandoff ist für öffentliche Repositorys und Teamübergaben konzipiert: Dateien sind Klartext, der MCP-Server ist abhängigkeitsfrei, und geheimnisartige Werte werden vor der Persistenz geschwärzt.
Skill-Paket
Das Repository enthält drei portable Skills unter skills/:
openhandoff-context— Kontext zwischen Agenten erfassen, wiederherstellen und packen.openhandoff-privacy— Übergaben und Transkripte prüfen, bevor sie geteilt werden.openhandoff-release— getestete, dokumentierte, reproduzierbare Releases vorbereiten.
Kopieren Sie ein Skill-Verzeichnis in Ihr Codex-Skills-Verzeichnis oder installieren Sie es mit dem Codex-Skill-Installer über dieses GitHub-Repository. Die Skills sind bewusst schmal gehalten, damit sie unabhängig verwendet werden können.
Related MCP server: Context Sync MCP
Schnellstart
python -m venv .venv
source .venv/bin/activate
pip install -e .
openhandoff init .context --title "My project"
openhandoff capture .context \
--title "My project" \
--decision "Use SQLite" \
--todo "Add the MCP adapter" \
--notes "The next agent should run the test suite first."
openhandoff show .contextFür eine normale Benutzerinstallation verwenden Sie pipx install openhandoff, nachdem ein Release veröffentlicht wurde. Entwicklungsabhängigkeiten und Prüfungen sind in CONTRIBUTING.md dokumentiert.
Erstellen Sie einen kompakten Kontextausschnitt für eine bestimmte Aufgabe. Übereinstimmende Entscheidungen, TODOs und Notizzeilen werden zuerst behalten, dann wird das Ergebnis deterministisch auf das angeforderte Budget gekürzt:
openhandoff pack .context --task "MCP adapter" --max-chars 4000MCP-Server
Der abhängigkeitsfreie MCP-Server stellt load_handoff, save_checkpoint, search_handoff und pack_context über stdio bereit:
openhandoff-mcpFür eine lokale Agentenkonfiguration verwenden Sie den Befehl openhandoff-mcp ohne Netzwerkzugriff. Der Server liest und schreibt nur den vom Agenten bereitgestellten Übergabepfad.
Beispielkonfiguration für Codex:
[mcp_servers.openhandoff]
command = "openhandoff-mcp"
args = []Beispielkonfiguration für Claude Desktop:
{
"mcpServers": {
"openhandoff": {
"command": "openhandoff-mcp",
"args": []
}
}
}Agentenereignisse erfassen
openhandoff-hook akzeptiert ein JSON-Ereignis (oder Klartext) auf stdin, schwärzt zugangsdatenartige Werte und hängt das Ergebnis an .context/events.jsonl an:
printf '%s\n' '{"type":"agent_message","message":"finished"}' \
| openhandoff-hook --path .contextCodex kann seine notify-Nutzlast direkt an den Hook senden. Fügen Sie dies zu Ihrer Codex-Konfiguration hinzu (der Befehl empfängt die JSON-Nutzlast auf stdin):
notify = ["openhandoff-hook", "--path", ".context"]Für Claude Code binden Sie dieselbe ausführbare Datei in den Befehlshook in Ihren Einstellungen ein. Die genaue Einstellungsdatei kann je nach Claude-Code-Version variieren; dies ist ein illustratives Beispiel:
{
"hooks": {
"afterTurn": [
{"command": "openhandoff-hook --path .context"}
]
}
}Transkript importieren
Codex- und Claude-Code-JSONL-Ereignisströme können in dasselbe Format importiert werden:
openhandoff import-transcript ./rollout.jsonl .context --title "Project handoff"Roadmap
Cursor- und Windsurf-Transkriptadapter.
Datei- und Commit-Zitate in aufgabenspezifischen Kontextpaketen.
Obsidian- und GitHub-Synchronisierung mit Geheimnisprüfung und Review-Gates.
Projektstatus
Lizenz: MIT; siehe LICENSE.
Sicherheitsmeldungen: siehe SECURITY.md.
Beiträge: siehe CONTRIBUTING.md.
Versionshinweise: siehe CHANGELOG.md.
Architektur: siehe docs/architecture.md.
Release-Prozess: siehe docs/releasing.md.
Das Projekt befindet sich in einem frühen Stadium und freut sich über Feedback aus der Praxis, Integrationen und Verbesserungen der Dokumentation. Bitte committen Sie keine Chat-Transkripte, Anmeldedaten oder private Obsidian-Daten.
Available Tools
4 toolsload_handoffC
Load the current project handoff shared between coding agents.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | .context |
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 merely states the action without indicating whether the operation is read-only, what it returns, whether it modifies any state, or if there are any side effects. The description offers no behavioral context beyond the verb.
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?
The description is a single, concise sentence with no redundancy. It is appropriately short for a simple tool, though it lacks any structural formatting or additional clarity that could elevate it to a 5.
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 tool with no output schema and no annotations, the description is incomplete. It doesn't state what the loaded handoff looks like, whether it returns structured data or a raw string, or how the 'path' parameter interacts with the concept of 'current project'. The simplicity of the tool (one optional param) lowers the bar, but the description still misses essential operational details.
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 only parameter 'path' has a default but no description, and schema description coverage is 0%. The description does not explain what 'path' refers to (e.g., directory or file path, default location). With zero parameter documentation in both schema and description, the agent is left to infer meaning solely from the tool name.
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 clearly states a specific verb ('load') and resource ('current project handoff'), and the context of sharing between coding agents. This distinguishes it from sibling tools like save_checkpoint (save), search_handoff (search), and pack_context (pack), even though the siblings' behaviors are inferred from names.
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?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention conditions (e.g., 'use when you need the latest handoff; use search_handoff for querying historical ones') or any exclusions. An agent receives no routing help beyond the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pack_contextC
Build a compact, task-focused context slice for the next agent.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | .context | |
| task | Yes | ||
| maxChars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose all behavioral traits. It only says it 'builds' a context slice, but doesn't explain side effects (e.g., whether it reads/writes files, creates a file at the path, or truncates context based on maxChars). It offers no detail on permissions, reversibility, or data handling, leaving the agent with little understanding of what will happen.
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?
The description is a single vague sentence. While concise, it's under-specified and doesn't earn its place by conveying substantive information. It's not a tautology, but it's closer to a label than a useful explanation. A concise description should still be informative.
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 tool with three parameters, no output schema, and no annotations, the description is drastically incomplete. It doesn't explain the function's behavior, parameters, return value, or when to use it. An agent cannot reliably invoke this tool correctly based on the provided information.
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 coverage is 0%, and the description mentions none of the three parameters (task, path, maxChars). It provides no meaning beyond the bare type/default in the schema. The agent gets no explanation of what 'task' is, what default path '.context' means, or how maxChars is used. This is a critical gap.
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 provides a clear verb ('build') and a resource ('context slice'), but it's vague about what a 'context slice' actually is. It doesn't name specific actions or fields, and it doesn't differentiate from sibling tools like load_handoff or save_checkpoint. While it's not a tautology, it lacks the specificity to distinguish it from 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?
No guidance is given on when to use this tool versus siblings. It doesn't mention prerequisites, scenarios, or exclusion conditions. The description only states what it does, not when to use it, leaving the agent to infer appropriateness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_checkpointB
Save durable project decisions, TODOs, and notes for the next agent.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | .context | |
| notes | No | ||
| title | Yes | ||
| todos | No | ||
| decisions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full behavioral burden. It only says 'durable', implying persistence, but does not disclose side effects like overwriting behavior, file creation, directory handling, or error conditions. This is insufficient 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?
The description is a single, front-loaded sentence with no filler. It immediately states the action and the content type, making it efficient and easy to parse.
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 tool with 5 parameters, no annotations, and no output schema, the description is inadequate. It does not explain the purpose of 'title' and 'path', how todos/decisions are used, or what happens on invocation. An agent would lack critical context to use the tool correctly.
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. It hints at 'decisions', 'TODOs', and 'notes' which map to the 'decisions', 'todos', and 'notes' parameters, but it does not explain the required 'title' or the 'path' default, nor the format of TODOs/decisions arrays. The meaning of parameters is largely left to inference.
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 uses a specific verb ('Save') and identifies the resource ('durable project decisions, TODOs, notes'), clearly distinguishing it from siblings like load_handoff, search_handoff, and pack_context. It conveys a persist-for-later purpose without ambiguity.
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?
The description gives no guidance on when to use this tool versus alternatives. It mentions saving for the next agent but does not indicate when to choose save_checkpoint over load_handoff or search_handoff, nor does it state any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_handoffB
Search decisions, TODOs, and notes in the current handoff.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | .context | |
| query | 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 conveys that this is a search/read operation and scopes it to 'the current handoff,' but it does not disclose what happens on no matches, how results are shaped, whether the path parameter changes the search target, or whether 'current' is tied to the path default. These are material gaps for an unannotated tool.
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?
A single sentence that opens with the action verb and packs in the scope and target content. It is efficient and front-loaded, though its brevity borders on under-specification given the missing parameter context.
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?
With two parameters, no output schema, and zero annotations, the description leaves an agent without the semantics of 'path' and 'query,' the meaning of 'current handoff,' and expectations for return values or empty-result behavior. This is insufficient for an agent to call the tool correctly with confidence.
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—but it never mentions either parameter. It does not clarify that 'query' is the search term or explain what 'path' (defaulting to '.context') controls, nor what 'current handoff' means relative to that path. The description adds essentially no meaning beyond the bare schema property names.
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 ('Search'), a resource ('the current handoff'), and the objects of the search ('decisions, TODOs, and notes'). This clearly distinguishes it from its siblings load_handoff, save_checkpoint, and pack_context, which cover different operations on the same artifact.
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?
The phrase 'in the current handoff' provides useful scoping context, implying this searches the active handoff rather than historical ones. However, it gives no explicit guidance on when to prefer this over load_handoff for finding content, and does not name alternatives or call out exclusions—an agent must infer the division of labor.
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.
4 tool updates
v0.1.0- First observed
load_handoff - First observed
pack_context - First observed
save_checkpoint - First observed
search_handoff
TDQS
Scored across 4 tools
Each tool targets a distinct action: loading the handoff, saving new checkpoint data, searching within it, and packing a context slice. There is no overlap or ambiguity between these four operations.
All tools follow a clear verb_noun pattern (load_handoff, save_checkpoint, search_handoff, pack_context). The only minor inconsistency is the use of different nouns (handoff, checkpoint, context) when referring to related concepts, but the pattern remains uniform and predictable.
With only 4 tools, the server is tightly scoped for its purpose of managing agent handoffs. Every tool serves a distinct, necessary function and none feel superfluous.
The set covers core lifecycle operations: load, save, search, and context packing, which likely handles most workflows. A minor gap is the lack of a clear delete/reset operation for the handoff, but this may not be needed in the intended use case.
Maintenance
Related MCP Connectors
Shared memory for coding agents. Stop re-explaining your codebase every session.
- OneLoreOAuthai.onelore
Shared project context for AI agents and teams: docs, tasks, and messages that stay current.
Project memory, semantic code search, and grounded agent context.
Persistent memory for AI agents. Search, store, and recall across sessions.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides AI coding assistants with persistent project memory to retain architectural decisions, code patterns, and domain knowledge across sessions. It stores data locally in a SQLite database, allowing agents to remember, recall, and manage project-specific context using full-text search.4 npmApache 2.0
- AlicenseAqualityDmaintenanceEnables AI coding agents to persist structured long-term memory (gotchas, architecture, API notes) in a .context folder and sync across devices and agents via Git.45 npm20MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding assistants to store and retrieve project-aware context as plain Markdown files locally, with no cloud or vector database required.1MIT
- AlicenseBqualityCmaintenanceProvides persistent local memory for AI coding sessions, enabling agents to save and retrieve project context across different tools and sessions.16MIT