Документация

Командный сервер

Самостоятельно размещённый командный сервер

Поделитесь всеми 58 MCP-инструментами lean-ctx с вашей командой через единый самостоятельно размещённый HTTP-сервер. Аутентификация по токенам, изоляция рабочих пространств, ограничение частоты запросов и полное ведение журнала аудита - всё необходимое для централизованного запуска lean-ctx.

Prerequisites

  • LeanCTX installed on each developer's machine (Installation Guide)
  • Docker (for containerized deployment) or a Linux/macOS server
  • Network connectivity between developer machines and the server

Быстрый старт (4 шага)

Запустите командный сервер менее чем за 5 минут. Вам понадобятся: бинарный файл lean-ctx (собранный с --all-features) и JSON-файл конфигурации.

1. Создать файл конфигурации (team.json)

{
  "host": "0.0.0.0",
  "port": 9877,
  "defaultWorkspaceId": "main",
  "auditLogPath": "/var/log/lean-ctx/audit.log",
  "workspaces": [
    {
      "id": "main",
      "label": "Main Project",
      "root": "/home/team/project"
    }
  ],
  "tokens": []
}

2. Сгенерировать API-токен

# Generate a token with specific scopes
TOKEN="$(lean-ctx team token create \
  --config team.json \
  --id dev-alice \
  --scopes search,graph,artifacts,index,events,sessionMutations,knowledge
)"

# TOKEN is the Bearer token (printed once; config stores only sha256Hex).

3. Запустить сервер

lean-ctx team serve --config team.json

# Team Server - 0.0.0.0:9877
# Workspaces: 1 (main)
# Tokens: 1 active
# Tools: 58 available

4. Подключиться с любого клиента

# Health check
curl http://your-server:9877/health

# List available tools (requires token)
curl -H "Authorization: Bearer $TOKEN" \
  http://your-server:9877/v1/manifest

# Call a tool (workspace defaults to defaultWorkspaceId)
curl -X POST -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"ctx_tree","arguments":{"path":".","depth":2}}' \
  http://your-server:9877/v1/tools/call

# Call a tool in a specific workspace (header overrides default)
curl -X POST -H "Authorization: Bearer $TOKEN" \
  -H "x-leanctx-workspace: main" \
  -H "Content-Type: application/json" \
  -d '{"name":"ctx_read","arguments":{"path":"README.md","mode":"signatures"}}' \
  http://your-server:9877/v1/tools/call

Docker Deployment

Run the Team Server as a Docker container for quick deployment without compiling from source.

docker run -d --name leanctx-team \
  -p 7700:7700 \
  -v leanctx-data:/data \
  ghcr.io/yvgude/lean-ctx:latest \
  serve --team --data-dir /data

Or run directly from the binary:

lean-ctx serve --team --bind 0.0.0.0:7700 --data-dir ./team-data

Verify the server is running:

curl http://your-server:7700/healthz
# {"status":"ok","version":"3.5.1","uptime":"2m"}

Справочник конфигурации

Командный сервер настраивается через один JSON-файл. Все параметры можно изменить без перезапуска - просто отредактируйте файл и перезапустите сервер.

ПолеТипОписаниеПо умолчанию
hoststringАдрес привязки (используйте 0.0.0.0 для удалённого доступа)127.0.0.1
portu16HTTP-порт9877
defaultWorkspaceIdstringРабочее пространство по умолчанию, если не указано в запросе-
auditLogPathpathПуть к файлу журнала аудита в формате JSON Lines-
disableHostCheckboolОтключить валидацию заголовков origin/host (только для разработки)false
allowedHostsstring[]Разрешённые имена хостов для CORS[]
maxBodyBytesusizeМаксимальный размер тела запроса в байтах (по умолчанию: 10 МБ)2097152
maxConcurrencyusizeМаксимальное количество одновременных запросов32
maxRpsu32Максимальное количество запросов в секунду50
rateBurstu32Пиковая ёмкость сверх maxRps (поглощает короткие всплески)100
requestTimeoutMsu64Таймаут запроса в миллисекундах30000

Токены и области доступа

Каждый участник команды получает уникальный API-токен с детализированными областями доступа. Токены хранятся в виде SHA-256-хэшей в файле конфигурации - токен в открытом виде отображается только один раз при создании.

Доступные области

ОбластьОписание
searchИнструменты чтения: ctx_read, ctx_search, ctx_tree, ctx_overview, ctx_pack, ctx_proof, ctx_verify и все инструменты для чтения
graphИнструменты графа: ctx_graph, ctx_graph_diagram, ctx_impact, ctx_callgraph, ctx_callers, ctx_callees, ctx_routes
artifactsctx_artifacts, ctx_semantic_search с artifacts=true
indexПостроение индексов графа (ctx_graph action=index-build*), семантическая переиндексация
eventsПодписка на SSE-поток событий (GET /v1/events)
sessionMutationsЗапись сессий: ctx_session (save, task, checkpoint, decision, reset), ctx_handoff, ctx_workflow, ctx_share
knowledgeЗапись знаний: ctx_knowledge (remember, feedback, remove, consolidate), ctx_knowledge_relations
auditGET /v1/metrics, полный доступ к данным событий, чтение журнала аудита
# Create token with all scopes
lean-ctx team token create \
  --config team.json \
  --id ci-bot \
  --scopes search,graph,artifacts,index,events,sessionMutations,knowledge,audit

# Create read-only token (search + graph only)
lean-ctx team token create \
  --config team.json \
  --id reviewer \
  --scopes search,graph

# Create agent token (read + write + events)
lean-ctx team token create \
  --config team.json \
  --id agent-alice \
  --scopes search,graph,events,sessionMutations,knowledge

Токены хэшируются с помощью SHA-256 перед сохранением. Открытый текст выводится однократно в stdout при создании. Если вы потеряете токен, сгенерируйте новый - восстановить оригинал невозможно.

Connecting Agents

Each developer configures their local LeanCTX to connect to the Team Server via a config file or environment variables.

Add to .lean-ctx/config.toml:

[team]
server = "http://your-server:7700"
token = "lctx_t_alice_a3f8..."
workspace = "my-team"

Or set via environment variables:

export LEANCTX_TEAM_SERVER="http://your-server:7700"
export LEANCTX_TEAM_TOKEN="lctx_t_alice_a3f8..."
export LEANCTX_WORKSPACE="my-team"

Настройка нескольких рабочих пространств

Обслуживайте несколько проектов с одного экземпляра сервера. Каждое рабочее пространство указывает на свой корневой каталог проекта и поддерживает собственный индекс графа и состояние сессии.

{
  "workspaces": [
    { "id": "frontend", "label": "React Frontend", "root": "/srv/frontend" },
    { "id": "backend", "label": "Rust API", "root": "/srv/backend" },
    { "id": "infra", "label": "Infrastructure", "root": "/srv/infra" }
  ],
  "defaultWorkspaceId": "frontend"
}

Клиенты выбирают рабочее пространство, добавляя заголовок <code>X-Workspace</code> к своим запросам. Если не указан, используется <code>defaultWorkspaceId</code>.

Shared Sessions

Once connected, sessions are automatically shared. Agents on the same workspace and channel see each other's context in real time.

lean-ctx session list --workspace my-team

# workspace: my-team
# channel: feat/auth-refactor  rev:14  agents: cursor, claude-code
# channel: fix/api-timeout     rev:7   agents: windsurf
# channel: main                rev:42  agents: copilot, kiro

Governance & Budgets

Configure per-agent budgets, roles, and policies in your team profile to control spending and access.

[budget]
max_context_tokens = 200000
max_cost_usd = 5.0
alert_threshold = 0.8

[roles]
default = "developer"

[roles.ci]
scope = "read"
max_cost_usd = 1.0

Monitoring

The Team Server exposes Prometheus metrics and a status endpoint. Use the observatory dashboard for a visual overview.

lean-ctx observatory --open

Аутентификация

Каждый запрос (кроме /health) требует валидный Bearer-токен в заголовке Authorization. Сервер проверяет токен по SHA-256-хэшам в файле конфигурации и убеждается, что области доступа токена покрывают запрашиваемый инструмент.

Authorization: Bearer $TOKEN

# Without token → HTTP 401 + JSON {error_code:"unauthorized", ...}
# Invalid token → HTTP 401 + JSON {error_code:"unauthorized", ...}
# Valid token, wrong scope → HTTP 403 + JSON {error_code:"scope_denied", ...}

Лимиты запросов и защита

Командный сервер включает встроенное ограничение частоты запросов, контроль параллелизма, лимиты размера запросов и таймауты. Это защищает от неконтролируемых агентов и случайного отказа в обслуживании.

{
  "maxRps": 50,
  "rateBurst": 100,
  "maxConcurrency": 32,
  "requestTimeoutMs": 30000,
  "maxBodyBytes": 2097152
}

Журнал аудита

Каждый аутентифицированный вызов инструмента записывается в файл JSON Lines. Каждая запись включает метку времени, ID токена, имя инструмента, рабочее пространство, длительность и статус. Используйте для отладки, соответствия требованиям и распределения затрат.

Audit log is JSONL (one JSON object per line). It never stores raw tool arguments — only argumentsMd5 of a canonicalized JSON representation.

# Inspect the latest audit entry
tail -n 1 /var/log/lean-ctx/audit.log | jq .

# Keys per entry:
# ts, tokenId, workspaceId, tool, method, allowed, deniedReason, argumentsMd5

Синхронизация рабочих пространств

Поддерживайте индексы рабочих пространств в актуальном состоянии, выполняя команду синхронизации. Она выполняет git fetch для каждого рабочего пространства и перестраивает устаревшие индексы графов. Запускайте через cron или CI-задачу для полностью автоматизированных командных рабочих процессов.

# Sync all workspaces (git fetch + rebuild indexes)
lean-ctx team sync --config team.json

# Sync a specific workspace
lean-ctx team sync --config team.json --workspace backend

Next Steps