Documentação

Servidor de equipe

Servidor de equipe auto-hospedado

Compartilhe todas as 58 ferramentas MCP do lean-ctx com sua equipe através de um servidor HTTP único e auto-hospedado. Autenticação baseada em tokens, isolamento de workspaces, limitação de taxa e registro completo de auditoria - tudo o que você precisa para executar o lean-ctx de forma centralizada.

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

Início rápido (4 etapas)

Coloque um servidor de equipe em funcionamento em menos de 5 minutos. Você precisa de: o binário lean-ctx (compilado com --all-features) e um arquivo de configuração JSON.

1. Criar um arquivo de configuração (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. Gerar um token 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. Iniciar o servidor

lean-ctx team serve --config team.json

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

4. Conectar a partir de qualquer cliente

# 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"}

Referência de configuração

O servidor de equipe é configurado por meio de um único arquivo JSON. Todas as configurações podem ser ajustadas sem reiniciar - basta modificar o arquivo e reiniciar o servidor.

CampoTipoDescriçãoPadrão
hoststringEndereço de ligação (use 0.0.0.0 para acesso remoto)127.0.0.1
portu16Porta HTTP9877
defaultWorkspaceIdstringWorkspace padrão quando nenhum é especificado na requisição-
auditLogPathpathCaminho para o arquivo de registro de auditoria em JSON Lines-
disableHostCheckboolDesabilitar validação de cabeçalhos origin/host (apenas desenvolvimento)false
allowedHostsstring[]Nomes de host de origem permitidos para CORS[]
maxBodyBytesusizeTamanho máximo do corpo da requisição em bytes (padrão: 10 MB)2097152
maxConcurrencyusizeMáximo de requisições simultâneas32
maxRpsu32Máximo de requisições por segundo50
rateBurstu32Capacidade de rajada acima de maxRps (absorve picos curtos)100
requestTimeoutMsu64Tempo limite de requisição em milissegundos30000

Tokens e escopos

Cada membro da equipe recebe um token API único com escopos granulares. Os tokens são armazenados como hashes SHA-256 no arquivo de configuração - o token em texto simples é exibido apenas uma vez durante a criação.

Escopos disponíveis

EscopoDescrição
searchFerramentas de leitura: ctx_read, ctx_search, ctx_tree, ctx_overview, ctx_pack, ctx_proof, ctx_verify e todas as ferramentas orientadas a leitura
graphFerramentas de grafo: ctx_graph, ctx_graph_diagram, ctx_impact, ctx_callgraph, ctx_callers, ctx_callees, ctx_routes
artifactsctx_artifacts, ctx_semantic_search com artifacts=true
indexConstrução de índice de grafo (ctx_graph action=index-build*), reindexação semântica
eventsAssinar o fluxo de eventos SSE (GET /v1/events)
sessionMutationsEscritas de sessão: ctx_session (save, task, checkpoint, decision, reset), ctx_handoff, ctx_workflow, ctx_share
knowledgeEscritas de conhecimento: ctx_knowledge (remember, feedback, remove, consolidate), ctx_knowledge_relations
auditGET /v1/metrics, acesso completo a payloads de eventos, leituras de registro de auditoria
# 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

Os tokens são hasheados com SHA-256 antes do armazenamento. O texto simples é impresso uma vez no stdout durante a criação. Se você perder um token, gere um novo - não há como recuperar o original.

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"

Configuração multi-workspace

Sirva múltiplos projetos a partir de uma única instância de servidor. Cada workspace aponta para um diretório raiz de projeto diferente e mantém seu próprio índice de grafo e estado de sessão.

{
  "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"
}

Os clientes selecionam um workspace adicionando um cabeçalho <code>X-Workspace</code> às suas requisições. Se omitido, o <code>defaultWorkspaceId</code> é utilizado.

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

Autenticação

Cada requisição (exceto /health) requer um token Bearer válido no cabeçalho Authorization. O servidor valida o token contra os hashes SHA-256 no arquivo de configuração e verifica se os escopos do token cobrem a ferramenta solicitada.

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", ...}

Limites de taxa e proteção

O servidor de equipe inclui limitação de taxa integrada, controle de concorrência, limites de tamanho de requisição e tempos limite. Esses recursos protegem contra agentes descontrolados e negação de serviço acidental.

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

Registro de auditoria

Cada chamada de ferramenta autenticada é registrada em um arquivo JSON Lines. Cada entrada inclui o carimbo de data/hora, o ID do token, o nome da ferramenta, o workspace, a duração e o status. Use isso para depuração, conformidade e atribuição de custos.

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

Sincronização de workspaces

Mantenha os índices dos workspaces atualizados executando o comando de sincronização. Ele realiza um git fetch em cada workspace e reconstrói índices de grafo desatualizados. Execute-o via cron ou um job de CI para fluxos de trabalho de equipe totalmente automatizados.

# 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