Самостоятельно размещённый командный сервер
Поделитесь всеми 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-файл. Все параметры можно изменить без перезапуска - просто отредактируйте файл и перезапустите сервер.
| Поле | Тип | Описание | По умолчанию |
|---|---|---|---|
host | string | Адрес привязки (используйте 0.0.0.0 для удалённого доступа) | 127.0.0.1 |
port | u16 | HTTP-порт | 9877 |
defaultWorkspaceId | string | Рабочее пространство по умолчанию, если не указано в запросе | - |
auditLogPath | path | Путь к файлу журнала аудита в формате JSON Lines | - |
disableHostCheck | bool | Отключить валидацию заголовков origin/host (только для разработки) | false |
allowedHosts | string[] | Разрешённые имена хостов для CORS | [] |
maxBodyBytes | usize | Максимальный размер тела запроса в байтах (по умолчанию: 10 МБ) | 2097152 |
maxConcurrency | usize | Максимальное количество одновременных запросов | 32 |
maxRps | u32 | Максимальное количество запросов в секунду | 50 |
rateBurst | u32 | Пиковая ёмкость сверх maxRps (поглощает короткие всплески) | 100 |
requestTimeoutMs | u64 | Таймаут запроса в миллисекундах | 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 |
artifacts | ctx_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 |
audit | GET /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
- API Reference — REST endpoints and SDK
- Profiles — Preconfigured governance presets
- Shared Sessions — Deep dive into session sharing
- Context Bus — Event-driven multi-agent coordination
- Remote Setup — Advanced remote deployment options
- Observatory — Dashboard & monitoring