MCP tools reference¶
Every tool the daemon publishes over MCP (tools/list), with its input schema. Your editor discovers these automatically once it's connected (see Connecting your editor); this page is the human-readable catalog.
38 tools.
eng_add_repo¶
Register a new repo path; the daemon kicks off a cold scan in the background.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"root_path": {
"type": "string",
"description": "Absolute filesystem path to the git repository root."
}
},
"required": [
"root_path"
]
}
eng_close_finding¶
Close a finding by ID. Severity >= high requires a human actor.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"finding_id": {
"type": "string",
"description": "ID of the finding to close."
},
"branch": {
"type": "string",
"description": "Branch the finding belongs to (optional; derived from finding_id when omitted)."
},
"repo_id": {
"type": "string",
"description": "Repository ID for audit attribution (optional; derived from finding_id when omitted)."
},
"reason": {
"type": "string",
"description": "Close reason; \"accept\" promotes an auto-link edge to definite."
}
},
"required": [
"finding_id",
"reason"
]
}
eng_close_suppression¶
Terminate an active suppression now by setting expires_at to the current time.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"suppression_id": {
"type": "string"
},
"repo_id": {
"type": "string",
"description": "Optional, audit attribution only."
}
},
"required": [
"suppression_id"
]
}
eng_find_changed_symbols¶
Symbol-grain diff between two git refs - answers 'which functions/methods/structs actually changed?' for PR review, blame, or 'why did this break since yesterday'. ref_a/ref_b (aliases base/head) default to HEAD~1..HEAD. Comment- or whitespace-only changes emit a 'non_symbol_changes_only' degraded_reason so callers know the file changed even when no symbol diff comes back. Pair with eng_get_diff_blast_radius for 'what's downstream of these changes'.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Diff two git refs and return the added/removed/modified symbols. ref_a/ref_b default to HEAD~1/HEAD when both omitted. base/head are accepted as aliases.",
"properties": {
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"ref_a": {
"type": "string",
"description": "Base git ref (e.g. 'main', 'HEAD~5', a SHA). Default HEAD~1."
},
"ref_b": {
"type": "string",
"description": "Target git ref. Default HEAD."
},
"base": {
"type": "string",
"description": "Alias for ref_a using git's canonical name."
},
"head": {
"type": "string",
"description": "Alias for ref_b using git's canonical name."
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
}
}
eng_find_clones¶
Find duplicate code. mode='exact' (default): groups of >=2 symbols whose source text is byte-for-byte identical (literal copy-paste), detected by content_hash equality - deterministic, no embeddings. mode='near': clusters of symbols whose persisted SIMILAR_TO similarity exceeds a threshold higher than auto-link's 'related' cutoff (fuzzy near-duplicates - renamed copies, drifted variants); reads scores auto-link already stored, runs no new similarity sweep. For 'what else looks LIKE this ONE symbol?' use eng_search_similar instead. Container/sub-symbol kinds (package, chunk, file, module, field, import) are excluded so boilerplate doesn't flood results. NOTE: near mode needs SIMILAR_TO edges carrying a score, which only exist after a promotion/reindex on a build with the score column - older indexes report no near clusters until reindexed.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Find duplicate code in a repo/branch. mode=exact returns 'groups' (byte-identical via content_hash); mode=near returns 'clusters' (fuzzy, thresholded SIMILAR_TO edges).",
"properties": {
"repo_id": {
"type": "string",
"description": "Repo to scan. Resolved from cwd when omitted."
},
"branch": {
"type": "string",
"description": "Branch to scan. Defaults to the repo's active branch."
},
"mode": {
"type": "string",
"enum": [
"exact",
"near"
],
"description": "exact (default): byte-identical clones via content_hash, populates 'groups'. near: fuzzy clusters from thresholded SIMILAR_TO edges, populates 'clusters'."
},
"min_score": {
"type": "number",
"description": "near mode only: minimum SIMILAR_TO edge score (higher = more similar). Omit to use the default calibrated for the elected embedder (model spaces differ; near-dup and 'related' bands overlap, so this is a high-precision/partial-recall knob). Lower it for more recall."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Max groups/clusters to return (default 100). The response 'total' reports the full count and 'truncated' is true when capped."
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
}
}
eng_find_clusters¶
Whole-repo (or cross-repo) similar-code clusters for de-dupe triage. One pass returns groups of >=2 symbols at three tiers, ranked tightest first: 'exact' (byte-identical copy-paste, content_hash), 'structural' (same shape after renaming variables/literals - Type-2 clones, structural_hash), and 'near' (vector-similar above the elected embedder's calibrated threshold). A symbol appears at most once, at its tightest tier. No seed needed. scope='all' clusters across EVERY registered repo (exact+structural only - cross-repo near is not yet computed); 'path' narrows to a file_path prefix; 'tiers' selects a subset. Container kinds (package/chunk/file/module/field/import) are excluded. Each cluster's members carry repo_id/file/line so you can open a verify-and-dedupe task per grouping. NOTE: structural/near need structural_hash + scored SIMILAR_TO edges, populated by a promotion/reindex on a current build - reindex older graphs first.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Unified similar-code clusters (exact + structural + near), ranked, for de-dupe task creation. No seed required.",
"properties": {
"repo_id": {
"type": "string",
"description": "Repo to scan (scope=repo). Resolved from cwd when omitted."
},
"branch": {
"type": "string",
"description": "Branch to scan. Defaults to the repo's active branch (scope=repo) or 'main' (scope=all)."
},
"scope": {
"type": "string",
"enum": [
"repo",
"all"
],
"description": "repo (default): one repo. all: cluster across every registered repo (cross-repo; exact+structural only)."
},
"tiers": {
"type": "string",
"description": "Comma-separated subset of exact,structural,near. Omit for all tiers."
},
"min_score": {
"type": "number",
"description": "near tier only: minimum SIMILAR_TO score. Omit for the elected embedder's calibrated default; lower for more recall."
},
"path": {
"type": "string",
"description": "Restrict to nodes whose file_path starts with this prefix (e.g. internal/infrastructure/mcp)."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Max clusters to return (default 100). The response 'total' reports the full count and 'truncated' is true when capped."
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted (scope=repo)."
}
}
}
eng_find_owner¶
Find the owner of a file via CODEOWNERS lookup or git blame fallback.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Returns the owner of a file via CODEOWNERS (longest-match) or git blame fallback. Accepts file_path/path, OR symbol/node_id which resolves to the symbol's defining file.",
"properties": {
"file_path": {
"type": "string",
"description": "Repo-relative path to the file whose dominant committer should be returned."
},
"path": {
"type": "string",
"description": "Alias for file_path."
},
"symbol": {
"type": "string",
"description": "Symbol name; resolved to the defining file's path."
},
"node_id": {
"type": "string",
"description": "Node id; resolved to its file path."
},
"repo_id": {
"type": "string"
},
"branch": {
"type": "string",
"description": "Branch used when resolving symbol/node_id to a file path; ignored when file_path/path is supplied."
}
},
"required": [
"repo_id"
]
}
eng_find_related¶
Find symbols semantically similar to the code at a given (file_path, line). Use as a moat-pivot from a search hit, an error trace, or an open editor cursor: 'what else in the graph looks like this?'. Resolves the smallest enclosing symbol or chunk for the given line, then runs the same vector-neighborhood search as eng_search_similar - no separate find_symbol round-trip needed.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Find symbols semantically similar to the code at a (file_path, line). The handler resolves the smallest enclosing node and reuses the eng_search_similar vector-neighborhood path. Line is 1-indexed.",
"properties": {
"file_path": {
"type": "string",
"description": "Absolute path or repo-relative path to the file."
},
"line": {
"type": "integer",
"minimum": 1,
"description": "1-indexed source line; the enclosing node's embedding is the seed."
},
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"k": {
"type": "integer",
"minimum": 1,
"description": "Neighbor count (default 10). 'limit' is accepted as an alias."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Alias for k."
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
},
"required": [
"file_path",
"line"
]
}
eng_find_symbol¶
Look up nodes by exact symbol name. Use when you already know the identifier (e.g. 'ParseConfig'). Unqualified names also match - 'Run' finds Server.Run, Command.Run, etc., with exact matches first. Returns a stable node_id you can feed to eng_get_call_chain, eng_get_blast_radius, eng_get_context_pack, eng_search_similar without another lookup. Prefer this over eng_search_semantic for known-identifier queries - it's deterministic and exact.
Reads through the staging overlay (reflects uncommitted edits).
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"symbol": {
"type": "string",
"description": "Symbol name (e.g. \"Promoter.Promote\")."
},
"repo_id": {
"type": "string",
"description": "Full repo_id or short_id; required when more than one repo is registered."
},
"branch": {
"type": "string",
"description": "Branch to search (default: active branch)."
},
"kind": {
"type": "string",
"description": "Filter by node kind: function|method|struct|interface|type|package."
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
},
"required": [
"symbol"
]
}
eng_find_todos¶
List parser-detected TODO/FIXME markers for the given (repo, branch).
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"include_closed": {
"type": "boolean",
"description": "Include closed TODO findings in the result (default false)."
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
}
}
eng_get_blast_radius¶
Compute the blast radius (callers/callees/both) of a symbol - 'if I change this, what breaks?' or 'what does this transitively reach?'. Use BEFORE editing an exported symbol, or when scoping a refactor. Walks cross_repo_edges in both directions so a library symbol's consumers in workspace repos are surfaced. Pass node_id (exact) or symbol (resolved via eng_find_symbol). For working-tree changes use eng_get_diff_blast_radius; for in-progress staged edits use eng_get_dirty_blast_radius.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"node_id": {
"type": "string",
"description": "node_id to fan out from. Use eng_find_symbol to obtain one. Mutually exclusive with symbol."
},
"symbol": {
"type": "string",
"description": "Symbol name to fan out from (parity with eng_get_call_chain). Ambiguous matches are rejected; pass node_id to disambiguate."
},
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"max_depth": {
"type": "integer",
"minimum": 1
},
"max_nodes": {
"type": "integer",
"minimum": 1
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both",
"callers",
"callees"
],
"description": "'callers'/'in' (inbound, default), 'callees'/'out' (outbound), or 'both'. in==callers, out==callees."
},
"expand_cross_repo": {
"type": "boolean"
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
}
}
eng_get_call_chain¶
Walk CALLS edges from a symbol. Use this - not search - when the question is 'what does this reach' (direction=out, default) or 'what calls this' (direction=in). Surfaces cross_repo_edges into other registered repos so library-symbol callers in a multi-repo workspace are visible without separate queries. Pass node_id (exact) or symbol (resolved via eng_find_symbol; ambiguity is rejected). NOTE: empty edges on a function/method seed carry one of two degraded_reasons hints: 'chained_selectors_unresolved' (parser limit - chained selector call sites like rootCmd.AddCommand(...).Execute() or s.field.M() are not yet modeled) or 'external_callees_only' (index boundary - callees are stdlib or unregistered modules, NOT a parser bug). Fall back to eng_get_blast_radius, eng_search_semantic, or eng_find_symbol.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Returns the CALLS-edge chain from a node. One of node_id or symbol is required.",
"properties": {
"node_id": {
"type": "string",
"description": "Resolve directly by node_id."
},
"symbol": {
"type": "string",
"description": "Symbol name; resolved against repo_id+branch."
},
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"depth": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Traversal depth (default 3, max 10)."
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both",
"callers",
"callees"
],
"description": "'out'/'callees' (default), 'in'/'callers', or 'both'. in==callers (inbound), out==callees (outbound)."
},
"expand_cross_repo": {
"type": "boolean",
"description": "Follow CALLS edges into other registered repos when true."
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
}
}
eng_get_config¶
Return effective daemon configuration (secrets redacted).
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "No parameters; returns the daemon's resolved runtime configuration (embedder, vuln_source, etc).",
"properties": {}
}
eng_get_context_pack¶
Bundle a symbol's neighborhood (callers, callees, adjacent tests, recent commits, open findings, active task) into one token-bounded payload. Use at the START of a non-trivial change so you don't have to assemble surrounding context piecewise. Surfaces cross_repo_edges in both directions, so cross-repo callers/callees show up in the same response. Pass exactly one of node_id, symbol, or task_id as the anchor.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Bundles an anchor (one of node_id, symbol, or task_id) with its callers, callees, and tests for LLM prompting. Exactly one of node_id, symbol, or task_id is required.",
"properties": {
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"node_id": {
"type": "string",
"description": "Node to anchor on. Mutually exclusive with symbol and task_id."
},
"symbol": {
"type": "string",
"description": "Symbol to anchor on. Mutually exclusive with node_id and task_id."
},
"task_id": {
"type": "string",
"description": "Task to derive the anchor symbol from. Mutually exclusive with node_id and symbol."
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
}
}
eng_get_current_repo¶
Find the indexed repo whose root contains the given cwd path.
Reads through the staging overlay (reflects uncommitted edits).
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"cwd": {
"type": "string",
"description": "Working directory to match against registered repo roots; if omitted the daemon uses the connecting client's reported cwd."
}
}
}
eng_get_diff_blast_radius¶
Blast radius across every symbol in files changed by a git diff. By default the diff is the working tree vs HEAD; supply ref_a and ref_b together to blast a ref range (e.g. main..HEAD) instead. Use for PR review or 'what does this branch touch?' - the seed is the diff, not a single node.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Blast radius of a git diff. With ref_a and ref_b both set, diffs that ref range; with both omitted, diffs the working tree against HEAD. ref_a and ref_b must be supplied together.",
"properties": {
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"ref_a": {
"type": "string",
"description": "Base git ref (e.g. 'main', 'HEAD~5', a SHA). Must be paired with ref_b; omit both to diff the working tree against HEAD."
},
"ref_b": {
"type": "string",
"description": "Target git ref. Must be paired with ref_a."
},
"max_depth": {
"type": "integer",
"minimum": 1
},
"max_nodes": {
"type": "integer",
"minimum": 1
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both",
"callers",
"callees"
],
"description": "'callers'/'in' (inbound, default), 'callees'/'out' (outbound), or 'both'. in==callers, out==callees."
},
"expand_cross_repo": {
"type": "boolean"
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
}
}
eng_get_dirty_blast_radius¶
Blast radius across every symbol currently in the staging overlay (mid-edit, pre-commit). Use during an active session to answer 'what am I about to break with my current edits?' without committing first. Unchanged-but-restaged symbols are filtered via content-hash compare so a comment-only edit doesn't dirty the whole file.
Reads through the staging overlay (reflects uncommitted edits).
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Blast radius of currently-staged (uncommitted) changes.",
"properties": {
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"max_depth": {
"type": "integer",
"minimum": 1
},
"max_nodes": {
"type": "integer",
"minimum": 1
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both",
"callers",
"callees"
],
"description": "'callers'/'in' (inbound, default), 'callees'/'out' (outbound), or 'both'. in==callers, out==callees."
},
"expand_cross_repo": {
"type": "boolean"
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
}
}
eng_get_entry_points¶
High-fan-in symbols ranked by inbound call count - the natural entry points a newcomer (or agent) should read first to understand the repo. Exported, tested symbols rank above unexported untested ones at the same inbound count.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"include_tests": {
"type": "boolean",
"description": "Include Test*/Benchmark*/Example*/Fuzz* and *_test.go entries (default false)."
},
"limit": {
"type": "integer",
"minimum": 1
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
},
"required": [
"repo_id"
]
}
eng_get_file_nodes¶
Return all nodes for a file path (absolute, or repo-relative when repo_id is given); staged nodes take precedence when available.
Reads through the staging overlay (reflects uncommitted edits).
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Returns every node for a single file. The handler accepts 'path' as an alias for 'file_path'.",
"properties": {
"file_path": {
"type": "string",
"description": "Repo-relative or absolute path to the source file."
},
"path": {
"type": "string",
"description": "Alias for file_path."
},
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
}
}
eng_get_finding¶
Get a single finding by finding_id and branch.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"finding_id": {
"type": "string"
},
"branch": {
"type": "string",
"description": "Optional; finding_id is globally unique."
},
"repo_id": {
"type": "string",
"description": "Optional; informational only (finding_id is globally unique)."
}
},
"required": [
"finding_id"
]
}
eng_get_hot_zone¶
Top-N files ranked by change risk = recent-change-frequency × blast-radius. Use during PR review or onboarding to spot the load-bearing files where a small edit fans out the most.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Max files to return (0 = service default; large values capped)."
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
},
"required": [
"repo_id"
]
}
eng_get_node¶
Get a single node by its ID. node_id is a content-hashed sha256 and globally unique, so repo_id and branch are optional - when omitted the lookup scans across all (repo, branch) pairs. Pass both to apply the staging overlay (only the scoped path can observe an uncommitted staged version).
Reads through the staging overlay (reflects uncommitted edits).
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"node_id": {
"type": "string",
"description": "Content-addressed node_id (SHA-256 hex) returned by eng_find_symbol etc."
},
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
}
},
"required": [
"node_id"
]
}
eng_get_repo¶
Get a single indexed repo by its repo_id.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"repo_id": {
"type": "string",
"description": "Full repo_id or short_id prefix."
}
},
"required": [
"repo_id"
]
}
eng_get_status¶
Return daemon liveness and schema version.
Reads through the staging overlay (reflects uncommitted edits).
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "No parameters; returns daemon-wide health (rollup status, pending_embeds, scans_in_flight, degraded_reasons).",
"properties": {}
}
eng_get_suppression¶
Get a single suppression by suppression_id.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"suppression_id": {
"type": "string"
}
},
"required": [
"suppression_id"
]
}
eng_list_dependencies¶
List external modules the repo CALLS into, ranked by call-site count, with sampled top call sites per module. Source is the cross_repo_edge_stubs table populated at promotion time, so a module imported but only referenced via struct literals / type assertions (no resolved package-qualified call) will not appear yet; this tracks the import-side backfill. Versions come from go.mod's require block. Each top_call_sites entry carries a node_id you can pass to eng_get_context_pack to see how the dependency is integrated.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "List external modules the repo imports, ranked by call-site usage count (derived from cross_repo_edge_stubs). Each entry includes a small sample of top call sites so an agent can jump straight into the using code.",
"properties": {
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
}
}
eng_list_findings¶
List findings for a repo and branch, optionally filtered by state or severity.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"state": {
"type": "string",
"enum": [
"open",
"closed"
],
"description": "Filter by state (default open)."
},
"severity": {
"type": "string",
"enum": [
"critical",
"high",
"medium",
"low",
"info"
]
},
"rule": {
"type": "string",
"description": "Rule name (e.g. 'vulnerable_dependency', 'dead-code', 'secret_leak')."
},
"include_suppressed": {
"type": "boolean",
"description": "Surface findings hidden by an active suppression (default false)."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Max findings to return (default 100). The response 'total' reports the full count and 'truncated' is true when capped."
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
}
}
eng_list_repos¶
List all indexed repos registered with the daemon.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "No parameters; returns every registered repo with short_id, root_path, active_branch, and last_promoted_sha.",
"properties": {}
}
eng_list_suppressions¶
List suppressions for a given repo and branch. repo_id is optional when exactly one repo is registered (it auto-resolves); otherwise it is required.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
}
}
}
eng_promote_repo¶
Re-stage and promote files changed in HEAD. Accepts repo_id (full or short) or root_path.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Re-promote the latest commit of a registered repo. One of repo_id or root_path is required; when both are passed, repo_id wins. branch, git_sha, and actor_kind/actor_id are optional overrides for callers (e.g. agents) that want to attribute the promotion to themselves or pin a specific SHA; when omitted the handler reads HEAD from git and stamps the system actor.",
"properties": {
"repo_id": {
"type": "string",
"description": "Full repo_id or short_id prefix."
},
"root_path": {
"type": "string",
"description": "Absolute filesystem path; canonicalized via EvalSymlinks before lookup."
},
"branch": {
"type": "string",
"description": "Optional branch override; defaults to the repo's active_branch (or 'main')."
},
"git_sha": {
"type": "string",
"description": "Optional commit SHA to promote at; defaults to git HEAD of the resolved root_path."
},
"actor_kind": {
"type": "string",
"enum": [
"human",
"agent",
"system"
],
"description": "Attribution kind for the promotion stamp; defaults to 'system'. Must be paired with actor_id."
},
"actor_id": {
"type": "string",
"description": "Attribution id (e.g. 'agent:claude', 'human:alice'); defaults to 'service:veska'. Must be paired with actor_kind."
}
}
}
eng_reindex_repo¶
Force a full cold-scan reparse of a registered repo. Accepts repo_id (full or short) or root_path. Runs in-daemon so callers do not need to stop the service.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Force a full cold-scan reparse of a registered repo, in-daemon. One of repo_id or root_path is required; when both are passed, repo_id wins. Returns when the scan completes; the daemon's standard 'cold scan: starting' / 'cold scan: complete' log pair is emitted as for the add-repo path.",
"properties": {
"repo_id": {
"type": "string",
"description": "Full repo_id or short_id prefix."
},
"root_path": {
"type": "string",
"description": "Absolute filesystem path; canonicalized via EvalSymlinks before lookup."
}
}
}
eng_remove_repo¶
Unregister a repo and drop all of its rows in one transaction.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"repo_id": {
"type": "string",
"description": "Full repo_id (SHA-256 hex) or short_id prefix returned by eng_list_repos."
}
},
"required": [
"repo_id"
]
}
eng_remove_repo_alias¶
Remove a user-defined alias by name.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "The alias to remove. Errors if unknown so a typo is loud."
}
},
"required": [
"name"
]
}
eng_reopen_finding¶
Reopen a previously closed finding by ID.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"finding_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"repo_id": {
"type": "string"
},
"reason": {
"type": "string",
"description": "Optional justification recorded in the audit log (reopen needs no reason functionally, unlike close)."
}
},
"required": [
"finding_id"
]
}
eng_search_semantic¶
Natural-language search over embedded symbols (RRF-fused with FTS, lexical fallback when the embedder is offline). Best for behavior-shaped queries ('where do we validate session tokens'). Returns inline snippets so a follow-up Read is usually unnecessary. For known identifiers prefer eng_find_symbol (exact + deterministic); for 'what does this reach / who calls this' escalate to eng_get_call_chain / eng_get_blast_radius. With repo_id omitted (and cwd outside any registered repo) the query fanned out across every registered repo in parallel and is fused with a single GLOBAL RRF so a top hit in one repo competes fairly with a top hit in another; each result then carries 'repo_id' so callers can disambiguate. The returned score is intra-query RRF (~0.01–0.03 typical range); use rank, not absolute score, to compare hits.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Hybrid semantic + lexical search over the indexed graph. Returns RRF-fused results.",
"properties": {
"query": {
"type": "string",
"description": "Free-text query."
},
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"k": {
"type": "integer",
"minimum": 1,
"description": "Result count (default 10). 'limit' is accepted as an alias; k wins on conflict."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Alias for k."
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
},
"required": [
"query"
]
}
eng_search_similar¶
Vector-nearest-neighbor search seeded by an existing symbol's embedding - 'what else looks like this?'. Use after eng_find_symbol or eng_search_semantic when you want to find variants, near-duplicates, or candidate refactor targets. Accepts node_id (exact) or symbol (resolved via FindNodes). Excludes the seed itself from results.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "k-nearest-neighbor vector search seeded by an existing node. Accepts node_id (exact) or symbol (resolved via FindNodes; ambiguous matches rejected)",
"properties": {
"node_id": {
"type": "string"
},
"symbol": {
"type": "string",
"description": "Alias for node_id by symbol name (resolved like eng_find_symbol). Ambiguity is rejected."
},
"repo_id": {
"type": "string"
},
"branch": {
"type": "string"
},
"k": {
"type": "integer",
"minimum": 1,
"description": "Neighbor count (default 10). 'limit' is accepted as an alias."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Alias for k."
},
"cwd": {
"type": "string",
"description": "Working directory used to resolve the active repo when repo_id is omitted."
}
}
}
eng_set_repo_alias¶
Bind a human-friendly alias to a repo. Resolves repo_id via the usual progression (full id, short_id, existing alias, prefix). force=true overwrites an existing alias on a different repo.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"description": "Bind a human-friendly alias to a repo. repo_id may be any form that resolves: full id, short_id, an existing alias, or an unambiguous prefix (>= 4 chars).",
"properties": {
"name": {
"type": "string",
"description": "The alias to set. Rejected if hex-only and >= 4 chars (would shadow the prefix resolver) or if it contains whitespace."
},
"repo_id": {
"type": "string",
"description": "Repo to bind. Resolved via the standard repo_id progression."
},
"force": {
"type": "boolean",
"description": "Overwrite an existing alias pointing at a different repo. Default false."
}
},
"required": [
"name",
"repo_id"
]
}
eng_suppress_finding¶
Suppress a finding, inserting a record into the suppressions table.
Input schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"properties": {
"finding_id": {
"type": "string",
"description": "ID of the finding to suppress."
},
"branch": {
"type": "string",
"description": "Branch the finding belongs to (optional; derived from finding_id when scope='finding')."
},
"repo_id": {
"type": "string",
"description": "Repository ID for audit attribution (optional; derived from finding_id when scope='finding')."
},
"reason": {
"type": "string",
"description": "Reason for the suppression."
},
"scope": {
"type": "string",
"description": "Suppression scope; defaults to \"finding\" when omitted."
},
"expires_at": {
"type": [
"integer",
"null"
],
"description": "Optional Unix timestamp at which the suppression expires."
}
},
"required": [
"finding_id",
"reason"
]
}