type-atlas
Type Atlas es un servidor MCP para inteligencia de código. Un servidor de lenguaje Volar responde desde el proyecto TypeScript propietario de cada archivo, de modo que definiciones, referencias, tipos, diagnósticos y rangos coinciden con lo que muestra el editor.
Las respuestas se escriben para una ventana de contexto en lugar de una pantalla. Un esquema
de archivo son las declaraciones que contiene, no cada callback anidado. Una lectura pliega los cuerpos de
las firmas. inspect_symbol compone ocho solicitudes de servidor de lenguaje en
una sola respuesta. Cada respuesta indica el alcance que cubrió y su coste.
Lo uso a diario en un monorepositorio grande mantenido casi en su totalidad por agentes.
TypeScript, Markdown y JSON. Node 22.20 o más reciente. Apache-2.0.
Instalación
codex mcp add type-atlas -- npx --yes @type-atlas/mcp@latest
claude mcp add --scope user type-atlas -- npx --yes @type-atlas/mcp@latest
code --add-mcp '{"name":"type-atlas","command":"npx","args":["--yes","@type-atlas/mcp@latest"]}'Cualquier otro cliente toma la forma estándar:
{
"mcpServers": {
"type-atlas": {
"command": "npx",
"args": ["--yes", "@type-atlas/mcp@latest"]
}
}
}Un cliente que inicia servidores sin tu PATH de shell no encontrará npx por
nombre; da la ruta absoluta desde which npx cuando ocurra. En Windows,
un cliente que no pueda lanzar el shimitch npx.cmd necesita "command": "cmd" con
"args": ["/c", "npx", "--yes", "@type-atlas/mcp@latest"].
Los clientes leen la configuración de MCP al inicio, así que reinicia después. @latest se resuelve en
cada inicio del proceso; fija una versión si no quieres que el comportamiento de las herramientas se mueva
bajo ti.
search_code, related_code, investigate_code y search_dependency_code
ejecutan un índice semántico a través de uvx y necesitan
uv. Sin él, esos
cuatro informan que falta uv, explore_symbol elimina su sección de código relacionado,
y el resto no se ve afectado.
Recomendado
Instalar el servidor no cambia lo que un agente alcanza. Algunos agentes,
Claude entre ellos, montan lo que su shell permita, encadenado,
y elabora una nueva justificación en cada momento, así que nombrar algunos comandos para evitar
no funciona. La instrucción tiene que descartar toda la categoría y nombrar la extensión.
excepciones. Añade esto a AGENTS.md o CLAUDE.md:
Type Atlas MCP es la herramienta requerida para leer y navegar en código TypeScript y JavaScript. Esto no es una preferencia. Ningún comando de shell es una alternativa aceptable, sea lo que sea que la componga, ni mucho menos una simple lectura de archivo. Las únicas alternativas válidas son un servidor que está caído, una llamada que error, o un archivo que no es TS ni JS.
--require-intent
Con este indicador, una llamada de solo lectura tiene que llevar una frase que nombre la decisión que sirve, y esa frase es capitaneada encima de la respuesta. Una llamada sin uno falla.
codex mcp add type-atlas -- npx --yes @type-atlas/mcp@latest --require-intentEsto es para agentes que navegan mucho más allá de lo que su cambio necesita y no pueden decir por qué después. Desactivado por defecto.
Related MCP server: agent-workspace-mcp
Resultados de la llamada
Las rutas son relativas al espacio de trabajo, las coordenadas se basan en las unidades, así que una ubicación en uno La llamada es una entrada válida para la siguiente llamada. Los herramientas de edición devuelven parches; no hay nada escrito para ti.
Todo lo que está debajo queda capturado desde el servidor en ejecución contra
fixtures/ledger por el
suite de escenarios, que reproduce las mismas llamadas
de nuevo y falla en la deriva. Nada está a mano, y cambiar lo que una herramienta
responde a este archivo en el mismo commit. La fuente es
README.mdoc. Cada herramienta tiene una página con más casos en
docs/tools.
list_files
Estructura, líneas de conteo, y un git diff en un solo árbol, usando la insignia.
letras que los editores ya usan. Archivos eliminados figuran como una línea incluso aunque existan solamente
en la respuesta del git. Carpetas plegadas dicen lo que contienen en lugar de desaparecer.
Entrada del agente
tool: List files
workspace: fixtures/ledger
# working tree arranged: currency.ts edited · rounding.ts created · index.ts deleted
directory: packages/money
depth: 2
# answered in 57msRespuesta
packages/money/
├ src/ · 3 changed
│ ├ currency.ts · 21 loc · M +2
│ ├ index.ts · D -12
│ ├ money.ts · 58 loc
│ ├ rounding-mode.ts · 15 loc
│ └ rounding.ts · 11 loc · U
├ tests/
│ ├ money.test.ts · 15 loc
│ └ rounding-parity.ts · 15 loc
├ package.json · 19 loc
└ tsconfig.json · 20 locinspect_symbol
Desplazamiento, definiciones, no tipos, implementaciones, llamantes, llamadas, y referencias en uno sola. Las referencias son el residuo después de llamadas y definiciones se contabilizan, así que un uso se cuenta una vez. Contra llamar a esas herramientas separadamente son 4 veces menos caracteres y 7 veces menos viajes de ida y vuelta.
Entrada del agente
tool: Inspect symbol
workspace: fixtures/ledger
file: packages/accounts/src/journal.ts
symbol: Journal
# answered in 49msRespuesta
Journal [class] · packages/accounts/src/journal.ts:24:14-24:21 · range 24:1-73:2 · packages/accounts/tsconfig.json
```typescript
class Journal<TMeta = undefined>
```
An append-only journal of balanced entries. `TMeta` carries whatever a
consumer attaches to each entry — an import batch id, an approval trail —
without the journal knowing its shape.
## Callers (4)
packages/accounts/tests/journal.test.ts
├ test("posts a balanced transfer through the overload") callback [function] 5:56-14:2 · calls 6:23-6:30
└ test("refuses an unbalanced entry") callback [function] 16:37-29:2 · calls 17:23-17:30
packages/reports/src/balance.ts
└ balancesAsOf [variable] 23:14-23:26 · range 23:14-51:2 · calls 24:12-24:19
packages/importers/src/csv.ts
└ importStatement [variable] 28:14-28:29 · range 28:14-47:2 · calls 29:12-29:19
## Mentions that are not calls (4 of 9 references · 9 projects loaded)
packages/accounts/tests/journal.test.ts:3:25-3:32: import { credit, debit, Journal, UnbalancedEntryError } from "../src/index.ts";
packages/accounts/src/index.ts:11:22-11:29: export { type Entry, Journal, UnbalancedEntryError } from "./journal.ts";
packages/reports/src/balance.ts:4:8-4:15: type Journal,
packages/importers/src/csv.ts:1:10-1:17: import { Journal, type Entry, credit, debit, type AccountPath } from "@ledger/accounts";
references lists all 9, with paging.read_file
El argumento es un array, así varios archivos llegan en una llamada. Cuerpos a
firmas por defecto y el encabezado dice cuántas líneas de código html; doble: devuelve
falso.
Entrada del agente
tool: Read files
workspace: fixtures/ledger
file: ["packages/accounts/src/posting.ts","packages/money/src/rounding-mode.ts"]
# answered in 7msRespuesta
2 files · 42 lines · 6 folded to signatures, pass fold: false for the bodies
=== packages/accounts/src/posting.ts · 32 lines ===
1 | import { type Money, negate } from "@ledger/money";
2 | import type { AccountPath } from "./account.ts";
3 |
4 | /**
5 | * One side of a journal entry. The discriminant is the bookkeeping side, so
6 | * every consumer's switch is checked for exhaustiveness by the compiler.
7 | */
8 | export type Posting =
9 | | { readonly side: "debit"; readonly account: AccountPath; readonly amount: Money }
10 | | { readonly side: "credit"; readonly account: AccountPath; readonly amount: Money };
11 |
12 | export const debit = (account: AccountPath, amount: Money): Posting => ({
13 | side: "debit",
14 | account,
15 | amount,
16 | });
17 |
18 | export const credit = (account: AccountPath, amount: Money): Posting => ({
19 | side: "credit",
20 | account,
21 | amount,
22 | });
23 |
24 | /** A posting's effect on a debit-normal running balance. */
25 | export const signedAmount = (posting: Posting): Money => {
| ... 26-31 folded
32 | };
=== packages/money/src/rounding-mode.ts · 15 lines ===
1 | /** How sub-minor precision resolves when a statement and the books disagree. */
2 | export enum RoundingMode {
3 | HalfUp = "half-up",
4 | HalfEven = "half-even",
5 | Truncate = "truncate",
6 | }
7 |
8 | /** Per-institution conventions, as observed in their exports. */
9 | const bankRounding: Readonly<Record<string, RoundingMode>> = {
10 | "first-national": RoundingMode.HalfEven,
11 | "harbor-credit": RoundingMode.HalfUp,
12 | };
13 |
14 | export const roundingModeOf = (bank: string): RoundingMode =>
15 | bankRounding[bank] ?? RoundingMode.HalfEven;occurrencias
Texto literal, agrupado por archivo, con el número de archivos escaneados. La semántica non una ranqueo de lo que existe, lo que no sirve para confirmar que una testarada tras un derribado; un cero aquí con el mismo contador de seis, tal que significa algo.
Entrada del agente
tool: Occurrences
workspace: fixtures/ledger
text: signedAmount
# answered in 12msRespuesta
"signedAmount" occurs 12 times in 7 files · 67 files scanned under the workspace · 1 file of declared build output not scanned.
packages/accounts/src/index.ts:12:39 · export { credit, debit, type Posting, signedAmount } from "./posting.ts";
packages/accounts/src/journal.ts
├ 3:39 · import { credit, debit, type Posting, signedAmount } from "./posting.ts";
└ 52:12 · .map(signedAmount)
packages/accounts/src/posting.ts:25:14 · export const signedAmount = (posting: Posting): Money => {
packages/reconcile/src/drift.ts
├ 4:24 · import { type Posting, signedAmount } from "@ledger/accounts";
└ 20:37 · const journalTotal = postings.map(signedAmount).reduce((total, amount) => total + amount);
packages/reconcile/src/matching.ts
├ 1:55 · // DELIBERATELY BROKEN — the imports for `money` and `signedAmount` are
└ 14:20 · const amount = signedAmount(posting);
packages/reports/src/balance.ts
├ 6:3 · signedAmount,
└ 34:57 · add(own.get(posting.account) ?? zero(currency), signedAmount(posting)),
packages/rules/src/builtin.ts
├ 1:10 · import { signedAmount } from "@ledger/accounts";
└ 26:12 · .map(signedAmount)search_code
Encuesta que el código por lo que hace, de modo que no puedes no adivinar cómo, se llama. Llegó el trueno el cuerpo en orden de clasificación, cada uno con el truco que, de modo que el siguiente el truco de la llamada a la tiene donde ir. Respuestas en vivo también a llevar el cuerpo un por cierto de relación; la sexual de la misma por alto porque las partituras las meten entre el sistema de bytes.
Entrada del agente
tool: Search code
workspace: fixtures/ledger
query: walking an account up through each of its ancestor accounts
snippetLines: 6
# answered in 20msRespuesta
Search: walking an account up through each of its ancestor accounts
5 matches · no identifier to anchor on, so these are ranked by meaning alone
=== 1 · packages/accounts/src/account.ts:21-35 ===
Structure: parentPath
Symbol: parentPath [variable] · selection 21:14-21:24 · range 21:14-24:2
21 | export const parentPath = (path: AccountPath): AccountPath | undefined => {
22 | const at = path.lastIndexOf(":");
23 | return at === -1 ? undefined : path.slice(0, at);
24 | };
25 |
26 | /** Every ancestor from root to the account itself: `a`, `a:b`, `a:b:c`. */
=== 2 · packages/reports/src/balance.ts:1-23 ===
Structure: BalanceLine
Symbol: BalanceLine [interface] · selection 11:18-11:29 · range 11:1-16:2
1 | import {
2 | type AccountPath,
3 | type Entry,
4 | type Journal,
5 | lineage,
6 | signedAmount,
=== 3 · packages/accounts/src/journal.ts:59-73 ===
Structure: Journal > history
Symbol: history [method] · selection 60:3-60:10 · range 60:3-64:4
59 | /** Entries touching an account, oldest first. */
60 | history(account: AccountPath): readonly Entry<TMeta>[] {
61 | return this.entries.filter((entry) =>
62 | entry.postings.some((posting) => posting.account === account),
63 | );
64 | }
=== 4 · packages/reports/src/statement.ts:1-11 ===
Structure: statementLine
Symbol: statementLine [variable] · selection 8:14-8:27 · range 8:14-11:2
1 | import { type Account, normalBalance } from "@ledger/accounts";
2 | import { format, type Money, negate } from "@ledger/money";
3 |
4 | /**
5 | * One rendered statement line. The sign follows the account's normal side:
6 | * a liability holding a credit balance reads as positive on its statement.
=== 5 · packages/accounts/src/posting.ts:1-24 ===
Structure: credit
Symbol: credit [variable] · selection 18:14-18:20 · range 18:14-22:3
1 | import { type Money, negate } from "@ledger/money";
2 | import type { AccountPath } from "./account.ts";
3 |
4 | /**
5 | * One side of a journal entry. The discriminant is the bookkeeping side, so
6 | * every consumer's switch is checked for exhaustiveness by the compiler.diagnostics
El propio comprobador de todo el programa de conflicto, por archivo no por archivo. Un la edición es una función un solo otro diferente, y esta es la llamada que encuentra ese archivo.
Entrada del agente
tool: Diagnostics
workspace: fixtures/ledger
file: packages/reconcile/src/drift.ts
# answered in 23msRespuesta
packages/reconcile/src/drift.ts · 4 problems · packages/reconcile/tsconfig.json
=== packages/reconcile/src/drift.ts ===
error ts(2365) 16:33-16:52 — inside lines.reduce() callback
Operator '+' cannot be applied to types 'number' and 'Money'.
14 | /** Statement total, computed by someone who forgot Money is not a number.…
15 | export const statementTotal = (lines: readonly StatementLine[]): number =>
16 | lines.reduce((total, line) => total + line.amount, 0);
| ^^^^^^^^^^^^^^^^^^^
17 |
18 | /** Drift between the journal's view and the bank's view of one day. */
error ts(2365) 20:77-20:91 — inside reduce() callback
Operator '+' cannot be applied to types 'import("packages/money/src/money").Money' and 'import("packages/money/src/money").Money'.
18 | /** Drift between the journal's view and the bank's view of one day. */
19 | export const drift = (postings: readonly Posting[], statement: readonly St…
20 | const journalTotal = postings.map(signedAmount).reduce((total, amount) =…
| ^^^^^^^^^^^^^^
21 | return format(money(journalTotal - statementTotal(statement), "usd"));
22 | };
error ts(2345) 21:65-21:70 — inside drift
Argument of type '"usd"' is not assignable to parameter of type 'Currency'.
19 | export const drift = (postings: readonly Posting[], statement: readonly St…
20 | const journalTotal = postings.map(signedAmount).reduce((total, amount) =…
21 | return format(money(journalTotal - statementTotal(statement), "usd"));
| ^^^^^
22 | };
23 |
error ts(2362) 21:23-21:35 — inside drift
The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
19 | export const drift = (postings: readonly Posting[], statement: readonly St…
20 | const journalTotal = postings.map(signedAmount).reduce((total, amount) =…
21 | return format(money(journalTotal - statementTotal(statement), "usd"));
| ^^^^^^^^^^^^
22 | };
23 |workspace_symbols
Encuentra una declaración por nombre en cada proyecto. El cargamento ha sido limitado, cuando sabes algo de qué se llama y nada de dónde vive.
Entrada del agente
tool: Workspace symbols
workspace: fixtures/ledger
file: packages/importers/src/statement-parser.ts
query: Parser
# answered in 100msRespuesta
3 symbols matching Parser · 9 projects loaded · packages/importers/tsconfig.json
CsvStatementParser [class] · packages/importers/src/statement-parser.ts:25:1-35:2
FixedWidthStatementParser [class] · packages/importers/src/statement-parser.ts:41:1-64:2
StatementParser [class] · packages/importers/src/statement-parser.ts:7:1-23:2file_references
Quién importa este módulo. La pregunta de nivel de módulo, que se responde sin elegir un símbolo dentro de él primero.
Entrada del agente
tool: File references
workspace: fixtures/ledger
file: packages/money/src/money.ts
# answered in 134msRespuesta
packages/money/src/money.ts · referenced from 90 places · 10 projects loaded · packages/money/tsconfig.json
1-20 of 90 places · pass offset: 20 for the rest
packages/accounts/src/journal.ts
├ 1:10 — at module level
└ 53:15 — inside post
packages/money/src/index.ts
├ 3:3 — at module level
└ 4:3 — at module level
packages/money/tests/money.test.ts
├ 2:10 — at module level
├ 2:15 — at module level
├ 5:10 — inside test("adds amounts of one currency exactly") callback
├ 9:16 — inside expect() callback
├ 9:67 — inside test("refuses to combine currencies") callback
├ 13:10 — inside test("formats major and minor units per currency") callback
└ 14:10 — inside test("formats major and minor units per currency") callback
packages/reconcile/src/drift.ts
├ 5:10 — at module level
└ 21:10 — inside drift
packages/reports/src/balance.ts
├ 8:10 — at module level
├ 34:9 — inside balancesAsOf
└ 41:28 — inside balancesAsOf
packages/reports/src/statement.ts
├ 2:10 — at module level
└ 10:40 — inside statementLine
packages/rules/src/builtin.ts
├ 2:10 — at module level
└ 28:58 — inside closedPeriodsBalancePaquetes
Paquete | Rol |
el servidor MCP | |
API de inteligencia de código sin interfaz | |
el servidor de lenguaje basado en Volar que el paquete central similar |
Desarrollo
vp install
vp run check
vp run check:distributionCONTRIBUCIONANDO.md tiene el proceso de cambio y liberación.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceExposes TypeScript Language Server Protocol functionality to AI agents, enabling them to query types at specific positions, find definitions and references, get diagnostics, run type tests, and type-check inline code just like in an IDE.91023MIT
- AlicenseAqualityDmaintenanceA TypeScript-aware MCP server that provides coding agents with repository discovery, code intelligence, and web project context for local codebases. It enables deep symbol navigation, diagnostic reporting, and structural analysis of monorepos without requiring full IDE integration.7181MIT
- AlicenseNot gradedqualityFmaintenanceBridges the Model Context Protocol with Language Server Protocol to provide AI agents with persistent access to code intelligence features including navigation, diagnostics, refactoring, and completion across 7+ programming languages.3,520MIT
- AlicenseAqualityCmaintenanceEnables AI coding agents to interact with TypeScript projects through compiler-level code intelligence, providing tools for navigation, type information, diagnostics, refactoring, and semantic search.293393Apache 2.0
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tyler-mitchell/type-atlas'
If you have feedback or need assistance with the MCP directory API, please join our Discord server