Skip to main content
Glama

npm node licencia

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-intent

Esto 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 57ms

Respuesta

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 loc

inspect_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 49ms

Respuesta

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 7ms

Respuesta

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 12ms

Respuesta

"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 20ms

Respuesta

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 23ms

Respuesta

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 100ms

Respuesta

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:2

file_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 134ms

Respuesta

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 closedPeriodsBalance

Paquetes

Paquete

Rol

@type-atlas/mcp

el servidor MCP

@type-atlas/core

API de inteligencia de código sin interfaz

@type-atlas/lenguaje-servidor

el servidor de lenguaje basado en Volar que el paquete central similar

Desarrollo

vp install
vp run check
vp run check:distribution

CONTRIBUCIONANDO.md tiene el proceso de cambio y liberación.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
33Releases (12mo)
Commit activity

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

  • A
    license
    B
    quality
    D
    maintenance
    Exposes 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.
    9
    102
    3
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A 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.
    7
    18
    1
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Bridges 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,520
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI coding agents to interact with TypeScript projects through compiler-level code intelligence, providing tools for navigation, type information, diagnostics, refactoring, and semantic search.
    29
    339
    3
    Apache 2.0

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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