carto-md 2.0.9 → 2.1.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.
Files changed (172) hide show
  1. package/CONTRIBUTING.md +19 -15
  2. package/README.md +192 -415
  3. package/docs/api/README.md +99 -0
  4. package/docs/api/did_we_discuss_this.md +34 -0
  5. package/docs/api/dismiss_suggestion.md +34 -0
  6. package/docs/api/explain_change_in_natural_language.md +33 -0
  7. package/docs/api/find_consumers_of_api.md +34 -0
  8. package/docs/api/get_action_patterns.md +32 -0
  9. package/docs/api/get_active_drift.md +32 -0
  10. package/docs/api/get_active_suggestions.md +25 -0
  11. package/docs/api/get_ai_cost_attribution.md +32 -0
  12. package/docs/api/get_arch_events.md +42 -0
  13. package/docs/api/get_architectural_drift.md +37 -0
  14. package/docs/api/get_architecture.md +25 -0
  15. package/docs/api/get_blast_radius.md +34 -0
  16. package/docs/api/get_canonical_pattern.md +39 -0
  17. package/docs/api/get_change_plan.md +34 -0
  18. package/docs/api/get_change_velocity.md +32 -0
  19. package/docs/api/get_churn_vs_blast_radius.md +32 -0
  20. package/docs/api/get_complexity_trend.md +39 -0
  21. package/docs/api/get_context.md +34 -0
  22. package/docs/api/get_conventions.md +32 -0
  23. package/docs/api/get_cross_domain.md +25 -0
  24. package/docs/api/get_cross_language_call_graph.md +25 -0
  25. package/docs/api/get_cross_repo_blast_radius.md +34 -0
  26. package/docs/api/get_cross_team_coupling.md +25 -0
  27. package/docs/api/get_data_flow.md +33 -0
  28. package/docs/api/get_dead_code_with_confidence.md +32 -0
  29. package/docs/api/get_decision_log.md +32 -0
  30. package/docs/api/get_dependency_surface.md +25 -0
  31. package/docs/api/get_domain.md +34 -0
  32. package/docs/api/get_domain_evolution.md +39 -0
  33. package/docs/api/get_domain_health.md +32 -0
  34. package/docs/api/get_domains_list.md +25 -0
  35. package/docs/api/get_drift_digest.md +32 -0
  36. package/docs/api/get_env_vars.md +32 -0
  37. package/docs/api/get_evolution_delta.md +36 -0
  38. package/docs/api/get_file_ownership.md +33 -0
  39. package/docs/api/get_file_summary.md +34 -0
  40. package/docs/api/get_high_impact_files.md +32 -0
  41. package/docs/api/get_hot_in_prod_no_tests.md +34 -0
  42. package/docs/api/get_hotspot_files.md +37 -0
  43. package/docs/api/get_iac_resources.md +25 -0
  44. package/docs/api/get_interface_contract.md +33 -0
  45. package/docs/api/get_intervention_history.md +32 -0
  46. package/docs/api/get_invariants.md +37 -0
  47. package/docs/api/get_llm_enrichment.md +33 -0
  48. package/docs/api/get_microservice_cut_points.md +32 -0
  49. package/docs/api/get_microservices_migration_cut_points.md +25 -0
  50. package/docs/api/get_minimal_context_for_intent.md +39 -0
  51. package/docs/api/get_models.md +32 -0
  52. package/docs/api/get_neighbors.md +39 -0
  53. package/docs/api/get_org_architecture.md +25 -0
  54. package/docs/api/get_org_domain_mapping.md +25 -0
  55. package/docs/api/get_pending_decisions.md +32 -0
  56. package/docs/api/get_predictive_risk.md +32 -0
  57. package/docs/api/get_progressive_disclosure_tree.md +25 -0
  58. package/docs/api/get_recent_decisions.md +37 -0
  59. package/docs/api/get_risk_weighted_blast_radius.md +32 -0
  60. package/docs/api/get_routes.md +25 -0
  61. package/docs/api/get_safety_checklist.md +33 -0
  62. package/docs/api/get_semantic_diff.md +34 -0
  63. package/docs/api/get_service_boundary_violations.md +25 -0
  64. package/docs/api/get_service_dependency_graph.md +25 -0
  65. package/docs/api/get_session_context.md +32 -0
  66. package/docs/api/get_similar_patterns.md +39 -0
  67. package/docs/api/get_stale_docs.md +25 -0
  68. package/docs/api/get_structure.md +25 -0
  69. package/docs/api/get_temporal_context.md +34 -0
  70. package/docs/api/get_test_coverage_map.md +25 -0
  71. package/docs/api/get_token_budget_report.md +36 -0
  72. package/docs/api/get_upgrade_risk.md +25 -0
  73. package/docs/api/get_working_memory.md +25 -0
  74. package/docs/api/ingest_otlp_traces.md +34 -0
  75. package/docs/api/scaffold_for_intent.md +34 -0
  76. package/docs/api/search_routes.md +34 -0
  77. package/docs/api/simulate_change_impact.md +37 -0
  78. package/docs/api/validate_change.md +39 -0
  79. package/docs/api/validate_diff.md +39 -0
  80. package/docs/concepts/anci.md +87 -0
  81. package/docs/concepts/blast-radius.md +66 -0
  82. package/docs/concepts/domains.md +91 -0
  83. package/docs/concepts/import-graph.md +102 -0
  84. package/docs/concepts/mcp-integration.md +148 -0
  85. package/docs/guides/adding-feature-safely.md +101 -0
  86. package/docs/guides/ci-integration.md +175 -0
  87. package/docs/guides/monorepo-setup.md +121 -0
  88. package/docs/guides/onboarding-new-engineer.md +121 -0
  89. package/docs/guides/pre-merge-review.md +139 -0
  90. package/docs/migration/v1-to-v2.md +110 -0
  91. package/docs/quickstart.md +95 -0
  92. package/docs/scale.md +2 -2
  93. package/docs/troubleshooting.md +180 -0
  94. package/package.json +10 -4
  95. package/scripts/gen-api-docs.js +170 -0
  96. package/src/acp/agent.js +83 -11
  97. package/src/acp/config.js +64 -0
  98. package/src/acp/persistence.js +146 -0
  99. package/src/acp/providers/anthropic.js +179 -27
  100. package/src/acp/providers/index.js +15 -2
  101. package/src/acp/providers/openai.js +164 -38
  102. package/src/acp/providers/sse.js +82 -0
  103. package/src/acp/safety.js +128 -0
  104. package/src/acp/session.js +73 -0
  105. package/src/adjacent/call-graph.js +170 -0
  106. package/src/adjacent/iac.js +167 -0
  107. package/src/adjacent/llm-enrich.js +35 -0
  108. package/src/adjacent/runtime.js +216 -0
  109. package/src/adjacent/semantic-diff.js +143 -0
  110. package/src/agents/scan-structure.js +1 -1
  111. package/src/ai/context-builder.js +215 -0
  112. package/src/ai/retrieval/lexical.js +122 -0
  113. package/src/ai/retrieval/rrf.js +121 -0
  114. package/src/ai/retrieval/semantic.js +35 -0
  115. package/src/ai/retrieval/structural.js +82 -0
  116. package/src/ai/tools.js +423 -0
  117. package/src/anci/emit.js +2 -2
  118. package/src/bitmap/index.js +1 -1
  119. package/src/bitmap/tools.js +2 -2
  120. package/src/brain/conventions/index.js +185 -0
  121. package/src/brain/index.js +31 -0
  122. package/src/brain/invariants/index.js +252 -0
  123. package/src/brain/procedural/index.js +181 -0
  124. package/src/brain/suggestions/index.js +153 -0
  125. package/src/brain/working/index.js +170 -0
  126. package/src/cli/check.js +47 -1
  127. package/src/cli/diff.js +83 -0
  128. package/src/cli/doctor.js +270 -0
  129. package/src/cli/explain.js +61 -0
  130. package/src/cli/index.js +101 -0
  131. package/src/cli/init.js +143 -5
  132. package/src/cli/org.js +172 -0
  133. package/src/cli/pr-impact.js +59 -2
  134. package/src/cli/serve.js +1 -1
  135. package/src/cli/status.js +211 -0
  136. package/src/cli/sync.js +2 -2
  137. package/src/cli/temporal.js +188 -0
  138. package/src/cli/validate.js +201 -0
  139. package/src/cli/watch.js +4 -4
  140. package/src/cli/why.js +101 -0
  141. package/src/extractors/frameworks.js +236 -0
  142. package/src/extractors/languages/dart.js +138 -0
  143. package/src/extractors/languages/go.js +11 -1
  144. package/src/extractors/languages/javascript.js +13 -3
  145. package/src/extractors/languages/kotlin.js +169 -0
  146. package/src/extractors/languages/php.js +195 -0
  147. package/src/extractors/languages/python.js +12 -1
  148. package/src/extractors/languages/swift.js +140 -0
  149. package/src/extractors/languages/typescript.js +15 -2
  150. package/src/extractors/plugin-api.js +102 -0
  151. package/src/mcp/files-without-tests.js +285 -0
  152. package/src/mcp/middleware/index.js +451 -0
  153. package/src/mcp/server.js +2292 -0
  154. package/src/mcp/validate.js +1 -1
  155. package/src/org/detect.js +262 -0
  156. package/src/org/queries.js +144 -0
  157. package/src/org/store.js +173 -0
  158. package/src/org/sync.js +106 -0
  159. package/src/predictive/cut-points.js +83 -0
  160. package/src/predictive/drift-digest.js +88 -0
  161. package/src/predictive/ownership.js +145 -0
  162. package/src/predictive/risk-score.js +121 -0
  163. package/src/predictive/validate-change.js +55 -0
  164. package/src/store/store-adapter.js +3 -3
  165. package/src/store/{sync-v2.js → sync.js} +53 -13
  166. package/src/temporal/backfill.js +211 -0
  167. package/src/temporal/delta.js +85 -0
  168. package/src/temporal/events.js +180 -0
  169. package/src/temporal/queries.js +358 -0
  170. package/src/temporal/snapshot.js +151 -0
  171. package/src/temporal/store.js +400 -0
  172. package/src/mcp/server-v2.js +0 -986
@@ -0,0 +1,99 @@
1
+ # Carto MCP Tools — API Reference
2
+
3
+ Auto-generated from `src/mcp/server.js`. Re-run `node scripts/gen-api-docs.js` after adding tools.
4
+
5
+ **76 tools** across 8 categories.
6
+
7
+ ## Categories
8
+
9
+ ### Core graph (16)
10
+ - [`get_routes`](./get_routes.md)
11
+ - [`get_blast_radius`](./get_blast_radius.md)
12
+ - [`get_structure`](./get_structure.md)
13
+ - [`get_domain`](./get_domain.md)
14
+ - [`get_neighbors`](./get_neighbors.md)
15
+ - [`get_cross_domain`](./get_cross_domain.md)
16
+ - [`get_context`](./get_context.md)
17
+ - [`search_routes`](./search_routes.md)
18
+ - [`get_models`](./get_models.md)
19
+ - [`get_high_impact_files`](./get_high_impact_files.md)
20
+ - [`get_env_vars`](./get_env_vars.md)
21
+ - [`get_domains_list`](./get_domains_list.md)
22
+ - [`get_file_summary`](./get_file_summary.md)
23
+ - [`get_change_plan`](./get_change_plan.md)
24
+ - [`get_similar_patterns`](./get_similar_patterns.md)
25
+ - [`simulate_change_impact`](./simulate_change_impact.md)
26
+
27
+ ### Episodic Memory (5)
28
+ - [`validate_diff`](./validate_diff.md)
29
+ - [`get_recent_decisions`](./get_recent_decisions.md)
30
+ - [`get_session_context`](./get_session_context.md)
31
+ - [`did_we_discuss_this`](./did_we_discuss_this.md)
32
+ - [`get_intervention_history`](./get_intervention_history.md)
33
+
34
+ ### Temporal (9)
35
+ - [`get_architecture`](./get_architecture.md)
36
+ - [`get_architectural_drift`](./get_architectural_drift.md)
37
+ - [`get_domain_evolution`](./get_domain_evolution.md)
38
+ - [`get_hotspot_files`](./get_hotspot_files.md)
39
+ - [`get_complexity_trend`](./get_complexity_trend.md)
40
+ - [`get_churn_vs_blast_radius`](./get_churn_vs_blast_radius.md)
41
+ - [`get_arch_events`](./get_arch_events.md)
42
+ - [`get_domain_health`](./get_domain_health.md)
43
+ - [`get_temporal_context`](./get_temporal_context.md)
44
+
45
+ ### Brain (10)
46
+ - [`get_invariants`](./get_invariants.md)
47
+ - [`get_canonical_pattern`](./get_canonical_pattern.md)
48
+ - [`get_conventions`](./get_conventions.md)
49
+ - [`get_action_patterns`](./get_action_patterns.md)
50
+ - [`scaffold_for_intent`](./scaffold_for_intent.md)
51
+ - [`get_working_memory`](./get_working_memory.md)
52
+ - [`get_pending_decisions`](./get_pending_decisions.md)
53
+ - [`get_active_drift`](./get_active_drift.md)
54
+ - [`get_active_suggestions`](./get_active_suggestions.md)
55
+ - [`dismiss_suggestion`](./dismiss_suggestion.md)
56
+
57
+ ### AI-native (14)
58
+ - [`get_minimal_context_for_intent`](./get_minimal_context_for_intent.md)
59
+ - [`get_progressive_disclosure_tree`](./get_progressive_disclosure_tree.md)
60
+ - [`get_token_budget_report`](./get_token_budget_report.md)
61
+ - [`get_decision_log`](./get_decision_log.md)
62
+ - [`get_evolution_delta`](./get_evolution_delta.md)
63
+ - [`get_change_velocity`](./get_change_velocity.md)
64
+ - [`get_test_coverage_map`](./get_test_coverage_map.md)
65
+ - [`get_safety_checklist`](./get_safety_checklist.md)
66
+ - [`get_data_flow`](./get_data_flow.md)
67
+ - [`get_interface_contract`](./get_interface_contract.md)
68
+ - [`explain_change_in_natural_language`](./explain_change_in_natural_language.md)
69
+ - [`get_stale_docs`](./get_stale_docs.md)
70
+ - [`get_dependency_surface`](./get_dependency_surface.md)
71
+ - [`get_upgrade_risk`](./get_upgrade_risk.md)
72
+
73
+ ### Adjacent (8)
74
+ - [`get_cross_language_call_graph`](./get_cross_language_call_graph.md)
75
+ - [`get_iac_resources`](./get_iac_resources.md)
76
+ - [`ingest_otlp_traces`](./ingest_otlp_traces.md)
77
+ - [`get_risk_weighted_blast_radius`](./get_risk_weighted_blast_radius.md)
78
+ - [`get_dead_code_with_confidence`](./get_dead_code_with_confidence.md)
79
+ - [`get_hot_in_prod_no_tests`](./get_hot_in_prod_no_tests.md)
80
+ - [`get_semantic_diff`](./get_semantic_diff.md)
81
+ - [`get_llm_enrichment`](./get_llm_enrichment.md)
82
+
83
+ ### Predictive (7)
84
+ - [`get_predictive_risk`](./get_predictive_risk.md)
85
+ - [`get_microservice_cut_points`](./get_microservice_cut_points.md)
86
+ - [`validate_change`](./validate_change.md)
87
+ - [`get_file_ownership`](./get_file_ownership.md)
88
+ - [`get_cross_team_coupling`](./get_cross_team_coupling.md)
89
+ - [`get_drift_digest`](./get_drift_digest.md)
90
+ - [`get_ai_cost_attribution`](./get_ai_cost_attribution.md)
91
+
92
+ ### Org-wide (7)
93
+ - [`get_org_architecture`](./get_org_architecture.md)
94
+ - [`get_service_dependency_graph`](./get_service_dependency_graph.md)
95
+ - [`get_cross_repo_blast_radius`](./get_cross_repo_blast_radius.md)
96
+ - [`find_consumers_of_api`](./find_consumers_of_api.md)
97
+ - [`get_org_domain_mapping`](./get_org_domain_mapping.md)
98
+ - [`get_service_boundary_violations`](./get_service_boundary_violations.md)
99
+ - [`get_microservices_migration_cut_points`](./get_microservices_migration_cut_points.md)
@@ -0,0 +1,34 @@
1
+ # `did_we_discuss_this`
2
+
3
+ Substring search over the episodic memory log (decisions + interventions) for prior discussions of a topic. Use to avoid re-deciding settled questions.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "topic": {
12
+ "type": "string",
13
+ "description": "Topic to search for, e.g. \"auth\", \"snake_case\", \"blast radius\"."
14
+ }
15
+ },
16
+ "required": [
17
+ "topic"
18
+ ]
19
+ }
20
+ ```
21
+
22
+ ## Required arguments
23
+
24
+ - `topic`
25
+
26
+ ## Properties
27
+
28
+ | Name | Type | Description |
29
+ |------|------|-------------|
30
+ | `topic` | string | Topic to search for, e.g. "auth", "snake_case", "blast radius". |
31
+
32
+ ## See also
33
+
34
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,34 @@
1
+ # `dismiss_suggestion`
2
+
3
+ Mark a suggestion ID as dismissed for the current session. Acknowledgment-only; the underlying signal still exists.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "id": {
12
+ "type": "string",
13
+ "description": "Suggestion id from get_active_suggestions."
14
+ }
15
+ },
16
+ "required": [
17
+ "id"
18
+ ]
19
+ }
20
+ ```
21
+
22
+ ## Required arguments
23
+
24
+ - `id`
25
+
26
+ ## Properties
27
+
28
+ | Name | Type | Description |
29
+ |------|------|-------------|
30
+ | `id` | string | Suggestion id from get_active_suggestions. |
31
+
32
+ ## See also
33
+
34
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,33 @@
1
+ # `explain_change_in_natural_language`
2
+
3
+ Given a unified diff, returns a plain-language summary + risk + violation list + suggestions. Powered by validate_diff.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "diff": {
12
+ "type": "string"
13
+ }
14
+ },
15
+ "required": [
16
+ "diff"
17
+ ]
18
+ }
19
+ ```
20
+
21
+ ## Required arguments
22
+
23
+ - `diff`
24
+
25
+ ## Properties
26
+
27
+ | Name | Type | Description |
28
+ |------|------|-------------|
29
+ | `diff` | string | |
30
+
31
+ ## See also
32
+
33
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,34 @@
1
+ # `find_consumers_of_api`
2
+
3
+ Across all org repos, find every file importing a given npm/pypi/go/maven target.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "target": {
12
+ "type": "string",
13
+ "description": "Target package or module name"
14
+ }
15
+ },
16
+ "required": [
17
+ "target"
18
+ ]
19
+ }
20
+ ```
21
+
22
+ ## Required arguments
23
+
24
+ - `target`
25
+
26
+ ## Properties
27
+
28
+ | Name | Type | Description |
29
+ |------|------|-------------|
30
+ | `target` | string | Target package or module name |
31
+
32
+ ## See also
33
+
34
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,32 @@
1
+ # `get_action_patterns`
2
+
3
+ Procedural patterns mined from git history: "when developers add X, they also touch Y". Filter by natural-language intent.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "intent": {
12
+ "type": "string",
13
+ "description": "Optional intent filter (e.g. \"add route\")."
14
+ }
15
+ },
16
+ "required": []
17
+ }
18
+ ```
19
+
20
+ ## Required arguments
21
+
22
+ _None._
23
+
24
+ ## Properties
25
+
26
+ | Name | Type | Description |
27
+ |------|------|-------------|
28
+ | `intent` | string | Optional intent filter (e.g. "add route"). |
29
+
30
+ ## See also
31
+
32
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,32 @@
1
+ # `get_active_drift`
2
+
3
+ Domains with active drift in the last 7d: growth, threshold breaches. Use to spot domains drifting before they reach a critical event.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "threshold": {
12
+ "type": "number",
13
+ "description": "Drift threshold 0-1 (default 0.2 = 20%)."
14
+ }
15
+ },
16
+ "required": []
17
+ }
18
+ ```
19
+
20
+ ## Required arguments
21
+
22
+ _None._
23
+
24
+ ## Properties
25
+
26
+ | Name | Type | Description |
27
+ |------|------|-------------|
28
+ | `threshold` | number | Drift threshold 0-1 (default 0.2 = 20%). |
29
+
30
+ ## See also
31
+
32
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,25 @@
1
+ # `get_active_suggestions`
2
+
3
+ Active Suggestion Engine output. 4 triggers: cross-domain coupling jump, AI session conflict, convention violation mid-session, hotspot threshold crossed. Read periodically.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {},
11
+ "required": []
12
+ }
13
+ ```
14
+
15
+ ## Required arguments
16
+
17
+ _None._
18
+
19
+ ## Properties
20
+
21
+ _None._
22
+
23
+ ## See also
24
+
25
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,32 @@
1
+ # `get_ai_cost_attribution`
2
+
3
+ Per-AI-client decision counts + violation counts. Use to attribute cross-domain coupling cost to individual AI sessions / developers.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "hours": {
12
+ "type": "number",
13
+ "description": "Lookback hours (default 168 = 7d)."
14
+ }
15
+ },
16
+ "required": []
17
+ }
18
+ ```
19
+
20
+ ## Required arguments
21
+
22
+ _None._
23
+
24
+ ## Properties
25
+
26
+ | Name | Type | Description |
27
+ |------|------|-------------|
28
+ | `hours` | number | Lookback hours (default 168 = 7d). |
29
+
30
+ ## See also
31
+
32
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,42 @@
1
+ # `get_arch_events`
2
+
3
+ Architectural events (domain split, merge, growth, hotspot emergence). Severity filter: minor | major | critical.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "severity": {
12
+ "type": "string",
13
+ "description": "Filter: minor | major | critical."
14
+ },
15
+ "kind": {
16
+ "type": "string",
17
+ "description": "Optional kind filter (e.g. domain_growth, hotspot_active)."
18
+ },
19
+ "time_range": {
20
+ "type": "string",
21
+ "description": "Window like \"90d\" (default \"90d\")."
22
+ }
23
+ },
24
+ "required": []
25
+ }
26
+ ```
27
+
28
+ ## Required arguments
29
+
30
+ _None._
31
+
32
+ ## Properties
33
+
34
+ | Name | Type | Description |
35
+ |------|------|-------------|
36
+ | `severity` | string | Filter: minor \| major \| critical. |
37
+ | `kind` | string | Optional kind filter (e.g. domain_growth, hotspot_active). |
38
+ | `time_range` | string | Window like "90d" (default "90d"). |
39
+
40
+ ## See also
41
+
42
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,37 @@
1
+ # `get_architectural_drift`
2
+
3
+ Per-domain growth/shrink and event count over a time window. Run `carto temporal init` first to backfill from git history.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "domain": {
12
+ "type": "string",
13
+ "description": "Optional domain filter (e.g. AUTH)."
14
+ },
15
+ "time_range": {
16
+ "type": "string",
17
+ "description": "Window like \"30d\", \"90d\", \"1y\" (default \"30d\")."
18
+ }
19
+ },
20
+ "required": []
21
+ }
22
+ ```
23
+
24
+ ## Required arguments
25
+
26
+ _None._
27
+
28
+ ## Properties
29
+
30
+ | Name | Type | Description |
31
+ |------|------|-------------|
32
+ | `domain` | string | Optional domain filter (e.g. AUTH). |
33
+ | `time_range` | string | Window like "30d", "90d", "1y" (default "30d"). |
34
+
35
+ ## See also
36
+
37
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,25 @@
1
+ # `get_architecture`
2
+
3
+ Get a 500-word markdown summary of the project: domains, entry points, tech stack, key patterns, and size metrics. Use this as your first call when entering a new repo.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {},
11
+ "required": []
12
+ }
13
+ ```
14
+
15
+ ## Required arguments
16
+
17
+ _None._
18
+
19
+ ## Properties
20
+
21
+ _None._
22
+
23
+ ## See also
24
+
25
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,34 @@
1
+ # `get_blast_radius`
2
+
3
+ Get all files, routes, and domains affected by changing a specific file. Includes risk level per route.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "file": {
12
+ "type": "string",
13
+ "description": "Relative file path from project root"
14
+ }
15
+ },
16
+ "required": [
17
+ "file"
18
+ ]
19
+ }
20
+ ```
21
+
22
+ ## Required arguments
23
+
24
+ - `file`
25
+
26
+ ## Properties
27
+
28
+ | Name | Type | Description |
29
+ |------|------|-------------|
30
+ | `file` | string | Relative file path from project root |
31
+
32
+ ## See also
33
+
34
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,39 @@
1
+ # `get_canonical_pattern`
2
+
3
+ Highest-quality example of a pattern in the codebase (e.g. canonical route handler). Use as a copy-paste template before writing similar code.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "pattern_type": {
12
+ "type": "string",
13
+ "description": "route_handler | model_definition"
14
+ },
15
+ "domain": {
16
+ "type": "string",
17
+ "description": "Optional domain filter."
18
+ }
19
+ },
20
+ "required": [
21
+ "pattern_type"
22
+ ]
23
+ }
24
+ ```
25
+
26
+ ## Required arguments
27
+
28
+ - `pattern_type`
29
+
30
+ ## Properties
31
+
32
+ | Name | Type | Description |
33
+ |------|------|-------------|
34
+ | `pattern_type` | string | route_handler \| model_definition |
35
+ | `domain` | string | Optional domain filter. |
36
+
37
+ ## See also
38
+
39
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,34 @@
1
+ # `get_change_plan`
2
+
3
+ Given a natural-language intent (e.g. "add rate limiting to /api/users"), returns: files to touch, domains affected, blast radius, and similar patterns in the codebase.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "intent": {
12
+ "type": "string",
13
+ "description": "Natural language description of the change you want to make"
14
+ }
15
+ },
16
+ "required": [
17
+ "intent"
18
+ ]
19
+ }
20
+ ```
21
+
22
+ ## Required arguments
23
+
24
+ - `intent`
25
+
26
+ ## Properties
27
+
28
+ | Name | Type | Description |
29
+ |------|------|-------------|
30
+ | `intent` | string | Natural language description of the change you want to make |
31
+
32
+ ## See also
33
+
34
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,32 @@
1
+ # `get_change_velocity`
2
+
3
+ Commits-per-day over a window (requires temporal store). Useful for spotting development tempo shifts.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "days": {
12
+ "type": "number",
13
+ "description": "Lookback days (default 30)."
14
+ }
15
+ },
16
+ "required": []
17
+ }
18
+ ```
19
+
20
+ ## Required arguments
21
+
22
+ _None._
23
+
24
+ ## Properties
25
+
26
+ | Name | Type | Description |
27
+ |------|------|-------------|
28
+ | `days` | number | Lookback days (default 30). |
29
+
30
+ ## See also
31
+
32
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,32 @@
1
+ # `get_churn_vs_blast_radius`
2
+
3
+ Scatter data of churn vs blast_radius for every changed file in a window. Use to find risk hotspots.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "time_range": {
12
+ "type": "string",
13
+ "description": "Window like \"90d\" (default \"90d\")."
14
+ }
15
+ },
16
+ "required": []
17
+ }
18
+ ```
19
+
20
+ ## Required arguments
21
+
22
+ _None._
23
+
24
+ ## Properties
25
+
26
+ | Name | Type | Description |
27
+ |------|------|-------------|
28
+ | `time_range` | string | Window like "90d" (default "90d"). |
29
+
30
+ ## See also
31
+
32
+ - [Index of all MCP tools](./README.md)
@@ -0,0 +1,39 @@
1
+ # `get_complexity_trend`
2
+
3
+ A single file's presence across snapshots + commit count + current blast_radius. Use to track how a file's footprint evolved.
4
+
5
+ ## Input schema
6
+
7
+ ```json
8
+ {
9
+ "type": "object",
10
+ "properties": {
11
+ "file": {
12
+ "type": "string",
13
+ "description": "Relative file path."
14
+ },
15
+ "time_range": {
16
+ "type": "string",
17
+ "description": "Window like \"90d\" (default \"90d\")."
18
+ }
19
+ },
20
+ "required": [
21
+ "file"
22
+ ]
23
+ }
24
+ ```
25
+
26
+ ## Required arguments
27
+
28
+ - `file`
29
+
30
+ ## Properties
31
+
32
+ | Name | Type | Description |
33
+ |------|------|-------------|
34
+ | `file` | string | Relative file path. |
35
+ | `time_range` | string | Window like "90d" (default "90d"). |
36
+
37
+ ## See also
38
+
39
+ - [Index of all MCP tools](./README.md)