Skip to main content
Glama
LuisCarlosLopes

codesteer-atlas

CodeSteer Atlas

O assistente do seu editor encontra o trecho certo do seu projeto, na sua máquina. O Atlas indexa o código uma vez e entrega ao agente o símbolo, o contexto da tarefa e o alcance de uma mudança.

Na configuração padrão, indexação e busca acontecem no seu computador. O código permanece local. A instalação vem do GitHub pelo uv; clonar este repositório fica para quem desenvolve o Atlas.

Recurso

Para quê

Documentação visual

Conceitos, busca e indexação

Release notes

Histórico de versões, novidades e guias de migração

Guia de indexação, grafo e MCP

Pipeline, diagramas e o mapa graph.html

O que você ganha

Varrer o repositório com busca textual gasta o contexto do agente e ainda pode abrir o arquivo errado. O Atlas muda esse caminho.

  • O trecho é um símbolo. Classe, função e método entram no índice como unidades. Um arquivo vira um mapa, não uma fatia de linhas:

    src/auth/service.py
      ├── class AuthService
      ├── AuthService.login
      └── AuthService.logout
  • A busca junta sentido e texto. Uma pergunta em linguagem natural e o nome exato de uma função usam o mesmo índice.

  • A tarefa cabe em poucas chamadas. Um briefing apresenta o projeto. Um pacote reúne o que importa para editar, depurar, revisar ou entender um símbolo. O grafo mostra o que uma mudança alcança.

  • A atualização acompanha o que mudou. A primeira passagem lê o projeto; as seguintes reindexam arquivos novos ou alterados. Ao reabrir o editor, se o índice já existir, essa atualização roda em segundo plano.

  • Várias linguagens no mesmo índice. Python, JavaScript, TypeScript, Go, Java, C#, Dart, Pascal, VB6, Razor, XML, Markdown e outras. Notas NOTE/WHY, decisões e a história recente do Git do próprio projeto também entram na busca.

Related MCP server: embecode

Começar

Pré-requisitos: Python 3.11–3.13 e uv.

O índice fica em .code-index/ na raiz do projeto que você quer consultar. Acrescente essa pasta ao .gitignore.

1. Conectar o MCP no seu projeto

Instale no projeto atual.

Um MCP global inicia na pasta pessoal, sem a raiz do projeto aberto, e pode gravar ou achar o índice no lugar errado.

Use o plugin no projeto atual (escopo project ou local) ou um mcp.json / .mcp.json na raiz do projeto.

Opção A — Plugin no projeto atual (Claude Code)

/plugin marketplace add LuisCarlosLopes/codesteer-atlas

/plugin install codesteer-atlas

Quando o Claude Code pedir o escopo, escolha Project (compartilhado no repo) ou Local (só neste workspace).

Pela CLI:

claude plugin install codesteer-atlas --scope project
# ou: --scope local

Opção B — mcp.json na raiz do projeto

Recomendado para Cursor, VS Code, Kiro e OpenCode. Copie o manifest para o projeto e reinicie o cliente.

Cliente

Copiar de

Para

Cursor

examples/clients/cursor/mcp.json

.cursor/mcp.json

GitHub Copilot (VS Code)

examples/clients/vscode/mcp.json

.vscode/mcp.json

Kiro

examples/clients/kiro/settings/mcp.json

.kiro/settings/mcp.json

OpenCode

examples/clients/opencode/opencode.json

opencode.json

Claude Code

.mcp.json

.mcp.json na raiz do projeto

O atlas-index grava .code-index na raiz do repositório. Ao abrir, o servidor procura essa pasta subindo a partir da pasta em que o processo nasceu.

No Cursor esse processo nasce na pasta pessoal. A subida a partir dali não alcança o .code-index do repositório aberto, e o servidor não recebe a raiz do projeto por conta própria. A linha ATLAS_INDEX_DIR fecha esse caminho: o Cursor troca ${workspaceFolder} pela pasta que contém o .cursor/mcp.json, a raiz do repositório. Sem essa linha, as ferramentas olham outro índice, ou nenhum.

{
  "mcpServers": {
    "codesteer-atlas": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/LuisCarlosLopes/codesteer-atlas.git",
        "atlas-serve"
      ],
      "env": {
        "ATLAS_INDEX_DIR": "${workspaceFolder}/.code-index"
      }
    }
  }
}

O manifest pronto está em examples/clients/cursor/mcp.json. Copie-o para .cursor/mcp.json e reinicie o Cursor. A linha que amarra o índice é ATLAS_INDEX_DIR.

No Claude Code, com o plugin no escopo do projeto, o editor informa a raiz e o bloco sem ATLAS_INDEX_DIR basta. Se atlas_status apontar o índice para fora do repositório, use a mesma variável com o caminho absoluto de .code-index. Outros editores: CONTRIBUTING.md.

Outros canais, também por projeto

  • Kiro Power: Add Custom Power → Import from GitHub → https://github.com/LuisCarlosLopes/codesteer-atlas.git, associado ao workspace atual.

  • Copilot CLI: instale no repositório em que você vai trabalhar.

copilot plugin install LuisCarlosLopes/codesteer-atlas

2. Indexar o projeto

Na raiz do seu projeto:

cd /caminho/para/seu-projeto

uv tool install git+https://github.com/LuisCarlosLopes/codesteer-atlas.git

atlas-index --workspace .

Sem instalar no PATH, o mesmo comando baixa o pacote a cada execução:

uvx --from git+https://github.com/LuisCarlosLopes/codesteer-atlas.git atlas-index --workspace .

Ao terminar, a mensagem é Indexação Concluída com Sucesso!. A pasta .code-index/ passa a ter o índice, o grafo e o mapa graph.html, que abre no navegador.

A primeira indexação baixa o modelo de busca. As seguintes, na configuração padrão, seguem sem rede.

Para atualizar o programa depois: uv tool upgrade codesteer-atlas.

3. Usar

Com o MCP conectado e o índice criado, peça ao agente para procurar no projeto. Nas próximas vezes, a atualização incremental basta:

atlas-index --workspace .
atlas-index --workspace . --full
atlas-index --workspace . --paths src --paths docs

O agente também pode chamar a ferramenta atlas_index. A primeira indexação continua manual. A partir daí, abrir o editor dispara uma atualização incremental em segundo plano. O registro fica em .code-index/background_reindex.log.

Como a indexação funciona

O atlas-index percorre o projeto, separa cada arquivo em trechos, gera um vetor local para cada trecho e grava tudo em .code-index/. A primeira passagem lê o que é elegível. As seguintes comparam o hash de cada arquivo e só refazem o que mudou ou foi apagado. --full reconstrói o índice inteiro.

O resultado é a pasta com o índice de busca, o grafo (graph.json e graph.html) e a história recente do Git do próprio repositório (history.json).

Código

Arquivos com parser (Python, JavaScript, TypeScript, Go, Java, C# e outras linguagens da lista) são lidos pela árvore sintática. Cada classe, função e método vira um trecho com nome, como AuthService.login, e com as linhas de origem. Se o arquivo não tem símbolo reconhecido, ele entra inteiro como um módulo.

Um trecho grande demais guarda o começo (assinatura) e o fim, e marca o miolo como cortado.

SQL

Cada comando vira um trecho: CREATE TABLE, CREATE VIEW, SELECT e os demais. O nome segue a tabela, a view ou a função. Um SELECT sem nome próprio usa a tabela do FROM. Comando longo demais é partido por linhas.

Markdown

Cada título (#, ##, …) abre uma seção. Seção longa é partida em parágrafos, em blocos de cerca de 1000 caracteres.

Texto e formatos sem símbolo

XML, Razor, texto puro e os demais formatos sem classe ou função entram por parágrafo, nos mesmos blocos de cerca de 1000 caracteres. O nome do trecho é o do arquivo, com um índice quando há mais de um bloco.

O que fica de fora

A varredura ignora .git, node_modules, .venv, __pycache__, a própria pasta .code-index, arquivos ocultos, extensões que o Atlas não lê e arquivos acima de 2 MB. Um .atlasignore na raiz soma regras no formato do .gitignore.

O que o agente passa a fazer

Ferramenta

Para que serve

atlas_brief

Apresentar um projeto ainda desconhecido: linguagens, camadas e pontos de entrada. Uma vez basta.

atlas_search

Localizar onde uma ideia ou um nome está implementado. A resposta traz arquivo e linhas.

atlas_context

Montar o pacote de um símbolo ou arquivo para editar, depurar, revisar ou entender.

atlas_expand

Abrir o código de um resultado compacto, um ou dois símbolos por vez.

atlas_graph

Ver conexões, o caminho entre dois pontos e o que uma mudança alcança.

atlas_index

Criar ou atualizar o índice e o mapa.

atlas_status

Conferir se o índice está em dia.

Há também o recurso somente leitura atlas://status.

Configuração do MCP

As variáveis ficam em env no mcp.json do projeto. Reinicie o editor depois de salvar. O valor 1 liga as flags abaixo; onde a coluna de exemplo diz outra coisa, use esse texto.

Menor contexto, com logs

Este bloco entrega a busca e o pacote da tarefa no perfil compacto e grava, na sua máquina, o tamanho de cada resposta. O perfil compacto foi o que reduziu cerca de 32% dos tokens de metadados nas 28 consultas (32.336 para 21.977). Os logs ficam em .code-index/observability/events.jsonl e medem o texto devolvido pela ferramenta, não o faturamento do editor.

{
  "mcpServers": {
    "codesteer-atlas": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/LuisCarlosLopes/codesteer-atlas.git",
        "atlas-serve"
      ],
      "env": {
        "ATLAS_INDEX_DIR": "${workspaceFolder}/.code-index",
        "ATLAS_CONTEXT_OPTIMIZATION": "1",
        "ATLAS_OBSERVABILITY": "1"
      }
    }
  }
}

O Jev fica de fora: ele reordena e pode retirar um irrelevante, e também envia a pergunta e os trechos para fora da máquina. Para ligá-lo, use as três variáveis da seção Jev.

Parâmetros

Variável

Exemplo

Função

ATLAS_INDEX_DIR

${workspaceFolder}/.code-index

Pasta do índice. No Cursor, amarra o servidor ao .code-index da raiz do repositório.

ATLAS_CONTEXT_OPTIMIZATION

1

Resposta compacta em atlas_search e atlas_context. Também aceita true. É o que reduz o contexto.

ATLAS_EXPAND_OUTLINE

0

Classe grande abre em atlas_expand como cabeçalho e lista de métodos. Ligado por padrão; 0 volta a paginar a classe inteira.

ATLAS_OBSERVABILITY

1

Log local de caracteres, bytes e tokens por resposta. Só o valor 1 liga.

ATLAS_TOKENIZER_PATH

/caminho/para/tokenizer.json

Troca o contador de tokens. Vazio usa o tokenizer que já vem no pacote.

ATLAS_RELEVANCE

1

Liga o Jev. Sozinha não basta: a URL e a chave abaixo também entram. Também aceita true.

ATLAS_RELEVANCE_GATE

1

Dispensa o Jev quando a consulta já é o nome exato de uma única função, método ou classe entre os candidatos. identifier dispensa para qualquer consulta que seja um identificador: menos chamadas, porém mais tokens e ranking pior nessas consultas.

ATLAS_RELEVANCE_RUBRIC

v1

Rubrica do Jev. Ausente, usa a v2 (4 níveis com exemplos), que acerta mais; v1 volta à antiga, cerca de 2,3× mais barata por chamada.

ATLAS_RELEVANCE_CUT

0

Com o Jev ligado, a resposta compacta tira do top_k o que o Jev julgou mais provavelmente irrelevante que útil, sem pôr outro no lugar, e pode vir com menos itens. Ligado por padrão; 0 (ou false) volta à seleção conservadora.

ATLAS_RELEVANCE_API_URL

https://openrouter.ai/api/v1/systemone

Endpoint do Jev. Só essa URL HTTPS.

ATLAS_RELEVANCE_API_KEY

a chave do OpenRouter

Credencial do Jev. Se vazia, reutiliza ATLAS_SEMANTIC_API_KEY quando a URL semântica é o chat HTTPS do OpenRouter.

ATLAS_RELEVANCE_MODEL

~typesafe/jev-latest

Modelo do Jev. Não herda ATLAS_SEMANTIC_MODEL.

ATLAS_RERANK

0

Desliga toda reordenação, inclusive o Jev e o cross-encoder. Ausente, a reordenação local fica ligada.

ATLAS_RERANK_MODEL

Xenova/ms-marco-MiniLM-L-6-v2

Cross-encoder local no lugar da reordenação por texto. Ausente, permanece a reordenação local.

ATLAS_WATCH

1

Reindexa sozinho depois que você salva. Exige o extra codesteer-atlas[watch]. Só o valor 1 liga.

ATLAS_SCIP

1

Registra quem chama quem, se o indexador da linguagem estiver instalado. Só o valor 1 liga.

ATLAS_SEMANTIC

1

Gera o propósito de cada símbolo. Sem URL configurada, o índice estrutural segue completo. Só o valor 1 liga. Envia conteúdo para a origem configurada.

ATLAS_SEMANTIC_LOCAL_URL

http://127.0.0.1:8080/v1/chat/completions

Endpoint local de propósito. Entra depois do sampling do MCP.

ATLAS_SEMANTIC_API_URL

https://openrouter.ai/api/v1/chat/completions

API de propósito. Não há host padrão.

ATLAS_SEMANTIC_API_KEY

a chave da API

Vai somente no header. Não entra em log.

ATLAS_SEMANTIC_MODEL

openai/gpt-4.1-mini

Liga o contrato model + messages. Sem ele, a API recebe o payload genérico.

Jev: o trecho mais útil na frente

O Jev é o modelo System One da TypeSafe: recebe a pergunta e os candidatos e devolve, para cada um, uma decisão tipada com score e confiança. No Atlas ele vem desligado. A chamada, quando ligada, passa pela API System One do OpenRouter. Com ele desligado, busca e índice continuam na sua máquina.

Ligado, o Jev lê a pergunta e os candidatos que o Atlas já recuperou. Coloca na frente o trecho que julgou mais útil para aquela pergunta. No perfil compacto, tira dos primeiros top_k o que julgou mais provavelmente irrelevante que útil, sem pôr outro no lugar. Quem encontra os candidatos continua sendo a busca local.

A entrega compacta, com o Jev desligado, reduziu cerca de 32% dos tokens de metadados nas 28 consultas de avaliação (32.336 para 21.977), com o alvo na mesma posição. Numa sessão no Cursor, abrir menos símbolos por vez levou o total das ferramentas de 8.433 para 5.712 tokens. O Jev refina a ordem desses resultados. No replay de 24/09, com as notas capturadas nas mesmas 28 consultas, o Jev (rubrica v2, com o corte) teve MRR 0,613 contra 0,431 do ranking local sem Jev, com 36% menos tokens de metadados em top_k=10. Em linguagem natural, o MRR foi de 0,080 para 0,312.

O que precisa estar no env

Três variáveis ligam a chamada ao Jev. Com a flag sozinha, sem URL e sem chave, ela permanece desconfigurada.

Variável

Valor

ATLAS_RELEVANCE

1 (ou true)

ATLAS_RELEVANCE_API_URL

https://openrouter.ai/api/v1/systemone

ATLAS_RELEVANCE_API_KEY

a chave da sua conta no OpenRouter

"env": {
  "ATLAS_INDEX_DIR": "${workspaceFolder}/.code-index",
  "ATLAS_RELEVANCE": "1",
  "ATLAS_RELEVANCE_API_URL": "https://openrouter.ai/api/v1/systemone",
  "ATLAS_RELEVANCE_API_KEY": "sua-chave-openrouter"
}

ATLAS_INDEX_DIR aponta o índice no Cursor; não faz parte do Jev. Reinicie o editor depois de salvar.

Se ATLAS_SEMANTIC_API_URL já for exatamente https://openrouter.ai/api/v1/chat/completions, a URL do Jev sai dessa e a chave pode ser a mesma ATLAS_SEMANTIC_API_KEY. Fora desse caso, URL e chave do Jev são obrigatórias.

O modelo padrão é ~typesafe/jev-latest. ATLAS_RELEVANCE_MODEL só entra para trocar por um pin typesafe/jev-…. ATLAS_RELEVANCE_GATE=1 é opcional: dispensa a chamada quando a consulta já é o nome exato de uma única função, método ou classe entre os candidatos. Com a resposta compacta, o Jev também corta: tira dos primeiros top_k quem julgou mais provavelmente irrelevante que útil, sem repor. Na medição, os metadados de top_k=10 caíram 36% sem perder alvo. ATLAS_RELEVANCE_CUT=0 desliga o corte. Cada busca faz uma chamada só, com a rubrica v2; ATLAS_RELEVANCE_RUBRIC=v1 troca pela rubrica antiga, mais barata e pior em linguagem natural. ATLAS_RERANK precisa continuar ausente ou diferente de 0; com 0, o Jev não roda.

Nesse modo, a consulta e os trechos candidatos seguem para o OpenRouter. Cada busca escreve uma linha de custo no log do servidor, sem a pergunta, o código ou a chave. Na rodada medida, o gasto ficou em frações de centavo.

Menos contexto na conversa

ATLAS_CONTEXT_OPTIMIZATION=1 faz a resposta padrão de atlas_search e atlas_context vir compacta: menos campos, sem repetir o mesmo símbolo, e um identificador para abrir só o que faltar com atlas_expand. O bloco de orçamento só aparece quando algo foi cortado, e uma classe grande abre como cabeçalho e lista de métodos, para você expandir só o método que interessa. Funciona com ou sem o Jev. A redução de tokens citada acima veio dessa entrega. O bloco pronto, já com os logs, está em Menor contexto, com logs.

Instruções para agentes de IA (AGENTS.md / CLAUDE.md)

Copie o bloco para as instruções do projeto em que o Atlas está conectado.

Cliente

Onde colar

Cursor, Copilot (VS Code), Codex e editores genéricos

AGENTS.md na raiz do projeto

Claude Code

CLAUDE.md, que pode importar o AGENTS.md

Kiro

regras do Power ou instruções do agente

GitHub Copilot CLI

instruções do plugin ou regras do projeto

O AGENTS.md deste repositório é o das pessoas que desenvolvem o Atlas. No seu projeto, o bloco abaixo é o suficiente:

# Busca de código com o Atlas

Use o Atlas antes de varrer o repositório para entender, planejar ou investigar
código e documentos deste projeto.

- Símbolo ou arquivo já conhecido: `atlas_context(target, intent)` com
  `edit`, `debug`, `review` ou `understand`.
- Projeto desconhecido: `atlas_brief` uma vez.
- Localizar uma implementação: `atlas_search` com metadados e `top_k` baixo.
- Abrir o código de um resultado compacto: `atlas_expand` com uma ou duas
  refs ligadas à pergunta. Leia a resposta antes de pedir mais.
- Alcance de uma mudança: `atlas_graph` com `mode="affected"`.
- Índice ausente ou desatualizado: `atlas_index`.

Omita `response_profile` para respeitar a configuração do projeto. Pare quando
a evidência bastar. Se o MCP estiver indisponível, use as ferramentas do editor
e registre essa limitação.

Quando quiser ir além

  • Mapa visual. Abra .code-index/graph.html no navegador.

  • Reindexar ao salvar. ATLAS_WATCH=1 observa o projeto e atualiza o índice depois de uma pausa curta. Requer o extra codesteer-atlas[watch].

  • Quem chama quem. ATLAS_SCIP=1 usa o indexador da linguagem, quando ele está instalado, e registra chamadas entre símbolos.

  • Resumo do propósito de cada símbolo. ATLAS_SEMANTIC=1 consulta uma API que você configurar. Sem essa origem, o índice estrutural segue completo. Esse modo também envia conteúdo para fora da máquina.

  • Medir o tamanho das respostas. ATLAS_OBSERVABILITY=1 grava, na sua máquina, caracteres, bytes e tokens do que cada ferramenta devolveu.

  • Deixar pastas de fora. Um .atlasignore na raiz do projeto usa a mesma sintaxe do .gitignore. Pastas como .git, node_modules, .venv e o próprio .code-index já ficam de fora.

*.log
fixtures/
/dist

Detalhe técnico

Contrato do Jev, medições, tokenizer e a ordem de resolução de .code-index estão na referência do operador. Os valores para colar no mcp.json estão na configuração.

O pipeline de indexação, para quem altera o Atlas, está em CONTRIBUTING.md.

Contribuindo

Clonar o repositório, testes e lint: CONTRIBUTING.md.

Licença

Veja LICENSE.

Available Tools

7 tools
atlas_briefA

Get a pre-computed, token-bounded briefing that orients you in an unfamiliar project.

Call this FIRST, once, when you start working on a project you do not already know. It replaces the usual orientation ritual (listing directories, reading the README, opening several files just to get your bearings) with a single small response.

Returns a ranked summary: identity (repo, language distribution, size), layers (the main directories, what role each plays, and their most important files), entrypoints (how the project is actually started), and hubs (the most connected files — the ones whose change propagates furthest). Every list is ranked and capped, so the response size does NOT grow with the size of the repository.

Do NOT call this to enumerate symbols or files: by design it reports at most a handful of layers and a few files per layer. Use atlas_search (optionally with path_prefix) to find a specific implementation, and atlas_graph to explore connectivity. Do NOT call it more than once per session — the briefing only changes after atlas_index re-runs.

Facts are derived deterministically from the index; nothing is guessed. Entries carry confidence (declared when read from a manifest such as pyproject/package.json, inferred when detected in code) and warnings reports known gaps, e.g. graph_unavailable, no_import_edges, low_symbol_coverage, index_stale.

Staleness is detected by comparing the indexed git HEAD with the current one, so uncommitted edits are not detected (same limitation as atlas_status).

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoDetail level. `0` is a minimal orientation (identity plus directory roles); `1` (default) adds per-layer top files, entrypoints and hubs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so excellently. It discloses deterministic derivation, response size capped independent of repo size, ranked/capped lists, confidence levels with declared vs inferred, known warning types, and staleness detection limitations including the inability to detect uncommitted edits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average but every sentence earns its place. It is front-loaded with a one-sentence summary, followed by explicit usage instructions, output details, and limitations, without redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and the absence of annotations, the description covers all necessary context: what it does, when to call it, what it returns, how to interpret results, known edge cases, and relationships to sibling tools. The output schema existence further reduces the need to explain return types, but the description goes beyond that anyway.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does not add new meaning about the `level` parameter beyond what the schema already says, though it enriches the overall understanding of the response shape (ranked, capped lists) which indirectly informs parameter expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Get a pre-computed, token-bounded briefing that orients you in an unfamiliar project.' It clearly distinguishes the tool from siblings by explicitly naming atlas_search, atlas_graph, and atlas_index and stating what each is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance ('Call this FIRST, once, when you start working on a project you do not already know'), what not to use it for, and names alternative tools for specific tasks. It also warns against repeated calls and notes when the briefing changes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atlas_contextA

Assemble a task-oriented context pack for a symbol or file in one call.

Use this first when you already know which symbol or file you will edit, debug, review, or understand. It composes neighborhood, impact radius, inferred tests and brief layer under a token budget so you do not need to chain atlas_graph / atlas_brief / atlas_search yourself.

Omit response_profile to respect the operator configuration. An explicit "full" overrides ATLAS_CONTEXT_OPTIMIZATION; use it only when requested or when the full representation is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne of `edit`, `debug`, `review`, or `understand`.
targetYesNode id, exact label, or unique suffix (same resolution as atlas_graph).
response_profileNo`default` follows ATLAS_CONTEXT_OPTIMIZATION; `full` keeps the current format; `compact` drops duplicated target/symbol and layer/brief_layer representations. Does not call Jev.default

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the burden. It discloses key behaviors: it composes multiple data layers under a token budget, respects operator config by default, and that an explicit 'full' overrides ATLAS_CONTEXT_OPTIMIZATION. It doesn't cover error modes or resolution-failure behavior, but schema and output schema cover much of the rest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short paragraphs, front-loaded with the core purpose, then the primary usage directive, then the response_profile caveat. Every sentence carries information; no filler. Could be marginally tighter but is well structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a composite context assembler with an output schema, so return values need not be explained. The description covers purpose, when to use, and the config-override behavior. Minor gap: it doesn't mention token-budget or failure behavior when a symbol can't be resolved, but against the rich schema and output schema this is largely adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters including the intent enum values and target resolution semantics. The description adds the meaningful operator-config relationship for response_profile, but does not explain the intent values or target format beyond what the schema provides. Baseline 3 with slight added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (assemble) and resource (task-oriented context pack) for a symbol or file, and distinguishes itself from siblings by explaining it composes neighborhood, impact radius, tests, and brief layer so the agent doesn't chain atlas_graph/atlas_brief/atlas_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it first when the target symbol/file is already known, and the response_profile guidance gives concrete when/when-not ('use full only when requested'). It names the alternative workflow (chaining sibling tools) it replaces.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atlas_expandA

Expand compact search references by chunk id — no embedding and no Jev.

Start with only one or two refs, then inspect the response before expanding more. Each additional ref must fill a specific evidence gap. Use three to five only when the task already requires comparing those symbols; never open all hits automatically. Stop when there is enough evidence to answer.

Pass up to five ref values from a compact atlas_search response. Each ref identifies a chunk in the current index (not a historical snapshot). Legacy Base64 references are also supported. If the file changed or the chunk is gone, the item is marked obsolete without returning stale lines. Content comes from the original symbol's indexed line range, including text truncated during indexing. If content_complete is false, pass next_ref to atlas_expand again and concatenate content in content_range order (character offsets, exclusive end). Follow next_ref only if the remaining content is needed; a complete symbol requires all its pages. Continuations are tied to the file hash and need no session cache.

A large class comes back as its header plus outline: the class's methods, each with its own ref and line range. Expand only the methods you need; follow next_ref only if you really need the whole class body.

ParametersJSON Schema
NameRequiredDescriptionDefault
refsYesStart with 1–2 search refs; add only needed evidence (hard limit 5).
include_contentNoWhen true (default), include symbol content when it fits the search response budget.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and does so richly: obsolete refs are marked without returning stale lines, content_complete=false requires following next_ref and concatenating by character offset, continuations are tied to the file hash and need no session cache, and large classes return a header plus outline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the ref-budget rule are front-loaded and nearly every sentence carries operational weight. It is long, and the next_ref rule is restated once for content pages and again for class outlines, which is mild redundancy rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema existing, the description still explains the actionable return semantics (content_complete, next_ref, content_range ordering, obsolete marking, outline) that the agent must branch on. Nothing needed to call this correctly across the pagination and class-outline cases is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: refs are limited to five, must come from a compact atlas_search response, identify chunks in the current index rather than a historical snapshot, and legacy Base64 references are accepted. include_content is left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Expand compact search references by chunk id,' and immediately contrasts with retrieval modes it is not ('no embedding'). The agent knows this consumes refs produced by atlas_search rather than performing a new search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives unusually explicit usage discipline: start with one or two refs, inspect before expanding, each ref must fill a specific evidence gap, never open all hits automatically, stop when evidence suffices. It lacks an explicit comparison to sibling tools (atlas_context, atlas_brief), so it stops short of full when/when-not/alternatives coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atlas_graphA

Query the derived knowledge graph for hubs, paths, neighborhood explanations, or the reverse-impact radius of a node.

Call this directly when the question is about connectivity, rationale, centrality, or "what breaks if I change this?" in the indexed workspace. It reads the derived graph.json produced by atlas_index; it does not rebuild the graph itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesOne of `hubs`, `path`, `explain`, or `affected`.
top_nNoNumber of hubs to return for `hubs` mode. Must be between 1 and 50.
sourceNoRequired for `path`. Accepts exact node id, exact label, or a unique suffix.
targetNoRequired for `path`, `explain`, and `affected`. Accepts exact node id, exact label, or a unique suffix.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description does real work: it discloses that the tool reads a derived artifact ('graph.json') produced by atlas_index and is not a rebuild operation. It does not cover return format or failure modes, but the read-only, derived-data nature is well communicated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, no filler. The purpose is front-loaded in the first sentence, with usage and a key boundary condition in the second.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 4 parameters, an output schema, full schema coverage, and no annotations; the description covers purpose, usage triggers, and source-data provenance. It leaves minor gaps around cross-mode semantics and return shape, which the output schema partially absorbs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents parameter semantics including mode, top_n bounds, and source/target requirements. The description adds little to parameter meaning beyond implying multiple modes, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Query') and resource ('the derived knowledge graph') and enumerates the exact operation modes (hubs, paths, neighborhood explanations, reverse-impact radius). It clearly distinguishes itself from atlas_index by noting it reads graph.json rather than rebuilding it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Call this directly when the question is about connectivity, rationale, centrality, or "what breaks if I change this?"' and names the alternative (atlas_index) it should not be conflated with. This gives a clear trigger condition and a boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atlas_indexA

Index (or re-index) source code and documents into the local search index.

Use to build the index the first time, or to refresh it after atlas_status reports is_stale: true or large changes.

IMPORTANT: unless the user already said what to index, call with dry_run=true first, show the candidate folders, and ASK whether to index everything or specific folders. Then call again with the chosen 'paths' (or none for the whole workspace).

Incremental by default: unchanged files (by content hash) are skipped, so re-runs are fast. full=true forces a complete rebuild.

full=true or empty/omitted 'paths' (whole-workspace) run asynchronously in a background subprocess and return immediately — poll atlas_status (reindexing: true while running). A non-empty 'paths' with full=false runs synchronously and returns stats directly.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoForce full re-index ignoring cached hashes. Defaults to false.
pathsNoOptional subfolders (relative to 'workspace') to index, e.g. ["src", "docs"]. Omitted = whole workspace. No path traversal outside it.
dry_runNoWhen true, indexes nothing; returns top-level candidate folders with eligible-file counts so you can present them before deciding. Defaults to false.
workspaceNoAbsolute path to index. Defaults to the parent of the resolved index, else the current directory. Must exist and be a directory.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description fully discloses incremental behavior, skip of unchanged files, async/sync modes, and dry_run behavior. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured, concise with clear sections. Each sentence adds value; no fluff. Front-loaded with purpose, then usage notes, then behavioral details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given four parameters, async behavior, and an output schema, the description covers all necessary context: workflow, behaviors, edge cases (dry_run, full rebuild). Output schema exists, so return values need not be described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already covers all parameters (100% coverage). Description adds value by explaining how parameters affect execution (e.g., dry_run returns candidates, non-empty paths with full=false is synchronous) and usage patterns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool indexes source code and documents into a local search index, using specific verbs and resources. It distinguishes from the sibling tool 'atlas_search' which presumably searches, not indexes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance on when to use (first time, after staleness) and when not (use dry_run first, ask user). Provides workflow instructions and distinguishes between async and sync execution based on parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atlas_statusA

Get diagnostic metadata and health status of the local vector index.

Use this only for explicit diagnostics (e.g. the user asks about index health, staleness, or which repos/languages are indexed) or to decide whether atlas_index should be run. It is NOT a precondition for atlas_search/atlas_brief — call those directly; they raise an actionable error themselves if the index is missing. Never indexes anything itself.

Returns: JSON string with index_exists, total_chunks, repos_indexed, languages_indexed, embedding_model, embedding_backend, storage_backend, index_path, index_resolution (how the index directory was resolved: "cli-arg" | "env" | "discovery" | "editor-project-dir" | "roots" | "roots-fallback" | "editor-project-dir-fallback" | "cwd-fallback" — useful to diagnose client misconfiguration when index_exists is unexpectedly false), last_indexed_at, git_head_sha, is_stale (true when the indexed git HEAD differs from the workspace's current HEAD), and reindexing (true when another process currently holds the reindex lock for this index).

Also `resolution_coverage`: which languages had their imports resolved and
how. Either `{scip: [...], treesitter: [...], none: [...], files_unresolved: N}`
— each language in exactly one tier, `none` meaning "indexed and searchable,
but mute about how it connects" — or `{status: "unknown", reason:
"index_version_below_2_2_0"}` for an index built before 2.2.0. Never trust an
absent tier as "nothing to resolve".

And `watch`: whether this server is watching the workspace for changes —
"active" (watching; edits trigger an incremental reindex after a debounce),
"disabled" (ATLAS_WATCH not set — the default), "unavailable" (ATLAS_WATCH
set but the optional `watchdog` dependency is not installed) or "failed"
(the observer could not start; see stderr). Only "active" means the index
keeps itself current while the server runs.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, and the description carries the full burden well: it discloses non-mutation ('Never indexes anything itself'), lock contention ('reindexing'), staleness semantics, watch states with their triggering env vars and failure modes, and index-resolution provenance. These are behavioral traits an agent cannot derive from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The usage guidance is front-loaded and every clause there earns its place, but the Returns section is long and largely restates the output schema — the rubric notes this is unnecessary when an output schema exists. The interpretive notes on 'index_resolution', 'resolution_coverage', and 'watch' add real value, so it is not pure bloat, but the block is disproportionately verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be enumerated, yet the description is complete: an agent knows exactly when to call it, that it is read-only and side-effect free, and how to interpret the ambiguous fields. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero input parameters, so per the rubric this is a baseline 4; there is nothing for the description to add or omit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get diagnostic metadata and health status of the local vector index') and immediately distinguishes itself from siblings by declaring it is NOT a precondition for atlas_search/atlas_brief and does NOT index, unlike atlas_index.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use (user asks about health/staleness/indexed repos, or deciding whether to run atlas_index) and explicit when-not (not a precondition for search/brief; call those directly). Alternatives are named with the reason they should be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv1.4.4
    • Addedatlas_context
    • Addedatlas_expand
    • Changedatlas_graph2 fields changed
      • changedInput schema / properties / mode / description
        Previous value: -"One of `hubs`, `path`, or `explain`."New value: +"One of `hubs`, `path`, `explain`, or `affected`."
      • changedInput schema / properties / target / description
        Previous value: -"Required for `path` and `explain`. Accepts exact node id, exact label,\nor a unique suffix."New value: +"Required for `path`, `explain`, and `affected`. Accepts exact node id,\nexact label, or a unique suffix."
    • Changedatlas_search3 fields changed
      • changedInput schema / properties / include_content / description
        Previous value: -"When true, includes each result's 'content'. Defaults to false\n(metadata/location only) to save tokens."New value: +"When true, includes each result's 'content'. Defaults to false\n(metadata/location only) to save tokens. Compact profile never turns content on."
      • addedInput schema / properties / response_profile
        Added value: +{
        +  "default": "default",
        +  "description": "`default` follows ATLAS_CONTEXT_OPTIMIZATION; `full` keeps the\ncurrent delivery format; `compact` applies deterministic compaction and,\nwhen ATLAS_RELEVANCE is on, Jev's top_k cut (or the conservative selection\nwith ATLAS_RELEVANCE_CUT=0).",
        +  "type": "string"
        +}
      • addedInput schema / properties / structural
        Added value: +{
        +  "default": false,
        +  "description": "When true, adds a graph spreading-activation arm to the RRF fusion\nfor this call only. Defaults to false (opt-in; does not change default ranking).",
        +  "type": "boolean"
        +}
  2. 3 tool updatesv1.4.3
    • Addedatlas_brief
    • Addedatlas_graph
    • Addedatlas_status
  3. 4 tool updatesv1.4.2
    • Changedatlas_index4 fields changed
      • changedInput schema / properties / dry_run / description
        Previous value: -"When true, does NOT index anything. Instead, returns the\ntop-level candidate folders under 'workspace' with a count of\neligible files in each, so the agent can present them to the user\nbefore deciding what to index. Defaults to false."New value: +"When true, indexes nothing; returns top-level candidate folders\nwith eligible-file counts so you can present them before deciding.\nDefaults to false."
      • changedInput schema / properties / full / description
        Previous value: -"When true, forces a full re-index ignoring cached file hashes.\nDefaults to false (incremental)."New value: +"Force full re-index ignoring cached hashes. Defaults to false."
      • changedInput schema / properties / paths / description
        Previous value: -"Optional list of subfolder paths, relative to 'workspace', to index\n(e.g. [\"src\", \"docs\"]). When omitted, the entire workspace is indexed.\nEach path must resolve to a location inside 'workspace' (no path traversal)."New value: +"Optional subfolders (relative to 'workspace') to index, e.g.\n[\"src\", \"docs\"]. Omitted = whole workspace. No path traversal outside it."
      • changedInput schema / properties / workspace / description
        Previous value: -"Absolute path to the root directory to index. Defaults to the\nparent directory of the resolved index, or the current working\ndirectory if no index has been resolved yet. Must exist and be a directory."New value: +"Absolute path to index. Defaults to the parent of the resolved\nindex, else the current directory. Must exist and be a directory."
    • Removedatlas_map
    • Changedatlas_search8 fields changed
      • changedInput schema / properties / include_content / default
        Previous value: -trueNew value: +false
      • changedInput schema / properties / include_content / description
        Previous value: -"When false, omits the 'content' field from results to save tokens,\nreturning only metadata and location (file_path, lines, symbol, type, language, score).\nDefaults to true."New value: +"When true, includes each result's 'content'. Defaults to false\n(metadata/location only) to save tokens."
      • changedInput schema / properties / language / description
        Previous value: -"Optional programming language to filter results (e.g., 'python', 'javascript', 'go')."New value: +"Optional language filter (e.g. 'python', 'javascript', 'go')."
      • addedInput schema / properties / limit
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Alias for 'top_k'; overrides it when provided."
        +}
      • changedInput schema / properties / path_prefix / description
        Previous value: -"Optional file path prefix to restrict the search to a specific directory (e.g., 'src/controllers')."New value: +"Optional path prefix filter (e.g. 'src/controllers')."
      • changedInput schema / properties / query / description
        Previous value: -"The natural language search term or description of the code to find."New value: +"Natural language description or exact symbols to find."
      • changedInput schema / properties / repo / description
        Previous value: -"Optional repository name to filter results."New value: +"Optional repository name filter."
      • changedInput schema / properties / top_k / description
        Previous value: -"Maximum number of results to return (integer between 1 and 50). Defaults to 5."New value: +"Max results, 1-50. Defaults to 5."
    • Removedatlas_status
  4. 4 tool updatesv1.0.0
    • First observedatlas_index
    • First observedatlas_map
    • First observedatlas_search
    • First observedatlas_status

TDQS

A4.6/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a distinct role: search finds, expand retrieves content, graph explores connectivity, context assembles task packs, brief orients, status diagnoses, and index builds. The descriptions explicitly clarify when to use which tool, so there is no meaningful overlap.

Naming Consistency5/5

All tools use a consistent `atlas_` prefix followed by a lowercase snake_case term. The convention is predictable across the entire set, with no mixed casing or erratic verb styles.

Tool Count5/5

Seven tools is well-scoped for a codebase atlas. Each tool covers a necessary capability (index, search, expand, graph, context, brief, status) without redundancy.

Completeness4/5

The surface covers the core lifecycle: indexing, diagnostics, search, content expansion, graph queries, context assembly, and orientation. Minor gaps exist (e.g., no explicit delete/clear index or direct enumeration of all indexed files), but agents can work around them.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers