codesteer-atlas
A local MCP server that indexes code and documents to provide semantic search, project briefing, graph queries, index diagnostics, and index management.
Search code and documents:
atlas_searchruns hybrid vector + BM25 search over indexed chunks with filters and optional content.Orient in a project:
atlas_briefgives a token-bounded briefing with identity, layers, entrypoints, and hubs.Explore connectivity:
atlas_graphqueries the knowledge graph for hubs, paths, or neighborhood explanations.Diagnose the index:
atlas_statusreports index health, staleness, reindexing status, and resolution diagnostics.Build or update the index:
atlas_indexindexes/re-indexes source and documents, supports incremental or full rebuilds, path scoping, and dry-run previews.
Allows AI agents in GitHub Copilot (VS Code) to search and index codebases using semantic search, AST parsing, and hybrid retrieval.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@codesteer-atlasfind all usages of the authenticate method"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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ê |
Conceitos, busca e indexação | |
Histórico de versões, novidades e guias de migração | |
Pipeline, diagramas e o mapa |
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.logoutA 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.jsonna raiz do projeto.
Opção A — Plugin no projeto atual (Claude Code)
/plugin marketplace add LuisCarlosLopes/codesteer-atlas
/plugin install codesteer-atlasQuando 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 localOpçã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 |
| |
GitHub Copilot (VS Code) |
| |
Kiro |
| |
OpenCode |
| |
Claude Code |
|
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-atlas2. 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 docsO 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 |
| Apresentar um projeto ainda desconhecido: linguagens, camadas e pontos de entrada. Uma vez basta. |
| Localizar onde uma ideia ou um nome está implementado. A resposta traz arquivo e linhas. |
| Montar o pacote de um símbolo ou arquivo para editar, depurar, revisar ou entender. |
| Abrir o código de um resultado compacto, um ou dois símbolos por vez. |
| Ver conexões, o caminho entre dois pontos e o que uma mudança alcança. |
| Criar ou atualizar o índice e o mapa. |
| 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 |
|
| Pasta do índice. No Cursor, amarra o servidor ao |
|
| Resposta compacta em |
|
| Classe grande abre em |
|
| Log local de caracteres, bytes e tokens por resposta. Só o valor |
|
| Troca o contador de tokens. Vazio usa o tokenizer que já vem no pacote. |
|
| Liga o Jev. Sozinha não basta: a URL e a chave abaixo também entram. Também aceita |
|
| Dispensa o Jev quando a consulta já é o nome exato de uma única função, método ou classe entre os candidatos. |
|
| Rubrica do Jev. Ausente, usa a v2 (4 níveis com exemplos), que acerta mais; |
|
| Com o Jev ligado, a resposta compacta tira do |
|
| Endpoint do Jev. Só essa URL HTTPS. |
| a chave do OpenRouter | Credencial do Jev. Se vazia, reutiliza |
|
| Modelo do Jev. Não herda |
|
| Desliga toda reordenação, inclusive o Jev e o cross-encoder. Ausente, a reordenação local fica ligada. |
|
| Cross-encoder local no lugar da reordenação por texto. Ausente, permanece a reordenação local. |
|
| Reindexa sozinho depois que você salva. Exige o extra |
|
| Registra quem chama quem, se o indexador da linguagem estiver instalado. Só o valor |
|
| Gera o propósito de cada símbolo. Sem URL configurada, o índice estrutural segue completo. Só o valor |
|
| Endpoint local de propósito. Entra depois do sampling do MCP. |
|
| API de propósito. Não há host padrão. |
| a chave da API | Vai somente no header. Não entra em log. |
|
| Liga o contrato |
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 |
|
|
|
|
| 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 |
|
Claude Code |
|
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.htmlno navegador.Reindexar ao salvar.
ATLAS_WATCH=1observa o projeto e atualiza o índice depois de uma pausa curta. Requer o extracodesteer-atlas[watch].Quem chama quem.
ATLAS_SCIP=1usa o indexador da linguagem, quando ele está instalado, e registra chamadas entre símbolos.Resumo do propósito de cada símbolo.
ATLAS_SEMANTIC=1consulta 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=1grava, na sua máquina, caracteres, bytes e tokens do que cada ferramenta devolveu.Deixar pastas de fora. Um
.atlasignorena raiz do projeto usa a mesma sintaxe do.gitignore. Pastas como.git,node_modules,.venve o próprio.code-indexjá ficam de fora.
*.log
fixtures/
/distDetalhe 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 toolsatlas_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).
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Detail level. `0` is a minimal orientation (identity plus directory roles); `1` (default) adds per-layer top files, entrypoints and hubs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | One of `edit`, `debug`, `review`, or `understand`. | |
| target | Yes | Node id, exact label, or unique suffix (same resolution as atlas_graph). | |
| response_profile | No | `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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| refs | Yes | Start with 1–2 search refs; add only needed evidence (hard limit 5). | |
| include_content | No | When true (default), include symbol content when it fits the search response budget. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | One of `hubs`, `path`, `explain`, or `affected`. | |
| top_n | No | Number of hubs to return for `hubs` mode. Must be between 1 and 50. | |
| source | No | Required for `path`. Accepts exact node id, exact label, or a unique suffix. | |
| target | No | Required for `path`, `explain`, and `affected`. Accepts exact node id, exact label, or a unique suffix. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Force full re-index ignoring cached hashes. Defaults to false. | |
| paths | No | Optional subfolders (relative to 'workspace') to index, e.g. ["src", "docs"]. Omitted = whole workspace. No path traversal outside it. | |
| dry_run | No | When true, indexes nothing; returns top-level candidate folders with eligible-file counts so you can present them before deciding. Defaults to false. | |
| workspace | No | Absolute path to index. Defaults to the parent of the resolved index, else the current directory. Must exist and be a directory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_searchA
Search code AND documents in the project's local index — your FIRST tool to find, explore or investigate anything here, before broad file reads or grep.
Runs a semantic hybrid search (vector + BM25, fused via RRF) over pre-indexed chunks
of source code (classes/functions/methods) and documents (Markdown, text, JSON/YAML/
TOML). Pass natural language or exact symbols. To get your bearings in an unfamiliar
project first, use atlas_brief.
Token-efficient two-pass pattern: by default this returns metadata only (file_path,
lines, symbol, type, score). Locate first, then read the exact lines with Read, or
re-call with include_content=true for the few results whose content you actually need.
Call directly — do NOT call atlas_status first "just to check". If the index does
not exist yet, this raises an actionable error explaining how to build it (see
atlas_index).
Omit response_profile to respect the operator configuration. Do not select "full" routinely: it overrides ATLAS_CONTEXT_OPTIMIZATION even when enabled. Start with metadata and expand only symbols needed to close an evidence gap. Start with only one or two directly relevant symbols; inspect their contents before expanding helpers, types or additional results. Do not expand every search hit automatically. Stop when the task has sufficient evidence. Use atlas_expand(refs) for omitted content; use "full" only when explicitly requested or when fields omitted by the compact format are required.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | No | Optional repository name filter. | |
| limit | No | Alias for 'top_k'; overrides it when provided. | |
| query | Yes | Natural language description or exact symbols to find. | |
| top_k | No | Max results, 1-50. Defaults to 5. | |
| language | No | Optional language filter (e.g. 'python', 'javascript', 'go'). | |
| structural | No | When true, adds a graph spreading-activation arm to the RRF fusion for this call only. Defaults to false (opt-in; does not change default ranking). | |
| path_prefix | No | Optional path prefix filter (e.g. 'src/controllers'). | |
| include_content | No | When true, includes each result's 'content'. Defaults to false (metadata/location only) to save tokens. Compact profile never turns content on. | |
| response_profile | No | `default` follows ATLAS_CONTEXT_OPTIMIZATION; `full` keeps the current delivery format; `compact` applies deterministic compaction and, when ATLAS_RELEVANCE is on, Jev's top_k cut (or the conservative selection with ATLAS_RELEVANCE_CUT=0). | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does so well: it discloses the default metadata-only return shape (file_path, lines, symbol, type, score), the token-efficiency rationale, the actionable-error behavior when no index exists, and how response_profile interacts with ATLAS_CONTEXT_OPTIMIZATION and ATLAS_RELEVANCE.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, primary directive and the two-pass pattern are front-loaded, and most sentences earn their place. The tail repeats itself, however: 'Start with only one or two directly relevant symbols... before expanding helpers' largely restates 'Do not expand every search hit automatically. Stop when the task has sufficient evidence.'
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no explanation. For a 9-parameter tool the description still covers when to use it, the recommended call sequence, token trade-offs, config overrides, and failure behavior — nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description adds genuine operational meaning on top, e.g. 'Omit response_profile to respect the operator configuration' and 'Do not select full routinely', plus the guidance that compact never turns content on. It adds behavioral intent for include_content and response_profile rather than repeating the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ('Search code AND documents in the project's local index') and even names the mechanism (semantic hybrid search: vector + BM25 fused via RRF) over pre-indexed code chunks and docs. It distinguishes itself from siblings by naming atlas_brief, atlas_expand, atlas_status and atlas_index by role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions itself as the FIRST tool to use 'before broad file reads or grep', names atlas_brief for orientation in unfamiliar projects, and tells the agent NOT to call atlas_status first. It also prescribes the two-pass workflow (locate with metadata, then Read or re-call with include_content).
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.| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v1.4.4- Added
atlas_context - Added
atlas_expand - Changed
atlas_graph2 fields changed- changed
Input schema / properties / mode / descriptionPrevious value: -"One of `hubs`, `path`, or `explain`."New value: +"One of `hubs`, `path`, `explain`, or `affected`." - changed
Input schema / properties / target / descriptionPrevious 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."
- Changed
atlas_search3 fields changed- changed
Input schema / properties / include_content / descriptionPrevious 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." - added
Input schema / properties / response_profileAdded 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" +} - added
Input schema / properties / structuralAdded 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" +}
3 tool updates
v1.4.3- Added
atlas_brief - Added
atlas_graph - Added
atlas_status
4 tool updates
v1.4.2- Changed
atlas_index4 fields changed- changed
Input schema / properties / dry_run / descriptionPrevious 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." - changed
Input schema / properties / full / descriptionPrevious 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." - changed
Input schema / properties / paths / descriptionPrevious 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." - changed
Input schema / properties / workspace / descriptionPrevious 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."
- Removed
atlas_map - Changed
atlas_search8 fields changed- changed
Input schema / properties / include_content / defaultPrevious value: -trueNew value: +false - changed
Input schema / properties / include_content / descriptionPrevious 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." - changed
Input schema / properties / language / descriptionPrevious value: -"Optional programming language to filter results (e.g., 'python', 'javascript', 'go')."New value: +"Optional language filter (e.g. 'python', 'javascript', 'go')." - added
Input schema / properties / limitAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Alias for 'top_k'; overrides it when provided." +} - changed
Input schema / properties / path_prefix / descriptionPrevious 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')." - changed
Input schema / properties / query / descriptionPrevious value: -"The natural language search term or description of the code to find."New value: +"Natural language description or exact symbols to find." - changed
Input schema / properties / repo / descriptionPrevious value: -"Optional repository name to filter results."New value: +"Optional repository name filter." - changed
Input schema / properties / top_k / descriptionPrevious value: -"Maximum number of results to return (integer between 1 and 50). Defaults to 5."New value: +"Max results, 1-50. Defaults to 5."
- Removed
atlas_status
4 tool updates
v1.0.0- First observed
atlas_index - First observed
atlas_map - First observed
atlas_search - First observed
atlas_status
TDQS
Scored across 7 tools
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.
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.
Seven tools is well-scoped for a codebase atlas. Each tool covers a necessary capability (index, search, expand, graph, context, brief, status) without redundancy.
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
Related MCP Connectors
Repository knowledge graph MCP server for codebase understanding and debugging.
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server with local vector search for your codebase. Smart indexing, semantic search, Git history — all offline.752 PyPI49MIT
- AlicenseAqualityDmaintenanceLocal-first MCP server for semantic + keyword hybrid code search. Zero external services, no API keys required.2MIT
- AlicenseAqualityBmaintenanceMCP server for semantic code search with AST-aware chunking, hybrid vectors, and query syntax.121Apache 2.0
- FlicenseAqualityDmaintenanceSelf-hosted hybrid code search MCP server with text, symbol, and semantic search layers. Runs locally, no third-party MCP servers, LSP, or SaaS.8-