Your agents spend fewer tokens on handoffs and deliver more accurate context.
EN
When agents hand off work to each other, they typically write free-form summaries in chat: "I found a bug in file X around line Y, it looks like Z." This wastes output tokens, loses precision, and forces the receiving agent to re-read source files to verify what was said.
The more agents collaborate, the worse this gets.
context-pack gives agents a shared, structured workspace. Instead of describing code in prose, an agent places anchors (file path + line range) into a pack. The server renders those anchors into real code excerpts. The agent then sends only pack_id + short summary in chat — the receiving agent opens the pack and gets the full picture: exact code, comments, diagrams, verdicts.
- Fewer output tokens: agents describe findings in a structured pack instead of prose, cutting handoff message size significantly.
- Higher accuracy: context is anchored to actual code lines, not paraphrased — no "trust me" summaries.
- Less redundant work: the receiving agent reads one pack instead of re-opening multiple source files.
Linux / macOS:
curl -fsSL https://raw.githubusercontent.com/AmirTlinov/context_pack/main/scripts/install.sh | bashWindows (PowerShell):
iwr https://raw.githubusercontent.com/AmirTlinov/context_pack/main/scripts/install.ps1 -UseBasicParsing | iexInstallers verify downloaded artifacts against
checksums.sha256from the same release.
Then add the server to your MCP config:
Codex config.toml:
[mcp_servers.context_pack]
command = "mcp-context-pack"
args = []
[mcp_servers.context_pack.env]
CONTEXT_PACK_ROOT = "/absolute/path/to/context-pack-data"
CONTEXT_PACK_SOURCE_ROOT = "__SESSION_CWD__"
CONTEXT_PACK_LOG = "mcp_context_pack=info"
CONTEXT_PACK_INITIALIZE_TIMEOUT_MS = "20000"
CONTEXT_PACK_MAX_PACK_BYTES = "524288"
CONTEXT_PACK_MAX_SOURCE_BYTES = "2097152"
CONTEXT_PACK_EXPIRED_GRACE_SECONDS = "900"Generic mcp.json:
{
"mcpServers": {
"context_pack": {
"command": "mcp-context-pack",
"args": [],
"env": {
"CONTEXT_PACK_ROOT": "/absolute/path/to/context-pack-data",
"CONTEXT_PACK_SOURCE_ROOT": "__SESSION_CWD__",
"CONTEXT_PACK_LOG": "mcp_context_pack=info",
"CONTEXT_PACK_INITIALIZE_TIMEOUT_MS": "20000",
"CONTEXT_PACK_MAX_PACK_BYTES": "524288",
"CONTEXT_PACK_MAX_SOURCE_BYTES": "2097152",
"CONTEXT_PACK_EXPIRED_GRACE_SECONDS": "900"
}
}
}
}Restart your MCP client. Smoke-check with input { "action": "list" }.
Agent context-pack server Orchestrator
| | |
|-- input write (anchors) -->| |
| { path, line range, | |
| sections, comments } | |
| |-- renders code excerpts |
|-- output read ------------>| |
| |-- returns rendered pack -->|
| | |
|-- chat: pack_id + summary ----------------------->| |
| |
reads pack, |
gets full |
context |
- The agent writes a pack via
input— sections, code anchors (file + line range), comments, diagrams. - The agent calls
output readto get the rendered markdown. - The agent sends
pack_id + short summaryin chat — nothing more. - The orchestrator opens the pack and gets complete, factual context.
| Parameter | Meaning |
|---|---|
command |
Binary path or executable name in PATH (recommended: mcp-context-pack) |
args |
Optional CLI args (usually []) |
CONTEXT_PACK_ROOT |
Storage root ({root}/packs/*.json) |
CONTEXT_PACK_SOURCE_ROOT |
Source root used to resolve anchors into code excerpts (__SESSION_CWD__, session_cwd, cwd, . = current session dir) |
CONTEXT_PACK_LOG |
Log filter (stderr) |
CONTEXT_PACK_INITIALIZE_TIMEOUT_MS |
Wait timeout for first MCP initialize |
CONTEXT_PACK_MAX_PACK_BYTES |
Max bytes per stored pack file |
CONTEXT_PACK_MAX_SOURCE_BYTES |
Max bytes per source file when rendering excerpts |
CONTEXT_PACK_EXPIRED_GRACE_SECONDS |
Grace window (seconds) for expired packs before purge/not_found (default 900) |
Set
CONTEXT_PACK_ROOTto a root directory, not to.../packs.Storage format is JSON (
packs/*.json). Legacy markdown packs are not supported.
Compact handoff read (default — bounded, orchestrator profile):
{
"name": "output",
"arguments": {
"action": "read",
"id": "pk_abcd2345"
}
}Full drill-down read (complete snippets for review):
{
"name": "output",
"arguments": {
"action": "read",
"id": "pk_abcd2345",
"profile": "reviewer"
}
}For the full tool contract, paging, profiles, error codes, and migration notes — see TECHNICAL.md.
revision_conflict— re-read the pack (input get) to get the current revision, then retry withexpected_revisionset to the value from the re-read.stale_ref— update or remove the outdated anchor.not_found— pack has likely expired by TTL.tool output too large— split the pack into smaller sections.ambiguous— name matched multiple packs; use exactidfromdetails.candidate_ids.- Corrupted or oversized pack files are removed automatically during list operations. To remove a specific pack:
input { "action": "delete", "id": "<pack_id>" }.
All install methods
curl -fsSL https://raw.githubusercontent.com/AmirTlinov/context_pack/main/scripts/install.sh | bashPin a specific version:
curl -fsSL https://raw.githubusercontent.com/AmirTlinov/context_pack/main/scripts/install.sh | CONTEXT_PACK_VERSION=v0.1.0 bashInstall to a custom directory:
curl -fsSL https://raw.githubusercontent.com/AmirTlinov/context_pack/main/scripts/install.sh | CONTEXT_PACK_INSTALL_DIR="$HOME/bin" bashiwr https://raw.githubusercontent.com/AmirTlinov/context_pack/main/scripts/install.ps1 -UseBasicParsing | iexbrew install --formula https://github.com/AmirTlinov/context_pack/releases/latest/download/mcp-context-pack.rbscoop install https://github.com/AmirTlinov/context_pack/releases/latest/download/mcp-context-pack.json- Open GitHub Releases and download the archive for your OS/CPU.
- Unpack
mcp-context-pack(.exeon Windows). - Put it into your PATH (for example
~/.local/binon Linux/macOS).
cargo build --release
# binary: target/release/mcp-context-packRelease artifacts are published on each tag
v*via.github/workflows/release.yml. Maintainers: release playbook is inRELEASE.md.
RU
Когда агенты передают работу друг другу, они обычно пишут пересказы в чат: "Я нашёл баг в файле X примерно на строке Y, выглядит как Z." Это тратит output-токены, теряет точность и заставляет получающего агента заново открывать исходники, чтобы проверить сказанное.
Чем больше агентов в цепочке — тем больше потери.
context-pack даёт агентам общее структурированное рабочее пространство. Вместо того чтобы описывать код словами, агент ставит якоря (путь к файлу + диапазон строк) в пакет. Сервер превращает якоря в реальные вырезки кода. Агент отправляет в чат только pack_id + короткий summary — получающий агент открывает пакет и видит полную картину: точный код, комментарии, диаграммы, вердикты.
- Меньше output-токенов: агенты фиксируют находки в структурированном пакете вместо прозы — размер handoff-сообщений значительно сокращается.
- Выше точность: контекст привязан к конкретным строкам кода, а не к пересказу — никаких "доверься мне".
- Меньше дублирующей работы: получающий агент читает один пакет, а не заново открывает несколько исходных файлов.
Linux / macOS:
curl -fsSL https://raw.githubusercontent.com/AmirTlinov/context_pack/main/scripts/install.sh | bashWindows (PowerShell):
iwr https://raw.githubusercontent.com/AmirTlinov/context_pack/main/scripts/install.ps1 -UseBasicParsing | iexИнсталлеры проверяют скачанный архив по
checksums.sha256из того же релиза.
Затем добавьте сервер в ваш MCP-конфиг:
Codex config.toml:
[mcp_servers.context_pack]
command = "mcp-context-pack"
args = []
[mcp_servers.context_pack.env]
CONTEXT_PACK_ROOT = "/absolute/path/to/context-pack-data"
CONTEXT_PACK_SOURCE_ROOT = "__SESSION_CWD__"
CONTEXT_PACK_LOG = "mcp_context_pack=info"
CONTEXT_PACK_INITIALIZE_TIMEOUT_MS = "20000"
CONTEXT_PACK_MAX_PACK_BYTES = "524288"
CONTEXT_PACK_MAX_SOURCE_BYTES = "2097152"
CONTEXT_PACK_EXPIRED_GRACE_SECONDS = "900"Универсальный mcp.json:
{
"mcpServers": {
"context_pack": {
"command": "mcp-context-pack",
"args": [],
"env": {
"CONTEXT_PACK_ROOT": "/absolute/path/to/context-pack-data",
"CONTEXT_PACK_SOURCE_ROOT": "__SESSION_CWD__",
"CONTEXT_PACK_LOG": "mcp_context_pack=info",
"CONTEXT_PACK_INITIALIZE_TIMEOUT_MS": "20000",
"CONTEXT_PACK_MAX_PACK_BYTES": "524288",
"CONTEXT_PACK_MAX_SOURCE_BYTES": "2097152",
"CONTEXT_PACK_EXPIRED_GRACE_SECONDS": "900"
}
}
}
}Перезапустите MCP-клиент. Smoke-проверка: input { "action": "list" }.
Агент context-pack сервер Оркестратор
| | |
|-- input write (якоря) ---->| |
| { путь, диапазон строк, | |
| секции, комментарии } | |
| |-- рендерит вырезки кода |
|-- output read ------------>| |
| |-- отдаёт отрендеренный -->|
| | пакет |
|-- чат: pack_id + summary ----------------------->| |
| |
читает пакет, |
получает полный |
контекст |
- Агент записывает пакет через
input— секции, якоря кода (файл + диапазон строк), комментарии, диаграммы. - Агент вызывает
output readи получает отрендеренный markdown. - Агент отправляет в чат
pack_id + короткий summary— и только это. - Оркестратор открывает пакет и получает полный, фактический контекст.
| Параметр | Назначение |
|---|---|
command |
Путь к бинарнику или имя команды в PATH (рекомендуется: mcp-context-pack) |
args |
Опциональные аргументы CLI (обычно []) |
CONTEXT_PACK_ROOT |
Корень хранилища ({root}/packs/*.json) |
CONTEXT_PACK_SOURCE_ROOT |
Корень исходников для превращения якорей в вырезки (__SESSION_CWD__, session_cwd, cwd, . = текущая директория сессии) |
CONTEXT_PACK_LOG |
Фильтр логов (stderr) |
CONTEXT_PACK_INITIALIZE_TIMEOUT_MS |
Таймаут ожидания первого MCP initialize |
CONTEXT_PACK_MAX_PACK_BYTES |
Максимальный размер файла пакета в байтах |
CONTEXT_PACK_MAX_SOURCE_BYTES |
Максимальный размер исходного файла при рендеринге вырезок |
CONTEXT_PACK_EXPIRED_GRACE_SECONDS |
Сколько секунд истекший pack остаётся доступен как expired перед purge/not_found (по умолчанию 900) |
Задавайте
CONTEXT_PACK_ROOTкак корневую папку, не как.../packs.Формат хранения — JSON (
packs/*.json). Старые markdown-пакеты не поддерживаются.
Compact handoff-чтение (по умолчанию — bounded, профиль orchestrator):
{
"name": "output",
"arguments": {
"action": "read",
"id": "pk_abcd2345"
}
}Полный drill-down для ревью (полные snippets):
{
"name": "output",
"arguments": {
"action": "read",
"id": "pk_abcd2345",
"profile": "reviewer"
}
}Полный контракт инструментов, постраничное чтение, профили, коды ошибок и примеры миграции — в TECHNICAL.md.
revision_conflict— перечитайте пакет (input get), получите текущий revision, повторите мутацию сexpected_revisionиз перечитанного пакета.stale_ref— обновите или удалите устаревший якорь.not_found— пакет, скорее всего, истёк по TTL.tool output too large— разбейте пакет на более мелкие секции.ambiguous— имя совпало с несколькими пакетами; используйте точныйidизdetails.candidate_ids.- Повреждённые или oversized-файлы пакетов удаляются автоматически при операциях list. Для точечного удаления:
input { "action": "delete", "id": "<pack_id>" }.
Все способы установки
curl -fsSL https://raw.githubusercontent.com/AmirTlinov/context_pack/main/scripts/install.sh | bashЗафиксировать конкретную версию:
curl -fsSL https://raw.githubusercontent.com/AmirTlinov/context_pack/main/scripts/install.sh | CONTEXT_PACK_VERSION=v0.1.0 bashУстановить в нестандартную директорию:
curl -fsSL https://raw.githubusercontent.com/AmirTlinov/context_pack/main/scripts/install.sh | CONTEXT_PACK_INSTALL_DIR="$HOME/bin" bashiwr https://raw.githubusercontent.com/AmirTlinov/context_pack/main/scripts/install.ps1 -UseBasicParsing | iexbrew install --formula https://github.com/AmirTlinov/context_pack/releases/latest/download/mcp-context-pack.rbscoop install https://github.com/AmirTlinov/context_pack/releases/latest/download/mcp-context-pack.json- Откройте GitHub Releases и скачайте архив под вашу ОС/архитектуру.
- Распакуйте
mcp-context-pack(.exeна Windows). - Положите бинарник в
PATH(например,~/.local/binна Linux/macOS).
cargo build --release
# бинарник: target/release/mcp-context-packRelease-артефакты публикуются на каждый тег
v*через.github/workflows/release.yml. Для сопровождающих: сценарий релиза описан вRELEASE.md.