@arii/boomtick-mcp 0.4.1 → 0.5.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 (163) hide show
  1. package/.mcp/schemas/boomtick.health.json +14 -10
  2. package/.mcp/schemas/boomtick_health.json +16 -0
  3. package/.mcp/schemas/github.checkout_branch.json +28 -24
  4. package/.mcp/schemas/github.comment_triage_summary.json +21 -17
  5. package/.mcp/schemas/github.create_issue.json +55 -50
  6. package/.mcp/schemas/github.create_pull_request.json +53 -48
  7. package/.mcp/schemas/github.get_merge_conflict_files.json +21 -17
  8. package/.mcp/schemas/github.get_pr.json +30 -12
  9. package/.mcp/schemas/github.get_pr_commits.json +32 -0
  10. package/.mcp/schemas/github.get_pr_diff.json +30 -12
  11. package/.mcp/schemas/github.get_pr_reviews.json +32 -0
  12. package/.mcp/schemas/github.issue_comment.json +35 -17
  13. package/.mcp/schemas/github.issue_update.json +114 -96
  14. package/.mcp/schemas/github.issue_view.json +30 -12
  15. package/.mcp/schemas/github.open_replacement_pr.json +64 -60
  16. package/.mcp/schemas/github.search_open_prs.json +61 -43
  17. package/.mcp/schemas/github_checkout_branch.json +31 -0
  18. package/.mcp/schemas/github_comment_triage_summary.json +24 -0
  19. package/.mcp/schemas/github_create_issue.json +58 -0
  20. package/.mcp/schemas/github_create_pull_request.json +56 -0
  21. package/.mcp/schemas/github_get_merge_conflict_files.json +24 -0
  22. package/.mcp/schemas/github_get_pr.json +32 -0
  23. package/.mcp/schemas/github_get_pr_commits.json +32 -0
  24. package/.mcp/schemas/github_get_pr_diff.json +32 -0
  25. package/.mcp/schemas/github_get_pr_reviews.json +32 -0
  26. package/.mcp/schemas/github_issue_comment.json +38 -0
  27. package/.mcp/schemas/github_issue_update.json +123 -0
  28. package/.mcp/schemas/github_issue_view.json +32 -0
  29. package/.mcp/schemas/github_open_replacement_pr.json +67 -0
  30. package/.mcp/schemas/github_search_open_prs.json +65 -0
  31. package/.mcp/schemas/jules.cancel_session.json +16 -12
  32. package/.mcp/schemas/jules.create_session.json +41 -37
  33. package/.mcp/schemas/jules.get_messages.json +16 -12
  34. package/.mcp/schemas/jules.get_pr.json +16 -12
  35. package/.mcp/schemas/jules.get_session.json +16 -12
  36. package/.mcp/schemas/jules.list_sessions.json +33 -29
  37. package/.mcp/schemas/jules.send_message.json +30 -26
  38. package/.mcp/schemas/jules.trigger_feedback.json +16 -12
  39. package/.mcp/schemas/jules_cancel_session.json +18 -0
  40. package/.mcp/schemas/jules_create_session.json +44 -0
  41. package/.mcp/schemas/jules_get_messages.json +18 -0
  42. package/.mcp/schemas/jules_get_pr.json +18 -0
  43. package/.mcp/schemas/jules_get_session.json +18 -0
  44. package/.mcp/schemas/jules_list_sessions.json +36 -0
  45. package/.mcp/schemas/jules_send_message.json +35 -0
  46. package/.mcp/schemas/jules_trigger_feedback.json +18 -0
  47. package/.mcp/schemas/repo.commit_patch.json +34 -30
  48. package/.mcp/schemas/repo.create_branch.json +21 -17
  49. package/.mcp/schemas/repo.create_repair_branch.json +34 -30
  50. package/.mcp/schemas/repo.get_changed_files.json +19 -15
  51. package/.mcp/schemas/repo.get_command_schema.json +16 -12
  52. package/.mcp/schemas/repo.get_package_scripts.json +21 -17
  53. package/.mcp/schemas/repo.get_workflow_runs.json +50 -0
  54. package/.mcp/schemas/repo.logs.json +42 -24
  55. package/.mcp/schemas/repo.read_agent_context.json +7 -3
  56. package/.mcp/schemas/repo.read_ci_logs.json +35 -17
  57. package/.mcp/schemas/repo.run_tests.json +40 -36
  58. package/.mcp/schemas/repo_commit_patch.json +39 -0
  59. package/.mcp/schemas/repo_create_branch.json +24 -0
  60. package/.mcp/schemas/repo_create_repair_branch.json +37 -0
  61. package/.mcp/schemas/repo_get_changed_files.json +22 -0
  62. package/.mcp/schemas/repo_get_command_schema.json +18 -0
  63. package/.mcp/schemas/repo_get_package_scripts.json +23 -0
  64. package/.mcp/schemas/repo_get_workflow_runs.json +50 -0
  65. package/.mcp/schemas/repo_logs.json +45 -0
  66. package/.mcp/schemas/repo_read_agent_context.json +9 -0
  67. package/.mcp/schemas/repo_read_ci_logs.json +38 -0
  68. package/.mcp/schemas/repo_run_tests.json +45 -0
  69. package/CHANGELOG.md +16 -0
  70. package/README.md +0 -1
  71. package/actions/impact-analysis/action.yml +4 -16
  72. package/actions/run-project-gate/action.yml +2 -9
  73. package/actions/test-build/action.yml +1 -19
  74. package/dist/lib/git.js +74 -0
  75. package/dist/lib/git.test.js +82 -0
  76. package/dist/lib/param_utils.js +35 -0
  77. package/dist/lib/param_utils.test.js +44 -0
  78. package/dist/mcp/definitions.js +27 -40
  79. package/dist/mcp/schemas.test.js +28 -0
  80. package/dist/mcp/server.js +64 -74
  81. package/dist/mcp/server.test.js +0 -33
  82. package/dist/tools/contract.js +229 -10
  83. package/dist/tools/github.create_issue.js +3 -2
  84. package/dist/tools/github.create_issue.test.js +10 -0
  85. package/dist/tools/github.create_pull_request.js +4 -4
  86. package/dist/tools/github.get_merge_conflict_files.js +10 -18
  87. package/dist/tools/github.get_pr.js +4 -1
  88. package/dist/tools/github.get_pr_commits.js +21 -0
  89. package/dist/tools/github.get_pr_diff.js +6 -2
  90. package/dist/tools/github.get_pr_reviews.js +21 -0
  91. package/dist/tools/github.get_pr_reviews.test.js +99 -0
  92. package/dist/tools/github.issue_comment.js +8 -1
  93. package/dist/tools/github.issue_update.js +3 -0
  94. package/dist/tools/github.issue_view.js +4 -1
  95. package/dist/tools/github.search_open_prs.js +4 -0
  96. package/dist/tools/jules/create-session.js +1 -2
  97. package/dist/tools/jules/get-pr.js +1 -2
  98. package/dist/tools/jules/get-session.js +1 -2
  99. package/dist/tools/jules/shared.js +24 -0
  100. package/dist/tools/repo.commit_patch.js +30 -10
  101. package/dist/tools/repo.get_changed_files.js +2 -13
  102. package/dist/tools/repo.get_workflow_runs.js +29 -0
  103. package/dist/tools/repo.logs.js +5 -1
  104. package/dist/tools/repo.read_agent_context.js +27 -1
  105. package/dist/tools/repo.read_agent_context.test.js +1 -1
  106. package/dist/tools/repo.read_ci_logs.js +5 -1
  107. package/dist/tools/repo.run_tests.js +26 -4
  108. package/package.json +4 -7
  109. package/scripts/sync-mcp-schemas.ts +6 -1
  110. package/src/agents/verifier-agent.prompt.md +0 -4
  111. package/src/lib/git.test.ts +110 -0
  112. package/src/lib/git.ts +109 -0
  113. package/src/lib/param_utils.test.ts +49 -0
  114. package/src/lib/param_utils.ts +42 -0
  115. package/src/mcp/definitions.ts +30 -43
  116. package/src/mcp/schemas.test.ts +34 -0
  117. package/src/mcp/server.test.ts +0 -42
  118. package/src/mcp/server.ts +65 -75
  119. package/src/tools/contract.ts +241 -10
  120. package/src/tools/github.create_issue.test.ts +10 -0
  121. package/src/tools/github.create_issue.ts +3 -1
  122. package/src/tools/github.create_pull_request.ts +4 -5
  123. package/src/tools/github.get_merge_conflict_files.ts +10 -20
  124. package/src/tools/github.get_pr.ts +4 -1
  125. package/src/tools/github.get_pr_commits.ts +27 -0
  126. package/src/tools/github.get_pr_diff.ts +7 -2
  127. package/src/tools/github.get_pr_reviews.test.ts +110 -0
  128. package/src/tools/github.get_pr_reviews.ts +27 -0
  129. package/src/tools/github.issue_comment.ts +8 -1
  130. package/src/tools/github.issue_update.ts +4 -1
  131. package/src/tools/github.issue_view.ts +4 -1
  132. package/src/tools/github.search_open_prs.ts +4 -0
  133. package/src/tools/jules/create-session.ts +1 -2
  134. package/src/tools/jules/get-pr.ts +1 -2
  135. package/src/tools/jules/get-session.ts +1 -2
  136. package/src/tools/jules/shared.ts +35 -0
  137. package/src/tools/repo.commit_patch.ts +35 -11
  138. package/src/tools/repo.get_changed_files.ts +2 -16
  139. package/src/tools/repo.get_workflow_runs.ts +36 -0
  140. package/src/tools/repo.logs.ts +5 -1
  141. package/src/tools/repo.read_agent_context.test.ts +1 -1
  142. package/src/tools/repo.read_agent_context.ts +35 -1
  143. package/src/tools/repo.read_ci_logs.ts +5 -1
  144. package/src/tools/repo.run_tests.ts +28 -5
  145. package/.mcp/schemas/agent.search_ddgs.json +0 -27
  146. package/.mcp/schemas/repo.get_route_map.json +0 -19
  147. package/.mcp/schemas/repo.run_lighthouse.json +0 -25
  148. package/.mcp/schemas/repo.run_playwright.json +0 -32
  149. package/dist/lib/td-cli.js +0 -54
  150. package/dist/tools/ddgs.search.js +0 -50
  151. package/dist/tools/ddgs.search.test.js +0 -67
  152. package/dist/tools/ddgs_search.py +0 -23
  153. package/dist/tools/repo.get_route_map.js +0 -37
  154. package/dist/tools/repo.run_lighthouse.js +0 -37
  155. package/dist/tools/repo.run_playwright.js +0 -29
  156. package/scripts/export-mcp-schema.ts +0 -7
  157. package/src/lib/td-cli.ts +0 -73
  158. package/src/tools/ddgs.search.test.ts +0 -92
  159. package/src/tools/ddgs.search.ts +0 -58
  160. package/src/tools/ddgs_search.py +0 -23
  161. package/src/tools/repo.get_route_map.ts +0 -41
  162. package/src/tools/repo.run_lighthouse.ts +0 -40
  163. package/src/tools/repo.run_playwright.ts +0 -35
@@ -4,6 +4,7 @@ import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSche
4
4
  import { config } from "../config.js";
5
5
  import { createSuccessResult, createErrorResult } from "../lib/result.js";
6
6
  import { MCP_TOOLS, MCP_PROMPTS, MCP_RESOURCES } from "./definitions.js";
7
+ import { normalizeArguments } from "../lib/param_utils.js";
7
8
  import { healthHandler, HealthCheckInputSchema } from "./tools.js";
8
9
  import { searchOpenPrsHandler, SearchOpenPrsInputSchema } from "../tools/github.search_open_prs.js";
9
10
  import { getPrDiffHandler, GetPrDiffInputSchema } from "../tools/github.get_pr_diff.js";
@@ -13,14 +14,11 @@ import { getChangedFilesHandler, GetChangedFilesInputSchema } from "../tools/rep
13
14
  import { readAgentContextHandler, ReadAgentContextInputSchema } from "../tools/repo.read_agent_context.js";
14
15
  import { getCommandSchemaHandler, GetCommandSchemaInputSchema } from "../tools/repo.get_command_schema.js";
15
16
  import { getPackageScriptsHandler, GetPackageScriptsInputSchema } from "../tools/repo.get_package_scripts.js";
16
- import { getRouteMapHandler, GetRouteMapInputSchema } from "../tools/repo.get_route_map.js";
17
17
  import { readCiLogsHandler, ReadCiLogsInputSchema } from "../tools/repo.read_ci_logs.js";
18
18
  import { repoLogsHandler, RepoLogsInputSchema } from "../tools/repo.logs.js";
19
19
  import { createRepairBranchHandler, CreateRepairBranchInputSchema } from "../tools/repo.create_repair_branch.js";
20
20
  import { createBranchHandler, CreateBranchInputSchema } from "../tools/repo.create_branch.js";
21
21
  import { runTestsHandler, RunTestsInputSchema } from "../tools/repo.run_tests.js";
22
- import { runLighthouseHandler, RunLighthouseInputSchema } from "../tools/repo.run_lighthouse.js";
23
- import { runPlaywrightHandler, RunPlaywrightInputSchema } from "../tools/repo.run_playwright.js";
24
22
  import { commitPatchHandler, CommitPatchInputSchema } from "../tools/repo.commit_patch.js";
25
23
  import { openReplacementPrHandler, OpenReplacementPrInputSchema } from "../tools/github.open_replacement_pr.js";
26
24
  import { commentTriageSummaryHandler, CommentTriageSummaryInputSchema } from "../tools/github.comment_triage_summary.js";
@@ -38,12 +36,10 @@ import { listJulesSessionsHandler, ListJulesSessionsInputSchema } from "../tools
38
36
  import { cancelJulesSessionHandler, CancelJulesSessionInputSchema } from "../tools/jules/cancel-session.js";
39
37
  import { getJulesPullRequestHandler, GetJulesPullRequestInputSchema } from "../tools/jules/get-pr.js";
40
38
  import { triggerJulesFeedbackHandler, TriggerJulesFeedbackInputSchema } from "../tools/jules/trigger-feedback.js";
41
- import { ddgsSearchHandler, DdgsSearchInputSchema } from "../tools/ddgs.search.js";
42
39
  import fs from "fs/promises";
43
40
  import { existsSync, readFileSync } from "fs";
44
41
  import path from "path";
45
42
  import { spawnSync } from "child_process";
46
- import { fileURLToPath } from "url";
47
43
  export class BoomtickMCPServer {
48
44
  server;
49
45
  constructor() {
@@ -105,12 +101,6 @@ export class BoomtickMCPServer {
105
101
  contents: [{ uri, mimeType: "application/json", text: content }],
106
102
  };
107
103
  }
108
- if (uri === "repo://routes") {
109
- const routeMap = await getRouteMapHandler({});
110
- return {
111
- contents: [{ uri, mimeType: "application/json", text: JSON.stringify(routeMap, null, 2) }],
112
- };
113
- }
114
104
  if (uri === "repo://design-tokens") {
115
105
  const tokensPath = path.join(config.repoPath, "src/styles/design-tokens.ts");
116
106
  const content = await fs.readFile(tokensPath, "utf-8");
@@ -132,20 +122,6 @@ export class BoomtickMCPServer {
132
122
  contents: [{ uri, mimeType: "application/json", text: JSON.stringify(logs, null, 2) }],
133
123
  };
134
124
  }
135
- if (uri.startsWith("repo://lighthouse/")) {
136
- const branch = uri.split("/").pop() || "";
137
- const report = await runLighthouseHandler({ route: "/", worktreePath: `../boomtick-mcp-rescue-${branch}` });
138
- return {
139
- contents: [{ uri, mimeType: "application/json", text: JSON.stringify(report, null, 2) }],
140
- };
141
- }
142
- if (uri.startsWith("repo://playwright/")) {
143
- const branch = uri.split("/").pop() || "";
144
- const report = await runPlaywrightHandler({ worktreePath: `../boomtick-mcp-rescue-${branch}` });
145
- return {
146
- contents: [{ uri, mimeType: "application/json", text: JSON.stringify(report, null, 2) }],
147
- };
148
- }
149
125
  throw new Error(`Resource not found: ${uri}`);
150
126
  });
151
127
  }
@@ -157,77 +133,100 @@ export class BoomtickMCPServer {
157
133
  });
158
134
  this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
159
135
  try {
160
- switch (request.params.name) {
136
+ const normalizedToolName = request.params.name.replace(/_/g, ".");
137
+ const normArgs = normalizeArguments(request.params.arguments);
138
+ switch (normalizedToolName) {
161
139
  case "boomtick.health":
162
- return createSuccessResult(await healthHandler(HealthCheckInputSchema.parse(request.params.arguments || {})));
140
+ return createSuccessResult(await healthHandler(HealthCheckInputSchema.parse(normArgs)));
141
+ case "github.search.open.prs":
163
142
  case "github.search_open_prs":
164
- return createSuccessResult(await searchOpenPrsHandler(SearchOpenPrsInputSchema.parse(request.params.arguments || {})));
143
+ return createSuccessResult(await searchOpenPrsHandler(SearchOpenPrsInputSchema.parse(normArgs)));
144
+ case "repo.read.agent.context":
165
145
  case "repo.read_agent_context":
166
- return createSuccessResult(await readAgentContextHandler(ReadAgentContextInputSchema.parse(request.params.arguments || {})));
146
+ return createSuccessResult(await readAgentContextHandler(ReadAgentContextInputSchema.parse(normArgs)));
147
+ case "github.get.pr.diff":
167
148
  case "github.get_pr_diff":
168
- return createSuccessResult(await getPrDiffHandler(GetPrDiffInputSchema.parse(request.params.arguments)));
149
+ return createSuccessResult(await getPrDiffHandler(GetPrDiffInputSchema.parse(normArgs)));
150
+ case "github.get.merge.conflict.files":
169
151
  case "github.get_merge_conflict_files":
170
- return createSuccessResult(await getMergeConflictFilesHandler(GetMergeConflictFilesInputSchema.parse(request.params.arguments)));
152
+ return createSuccessResult(await getMergeConflictFilesHandler(GetMergeConflictFilesInputSchema.parse(normArgs)));
153
+ case "github.checkout.branch":
171
154
  case "github.checkout_branch":
172
- return createSuccessResult(await checkoutBranchHandler(CheckoutBranchInputSchema.parse(request.params.arguments)));
155
+ return createSuccessResult(await checkoutBranchHandler(CheckoutBranchInputSchema.parse(normArgs)));
156
+ case "repo.get.changed.files":
173
157
  case "repo.get_changed_files":
174
- return createSuccessResult(await getChangedFilesHandler(GetChangedFilesInputSchema.parse(request.params.arguments || {})));
158
+ return createSuccessResult(await getChangedFilesHandler(GetChangedFilesInputSchema.parse(normArgs)));
159
+ case "repo.get.command.schema":
175
160
  case "repo.get_command_schema":
176
- return createSuccessResult(await getCommandSchemaHandler(GetCommandSchemaInputSchema.parse(request.params.arguments)));
161
+ return createSuccessResult(await getCommandSchemaHandler(GetCommandSchemaInputSchema.parse(normArgs)));
162
+ case "repo.get.package.scripts":
177
163
  case "repo.get_package_scripts":
178
- return createSuccessResult(await getPackageScriptsHandler(GetPackageScriptsInputSchema.parse(request.params.arguments || {})));
179
- case "repo.get_route_map":
180
- return createSuccessResult(await getRouteMapHandler(GetRouteMapInputSchema.parse(request.params.arguments || {})));
164
+ return createSuccessResult(await getPackageScriptsHandler(GetPackageScriptsInputSchema.parse(normArgs)));
165
+ case "repo.read.ci.logs":
181
166
  case "repo.read_ci_logs":
182
- return createSuccessResult(await readCiLogsHandler(ReadCiLogsInputSchema.parse(request.params.arguments)));
167
+ return createSuccessResult(await readCiLogsHandler(ReadCiLogsInputSchema.parse(normArgs)));
183
168
  case "repo.logs":
184
- return createSuccessResult(await repoLogsHandler(RepoLogsInputSchema.parse(request.params.arguments)));
169
+ return createSuccessResult(await repoLogsHandler(RepoLogsInputSchema.parse(normArgs)));
170
+ case "repo.create.branch":
185
171
  case "repo.create_branch":
186
- return createSuccessResult(await createBranchHandler(CreateBranchInputSchema.parse(request.params.arguments)));
172
+ return createSuccessResult(await createBranchHandler(CreateBranchInputSchema.parse(normArgs)));
173
+ case "repo.create.repair.branch":
187
174
  case "repo.create_repair_branch":
188
- return createSuccessResult(await createRepairBranchHandler(CreateRepairBranchInputSchema.parse(request.params.arguments)));
175
+ return createSuccessResult(await createRepairBranchHandler(CreateRepairBranchInputSchema.parse(normArgs)));
176
+ case "repo.run.tests":
189
177
  case "repo.run_tests":
190
- return createSuccessResult(await runTestsHandler(RunTestsInputSchema.parse(request.params.arguments || {})));
191
- case "repo.run_lighthouse":
192
- return createSuccessResult(await runLighthouseHandler(RunLighthouseInputSchema.parse(request.params.arguments || {})));
193
- case "repo.run_playwright":
194
- return createSuccessResult(await runPlaywrightHandler(RunPlaywrightInputSchema.parse(request.params.arguments || {})));
178
+ return createSuccessResult(await runTestsHandler(RunTestsInputSchema.parse(normArgs)));
179
+ case "repo.commit.patch":
195
180
  case "repo.commit_patch":
196
- return createSuccessResult(await commitPatchHandler(CommitPatchInputSchema.parse(request.params.arguments)));
181
+ return createSuccessResult(await commitPatchHandler(CommitPatchInputSchema.parse(normArgs)));
182
+ case "github.open.replacement.pr":
197
183
  case "github.open_replacement_pr":
198
- return createSuccessResult(await openReplacementPrHandler(OpenReplacementPrInputSchema.parse(request.params.arguments)));
184
+ return createSuccessResult(await openReplacementPrHandler(OpenReplacementPrInputSchema.parse(normArgs)));
185
+ case "github.comment.triage.summary":
199
186
  case "github.comment_triage_summary":
200
- return createSuccessResult(await commentTriageSummaryHandler(CommentTriageSummaryInputSchema.parse(request.params.arguments)));
187
+ return createSuccessResult(await commentTriageSummaryHandler(CommentTriageSummaryInputSchema.parse(normArgs)));
188
+ case "github.create.pull.request":
201
189
  case "github.create_pull_request":
202
- return createSuccessResult(await createPullRequestHandler(CreatePullRequestInputSchema.parse(request.params.arguments)));
190
+ return createSuccessResult(await createPullRequestHandler(CreatePullRequestInputSchema.parse(normArgs)));
191
+ case "github.get.pr":
203
192
  case "github.get_pr":
204
- return createSuccessResult(await getPrHandler(GetPrInputSchema.parse(request.params.arguments)));
193
+ return createSuccessResult(await getPrHandler(GetPrInputSchema.parse(normArgs)));
194
+ case "github.issue.view":
205
195
  case "github.issue_view":
206
- return createSuccessResult(await issueViewHandler(IssueViewInputSchema.parse(request.params.arguments)));
196
+ return createSuccessResult(await issueViewHandler(IssueViewInputSchema.parse(normArgs)));
197
+ case "github.issue.update":
207
198
  case "github.issue_update":
208
- return createSuccessResult(await issueUpdateHandler(IssueUpdateInputSchema.parse(request.params.arguments)));
199
+ return createSuccessResult(await issueUpdateHandler(IssueUpdateInputSchema.parse(normArgs)));
200
+ case "github.issue.comment":
209
201
  case "github.issue_comment":
210
- return createSuccessResult(await issueCommentHandler(IssueCommentInputSchema.parse(request.params.arguments)));
202
+ return createSuccessResult(await issueCommentHandler(IssueCommentInputSchema.parse(normArgs)));
203
+ case "github.create.issue":
211
204
  case "github.create_issue":
212
- return createSuccessResult(await createIssueHandler(CreateIssueInputSchema.parse(request.params.arguments)));
205
+ return createSuccessResult(await createIssueHandler(CreateIssueInputSchema.parse(normArgs)));
206
+ case "jules.create.session":
213
207
  case "jules.create_session":
214
- return createSuccessResult(await createJulesSessionHandler(CreateJulesSessionInputSchema.parse(request.params.arguments)));
208
+ return createSuccessResult(await createJulesSessionHandler(CreateJulesSessionInputSchema.parse(normArgs)));
209
+ case "jules.get.session":
215
210
  case "jules.get_session":
216
- return createSuccessResult(await getJulesSessionHandler(GetJulesSessionInputSchema.parse(request.params.arguments)));
211
+ return createSuccessResult(await getJulesSessionHandler(GetJulesSessionInputSchema.parse(normArgs)));
212
+ case "jules.send.message":
217
213
  case "jules.send_message":
218
- return createSuccessResult(await sendJulesMessageHandler(SendJulesMessageInputSchema.parse(request.params.arguments)));
214
+ return createSuccessResult(await sendJulesMessageHandler(SendJulesMessageInputSchema.parse(normArgs)));
215
+ case "jules.get.messages":
219
216
  case "jules.get_messages":
220
- return createSuccessResult(await getJulesMessagesHandler(GetJulesMessagesInputSchema.parse(request.params.arguments)));
217
+ return createSuccessResult(await getJulesMessagesHandler(GetJulesMessagesInputSchema.parse(normArgs)));
218
+ case "jules.list.sessions":
221
219
  case "jules.list_sessions":
222
- return createSuccessResult(await listJulesSessionsHandler(ListJulesSessionsInputSchema.parse(request.params.arguments || {})));
220
+ return createSuccessResult(await listJulesSessionsHandler(ListJulesSessionsInputSchema.parse(normArgs)));
221
+ case "jules.cancel.session":
223
222
  case "jules.cancel_session":
224
- return createSuccessResult(await cancelJulesSessionHandler(CancelJulesSessionInputSchema.parse(request.params.arguments)));
223
+ return createSuccessResult(await cancelJulesSessionHandler(CancelJulesSessionInputSchema.parse(normArgs)));
224
+ case "jules.get.pr":
225
225
  case "jules.get_pr":
226
- return createSuccessResult(await getJulesPullRequestHandler(GetJulesPullRequestInputSchema.parse(request.params.arguments)));
226
+ return createSuccessResult(await getJulesPullRequestHandler(GetJulesPullRequestInputSchema.parse(normArgs)));
227
+ case "jules.trigger.feedback":
227
228
  case "jules.trigger_feedback":
228
- return createSuccessResult(await triggerJulesFeedbackHandler(TriggerJulesFeedbackInputSchema.parse(request.params.arguments)));
229
- case "agent.search_ddgs":
230
- return createSuccessResult(await ddgsSearchHandler(DdgsSearchInputSchema.parse(request.params.arguments)));
229
+ return createSuccessResult(await triggerJulesFeedbackHandler(TriggerJulesFeedbackInputSchema.parse(normArgs)));
231
230
  default:
232
231
  return createErrorResult(`Tool not found: ${request.params.name}`);
233
232
  }
@@ -301,15 +300,6 @@ export class BoomtickMCPServer {
301
300
  console.error("❌ Fatal: td-cli pre-flight check failed:", error instanceof Error ? error.message : String(error));
302
301
  process.exit(1);
303
302
  }
304
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
305
- const ddgsScriptPath = path.join(__dirname, "..", "tools", "ddgs_search.py");
306
- try {
307
- await fs.access(ddgsScriptPath);
308
- }
309
- catch (err) {
310
- console.error(`❌ Fatal: ddgs_search.py not found at ${ddgsScriptPath}`);
311
- process.exit(1);
312
- }
313
303
  const transport = new StdioServerTransport();
314
304
  await this.server.connect(transport);
315
305
  console.error("Boomtick MCP Server running on stdio");
@@ -2,11 +2,8 @@ import { describe, it, expect, vi, beforeEach } from "vitest";
2
2
  import { BoomtickMCPServer } from "./server.js";
3
3
  import fs from "fs/promises";
4
4
  import * as healthModule from "./tools.js";
5
- import * as routeMapModule from "../tools/repo.get_route_map.js";
6
5
  import * as prDiffModule from "../tools/github.get_pr_diff.js";
7
6
  import * as ciLogsModule from "../tools/repo.read_ci_logs.js";
8
- import * as lighthouseModule from "../tools/repo.run_lighthouse.js";
9
- import * as playwrightModule from "../tools/repo.run_playwright.js";
10
7
  vi.mock("fs/promises");
11
8
  vi.mock("../config.js", () => ({
12
9
  config: {
@@ -99,16 +96,6 @@ describe("BoomtickMCPServer", () => {
99
96
  contents: [{ uri: "repo://package-json", mimeType: "application/json", text: '{"name": "test"}' }],
100
97
  });
101
98
  });
102
- it("should handle repo://routes", async () => {
103
- const handler = requestHandlers.get("resources/read");
104
- vi.spyOn(routeMapModule, "getRouteMapHandler").mockResolvedValue({ routes: ["/"] });
105
- const result = await handler({
106
- method: "resources/read",
107
- params: { uri: "repo://routes" },
108
- });
109
- expect(result.contents[0].uri).toBe("repo://routes");
110
- expect(JSON.parse(result.contents[0].text)).toEqual({ routes: ["/"] });
111
- });
112
99
  it("should handle repo://design-tokens", async () => {
113
100
  const handler = requestHandlers.get("resources/read");
114
101
  vi.mocked(fs.readFile).mockResolvedValue("export const tokens = {};");
@@ -141,26 +128,6 @@ describe("BoomtickMCPServer", () => {
141
128
  expect(result.contents[0].uri).toBe("repo://ci/42");
142
129
  expect(JSON.parse(result.contents[0].text)).toEqual({ status: "success" });
143
130
  });
144
- it("should handle repo://lighthouse/:branch", async () => {
145
- const handler = requestHandlers.get("resources/read");
146
- vi.spyOn(lighthouseModule, "runLighthouseHandler").mockResolvedValue({ score: 100 });
147
- const result = await handler({
148
- method: "resources/read",
149
- params: { uri: "repo://lighthouse/feature-x" },
150
- });
151
- expect(result.contents[0].uri).toBe("repo://lighthouse/feature-x");
152
- expect(JSON.parse(result.contents[0].text)).toEqual({ score: 100 });
153
- });
154
- it("should handle repo://playwright/:branch", async () => {
155
- const handler = requestHandlers.get("resources/read");
156
- vi.spyOn(playwrightModule, "runPlaywrightHandler").mockResolvedValue({ passed: true });
157
- const result = await handler({
158
- method: "resources/read",
159
- params: { uri: "repo://playwright/feature-x" },
160
- });
161
- expect(result.contents[0].uri).toBe("repo://playwright/feature-x");
162
- expect(JSON.parse(result.contents[0].text)).toEqual({ passed: true });
163
- });
164
131
  it("should throw when resource is unknown", async () => {
165
132
  const handler = requestHandlers.get("resources/read");
166
133
  await expect(handler({