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.
| Campo | Tipo | Descrição | Padrão |
|---|---|---|---|
host | string | Endereço de ligação (use 0.0.0.0 para acesso remoto) | 127.0.0.1 |
port | u16 | Porta HTTP | 9877 |
defaultWorkspaceId | string | Workspace padrão quando nenhum é especificado na requisição | - |
auditLogPath | path | Caminho para o arquivo de registro de auditoria em JSON Lines | - |
disableHostCheck | bool | Desabilitar validação de cabeçalhos origin/host (apenas desenvolvimento) | false |
allowedHosts | string[] | Nomes de host de origem permitidos para CORS | [] |
maxBodyBytes | usize | Tamanho máximo do corpo da requisição em bytes (padrão: 10 MB) | 2097152 |
maxConcurrency | usize | Máximo de requisições simultâneas | 32 |
maxRps | u32 | Máximo de requisições por segundo | 50 |
rateBurst | u32 | Capacidade de rajada acima de maxRps (absorve picos curtos) | 100 |
requestTimeoutMs | u64 | Tempo limite de requisição em milissegundos | 30000 |
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
| Escopo | Descrição |
|---|---|
search | Ferramentas de leitura: ctx_read, ctx_search, ctx_tree, ctx_overview, ctx_pack, ctx_proof, ctx_verify e todas as ferramentas orientadas a leitura |
graph | Ferramentas de grafo: ctx_graph, ctx_graph_diagram, ctx_impact, ctx_callgraph, ctx_callers, ctx_callees, ctx_routes |
artifacts | ctx_artifacts, ctx_semantic_search com artifacts=true |
index | Construção de índice de grafo (ctx_graph action=index-build*), reindexação semântica |
events | Assinar o fluxo de eventos SSE (GET /v1/events) |
sessionMutations | Escritas de sessão: ctx_session (save, task, checkpoint, decision, reset), ctx_handoff, ctx_workflow, ctx_share |
knowledge | Escritas de conhecimento: ctx_knowledge (remember, feedback, remove, consolidate), ctx_knowledge_relations |
audit | GET /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
- 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