weavatrix 1.9.2 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Weavatrix — native MCP repository intelligence
2
2
 
3
+ <img src="https://raw.githubusercontent.com/Weavatrix/weavatrix/main/plugins/weavatrix/assets/logo.svg" alt="Weavatrix logo" width="88" align="right">
4
+
3
5
  [![CI](https://github.com/Weavatrix/weavatrix/actions/workflows/ci.yml/badge.svg)](https://github.com/Weavatrix/weavatrix/actions/workflows/ci.yml)
4
6
  [![npm](https://img.shields.io/npm/v/weavatrix.svg)](https://www.npmjs.com/package/weavatrix)
5
7
  [![engine](https://img.shields.io/crates/v/weavatrix-rust.svg?label=engine)](https://crates.io/crates/weavatrix-rust)
@@ -8,7 +10,7 @@
8
10
  **Give your coding agent repository evidence before it starts guessing.**
9
11
 
10
12
  Weavatrix is the native MCP product for repository intelligence. It gives
11
- Codex, Claude Code, and other coding agents 43 read-only operations over one
13
+ Codex, Claude Code, and other coding agents 47 read-only operations over one
12
14
  revision-bound evidence graph: impact, architecture, APIs, Git history,
13
15
  duplicates, dead code, search, semantic links, and temporal memory.
14
16
 
@@ -91,19 +93,93 @@ Which dependency violates .weavatrix/architecture.json?
91
93
  Find every GraphQL, gRPC, Kafka, RabbitMQ, NATS, JMS, SQS, or SNS
92
94
  contract affected by this branch.
93
95
  Build the smallest source bundle needed to edit this symbol safely.
96
+ Show me this file as it was two commits ago, without a checkout.
97
+ ```
98
+
99
+ ## See it answer
100
+
101
+ Real answers from Weavatrix analyzing its own repository at commit
102
+ `ec8bf30`, abridged (`…`) and with the local root shortened. Reproduce any of
103
+ them with `weavatrix tool <name> . '<arguments>'`.
104
+
105
+ **Orient in one call** — and know exactly which repository and revision
106
+ answered:
107
+
108
+ ```json
109
+ {"name": "graph_stats", "arguments": {}}
94
110
  ```
95
111
 
96
- ## The 43 read-only operations
112
+ ```json
113
+ {
114
+ "nodes": 1294,
115
+ "edges": 2771,
116
+ "freshness": {"state": "CURRENT", "source_revision": "sha256:dd3d96d3…"},
117
+ "relations": {"calls": 651, "contains": 1271, "imports": 419, "references": 314, "…": "…"},
118
+ "repository_context": {
119
+ "root": "…/weavatrix",
120
+ "git_head": "ec8bf3041588623f23ec5e7ebbaff3a333da9ca7",
121
+ "scan_revision": "sha256:dd3d96d3…",
122
+ "graph_age_seconds": 0
123
+ }
124
+ }
125
+ ```
126
+
127
+ Every answer carries that `repository_context` block. Add
128
+ `"expected_repository": "weavatrix"` to any call and a server that was
129
+ retargeted elsewhere fails loudly instead of answering about the wrong
130
+ repository.
131
+
132
+ **Blast radius before you edit:**
133
+
134
+ ```json
135
+ {"name": "get_dependents", "arguments": {"label": "file:src/mcp/server/mod.rs", "max_nodes": 6}}
136
+ ```
137
+
138
+ ```json
139
+ {
140
+ "dependents": [
141
+ {"distance": 1, "node": {"id": "file:src/main.rs", "language": "rust"}},
142
+ {"distance": 1, "node": {"id": "file:src/mcp/mod.rs"}},
143
+ {"distance": 1, "node": {"id": "file:src/mcp/server/tests/catalog.rs"}},
144
+ {"…": "…"}
145
+ ]
146
+ }
147
+ ```
148
+
149
+ **The file as it was — no checkout** (`git_read_blob`):
150
+
151
+ ```json
152
+ {"name": "git_read_blob", "arguments": {"path": "Cargo.toml", "revision": "HEAD~3", "max_bytes": 400}}
153
+ ```
154
+
155
+ ```json
156
+ {
157
+ "path": "Cargo.toml",
158
+ "revision": "70b5bc788a10ec89ab28b9ecbc005e3b9c7f9829",
159
+ "oid": "f5f54bac00a4feb6e965c0d87c5c6d4d25782e91",
160
+ "kind": "utf8-text",
161
+ "lines": ["[package]", "name = \"weavatrix\"", "version = \"1.9.2\"", "…"],
162
+ "size_bytes": 1224,
163
+ "returned_bytes": 400,
164
+ "truncated": true
165
+ }
166
+ ```
167
+
168
+ Three commits before `ec8bf30` this package was 1.9.2; the agent reads that
169
+ follow-up to a diff without touching the worktree. Binary blobs fail closed
170
+ instead of being decoded into garbage.
171
+
172
+ ## The 47 read-only operations
97
173
 
98
174
  | Workflow | Operations |
99
175
  | --- | --- |
100
176
  | Graph orientation | `graph_stats`, `get_node`, `get_neighbors`, `query_graph`, `god_nodes`, `shortest_path`, `get_community`, `list_communities`, `module_map`, `build_graph` |
101
177
  | Change impact | `get_dependents`, `change_impact`, `select_tests`, `verified_change`, `prepare_change`, `graph_diff` |
102
- | Exact source context | `search_code`, `read_source`, `inspect_symbol`, `context_bundle`, `map_stacktrace` |
103
- | Health and quality | `find_duplicates`, `find_dead_code`, `run_audit`, `coverage_map`, `hot_path_review` |
178
+ | Exact source context | `search_code`, `read_source`, `inspect_symbol`, `go_to_definition`, `find_references`, `context_bundle`, `map_stacktrace` |
179
+ | Health and quality | `find_duplicates`, `find_dead_code`, `run_audit`, `coverage_map`, `hot_path_review`, `perf_attribution` |
104
180
  | APIs and transports | `list_endpoints`, `trace_endpoint`, `trace_api_contract` |
105
181
  | Architecture | `get_architecture_contract`, `verify_architecture`, `verify_capabilities`, `explain_architecture_violation`, `propose_architecture_exception` |
106
- | Git and repositories | `git_history`, `cross_repo_git`, `open_repo`, `list_known_repos`, `rebuild_graph` |
182
+ | Git and repositories | `git_history`, `git_read_blob`, `cross_repo_git`, `open_repo`, `list_known_repos`, `rebuild_graph` |
107
183
  | Native extensions | `vector_search`, `semantic_link`, `seo_link_suggestions`, `memory_context` |
108
184
 
109
185
  Every operation is read-only with respect to the analyzed repository.
@@ -129,12 +205,12 @@ coding agent
129
205
  |
130
206
  | MCP over stdio
131
207
  v
132
- weavatrix 1.9.2
208
+ weavatrix 1.11.0
133
209
  profile catalog · refresh · watcher · MCP framing
134
210
  |
135
211
  v
136
- weavatrix-rust 2.7.3
137
- typed graph · analysis · 43 read-only operations
212
+ weavatrix-rust 2.10.0
213
+ typed graph · analysis · 47 read-only operations
138
214
  ```
139
215
 
140
216
  This npm product owns MCP transport and native distribution. The
@@ -143,13 +219,27 @@ the reusable protocol-independent engine; it is not an MCP server.
143
219
  Its standalone diagnostic therefore reports `weavatrix-rust <engine-version>`,
144
220
  while this MCP product reports both its product and embedded-engine identities.
145
221
 
146
- Engine 2.2.1 makes three reports carry only what their evidence supports:
147
- `find_duplicates` reports the lines a clone covers completely and the byte
148
- range to check them by, `run_audit` runtime findings land on the line they
149
- matched, and `token_budget` is refused by the operations that cannot apply it
150
- rather than accepted and ignored. `find_duplicates` also gains
151
- `include_strings`, which compares the payloads of multi-line literals - inline
152
- SQL, embedded templates - that the code pass sees as a single token.
222
+ ### You do not need the server to use the engines
223
+
224
+ The layers underneath are separately released npm packages with their own
225
+ repositories, licenses, and TypeScript types. Each one is a native library you
226
+ can `require` directly, with no MCP server, no agent, and no dependency on any
227
+ other Weavatrix package:
228
+
229
+ | Package | What it does on its own |
230
+ | --- | --- |
231
+ | [`weavatrix-scan`](https://www.npmjs.com/package/weavatrix-scan) | Deterministic repository manifests: normalized paths, sizes, hashes, one revision, typed skip evidence. |
232
+ | [`weavatrix-parse`](https://www.npmjs.com/package/weavatrix-parse) | Lossless tokenization and structural facts for 25 languages, with exact spans. |
233
+ | [`weavatrix-graph`](https://www.npmjs.com/package/weavatrix-graph) | A directed graph with provenance on every edge, plus BFS, SCC, topological sort, and PageRank. |
234
+ | [`weavatrix-memory`](https://www.npmjs.com/package/weavatrix-memory) | Bitemporal, evidence-carrying agent memory with a hard token budget and an audit receipt. |
235
+ | [`weavatrix-search`](https://www.npmjs.com/package/weavatrix-search) | Bounded ignore-aware content search, plus a persistent index updated from watcher events. |
236
+ | [`weavatrix-search-vector`](https://www.npmjs.com/package/weavatrix-search-vector) | Persistent, mutable vector search with metadata filters and an exact oracle. |
237
+ | [`weavatrix-clone`](https://www.npmjs.com/package/weavatrix-clone) | Type-1/2/3 clone detection with per-pair evidence and JSON, SARIF, and BigCloneEval output. |
238
+
239
+ Their Node and Bun benchmarks against the JavaScript library each would
240
+ otherwise replace live in one place, with the rules written down and the
241
+ losing rows kept:
242
+ [weavatrix-benchmarks](https://github.com/Weavatrix/weavatrix-benchmarks).
153
243
 
154
244
  ## Release evidence
155
245
 
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "weavatrix",
3
- "version": "1.9.2",
4
- "weavatrixEngineVersion": "2.7.3",
5
- "description": "Native repository intelligence for coding agents: 43 read-only MCP operations backed by typed evidence graphs, impact, architecture, APIs, Git, search, semantics, and memory.",
3
+ "version": "1.11.0",
4
+ "weavatrixEngineVersion": "2.10.0",
5
+ "description": "Native repository intelligence for coding agents: 47 read-only MCP operations backed by typed evidence graphs, impact, architecture, APIs, Git, search, semantics, and memory.",
6
6
  "author": "Sergii Ziborov <sergii.ziborov@gmail.com>",
7
7
  "license": "MIT",
8
8
  "homepage": "https://weavatrix.com",
package/server.json CHANGED
@@ -2,19 +2,19 @@
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "io.github.Weavatrix/weavatrix",
4
4
  "title": "Weavatrix",
5
- "description": "Native Weavatrix MCP: 43 read-only repository tools across 24 code and configuration surfaces.",
5
+ "description": "Native Weavatrix MCP: 47 read-only repository tools across 24 code and configuration surfaces.",
6
6
  "repository": {
7
7
  "url": "https://github.com/Weavatrix/weavatrix",
8
8
  "source": "github"
9
9
  },
10
- "version": "1.9.2",
10
+ "version": "1.11.0",
11
11
  "websiteUrl": "https://weavatrix.com",
12
12
  "packages": [
13
13
  {
14
14
  "registryType": "npm",
15
15
  "registryBaseUrl": "https://registry.npmjs.org",
16
16
  "identifier": "weavatrix",
17
- "version": "1.9.2",
17
+ "version": "1.11.0",
18
18
  "runtimeHint": "npx",
19
19
  "transport": {
20
20
  "type": "stdio"
package/skill/SKILL.md CHANGED
@@ -19,8 +19,8 @@ contracts. Do not call it merely because the server is available.
19
19
 
20
20
  1. Call `graph_stats` to confirm the active repository and graph revision.
21
21
  2. Use `module_map` for orientation or `search_code` for a known literal.
22
- 3. Pin decisive evidence with `inspect_symbol`, `context_bundle`, or
23
- `read_source`.
22
+ 3. Pin decisive evidence with `inspect_symbol`, `go_to_definition`,
23
+ `find_references`, `context_bundle`, or `read_source`.
24
24
  4. Expand only when needed: `get_dependents` or `change_impact` for risk,
25
25
  `trace_endpoint` or `trace_api_contract` for runtime contracts,
26
26
  `verify_architecture` for policy, and `run_audit` for a broad health pass.
@@ -2,7 +2,9 @@
2
2
 
3
3
  Open only the card for the method you are about to call. Each card explains
4
4
  when to use the method, its exact published inputs, and a minimal compact call.
5
- The live MCP `tools/list` schema is authoritative.
5
+ The live MCP `tools/list` schema is authoritative. Every answer carries
6
+ `repository_context` (root, scan revision, Git HEAD, graph age); pass
7
+ `expected_repository` to fail fast when the active repository differs.
6
8
 
7
9
  ## Graph, source, and orientation
8
10
 
@@ -12,13 +14,15 @@ The live MCP `tools/list` schema is authoritative.
12
14
  - [`query_graph`](tools/query_graph.md) — Bounded BFS or DFS around exact or textual seeds.
13
15
  - [`god_nodes`](tools/god_nodes.md) — Rank high-connectivity production nodes.
14
16
  - [`shortest_path`](tools/shortest_path.md) — Shortest typed dependency path between two nodes.
15
- - [`get_community`](tools/get_community.md) — Return one weak graph component.
16
- - [`list_communities`](tools/list_communities.md) — List deterministic weak graph components.
17
- - [`module_map`](tools/module_map.md) — Production folder and dependency map.
17
+ - [`get_community`](tools/get_community.md) — Return one coupling community (containment and package edges excluded).
18
+ - [`list_communities`](tools/list_communities.md) — List deterministic coupling communities (containment and package edges excluded).
19
+ - [`module_map`](tools/module_map.md) — Production folder map at a requested directory depth.
18
20
  - [`build_graph`](tools/build_graph.md) — Workspace, target and runner topology from manifest evidence.
19
21
  - [`search_code`](tools/search_code.md) — Literal or Rust-regex repository search without ripgrep.
20
22
  - [`read_source`](tools/read_source.md) — Bounded source context by node or repository path.
21
23
  - [`inspect_symbol`](tools/inspect_symbol.md) — Definition, direct relationships and source evidence.
24
+ - [`go_to_definition`](tools/go_to_definition.md) — Resolve the symbol at a source position to its definition without guessing by name.
25
+ - [`find_references`](tools/find_references.md) — Occurrences of the symbol at a position or label, from the graph and an on-disk SCIP index if present.
22
26
  - [`context_bundle`](tools/context_bundle.md) — Compact graph and source bundle for one symbol.
23
27
  - [`map_stacktrace`](tools/map_stacktrace.md) — Map stack-trace text onto repository files and symbols.
24
28
 
@@ -28,7 +32,8 @@ The live MCP `tools/list` schema is authoritative.
28
32
  - [`change_impact`](tools/change_impact.md) — Read-only Git change impact with graph evidence.
29
33
  - [`select_tests`](tools/select_tests.md) — Select the test suites a change most plausibly needs to run.
30
34
  - [`git_history`](tools/git_history.md) — Bounded direct Git history without launching git.
31
- - [`cross_repo_git`](tools/cross_repo_git.md) — Parallel histories, shared commits, or diffs across local repositories.
35
+ - [`git_read_blob`](tools/git_read_blob.md) — Bounded UTF-8 file content at an immutable Git revision or blob OID; binary blobs are refused.
36
+ - [`cross_repo_git`](tools/cross_repo_git.md) — Parallel histories, shared commits, or diffs across named local repositories.
32
37
  - [`verified_change`](tools/verified_change.md) — Composite pre-commit evidence and conservative verdict.
33
38
  - [`graph_diff`](tools/graph_diff.md) — Compare the current snapshot with an immutable Git revision.
34
39
 
@@ -38,7 +43,8 @@ The live MCP `tools/list` schema is authoritative.
38
43
  - [`find_dead_code`](tools/find_dead_code.md) — Conservative unreferenced-symbol review queue.
39
44
  - [`run_audit`](tools/run_audit.md) — Repository structure and evidence completeness audit.
40
45
  - [`coverage_map`](tools/coverage_map.md) — Measured coverage discovery or explicit static reachability.
41
- - [`hot_path_review`](tools/hot_path_review.md) — Rank high-connectivity and large source symbols.
46
+ - [`hot_path_review`](tools/hot_path_review.md) — Rank functions by static complexity times resolved call fan-in.
47
+ - [`perf_attribution`](tools/perf_attribution.md) — Correlate a measurement series with the declarations that changed between the revisions that produced it.
42
48
  - [`get_architecture_contract`](tools/get_architecture_contract.md) — Read or preview the local target-architecture contract.
43
49
  - [`prepare_change`](tools/prepare_change.md) — Select architecture rules for intended changed files.
44
50
  - [`verify_architecture`](tools/verify_architecture.md) — Verify graph dependencies against the active contract.
@@ -48,14 +54,14 @@ The live MCP `tools/list` schema is authoritative.
48
54
 
49
55
  ## APIs and transports
50
56
 
51
- - [`list_endpoints`](tools/list_endpoints.md) — Inventory statically extracted HTTP endpoints.
57
+ - [`list_endpoints`](tools/list_endpoints.md) — Inventory statically extracted HTTP endpoints, including hand-rolled req.method/pathname conditions.
52
58
  - [`trace_endpoint`](tools/trace_endpoint.md) — Resolve an endpoint and its bounded call neighborhood.
53
- - [`trace_api_contract`](tools/trace_api_contract.md) — Cross-repository HTTP, GraphQL, gRPC and event-transport contract evidence.
59
+ - [`trace_api_contract`](tools/trace_api_contract.md) — Cross-repository HTTP, GraphQL, gRPC and event-transport contract evidence for named backend and client roots.
54
60
 
55
61
  ## Repositories and refresh
56
62
 
57
- - [`open_repo`](tools/open_repo.md) — Retarget to another local repository.
58
- - [`list_known_repos`](tools/list_known_repos.md) — List repositories opened by this server process.
63
+ - [`open_repo`](tools/open_repo.md) — Retarget to another local repository. Graphs unused for 20 minutes unload; asking for one again rescans that folder.
64
+ - [`list_known_repos`](tools/list_known_repos.md) — List repositories with an in-process graph.
59
65
  - [`rebuild_graph`](tools/rebuild_graph.md) — Rebuild the derived in-memory graph without source writes.
60
66
 
61
67
  ## Optional supplied-data analysis
@@ -0,0 +1,36 @@
1
+ # `find_references`
2
+
3
+ Occurrences of the symbol at a position or label, from the graph and an on-disk SCIP index if present.
4
+
5
+ ## When to use
6
+
7
+ List every recorded occurrence of one symbol after you have a label or a pinned
8
+ `(path, line, column)` usage.
9
+
10
+ ## Inputs
11
+
12
+ - `label` (string) — exact node label; mutually exclusive with a full position.
13
+ - `path` (string) — repository-relative file when resolving by position.
14
+ - `line` (integer, min 1) — 1-based line when resolving by position.
15
+ - `column` (integer, min 1) — 1-based column when resolving by position.
16
+ - `scip_path` (string) — optional on-disk SCIP index; never spawned.
17
+ - `max_results` (integer, min 1).
18
+ - `cursor` (string).
19
+ - `output_format` ("text" | "json" | "structured", default "json") — text returns the concise text block only; json returns structured output and mirrors it into text for clients that read only content; structured drops that mirror, which is the larger copy, and is safe only where the client reads structuredContent.
20
+
21
+ ## Minimal call
22
+
23
+ ```json
24
+ {
25
+ "name": "find_references",
26
+ "arguments": {
27
+ "path": "src/main.rs",
28
+ "line": 42,
29
+ "column": 12,
30
+ "output_format": "text"
31
+ }
32
+ }
33
+ ```
34
+
35
+ Requires `label` or a complete position. The live MCP `tools/list` schema
36
+ remains authoritative for this installed version.
@@ -0,0 +1,33 @@
1
+ # `git_read_blob`
2
+
3
+ Bounded UTF-8 file content at an immutable Git revision or blob OID; binary blobs are refused.
4
+
5
+ ## When to use
6
+
7
+ After `graph_diff` or `git_history`, read a file "as it was" at a revision - or the exact blob an OID names - without checking anything out.
8
+
9
+ ## Inputs
10
+
11
+ - `max_bytes` (integer, min 1) — cap on returned content bytes (default 262144); the true size and a truncation flag are always reported.
12
+ - `oid` (string) — blob object id; mutually exclusive with `path`.
13
+ - `output_format` ("text" | "json" | "structured", default "json") — text returns the concise text block only; json returns structured output and mirrors it into text for clients that read only content; structured drops that mirror, which is the larger copy, and is safe only where the client reads structuredContent.
14
+ - `path` (string) — repository-relative file path looked up in the revision's tree.
15
+ - `revision` (string) — any resolvable revision, `~N` first-parent steps supported; default `HEAD`.
16
+ - `token_budget` (integer, min 1) — Approximate output ceiling in tokens (serialized bytes / 4); result arrays are trimmed from the tail to fit and the report states what was dropped.
17
+
18
+ ## Minimal call
19
+
20
+ ```json
21
+ {
22
+ "name": "git_read_blob",
23
+ "arguments": {
24
+ "path": "src/app.js",
25
+ "revision": "HEAD~1",
26
+ "output_format": "text"
27
+ }
28
+ }
29
+ ```
30
+
31
+ Binary content fails closed with the blob's true size; the answer never
32
+ fabricates text from bytes. The live MCP `tools/list` schema remains
33
+ authoritative for this installed version.
@@ -0,0 +1,34 @@
1
+ # `go_to_definition`
2
+
3
+ Resolve the symbol at a source position to its definition without guessing by name.
4
+
5
+ ## When to use
6
+
7
+ You already have `(path, line, column)` for a usage and need the definition the
8
+ graph recorded for that occurrence - not a same-named overload elsewhere.
9
+
10
+ ## Inputs
11
+
12
+ - `path` (string, required) — repository-relative file.
13
+ - `line` (integer, required, min 1) — 1-based line of the usage.
14
+ - `column` (integer, required, min 1) — 1-based column of the usage.
15
+ - `scip_path` (string) — optional on-disk SCIP index; never spawned.
16
+ - `output_format` ("text" | "json" | "structured", default "json") — text returns the concise text block only; json returns structured output and mirrors it into text for clients that read only content; structured drops that mirror, which is the larger copy, and is safe only where the client reads structuredContent.
17
+
18
+ ## Minimal call
19
+
20
+ ```json
21
+ {
22
+ "name": "go_to_definition",
23
+ "arguments": {
24
+ "path": "src/main.rs",
25
+ "line": 42,
26
+ "column": 12,
27
+ "output_format": "text"
28
+ }
29
+ }
30
+ ```
31
+
32
+ Unresolved positions stay `UNRESOLVED`; a unique repository name is not a
33
+ definition. The live MCP `tools/list` schema remains authoritative for this
34
+ installed version.
@@ -1,10 +1,10 @@
1
1
  # `list_known_repos`
2
2
 
3
- List repositories opened by this server process.
3
+ List repositories with an in-process graph.
4
4
 
5
5
  ## When to use
6
6
 
7
- List repositories previously opened by this server process.
7
+ See which roots this process has already opened.
8
8
 
9
9
  ## Inputs
10
10
 
@@ -0,0 +1,39 @@
1
+ # `perf_attribution`
2
+
3
+ Correlate a measurement series with the declarations that changed between the revisions that produced it.
4
+
5
+ ## When to use
6
+
7
+ You already have a harness table of measurements per Git revision and want
8
+ co-occurrence with structural change - not a profiler sample.
9
+
10
+ ## Inputs
11
+
12
+ - `measurements_file` (string, required) — repository-relative TSV/CSV the harness wrote; `#` comment rows are ignored.
13
+ - `metric` (string, required) — column with the measured number.
14
+ - `revision_column` (string, default `"commit"`) — column with the Git revision.
15
+ - `direction` ("lower_is_better" | "higher_is_better", default `"lower_is_better"`).
16
+ - `max_revisions` (integer, min 2).
17
+ - `min_delta_percent` (integer, min 0).
18
+ - `top_n` (integer, min 0).
19
+ - `path` (string).
20
+ - `include_tests` (boolean).
21
+ - `include_classified` (boolean).
22
+ - `output_format` ("text" | "json" | "structured", default "json") — text returns the concise text block only; json returns structured output and mirrors it into text for clients that read only content; structured drops that mirror, which is the larger copy, and is safe only where the client reads structuredContent.
23
+
24
+ ## Minimal call
25
+
26
+ ```json
27
+ {
28
+ "name": "perf_attribution",
29
+ "arguments": {
30
+ "measurements_file": "bench/results.tsv",
31
+ "metric": "ns_per_op",
32
+ "output_format": "text"
33
+ }
34
+ }
35
+ ```
36
+
37
+ This is co-occurrence between caller measurements and static change, not CPU
38
+ profiler attribution. The live MCP `tools/list` schema remains authoritative
39
+ for this installed version.