On cloud, every tool takes a
repo argument naming one of your repos,
and the full surface below is available. On a local stdio server
(Run locally) repo is a path (or omit it and set LETTUCE_DB),
and the default surface is just understand + read_snippet — set
CODEWAZE_MCP_FULL=1 to expose everything else.repo argument naming one of your repos. Each call
returns compact rows with id, kind, qualified_name, path,
line_start / line_end, signature, and summary fields. The
relationship tools (neighbors, callers, …) also tag rows with the
edge_kind (calls, imports, contains, inherits, references)
and direction that led there.
High-level tools (start here)
Most agents only need these three.Returns candidate symbols, code, callers, callees, related docs, and a
confidence score (0..1) for task in repo. Answers most questions
in one call.Returns ranked candidate symbols (with code) for
task in repo, plus
a confidence level (high / medium / low / none).Returns the top candidates in
repo for query. Each carries
file:line, signature, code, callers, and callees.Finding code
Search symbols in
repo matching query. Matches across names,
signatures, summaries, and paths — button also matches IconButton.Find symbols by exact name in
repo (or LIKE pattern when
fuzzy=true).Return the nodes with the highest incoming-edge count in
repo.Following relationships
Nodes that call this node, and nodes called by it.
Modules imported by this node, and nodes that import it.
1-hop neighbors of a node. Each row carries the
edge_kind and
direction that led there.Shortest path between two nodes, or
{"path": null}.Nodes transitively reachable from a node along the given edge kinds.
Each row carries its
depth.Bounded subgraph around a node.
Reading source
A single node row:
file:line, signature, docstring first line.Read source. Pass a
path (optionally with line_start/line_end or
around a line), a name, or a node_id from an earlier result.
Lines are line-numbered; ranges longer than max_lines are truncated.A typical flow
For a request like “add rate limiting to the/login endpoint”:
understand(repo, "add rate limiting to the /login endpoint")→ candidate symbols with code, callers, callees, and related docs. Often enough to answer.- If you need to see more of the file:
read_snippet(repo, node_id, …).
search(repo, "login")→ the endpoint, withfile:line.callers(repo, id)→ who routes and tests it.callees(repo, id)→ what it already depends on.search(repo, "rate limit", fuzzy=true)→ locate the helper.find_path(repo, ...)→ confirm it isn’t already wired in.read_snippet(repo, node_id=id)→ read just those lines, then edit.