Skip to main content
Glama

Symvanta

relate

Read-onlyIdempotent

Graph relationship traversal via one kind (real edges, not text). Kinds (1-10 symbols; heritage/chain one):

  • callers: direct callers. granularity:'file' (default) one row/file, 'site' one row/caller.

  • dependencies: outgoing calls/imports.

  • blast_radius: upstream impact walk (every caller, importer and referencer up to 3 hops, no per-hop sampling) + co-change siblings; risk {level,signals}. includeCrossRepo defaults ON here (off for others). blastRadiusTotalCount is the number of distinct symbols that 3-hop walk reached, not the row count: the blastRadius array is capped by expansionLimit. blastRadiusTruncated:true means the rows are a sample of that total; blastRadiusTotalAtLeast:true means the count stopped at its 10000 bound, so quote it as "N+". The walk stops at 3 hops, so it can miss impact further away; it never overcounts. Never report the number of listed rows as the impact size.

  • implementers: classes implementing interfaces via heritage edges.

  • heritage: full hierarchy (ancestors+descendants) of ONE type. maxDepth caps it.

  • chain: call-chain paths for a node (nodeId OR selectors[0]); chain params tune the walk.

  • path: shortest connection between selectors[0] (from) and selectors[1] (to). Direction-agnostic hop-labeled path; found:false when none within 6 hops. minimal:true = {id,name,filePath,startLine}-only (~50% cheaper) on callers/dependencies/blast_radius/implementers; granularity on callers/blast_radius. Rows may carry confidence (tiers in init usage); a cross-repo callers/dependencies row joined by a SCIP moniker also carries package (the package name that bridged the repos). 0 results: call locate (mode:text), not Grep; reason:"no_edges_indexed" = no edges.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
kindNoRelationship to traverse. See the tool description for each kind.callers
depthNochain. Chain length.
limitNoPer-selector candidate cap (not heritage/chain).
intentNoRerank by trigram similarity (not heritage/chain).
nodeIdNoStart node for chain (OR selectors[0]).
minimalNo{id,name,filePath,startLine}-only, ~50% cheaper; not heritage/chain.
feedbackNoOptional: report how a previous answer worked out; piggybacks on any call.
maxDepthNoMax depth for heritage; also caps the kind:path walk (clamped to <=6).
maxPathsNochain. Cap on returned paths.
commitShaNoPin reads to one indexed revision (7-40 hex). Graph tools error with revision_not_indexed when it is not an indexed revision of the scoped repository, or revision_not_servable when that revision's graph was superseded by a later reindex, and echo the revision served back as commitSha; source ops read git objects, so any commit works there. Exception: a kept revision (revisions rows flagged architectureSnapshot) still serves map view:"architecture" as a preserved snapshot.
directionNochain. 'downstream' leaves, 'upstream' entry points, 'both' (default).both
projectIdNoProject id from init/list_projects. Omit for the active project.
selectorsNoSymbols to traverse from (1-10). heritage uses selectors[0]; chain: OR nodeId.
edgeFilterNochain. 'calls' | 'imports' | 'calls_imports' (default).calls_imports
repositoryNoRepository full name, e.g. "owner/repo". Omit when the project has one repository.
granularityNocallers/blast_radius. 'file' one row/file, 'site' one row/node.file
expansionLimitNoCaps returned count (not heritage/chain). Default 15.
landmarkFilterNochain. Keep only paths through a node matching this.
terminalFilterNochain. Restrict to paths ending at a node matching this.
includeCrossRepoNoWalk cross-repo edges. Default true for blast_radius, false otherwise.
staysWithinClassNochain. Surface intra-class dispatch order.
pruneSetupMethodsNochain. Drop framework bootstrap steps.
followPolymorphismNochain. Walk polymorphic dispatch edges (default false; untraversed hops in polymorphicBranchPoints).
minimalImplementersNoAlias of minimal for implementers.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, and the description adds substantial behavioral detail beyond those: blastRadiusTotalCount is distinct-symbol count rather than row count, blastRadiusTruncated and blastRadiusTotalAtLeast describe sampling/bounds, and the explicit warning 'Never report the number of listed rows as the impact size' is a critical agent-facing caveat. It also discloses cost behavior for minimal and per-kind parameter effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although long, the description is information-dense and organized by kind with terse, purposeful clauses. Every sentence adds operational guidance, and the high complexity of a 24-parameter graph traversal tool justifies the length. The front-loaded purpose statement and scannable kind list make the structure effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 24 parameters and no output schema, the description covers per-kind behavior, defaults, truncation semantics, cross-repo behavior, confidence/package row details, fallback guidance, and error reasons. It addresses the most dangerous misinterpretation of blast_radius results directly. For this tool's complexity, the description is remarkably complete on its own.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value beyond the schema: it clarifies that blastRadiusTotalCount is not the row count, that expansionLimit caps the array, that includeCrossRepo defaults differ by kind, and that minimal:true is ~50% cheaper. These details are not inferable from the schema alone, so the description earns above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line 'Graph relationship traversal via one kind (real edges, not text)' names a specific verb, resource, and scope, and directly distinguishes graph edges from text search. The per-kind breakdown (callers, dependencies, blast_radius, heritage, chain, path) makes the tool's role concrete. It also names locate as the text-based alternative, which further disambiguates it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context for each kind and explicitly says '0 results: call locate (mode:text), not Grep', providing a concrete when-to-use/alternative rule. It also explains edge-case semantics like includeCrossRepo defaults and blast_radius truncation. It does not explicitly contrast the tool with non-text graph siblings such as ref or diff_impact, so it stops short of complete sibling differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4/5.0
Disambiguation4/5

Tools generally target distinct operations—repository attachment, symbol resolution, graph traversal, source access, indexing health—and the detailed routing notes reduce ambiguity. A few pairs still overlap in intent (quick_lookup vs locate symbol, context vs ask_codebase), so it is not perfectly unambiguous.

Naming Consistency3/5

All names are lowercase snake_case and readable, but the set mixes verb_noun patterns like add_repository and list_projects with single-word nouns/verbs like context, history, map, relate, and source, plus one acronym (adr). There is no predictable convention across the full surface, though individual names are clear.

Tool Count3/5

25 tools is at the high end for a single MCP server and falls in the 'feels heavy' range. The breadth is justified by the code-intelligence/query domain, but the selection surface is large for an agent to navigate efficiently.

Completeness4/5

The code indexing, search, graph query, source access, history, ADR, test lookup, and scope estimation needs are well covered. Minor gaps remain—no detach/remove repository, no ADR content editing, and source access is gated by an add-on—but these are workable.