openhandoff-mcp
OpenHandoff
AI 코딩 에이전트 간의 휴대 가능하고 로컬 우선인 컨텍스트 핸드오프.
OpenHandoff는 지속 가능한 프로젝트 진실을 두 개의 작은 파일에 보관합니다:
사람과 Obsidian을 위한
CONTEXT.md;에이전트, MCP 어댑터, 자동화를 위한
context.json.
첫 번째 MVP는 의도적으로 단순하고 검사 가능합니다: 클라우드 계정이 없고, 숨겨진 데이터베이스가 없으며, 핸드오프가 작성되기 전에 편집(redaction)이 이루어집니다. 향후 어댑터는 벤더별 메모리 형식을 강제하지 않고 Codex, Claude Code, Cursor, Windsurf 트랜스크립트를 읽을 수 있습니다.
OpenHandoff는 공개 저장소와 팀 핸드오프를 위해 설계되었습니다: 파일은 일반 텍스트이고, MCP 서버는 의존성이 없으며, 비밀 형태의 값은 영속화 전에 편집됩니다.
스킬 팩
저장소에는 skills/ 아래에 세 가지 휴대용 스킬이 포함되어 있습니다:
openhandoff-context— 에이전트 간 컨텍스트 캡처, 복구, 패킹.openhandoff-privacy— 공유 전 핸드오프 및 트랜스크립트 감사.openhandoff-release— 테스트되고 문서화된 재현 가능한 릴리스 준비.
스킬 디렉터리를 Codex 스킬 디렉터리에 복사하거나, 이 GitHub 저장소를 사용하여 Codex 스킬 설치 프로그램으로 설치하세요. 스킬은 독립적으로 사용할 수 있도록 의도적으로 좁게 설계되었습니다.
Related MCP server: Context Sync MCP
빠른 시작
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 .context일반 사용자 설치는 릴리스가 게시된 후 pipx install openhandoff를 사용하세요. 개발 의존성 및 검사는 CONTRIBUTING.md에 문서화되어 있습니다.
특정 작업을 위한 간결한 컨텍스트 슬라이스를 빌드합니다. 일치하는 결정, TODO, 메모 줄이 먼저 유지된 다음, 결과가 요청된 예산에 맞게 결정적으로 정리됩니다:
openhandoff pack .context --task "MCP adapter" --max-chars 4000MCP 서버
의존성이 없는 MCP 서버는 stdio를 통해 load_handoff, save_checkpoint, search_handoff, pack_context를 노출합니다:
openhandoff-mcp로컬 에이전트 구성의 경우 네트워크 액세스 없이 openhandoff-mcp 명령을 사용하세요. 서버는 에이전트가 제공한 핸드오프 경로만 읽고 씁니다.
Codex 구성 예시:
[mcp_servers.openhandoff]
command = "openhandoff-mcp"
args = []Claude Desktop 구성 예시:
{
"mcpServers": {
"openhandoff": {
"command": "openhandoff-mcp",
"args": []
}
}
}에이전트 이벤트 캡처
openhandoff-hook은 stdin에서 JSON 이벤트(또는 일반 텍스트)를 받아 자격 증명 형태의 값을 편집하고 결과를 .context/events.jsonl에 추가합니다:
printf '%s\n' '{"type":"agent_message","message":"finished"}' \
| openhandoff-hook --path .contextCodex는 notify 페이로드를 훅에 직접 보낼 수 있습니다. 이것을 Codex 구성에 추가하세요(명령은 stdin에서 JSON 페이로드를 받습니다):
notify = ["openhandoff-hook", "--path", ".context"]Claude Code의 경우 동일한 실행 파일을 설정의 command 훅에 연결하세요. 정확한 설정 파일은 Claude Code 버전에 따라 다를 수 있습니다; 이는 예시입니다:
{
"hooks": {
"afterTurn": [
{"command": "openhandoff-hook --path .context"}
]
}
}트랜스크립트 가져오기
Codex 및 Claude Code JSONL 이벤트 스트림을 동일한 형식으로 가져올 수 있습니다:
openhandoff import-transcript ./rollout.jsonl .context --title "Project handoff"로드맵
Cursor 및 Windsurf 트랜스크립트 어댑터.
작업별 컨텍스트 팩의 파일 및 커밋 인용.
비밀 스캔 및 검토 게이트가 있는 Obsidian 및 GitHub 동기화.
프로젝트 상태
라이선스: MIT; LICENSE 참조.
보안 보고: SECURITY.md 참조.
기여: CONTRIBUTING.md 참조.
릴리스 노트: CHANGELOG.md 참조.
아키텍처: docs/architecture.md 참조.
릴리스 프로세스: docs/releasing.md 참조.
이 프로젝트는 초기 단계이며 실제 피드백, 통합, 문서 개선을 환영합니다. 채팅 트랜스크립트, 자격 증명 또는 개인 Obsidian 데이터를 커밋하지 마세요.
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.
Persistent memory for AI agents. Search, store, and recall across sessions.
Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
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.0Apache 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