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-atlas find 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).
Inputs: level. Returns: result
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.
Inputs: intent (required), target (required), response_profile. Returns: result
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.
Inputs: refs (required), include_content. Returns: result
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.
Inputs: mode (required), top_n, source, target. Returns: result
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.
Inputs: full, paths, dry_run, workspace. Returns: result
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.
Inputs: query (required), repo, limit, top_k, +5 more. Returns: result
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.Inputs: no named parameters. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
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
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
Self-hosted AI workspace: semantic RAG document search, long-term memory, and AI chat via MCP.
Repository knowledge graph MCP server for codebase understanding and debugging.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server with local vector search for your codebase. Smart indexing, semantic search, Git history — all offline.7107 PyPI50MIT
- 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-