Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
CODENAV_MCP_WORKSPACENoPins the project root (never overridden). Default: unset: follows the client's MCP roots when they name a worktree of the same git repository, else CLAUDE_PROJECT_DIR, else the working directory.
CODENAV_MCP_SOURCE_ROOTNoDirectory scanned for `implementations` candidates and used to derive dotted import paths (e.g. `src`). Default: whole workspace.
CODENAV_MCP_EXTRA_SOURCE_ROOTSNoComma-separated directories (e.g. `tests`) that `implementations` also scans; matches (test doubles) are listed under a separate heading. Default: none.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
workspaceA

Which directory is codenav navigating, and why? Use when results look like they come from the wrong checkout/worktree.

hoverB

Get type/documentation info for the symbol at a position.

line and column are 1-indexed. column is a UTF-16 character offset on the line (not a visual/display column): a leading tab counts as one character.

definitionA

Go to the definition of the symbol at a position.

line and column are 1-indexed. column is a UTF-16 character offset on the line (not a visual/display column): a leading tab counts as one character.

Resolves through ty's type inference, so this works even when the call site only has a typed parameter/attribute (e.g. services.some_method() where services: AppServices is a constructor argument), not just direct references to a name in scope.

referencesB

Find all usages of the symbol at a position across the workspace.

line and column are 1-indexed. column is a UTF-16 character offset on the line (not a visual/display column): a leading tab counts as one character.

search_symbolA

Search the whole workspace for a symbol by name (class, function, method, etc.).

Use this to find a symbol's file/position first, then pass that position to definition/references/hover for precise, type-resolved navigation. Returned positions point at the identifier name (not the class/def keyword) and use the same character-offset column convention as the other tools. Results include a SymbolKind label and are capped. name is accepted as an alias for query. Narrow broad queries with kind (SymbolKind labels, comma-separated: class, function,method, interface, ...) and path (workspace-relative prefix such as src/, or a glob such as src/**/*.py). Production code ranks before tests. Loose fuzzy hits whose names don't contain the query are summarised as a count when real matches exist; pass fuzzy=true to list them too.

diagnosticsB

Get ty's type-check diagnostics (errors/warnings) for a single file.

symbol_infoA

What is X and where is it used? Example: symbol_info(name="UserService.create_user").

One-call summary for a name: header, hover text, definition, and references grouped by file — the usual first lookup instead of chaining search_symbol → hover → definition → references by hand.

name is a symbol name, or a dotted Class.method to resolve a specific method when the plain name is ambiguous. Pass file_path (relative to the workspace root) to disambiguate when several symbols share a name elsewhere in the workspace; if it's still ambiguous, the candidates are listed back so you can retry with a narrower name or file_path. query is accepted as an alias for name.

outlineA

What's in this file? Example: outline(file_path="src/app/services.py").

Indented outline (classes, methods, functions, with line numbers) of a Python file, so you can navigate a large file without reading it in full. Follow up with hover/definition/references at a listed line, or symbol_info by name.

callersA

Who calls this function? Example: callers(name="create_user").

Narrower than references, since it leaves out imports and type-only usages and only lists actual call sites.

name resolves the same way as symbol_info (dotted Class.method accepted; pass file_path to disambiguate a common name). query is accepted as an alias for name.

implementationsA

Find concrete classes that structurally satisfy a Protocol port.

Many hexagonal codebases define ports as Protocols that adapters never subclass explicitly, so ty's own implementation/typeHierarchy return nothing for them. This scans classes under SOURCE_ROOT (the whole workspace by default; see CODENAV_MCP_SOURCE_ROOT) whose method names cover the protocol's, then verifies each candidate with ty's real type checker via an in-memory probe file (never written to disk) — so a result means "assignable", not just "same method names". port_name must itself resolve to a Protocol class; other classes' subclasses are better found with references/symbol_info. name and query are accepted as aliases for port_name. file_path narrows the port lookup to one file when the name exists in several. Members inherited from same-workspace base classes, and fields/properties declared by the port, count when matching names. Directories listed in CODENAV_MCP_EXTRA_SOURCE_ROOTS (e.g. tests) are scanned too; their matches (test doubles) are listed under a separate heading.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 10 tools

Disambiguation4/5

symbol_info explicitly overlaps with hover, definition, references, and search_symbol by providing a one-call summary, which could confuse an agent choosing between name-based and position-based lookups. However, the descriptions clearly delineate position-based precise navigation from name-based summary and distinguish callers from references. Overall mostly distinct with only minor intentional layering.

Naming Consistency4/5

Most tools are lowercase snake_case nouns describing the returned information (workspace, diagnostics, hover, definition, references, outline, callers, implementations). search_symbol and symbol_info deviate slightly with verb_noun or noun_noun phrasing, but the set remains predictable and readable. Minor inconsistency, not chaotic.

Tool Count5/5

Ten tools is well-scoped for a code navigation server, and each tool earns its place by covering a distinct navigation need. No tool appears redundant or extraneous at the count level.

Completeness4/5

The surface covers core navigation operations: symbol lookup, definition, references, hover, outline, callers, implementations, and file diagnostics. Minor gaps exist, such as no workspace-wide diagnostics, no callees (outgoing call hierarchy), or rename, but these are workaroundable and not central to navigation.

Maintenance

ActivityMaintained
ResponsivenessNo issues