Skip to main content
Glama

transcend

Docs: ldippo.github.io/transcend-mcp · Suite: transcend-harness

A code-intelligence MCP server for coding agents: a cheap static map of a repository (tree-sitter structural graph — clusters, hubs, budgeted subgraphs) plus precise live navigation (real language servers via LSP), bridged by stable symbol IDs. Every response is structured, token-budgeted, and anchored to file:line — never a raw file dump.

Languages: Python (pyright) and TypeScript/JavaScript (typescript-language-server). Adding a language = a tree-sitter grammar + .scm queries + an LSP command — no core changes.

Install & run

npm install
npm run build

# optional but recommended — without them the server runs map-only:
npm install -g pyright typescript-language-server typescript

node dist/src/index.js --root /path/to/repo        # stdio MCP server
node dist/src/index.js --root /path/to/repo --no-watch

On first run the server indexes the repo in the background (≈0.5s per 1k files) and persists the index under <repo>/.transcend/ (add it to .gitignore). A file watcher keeps the index fresh incrementally.

Related MCP server: AgentsBestFriend

Wire into a harness

Any MCP-over-stdio harness works. Claude Code:

claude mcp add transcend -- node /path/to/transcend/dist/src/index.js --root /path/to/repo

Generic MCP config:

{
  "mcpServers": {
    "transcend": {
      "command": "node",
      "args": ["/path/to/transcend/dist/src/index.js", "--root", "/path/to/repo"]
    }
  }
}

Give the agent docs/AGENT_GUIDE.md — it documents the orient-with-map / confirm-with-LSP policy that the tool descriptions also encode.

Tool surface

Tool

Layer

Purpose

map_overview

map

clusters + hub symbols; start here

map_search

map

fuzzy symbol lookup → node IDs

map_neighbors

map

callers/callees/imports/inheritance around a node

map_path

map

shortest structural path between two symbols

map_rebuild, map_status

map

index management + both layers' health

nav_definition / nav_references / nav_implementations

live

ground truth, always current

nav_type / nav_symbols / nav_workspaceSymbols

live

hover, file outline, workspace search

nav_callHierarchy

live

incoming/outgoing calls (capability-gated, with fallback)

resolve

bridge

node ID ⇄ verified live file:line:col, staleness flagged

metrics_report

meta

token savings so far (this session + cumulative)

All tools accept tokenBudget (default 2000, max 10000) and return a uniform envelope; see the agent guide.

Token savings

Every successful tool response is measured against the naive alternative — reading in full every file the response points into — and the delta is accumulated cumulatively in .transcend/metrics.json:

savings = baseline (full reads of referenced files) − actual (emitted tokens)

Baseline is an upper bound (an agent might not read whole files). View it three ways: the metrics_report tool (live, mid-session), a one-line stderr summary on shutdown, or the CLI report:

node dist/src/index.js report --root /path/to/repo          # per-tool table + total
node dist/src/index.js report --root /path/to/repo --json   # raw JSON

Development

npm test          # unit + integration (LSP tests auto-skip if servers absent)
npm run smoke     # build + scripted MCP client against the TS fixture
npx @modelcontextprotocol/inspector node dist/src/index.js --root test/fixtures/ts-mini

Architecture notes: docs/ARCHITECTURE.md.

No telemetry. No network calls. Secrets are never read; configuration is CLI flags only.

Available Tools

14 tools
map_neighborsA

Explore the static relationship graph around one node: callers/callees, imports, inheritance, containment. Call this BEFORE nav_references when you want the shape of the dependency fan-in/out cheaply — it is instant and token-budgeted, while nav_references invokes the language server. Edges come from static analysis: resolved:false edges are name-match guesses, and any edge can be stale or miss dynamic dispatch. Once you've picked the edges that matter, verify with nav_references or nav_callHierarchy at the location from resolve(nodeId).

Inputs: nodeId (required), depth, maxNodes, direction, +2 more.

map_overviewA

START HERE for any unfamiliar codebase or feature area. Returns a cheap, token-budgeted structural summary (clusters of related files, hub symbols with node IDs) from a pre-built static index — no language-server cost, milliseconds even on large repos. Use the returned node IDs with map_neighbors to explore relationships and with resolve to jump to exact live locations. The index may lag recent edits: before editing or relying on a specific line number, confirm with resolve or nav_definition, which query the live language server.

Inputs: focus, tokenBudget, hubsPerCluster.

map_pathA

Shortest structural path between two symbols in the static map (over imports/calls/inheritance/containment). Useful to understand how two areas connect before reading code. Static and possibly stale — confirm the load-bearing hops with nav_references.

Inputs: to (required), from (required), maxLen, tokenBudget, +1 more.

map_rebuildA

Rebuild the static map index (incremental: only changed files are re-parsed). Long-running on first build of a large repo. Not needed for nav_* correctness — those are always live. Use when map responses flag staleness or after large refactors.

Inputs: scope.

map_statusA

Health and freshness of both layers: map age, file/symbol/edge counts, stale files, watcher state, and per-language LSP availability. Cheap; call when results look off or to check whether a language server is installed.

Inputs: no named parameters.

resolveA

The bridge between the static map and the live language server — call it whenever you switch layers. Given a map nodeId, returns the verified current file:line:col plus live symbol info, with mapStale:true if the indexed location has drifted (the live location is authoritative). Given a file:line:col, returns the enclosing symbol chain and the matching map nodeId (inMap:false with the nearest container if the map hasn't caught up). Use before nav_* calls that need exact positions, and after nav_* results to re-enter the map graph.

Inputs: col, file, line, nodeId, +1 more.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 14 tools

    Disambiguation5/5

    Each tool has a distinct purpose with clear boundaries between static map exploration (map_*) and live language server queries (nav_*). The descriptions explicitly guide when to use each, preventing confusion.

    Naming Consistency5/5

    Tools follow a consistent pattern: map_+verb for static operations and nav_+noun/verb for live queries. The 'resolve' tool is a well-justified exception serving as a bridge between layers.

    Tool Count5/5

    With 14 tools, the server covers both cheap static analysis and expensive but accurate live queries without unnecessary overlap. The number is well-scoped for comprehensive code navigation.

    Completeness5/5

    The tool set covers all common navigation tasks: structural overview, search, path finding, call hierarchy, definitions, references, implementations, symbols, type information, and handles staleness. No obvious gaps exist.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for semantic codebase navigation that builds an AST index of symbols, imports, and exports, providing AI agents with tools to search, explore, and understand code.
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Give your AI coding agents superpowers — a local MCP server for fast, token-efficient code navigation, search & analysis.
      -
    • A
      license
      Not graded
      quality
      B
      maintenance
      A persistent code-intelligence MCP server that builds a queryable knowledge graph of your codebase, enabling AI assistants to perform cross-file structural reasoning, dependency analysis, and blast radius detection.
      9
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      MCP server that gives AI coding agents codebase navigation intelligence, enabling symbol lookup, reference finding, type inspection, and diagnostics through tools like locate, refs, hover, diagnostics, status, and rename.
      548 npm
      MIT