Symvanta

com.symvanta由 symvanta.com 發布官方發布者v1.1.0更新於 Oct 25, 2026

Hosted code graph over MCP: exact callers, dependencies, and cross-repo blast radius for AI agents.

已驗證Streamable HTTP可網頁執行知識與記憶開發者工具

概覽

AI 產生的概覽

託管式程式碼圖譜伺服器,讓助理查詢已索引儲存庫的呼叫端、相依性、影響範圍與架構。

可以做什麼
將工作階段綁定到專案與儲存庫,列出專案和儲存庫,查看索引健康度與新鮮度,並可重新索引、附加儲存庫或在具管理員權限時建立專案。搜尋與解析程式碼:文字、符號和語意查找,含簽章與行範圍的符號定義,檔案符號清單,以及 HTTP 路由解析。遍歷圖譜取得呼叫端、相依性、影響範圍與差異影響,並在變更前估算範圍。讀取索引版本下的原始碼片段、提交歷史與近期變更檔案,並將讀取固定到分支或工作區。產生儲存庫結構與架構地圖,尋找涵蓋某符號的測試,記錄或讀取架構決策記錄。
適用情境
適用於助理在已由 Symvanta 索引的程式碼庫中工作,需要精確的呼叫端、跨儲存庫影響、路由處理常式或架構概覽而非命令列搜尋時,尤其在修改被廣泛使用的符號或合併差異之前。
執行需求
需要遠端 MCP 端點(預設 Symvanta Cloud,或包含 /mcp 路徑的自架位址)。首次連線需 OAuth 登入;無介面自動化可使用靜態 API 金鑰或 bearer 權杖。儲存庫須已在 Symvanta 工作區中索引;私有儲存庫需要 GitHub App 安裝或工作區權杖。需要連線至伺服器的網路。
安裝前請注意
伺服器會讀取工作區中已索引的程式碼與歷史;附加儲存庫、建立專案和重新索引會改變伺服器端狀態。私有儲存庫存取依賴 GitHub App 安裝或工作區權杖。配套外掛的鉤子會從本機憑證讀取已儲存的 Symvanta OAuth 權杖,並向伺服器傳送識別字詞、符號名稱、檔案路徑與儲存庫 owner/name,不傳送檔案內容;鉤子可透過環境變數關閉。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Symvanta,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.symvanta%2Fcode-graph/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "symvanta": {
      "type": "http",
      "url": "https://mcp.symvanta.com/mcp"
    }
  }
}

README

Symvanta plugin for Claude Code

One-step setup for working in a Symvanta-indexed codebase. Installing this plugin:

  • registers the Symvanta MCP server (default https://mcp.symvanta.com/mcp, configurable for on-prem / self-hosted, OAuth on first connection), so you do not edit .mcp.json by hand;
  • injects standing context once at the start of every session so the agent reaches for the Symvanta code-graph tools instead of shell search;
  • ships a symvanta skill with the full tool decision matrix and conventions;
  • adds slash commands that wrap the common graph workflows.

Commands

Each command routes to the right Symvanta MCP tool so you do not have to remember tool names:

  • /symvanta:ask [question]: answer a behavior question (how does X work, why does Y happen) via ask_codebase, with file citations.
  • /symvanta:blast [symbol]: blast-radius safety check before editing a symbol.
  • /symvanta:trace [symbol]: map a function's call chain, callers, and dependencies.
  • /symvanta:route [METHOD /path]: find the handler for an HTTP route.
  • /symvanta:status: connection and index health snapshot (project, repositories, freshness, edge counts).
  • /symvanta:architecture: high-level module map (Louvain functional modules, PageRank hubs, cross-module coupling, and the repo-wide load-bearing functions) via map view:"architecture".
  • /symvanta:scope [symbol or change]: pre-flight scope/impact estimate before you size a change (estimate_scope).
  • /symvanta:branch [name | clear]: pin this session's reads to a tracked feature branch, or clear the pin (ref).
  • /symvanta:working-tree: overlay your uncommitted edits so the graph reflects changes you have not pushed (ref op:"index_working_tree").
  • /symvanta:tests [symbol]: find the tests that cover a symbol (list_tests_for).
  • /symvanta:recent [path]: recently changed files and recent commits (history).
  • /symvanta:setup [local]: write the Symvanta routing block into the project's CLAUDE.md (or CLAUDE.local.md with local). Re-running replaces the marked block in place. Subagents read CLAUDE.md, so the routing reaches them too.

Install

In Claude Code:

/plugin marketplace add https://symvanta.com/plugin/marketplace.json/plugin install symvanta@symvanta

Sign in with OAuth when prompted on first connection. Your workspace's Getting Started page in the Symvanta dashboard shows the exact marketplace URL for your account.

Configuration

The plugin points at Symvanta Cloud (https://mcp.symvanta.com/mcp) by default, so Cloud users configure nothing. To point at a different Symvanta server, set the Symvanta MCP server URL (mcpUrl) plugin option: accept or change it when you enable the plugin, or later via the /plugin interface (Symvanta -> configure). Leave it blank to fall back to the Cloud default.

Use the full endpoint URL including the /mcp path, with no trailing slash, for example https://mcp.your-company.com/mcp. A bare host or a trailing slash will fail to connect.

Authentication. Every Symvanta MCP server (Cloud, staging, or on-prem) advertises its own OAuth endpoints, so Claude Code signs you in with OAuth on first connection whatever URL mcpUrl points at, nothing to configure in the plugin. On-prem supports the same OAuth flow: its gateway completes sign-in against your Symvanta cloud / license and the server verifies the issued token. Static API-key / bearer-token auth also exists for headless automation, but that is configured on the server or in your own MCP settings, not in this plugin.

Updating

/plugin update symvanta@symvanta

Then restart Claude Code. Claude Code reads the plugin (including hooks/hooks.json) when it loads, not continuously, so a running session keeps the previously loaded version until you restart. Until then a /plugin update is downloaded but not active.

What runs on your machine

The plugin executes small, readable Node hook scripts locally:

  • session-start.js: prints standing context once at the start of a session. Reads the checkout's git remote (owner/name) so it can tell the agent to call init with repository set to it, which binds the session to the project that holds this checkout instead of the workspace default. Sends nothing anywhere.
  • The augment hook family (on by default): five hooks sharing one core (lib.js). Each can only add context, never block: every error, timeout, or missing token is a clean pass-through, and the intercepted tool always runs untouched. Every hook first checks that the checkout it fires in is attached to a Symvanta project (one init call per checkout per ten minutes, memoized); a checkout attached nowhere, or a git checkout with no remote, keeps the hooks silent, so you never see another codebase's symbols while working in an unindexed one.
    • grep-augment.js: on Grep/Glob, looks up matching indexed symbol definitions (scoped to the repo you are searching, up to two identifiers from the pattern in parallel, 60s cache) and adds them alongside the raw search results.
    • edit-augment.js: on Edit/Write of a code file, injects the edited symbol's blast radius (upstream symbol count, files, layers, cross-repo edges, risk tier) before the change lands; a Write over an existing file lists the definitions the overwrite replaces. New files and non-code files stay silent.
    • read-augment.js: on the first Read of a code file per session, injects the file's symbol skeleton (names, kinds, line bounds) plus any architecture decision records anchored to it. Repeat reads exit instantly.
    • grep-rescue.js: after a Grep that found nothing, suggests graph candidates (auto text/semantic search) so a dead end becomes a lead; a grep with results exits right after the stdin parse, no reads, no network.
    • prompt-augment.js: identifier-shaped tokens in your message (backticked spans, snake_case, camelCase) resolve to indexed definitions at turn start. Plain prose never qualifies, so conversational prompts stay silent.

What the augmenters read, send, and write, exactly

To call the graph they need your Symvanta MCP token. They reuse the one Claude Code already stored when you connected, so there is no setup. The read is deliberately narrow and each script is short enough to audit in minutes:

  • They read only mcpOAuth[<the Symvanta entry>].accessToken from ~/.claude/.credentials.json (on macOS, Claude Code stores this in the login Keychain instead, under service Claude Code-credentials, so the hooks read that when the file is absent). Never your Anthropic token (claudeAiOauth) or any non-Symvanta server's token.
  • That token is sent only to the Symvanta MCP server, the same place it was issued for.
  • What leaves the machine per lookup: extracted identifier terms, matched symbol names, repo-relative file paths, and the checkout's GitHub remote as owner/name (the attachment check). Never file contents, and never your message text (the prompt hook sends at most two identifier tokens, not the prompt).
  • They write local files under ~/.symvanta/, never uploaded anywhere: grep-cache/ (the 60s result cache, one small file per key), repo-cache.json (path-to-repo memo), workspace-cache.json (per-checkout attachment memo, 10 minutes), keychain-cache.json (macOS only: a 5-minute memo of the Keychain read, so a busy session doesn't shell out to security on every tool call), read-seen/ (per-session first-read markers), and grep-augment.log (one JSONL line per run: hook, terms, repo, match count, latency, cache hit). The log exists so /symvanta:status can show what the hooks are doing; delete any of these files anytime.

Switches (restart Claude Code after changing):

# Supply your own token instead (dashboard -> Settings -> MCP connection -># regenerate gives a Passport mcp:read token); the credentials file is then# never read:export SYMVANTA_MCP_TOKEN="<token>"
# Turn the whole family off (no reads, no network on any tool call):export SYMVANTA_AUGMENT=off        # the legacy SYMVANTA_GREP_AUGMENT=off also works
# Or turn off individual hooks:export SYMVANTA_EDIT_AUGMENT=off   # Edit/Write blast radiusexport SYMVANTA_READ_AUGMENT=off   # first-read skeleton + ADRsexport SYMVANTA_GREP_RESCUE=off    # empty-grep suggestionsexport SYMVANTA_PROMPT_AUGMENT=off # prompt term lookup

You can also delete any hook's block from hooks/hooks.json to remove it entirely.

Bash and every tool without a hook above run untouched. All code navigation happens through the Symvanta MCP server over HTTPS, gated by OAuth. No telemetry, no background processes.

How the Grep/Glob augmenter works

Every gate fails safe to the same pass-through, and both pass-through and success land on "Grep runs normally": the hook can only add context, never block or delay the search to failure. SYMVANTA_GREP_AUGMENT=off short-circuits before anything is read or sent.

mermaid
flowchart TD    A["Agent runs Grep or Glob"] --> B{{"Claude Code fires the PreToolUse hook"}}    B --> D{"SYMVANTA_GREP_AUGMENT = off?"}    D -->|yes| RUN["Grep/Glob runs normally; results unchanged"]    D -->|no, default| TX["Extract up to 2 identifiers from the pattern; derive the repo from the search path"]    TX --> CACHE{"Fresh 60s cache hit?"}    CACHE -->|yes| F["Format matching definitions as additionalContext"]    CACHE -->|no| TOK["Token: SYMVANTA_MCP_TOKEN, else the stored Symvanta token from ~/.claude/.credentials.json (macOS: login Keychain)"]    TOK --> C["quick_lookup per term, in parallel, repo-scoped, hard cap 1.5s; falls back to locate mode:symbol"]
    subgraph cloud["Symvanta cloud (only the search TERMs leave your machine)"]        C --> M["mcp.symvanta.com"]        M --> DB[("Code graph in Postgres")]        DB --> M    end
    C --> OK{"Token valid and matches, in time?"}    OK -->|no, error, or timeout| LOG["Append one line to ~/.symvanta/grep-augment.log"]    OK -->|yes| CW["Cache for 60s"] --> F    F --> EM["Emit JSON to Claude Code"] --> LOG    LOG --> RUN    RUN --> O["Agent sees its grep results PLUS the Symvanta definitions, then reaches for find_node / relate / ask_codebase"]

Uninstall

/plugin uninstall symvanta@symvanta/plugin marketplace remove symvanta

Layout

.claude-plugin/plugin.json   manifest + MCP server registrationhooks/hooks.json             SessionStart + augment family wiring (PreToolUse, PostToolUse, UserPromptSubmit)hooks/session-start.js       standing-context injectorhooks/lib.js                 shared augment core (auth, transport, cache, log)hooks/grep-augment.js        Grep/Glob definition augmenterhooks/edit-augment.js        Edit/Write blast-radius augmenterhooks/read-augment.js        first-read file skeleton + ADR augmenterhooks/grep-rescue.js         empty-grep graph suggestions (PostToolUse)hooks/prompt-augment.js      prompt identifier lookup (UserPromptSubmit)hooks/augment-stats.js       local activity summary for /symvanta:statuscommands/                    slash commands (ask, blast, trace, route, status, architecture, scope, branch, working-tree, tests, recent)skills/symvanta/SKILL.md     tool decision matrix and conventionsscripts/                     sync-skill.mjs (SKILL from source) + check-tool-prefixes.mjs (CI guard)

License

MIT

來源:README.md,提交 9b4e921

工具

27

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 without the graph, do not route through the projects listed. Without repository: the pinned project (ref op:"use_project") or the workspace default.

輸入參數feedbackrepository

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 (default 5). Empty carries did_you_mean; do NOT retry reworded, use semantic. - symbol: symbols by name/symbolPath in one repo. kind filters node kind, layer one layer. Tests last unless includeTests:true. - semantic: vector search for symbols similar to a natural-language query (names unknown). - file: fuzzy filename search (basename); filenames only. - config (replaces grep for env/config keys): key/env-var usages with nearest-symbol context; queries:[...] batches several keys. - codebase: cross-repo candidate scan; narrow with repositoryIds.

輸入參數kindmodenamelayerlimitqueryqueriesfeedbackcommitShapathsOnlyprojectIdmaxPerFile另有 4 個

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}. 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.

輸入參數kinddepthlimitintentnodeIdminimalfeedbackmaxDepthmaxPathscommitShadirectionprojectId另有 12 個

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. stat: size/lines/language/binary for filePath. blame: authorship for filePath. diff: fromSha..toSha. Keys: {op:"read",filePath:"src/a.ts"}, {op:"grep",pattern:"foo"}, {op:"list",path:"src"}. filePath is the file, path the directory. Gated by the Source Access add-on; else source_access_required.

輸入參數opglobpathlimitquerytoShaifHashcompactendLinefromShapatternfeedback另有 7 個

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").

輸入參數op必填shapathlimitsinceuntilauthorfeedbackprojectIdrepository

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 does not change on its own.

輸入參數op必填limitfeedbackprojectIdspecifier

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/baseSha) on a short-lived synthetic revision pinned here; find_node/locate/relate reflect them, source and locate mode:semantic do NOT. Cap 100 files/256KB. - use_project: bind this session to projectId (from init.otherProjects / list_projects / create_project) so calls without projectId resolve there. init with repository:"owner/name" sets the same binding from the checkout's remote. - clear_project: drop the binding, back to the workspace default project.

輸入參數op必填branchbaseShafeedbackprojectIdrepositorychangedFilesdeletedPaths

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; status:"superseded"+supersededById, or "deprecated".

輸入參數idop必填limittitlestatuscontextdecisionfeedbackfilePathprojectIdrepositorysymbolPath另有 2 個

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_tree"), then call with no shas.

輸入參數baseheadfeedbackprojectIdrepositoryexpansionLimitincludeCrossRepo

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.

輸入參數feedbackprojectIddescription必填

list_projects

List all projects with indexing summaries. Find a project by name or check which exist.

輸入參數feedback

list_repositories

List repositories in a project. Find repository names to scope a query to one repo.

輸入參數feedbackprojectId

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}.

輸入參數feedbackfilePath必填commitShaprojectIdrepository

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 module NAME comes from a generated summary and is provisional, its id (the member-set hash in the header) is the stable key, so pin modules by id and re-read names rather than caching them.

輸入參數pathviewdensityfeedbackmaxDepthcommitShaprojectIdrepository

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.

輸入參數feedbackselector必填commitShaprojectIdrepository

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.

輸入參數limitquery必填feedbackprojectIdrepository

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).

輸入參數feedbackprojectIdrepository

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 on. architecture: per-repo Louvain module count + modularity Q (low Q = tangled), plus circular-dependency and mutually-recursive-symbol counts (inspect via map view:"architecture"). versionDrift: joined cross-repo SCIP edges whose consumer-pinned package version differs from the sibling's current version (package, pinned vs current, edge count). externalsCoverage: per-repo count of external references joined onto a sibling definition vs left as materialized stubs. unindexableRepositories: repos whose last index produced no graph and left a status (no_default_branch = the remote has no resolvable default branch, e.g. an empty repo; awaiting_upload = an upload-provider repo with no zip yet; remote_head_unresolvable = the remote could not be reached to resolve its head, so this is a network or credential problem, not a repository one), with the worker's log line as indexStatusDetail; explains a silently-empty repo. degradedRepositories: repos that DID index but lost a derived artifact (community_detection_skipped = Louvain clustering did not run, so map view:"architecture" has no modules; raise COMMUNITY_EDGE_CEILING or set COMMUNITY_DETECTION=true, then reindex). Both carry a human-readable reason.

輸入參數feedbackprojectIdrepository

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.

輸入參數path必填methodfeedbackcommitShaprojectIdrepository

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/struct/protocol it carries a compact heritage field (<=5 ancestors, <=20 descendants, omitted when empty); includeHeritage:false skips it, includeCrossRepo:true walks cross-repo heritage. {resolved:false, candidates} = no confident match.

輸入參數limitfeedbackcommitShaprojectIdselectors必填repositorysourceModeincludeSourceexpansionLimitincludeHeritageincludeCommunityincludeCrossRepo另有 1 個

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.

輸入參數limitqueryscopefeedbackquestioncommitShaprojectIdrepositoryrepositoryIds

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 failing on the queued clone. Idempotent. First attach dispatches an indexing job; response carries visibility, credential ("installation" | "pat" | null), indexing_status ("queued" | "already_indexed") and indexing_job_id to poll. Needs mcp:admin.

輸入參數owner必填feedbackprojectIdrepo_name必填default_branchinstallation_id

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).

輸入參數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 failed carries error and an empty list.

輸入參數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 upgrade takes effect without a version bump.

輸入參數forcefeedbackprojectIdcommit_sharepositoryId必填

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.

輸入參數task必填feedbackcommitShaprojectIdrepository

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 names return {error}.

輸入參數calls必填feedbackcommitShaprojectIdrepository

版本歷史

1
  1. v1.1.0最新Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。