Symvanta
Hosted code graph over MCP: exact callers, dependencies, and cross-repo blast radius for AI agents.
| Endpoint | https://mcp.symvanta.com/mcp (streamable-http) |
|---|---|
| Registry version | 1.1.0 |
| Now | 27 tools · grade D (60) · pin ts_2ce01f69f9b0d778f061101709e03008 · protocol 2025-06-18 |
| First / last listed | 2026-10-24 23:35 UTC / 2026-10-24 23:35 UTC |
| Grade over time | 2026-10-24: D (60), 27 tools |
Is this your server? Own a server? ToolFit hosted watch re-checks it every 24 h ($0.25 per 30 days) or 6 h ($0.60) and sends you an HMAC-signed webhook when its tools or grade change: POST https://api.youraitools.co/toolfit/v1/watch. To opt out, see About & opt-out.
Tools: init locate relate source history library ref adr diff_impact estimate_scope list_projects list_repositories list_file_symbols map list_tests_for quick_lookup freshness index_health find_http_route find_node ask_codebase add_repository create_project list_installations reindex_repository context bundle
init | Call first, with repository:"owner/name" (your checkout's GitHub remote). Binds the session to the project holding that repository and returns it as the active project with its repositories, index health, and a `usage` field (decision matrix + routing). workspace.attached=false means the checkout is NOT indexed: nothing in the answer describes it; attach it (add_repository, create_project) or work params: repository, feedback |
locate | Search/lookup. Pick a mode, or omit with a bare query to AUTO-ROUTE (text, then semantic on empty; response carries answered_by). Modes:
- text (replaces grep): literal identifier/string, one row/occurrence. queries:[...] (<=10 terms) searches several in one call (and implies this mode when mode is omitted). pathsOnly:true = "filePath:lineNumber" only (~5x cheaper). maxPerFile caps rows/file (defa params: mode, projectId, repository, commitSha, query, queries, name, kind, layer, pathPrefix, pathsOnly, includeTests, maxPerFile, repositoryIds, limit, feedback |
relate | 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}. incl params: projectId, repository, commitSha, kind, selectors, limit, includeCrossRepo, expansionLimit, intent, granularity, minimal, minimalImplementers, maxDepth, nodeId, direction, depth, edgeFilter, terminalFilter, maxPaths, followPolymorphism, landmarkFilter, pruneSetupMethods, staysWithinClass, feedback |
source | Raw file/git access at the indexed commit, for cloud agents with no clone; with a clone prefer your own Read/Grep/git. Ops:
- read: content of filePath, whole file or slice startLine..endLine. ifHash (a prior read's hash) returns {unchanged:true}, no content. compact:true strips blank/comment-only lines.
- list: files+subdirs at path. grep: ripgrep pattern (glob/pathPrefix). tree: layout from path params: projectId, repository, op, filePath, startLine, endLine, ifHash, compact, path, maxDepth, pattern, query, glob, pathPrefix, limit, fromSha, toSha, commitSha, feedback |
history | Indexed commit history. Ops:
- commits: recent commits (metadata + file list); <=200/call, default 50. With a clone prefer git log.
- commit: one commit by sha with its diff summary (added/modified/deleted/renamed); null if outside the indexed window.
- recently_changed: files ranked by change frequency in the indexed window ("what's hot"). params: op*, projectId, repository, sha, since, until, author, path, limit, feedback |
library | Library catalog lookups. Ops:
- packages: list indexed npm packages (specifier, ecosystem, owner/name, indexed-at, sha). Tenant-scoped, no projectId.
- version: one package's resolved version for a project (sha, version, dep type, indexed-at, status indexed|indexing|failed|not_found). "indexing" means a job for that revision is in flight, so retrying later converges; "failed" carries a reason and params: op*, projectId, specifier, limit, feedback |
ref | Session-scoped branch / working-tree overlay / project binding. Ops:
- use: pin a repository's reads to a branch (latest indexed revision). Branch must be tracked+indexed (open a PR, or add on the dashboard); else "indexing_in_progress". commitSha overrides.
- clear: remove the pin, revert to default.
- index_working_tree: overlay UNCOMMITTED edits (changedFiles path+content, optional deletedPaths params: op*, branch, changedFiles, baseSha, deletedPaths, repository, projectId, feedback |
adr | Architecture decision records: the WHY behind code, anchored to a symbol/file/project. Survive reindexes; find_node attaches a node's decisions. Ops:
- record: needs title+decision. Anchor with repository+symbolPath or +filePath; omit both for project-wide. Optional context, consequences, status.
- list: records for a project, filter by repository/symbolPath/filePath/status.
- update: needs id; st params: op*, projectId, repository, title, decision, context, consequences, status, symbolPath, filePath, id, supersededById, limit, feedback |
diff_impact | Impact of a diff between two indexed revisions of one repo (base..head): changed files + symbols, union blast radius (layers + cross-repo fallout), affected endpoints, test suites, and co-change reminders. Replaces per-symbol relate (kind:blast_radius) loops before merging. Defaults: head = session's effective revision, base = previous indexed. For UNCOMMITTED edits, run ref (op:"index_working_tre params: projectId, repository, base, head, includeCrossRepo, expansionLimit, feedback |
estimate_scope | Pre-flight estimate before graph traversal: coarse count of files a task likely touches and whether it spans layers (common/browser/node/electron-main/...) or repositories. Decides single-file edit vs consulting the graph. Heuristic, from symbol-name + text matches. params: projectId, description*, feedback |
list_projects | List all projects with indexing summaries. Find a project by name or check which exist. params: feedback |
list_repositories | List repositories in a project. Find repository names to scope a query to one repo. params: projectId, feedback |
list_file_symbols | List symbols in one file (name + kind + line bounds). Step 1 of the two-step read: get line bounds, then pass startLine/endLine to source (op:read) for that slice only (~4-15x fewer tokens). For one symbol + signature, use find_node {symbol, filePath}. params: projectId, repository, commitSha, filePath*, feedback |
map | Token-efficient repo (or subtree) skeleton: directory tree with each file's classes (methods in parens), functions, and HTTP endpoints, from the graph. Orient before drilling in. Scope with "path", cap with "maxDepth", density:"full" adds properties. view:"architecture" instead returns a module map (Louvain clusters with hubs, paths and cross-module coupling), plus namedModules/totalModules: a mod params: projectId, repository, commitSha, path, maxDepth, density, view, feedback |
list_tests_for | Test suites and cases whose suite name matches a symbol name (case-insensitive substring). Call before adding tests to see existing coverage and mirror its shape. params: projectId, repository, commitSha, selector*, feedback |
quick_lookup | Fast substring lookup of symbol DEFINITIONS by name: rows {name, kind, filePath, startLine, repositoryName} (displayName only when distinct from name), no ranking, no semantic. Cheaper alternative to locate (mode:symbol) for latency-sensitive pre-fetch (grep-augment hook); interactive search should prefer locate/find_node. Reads the latest indexed revision, no ref pin. params: query*, repository, projectId, limit, feedback |
freshness | Returns lastIndexedSha, lastIndexedAt, and the current remote HEAD sha for a repository: detect index drift from remote. Reports what Symvanta knows, not local git. currentRemoteSha is null when no GitHub credential is configured. Echoes the active ref pin (pinnedBranch, pinnedSha). params: projectId, repository, feedback |
index_health | Per-project index health. pendingLibraryVersions: cross-repo specifiers still indexing (an empty result may mean "not indexed yet", not "not in code"); call when a query is surprisingly empty. A row with status "skipped" is never going to arrive (a dev or optional dependency, which the catalog does not index) and status "failed" means discovery found no source, so only "indexing" is worth waiting params: projectId, repository, feedback |
find_http_route | Resolve an HTTP route by path + optional method to endpoint + handler (filePath + line bounds). Use instead of grep/locate for URL paths: follows framework router metadata (Express, Fastify, Hono, Laravel, FastAPI, etc.) and resolves dynamic segments, prefix groups, and middleware-mounted routers text search misses. params: projectId, repository, commitSha, path*, method, feedback |
find_node | Resolve 1-10 symbols to filePath + line bounds + signature. selectors: array keyed by symbol (bare name) / symbolPath / filePath / nodeId; a flat query/name/single field also works. includeSource=true adds the excerpt, includeSummaries=true AI summaries. A node from a SCIP-indexed package also carries scip_package_name (and scip_package_version / scip_manager when known). For a class/interface/str params: projectId, repository, commitSha, selectors*, limit, includeSummaries, includeSource, sourceMode, expansionLimit, includeHeritage, includeCrossRepo, includeCommunity, feedback |
ask_codebase | Synthesis Q&A for behavior/architecture questions: answer + citations in one call. HEAVY (~2-4 s, ~3-5 k tokens): prefer context, find_node, or locate when they suffice. scope:"repo" (default) = ONE repo; scope:"all" = cross-repo (repositoryIds narrows, omit spans all; rejects repository). If sufficient_to_answer=true, answer without further tool calls. commitSha pins a revision. params: projectId, repository, commitSha, query, question, scope, repositoryIds, limit, feedback |
add_repository | Attach a GitHub repository to a project (owner + repo_name; clone URL derived; projectId defaults to the bound / default project). Public repos need nothing else. Private repos need installation_id from list_installations (a GitHub App installation that covers the repo) or a workspace PAT saved on the dashboard; without either the attach is refused (private_repository_needs_credential) instead of params: owner*, repo_name*, default_branch, installation_id, projectId, feedback |
create_project | Create a project in the workspace (name; slug derived and made unique). Needs mcp:admin; plan project caps apply (plan_limit_exceeded). Then attach repositories with add_repository { projectId, owner, repo_name } and bind the session with ref op:"use_project" (or init with the checkout's repository once attached). params: name*, feedback |
list_installations | GitHub App installations connected to this workspace and the repositories each can reach (private included). Use before add_repository for a private repository: pass the installation's id as installation_id. pat_configured says whether a workspace PAT exists as the fallback credential. Empty = connect the GitHub App on the dashboard (Project > Repositories). An installation whose GitHub call faile params: feedback |
reindex_repository | Dispatch a reindex job for an already-attached repository (repositoryId from list_repositories / add_repository). Optional commit_sha pin. force:true re-applies the current parser even when unchanged at HEAD: it bypasses the per-file hash-skip AND re-runs the SCIP indexer subprocesses (no same-sha .scip cache serve), so a parser fix inside a SCIP runner, an external-moniker re-pin, or a toolchain params: repositoryId*, commit_sha, force, projectId, feedback |
context | First-touch task orientation. Pass a natural-language task; returns the top 5 relevant files with their symbols and best-matching snippets in one call (~1-1.5k tokens, ~500 ms, no LLM). Replaces chaining locate (text) + locate (semantic) + list_file_symbols. Known symbol: find_node/locate. Synthesized explanation: ask_codebase. params: task*, projectId, repository, commitSha, feedback |
bundle | Run up to 10 independent tool calls in parallel in one round-trip. Calls share the bundle-level project/repository scope unless a call sets its own args.repository, which scopes that call alone. Supported: locate (args.mode text|symbol|semantic|file|config, not codebase), relate (kind:callers only), find_node, list_file_symbols, find_http_route. Returns results in input order; unsupported tool nam params: projectId, repository, commitSha, calls*, feedback |
Entries describe changes in tool definitions. They are not statements about a server, its quality or its author. The grade measures how the tool definitions fit model providers (token cost, schema compatibility, confusable names) as scored by the ToolFit engine at the time of the listing. JSON: append .json. Opt-out: how or hello@youraitools.co.