bhived-mcp 1.1.5

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 (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +396 -0
  3. package/dist/agentsMd.d.ts +38 -0
  4. package/dist/agentsMd.d.ts.map +1 -0
  5. package/dist/agentsMd.js +392 -0
  6. package/dist/agentsMd.js.map +1 -0
  7. package/dist/childMcp/delivery.d.ts +73 -0
  8. package/dist/childMcp/delivery.d.ts.map +1 -0
  9. package/dist/childMcp/delivery.js +130 -0
  10. package/dist/childMcp/delivery.js.map +1 -0
  11. package/dist/childMcp/manager.d.ts +111 -0
  12. package/dist/childMcp/manager.d.ts.map +1 -0
  13. package/dist/childMcp/manager.js +454 -0
  14. package/dist/childMcp/manager.js.map +1 -0
  15. package/dist/client/restClient.d.ts +36 -0
  16. package/dist/client/restClient.d.ts.map +1 -0
  17. package/dist/client/restClient.js +154 -0
  18. package/dist/client/restClient.js.map +1 -0
  19. package/dist/client/types.d.ts +220 -0
  20. package/dist/client/types.d.ts.map +1 -0
  21. package/dist/client/types.js +8 -0
  22. package/dist/client/types.js.map +1 -0
  23. package/dist/config.d.ts +36 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +28 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/formatters/inspectFormatter.d.ts +13 -0
  28. package/dist/formatters/inspectFormatter.d.ts.map +1 -0
  29. package/dist/formatters/inspectFormatter.js +68 -0
  30. package/dist/formatters/inspectFormatter.js.map +1 -0
  31. package/dist/formatters/queryFormatter.d.ts +18 -0
  32. package/dist/formatters/queryFormatter.d.ts.map +1 -0
  33. package/dist/formatters/queryFormatter.js +250 -0
  34. package/dist/formatters/queryFormatter.js.map +1 -0
  35. package/dist/formatters/writeFormatter.d.ts +16 -0
  36. package/dist/formatters/writeFormatter.d.ts.map +1 -0
  37. package/dist/formatters/writeFormatter.js +56 -0
  38. package/dist/formatters/writeFormatter.js.map +1 -0
  39. package/dist/index.d.ts +9 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +387 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/prompts/learnAndShare.d.ts +8 -0
  44. package/dist/prompts/learnAndShare.d.ts.map +1 -0
  45. package/dist/prompts/learnAndShare.js +77 -0
  46. package/dist/prompts/learnAndShare.js.map +1 -0
  47. package/dist/prompts/reviewMemory.d.ts +8 -0
  48. package/dist/prompts/reviewMemory.d.ts.map +1 -0
  49. package/dist/prompts/reviewMemory.js +61 -0
  50. package/dist/prompts/reviewMemory.js.map +1 -0
  51. package/dist/registries/childMcpRegistry.d.ts +65 -0
  52. package/dist/registries/childMcpRegistry.d.ts.map +1 -0
  53. package/dist/registries/childMcpRegistry.js +74 -0
  54. package/dist/registries/childMcpRegistry.js.map +1 -0
  55. package/dist/registries/index.d.ts +12 -0
  56. package/dist/registries/index.d.ts.map +1 -0
  57. package/dist/registries/index.js +9 -0
  58. package/dist/registries/index.js.map +1 -0
  59. package/dist/registries/resourceRegistry.d.ts +48 -0
  60. package/dist/registries/resourceRegistry.d.ts.map +1 -0
  61. package/dist/registries/resourceRegistry.js +91 -0
  62. package/dist/registries/resourceRegistry.js.map +1 -0
  63. package/dist/registries/skillRegistry.d.ts +48 -0
  64. package/dist/registries/skillRegistry.d.ts.map +1 -0
  65. package/dist/registries/skillRegistry.js +47 -0
  66. package/dist/registries/skillRegistry.js.map +1 -0
  67. package/dist/resources/guide.d.ts +7 -0
  68. package/dist/resources/guide.d.ts.map +1 -0
  69. package/dist/resources/guide.js +77 -0
  70. package/dist/resources/guide.js.map +1 -0
  71. package/dist/resources/status.d.ts +7 -0
  72. package/dist/resources/status.d.ts.map +1 -0
  73. package/dist/resources/status.js +38 -0
  74. package/dist/resources/status.js.map +1 -0
  75. package/dist/tools/initiateMcp.d.ts +10 -0
  76. package/dist/tools/initiateMcp.d.ts.map +1 -0
  77. package/dist/tools/initiateMcp.js +224 -0
  78. package/dist/tools/initiateMcp.js.map +1 -0
  79. package/dist/tools/initiateSkill.d.ts +13 -0
  80. package/dist/tools/initiateSkill.d.ts.map +1 -0
  81. package/dist/tools/initiateSkill.js +277 -0
  82. package/dist/tools/initiateSkill.js.map +1 -0
  83. package/dist/tools/inspect.d.ts +8 -0
  84. package/dist/tools/inspect.d.ts.map +1 -0
  85. package/dist/tools/inspect.js +110 -0
  86. package/dist/tools/inspect.js.map +1 -0
  87. package/dist/tools/listActive.d.ts +9 -0
  88. package/dist/tools/listActive.d.ts.map +1 -0
  89. package/dist/tools/listActive.js +177 -0
  90. package/dist/tools/listActive.js.map +1 -0
  91. package/dist/tools/query.d.ts +15 -0
  92. package/dist/tools/query.d.ts.map +1 -0
  93. package/dist/tools/query.js +98 -0
  94. package/dist/tools/query.js.map +1 -0
  95. package/dist/tools/readResource.d.ts +9 -0
  96. package/dist/tools/readResource.d.ts.map +1 -0
  97. package/dist/tools/readResource.js +110 -0
  98. package/dist/tools/readResource.js.map +1 -0
  99. package/dist/tools/runScript.d.ts +17 -0
  100. package/dist/tools/runScript.d.ts.map +1 -0
  101. package/dist/tools/runScript.js +320 -0
  102. package/dist/tools/runScript.js.map +1 -0
  103. package/dist/tools/stopMcp.d.ts +8 -0
  104. package/dist/tools/stopMcp.d.ts.map +1 -0
  105. package/dist/tools/stopMcp.js +91 -0
  106. package/dist/tools/stopMcp.js.map +1 -0
  107. package/dist/tools/useTool.d.ts +10 -0
  108. package/dist/tools/useTool.d.ts.map +1 -0
  109. package/dist/tools/useTool.js +127 -0
  110. package/dist/tools/useTool.js.map +1 -0
  111. package/dist/tools/write.d.ts +9 -0
  112. package/dist/tools/write.d.ts.map +1 -0
  113. package/dist/tools/write.js +224 -0
  114. package/dist/tools/write.js.map +1 -0
  115. package/package.json +59 -0
@@ -0,0 +1,320 @@
1
+ /**
2
+ * hivemind_run_script Tool
3
+ *
4
+ * Executes a script from an activated skill in a sandboxed subprocess.
5
+ * Scripts are admin-curated — agents never upload their own scripts.
6
+ *
7
+ * Runtime detection:
8
+ * .py → python3 (or python on Windows)
9
+ * .js → node
10
+ * .ts → npx tsx
11
+ * .sh → bash (Git Bash on Windows, /bin/bash on Unix)
12
+ *
13
+ * Cross-platform: Windows (Git Bash / WSL), Linux, macOS
14
+ */
15
+ import { existsSync } from "node:fs";
16
+ import { z } from "zod/v4";
17
+ import { spawn } from "node:child_process";
18
+ import { writeFile, unlink, mkdtemp } from "node:fs/promises";
19
+ import { tmpdir } from "node:os";
20
+ import { join } from "node:path";
21
+ import { skillRegistry } from "../registries/skillRegistry.js";
22
+ import { config } from "../config.js";
23
+ const RunScriptInputSchema = z.object({
24
+ skill: z
25
+ .string()
26
+ .min(1)
27
+ .describe("Name of the activated skill."),
28
+ script: z
29
+ .string()
30
+ .min(1)
31
+ .describe('Script filename (e.g., "analyze.py").'),
32
+ args: z
33
+ .string()
34
+ .optional()
35
+ .describe("Command-line arguments to pass."),
36
+ input_data: z
37
+ .string()
38
+ .optional()
39
+ .describe("Data to pipe to stdin."),
40
+ timeout: z
41
+ .number()
42
+ .int()
43
+ .min(1000)
44
+ .max(120000)
45
+ .default(30000)
46
+ .describe("Execution timeout in milliseconds (default: 30000, max: 120000)."),
47
+ }).strict();
48
+ const RUN_SCRIPT_DESCRIPTION = `Execute a script from an activated skill. The script runs in
49
+ the HiveMind MCP server's process and returns its output. Scripts are
50
+ sandboxed to the skill's context and admin-curated.
51
+
52
+ Example: hivemind_run_script(skill="structured-brainstorm",
53
+ script="analyze.py", args="--input ideas.json")`;
54
+ /** Cached result for Git Bash detection on Windows */
55
+ let _gitBashPath;
56
+ /**
57
+ * Find Git Bash on Windows. Checks common install locations.
58
+ * Returns the full path to bash.exe or null if not found.
59
+ * Result is cached after first call.
60
+ */
61
+ function findGitBash() {
62
+ if (_gitBashPath !== undefined)
63
+ return _gitBashPath;
64
+ const candidates = [
65
+ `${process.env.ProgramFiles}\\Git\\bin\\bash.exe`,
66
+ "C:\\Program Files\\Git\\bin\\bash.exe",
67
+ "C:\\Program Files (x86)\\Git\\bin\\bash.exe",
68
+ `${process.env.LOCALAPPDATA}\\Programs\\Git\\bin\\bash.exe`,
69
+ ].filter(Boolean);
70
+ for (const p of candidates) {
71
+ try {
72
+ if (existsSync(p)) {
73
+ console.error(`[RunScript] Found Git Bash at: ${p}`);
74
+ _gitBashPath = p;
75
+ return _gitBashPath;
76
+ }
77
+ }
78
+ catch {
79
+ // Continue checking
80
+ }
81
+ }
82
+ _gitBashPath = null;
83
+ return null;
84
+ }
85
+ /**
86
+ * Detect the appropriate runtime command from the script file extension.
87
+ * Cross-platform: Windows (PowerShell for .ps1, cmd for .bat, Git Bash for .sh),
88
+ * Linux and macOS (native bash for .sh).
89
+ */
90
+ function detectRuntime(filename) {
91
+ const ext = filename.split(".").pop()?.toLowerCase();
92
+ switch (ext) {
93
+ case "py":
94
+ return {
95
+ command: process.platform === "win32" ? "python" : "python3",
96
+ args: [],
97
+ };
98
+ case "js":
99
+ return { command: "node", args: [] };
100
+ case "ts":
101
+ return { command: "npx", args: ["tsx"] };
102
+ case "ps1":
103
+ // PowerShell — native on Windows, available on Linux/macOS via pwsh
104
+ return {
105
+ command: process.platform === "win32" ? "powershell" : "pwsh",
106
+ args: ["-ExecutionPolicy", "Bypass", "-File"],
107
+ };
108
+ case "bat":
109
+ case "cmd":
110
+ // Windows batch scripts
111
+ if (process.platform !== "win32") {
112
+ return {
113
+ command: "",
114
+ args: [],
115
+ error: `.bat/.cmd scripts can only run on Windows.`,
116
+ };
117
+ }
118
+ return { command: "cmd.exe", args: ["/c"] };
119
+ case "sh": {
120
+ if (process.platform === "win32") {
121
+ // Try Git Bash — most Windows devs have Git installed
122
+ const gitBash = findGitBash();
123
+ if (gitBash) {
124
+ return { command: gitBash, args: [], bashType: "git" };
125
+ }
126
+ // No bash available — clear error
127
+ return {
128
+ command: "",
129
+ args: [],
130
+ error: `.sh scripts require Git for Windows (Git Bash). ` +
131
+ `Install from https://git-scm.com/download/win — ` +
132
+ `or ask the skill author to provide a .ps1 or .bat alternative.`,
133
+ };
134
+ }
135
+ // Linux / macOS — native bash
136
+ return { command: "/bin/bash", args: [], bashType: "native" };
137
+ }
138
+ default:
139
+ return { command: "node", args: [] };
140
+ }
141
+ }
142
+ /**
143
+ * Convert a Windows file path for use with Git Bash.
144
+ * Git Bash: C:\Users\... → C:/Users/... (just forward slashes)
145
+ * Native (Linux/macOS): no conversion needed
146
+ */
147
+ function convertPathForBash(filePath, bashType) {
148
+ if (bashType === "native")
149
+ return filePath;
150
+ // Git Bash handles C:/Users/... with forward slashes
151
+ return filePath.replace(/\\/g, "/");
152
+ }
153
+ // ── Tool registration ───────────────────────────────────────────
154
+ export function registerRunScriptTool(server) {
155
+ server.registerTool("hivemind_run_script", {
156
+ title: "Run Skill Script",
157
+ description: RUN_SCRIPT_DESCRIPTION,
158
+ inputSchema: RunScriptInputSchema,
159
+ annotations: {
160
+ readOnlyHint: false,
161
+ destructiveHint: false,
162
+ idempotentHint: false,
163
+ openWorldHint: true,
164
+ },
165
+ }, async (params) => {
166
+ let tempDir;
167
+ let tempFile;
168
+ try {
169
+ // 1. Look up skill
170
+ const skill = skillRegistry.get(params.skill);
171
+ if (!skill) {
172
+ return {
173
+ content: [
174
+ {
175
+ type: "text",
176
+ text: `❌ Skill '${params.skill}' is not active. Call hivemind_initiate_skill first.`,
177
+ },
178
+ ],
179
+ isError: true,
180
+ };
181
+ }
182
+ // 2. Look up script
183
+ const scriptContent = skill.scripts[params.script];
184
+ if (scriptContent === undefined) {
185
+ const available = Object.keys(skill.scripts);
186
+ const availableList = available.length > 0
187
+ ? "\n\nAvailable scripts:\n" + available.map((s) => ` • ${s}`).join("\n")
188
+ : "\n\nNo scripts registered for this skill.";
189
+ return {
190
+ content: [
191
+ {
192
+ type: "text",
193
+ text: `❌ Script '${params.script}' not found in skill '${params.skill}'.${availableList}`,
194
+ },
195
+ ],
196
+ isError: true,
197
+ };
198
+ }
199
+ // 3. Write script to temp file
200
+ tempDir = await mkdtemp(join(tmpdir(), "hivemind-script-"));
201
+ // Script name may include subdirectory (e.g. "math/index.js")
202
+ // Extract just the base filename for the temp file
203
+ const scriptBasename = params.script.split("/").pop() ?? params.script;
204
+ tempFile = join(tempDir, scriptBasename);
205
+ await writeFile(tempFile, scriptContent, "utf-8");
206
+ // 4. Detect runtime and build command
207
+ const runtime = detectRuntime(params.script);
208
+ // If runtime detection failed (e.g. .sh on Windows without Git Bash)
209
+ if (runtime.error) {
210
+ return {
211
+ content: [
212
+ {
213
+ type: "text",
214
+ text: `❌ Cannot run '${params.script}': ${runtime.error}`,
215
+ },
216
+ ],
217
+ isError: true,
218
+ };
219
+ }
220
+ // Convert path for Git Bash on Windows (forward slashes)
221
+ let scriptPath = tempFile;
222
+ if (runtime.bashType && process.platform === "win32") {
223
+ scriptPath = convertPathForBash(tempFile, runtime.bashType);
224
+ }
225
+ const execArgs = [
226
+ ...runtime.args,
227
+ scriptPath,
228
+ ...(params.args ? params.args.split(" ") : []),
229
+ ];
230
+ // 5. Execute with timeout
231
+ const timeout = Math.min(params.timeout ?? config.scriptTimeout, 120000);
232
+ const result = await executeScript(runtime.command, execArgs, params.input_data, timeout);
233
+ // 6. Format and return output
234
+ const header = `## ⚡ Script Output: ${params.script}\n**Skill**: ${params.skill} · **Exit code**: ${result.exitCode} · **Duration**: ${result.durationMs}ms\n\n---\n\n`;
235
+ const output = result.stdout
236
+ ? `### stdout\n\`\`\`\n${result.stdout}\n\`\`\`\n`
237
+ : "";
238
+ const stderr = result.stderr
239
+ ? `\n### stderr\n\`\`\`\n${result.stderr}\n\`\`\`\n`
240
+ : "";
241
+ return {
242
+ content: [
243
+ {
244
+ type: "text",
245
+ text: header + output + stderr,
246
+ },
247
+ ],
248
+ isError: result.exitCode !== 0,
249
+ };
250
+ }
251
+ catch (error) {
252
+ return {
253
+ content: [
254
+ {
255
+ type: "text",
256
+ text: `Error running script: ${error instanceof Error ? error.message : String(error)}`,
257
+ },
258
+ ],
259
+ isError: true,
260
+ };
261
+ }
262
+ finally {
263
+ // Cleanup temp file
264
+ if (tempFile) {
265
+ try {
266
+ await unlink(tempFile);
267
+ }
268
+ catch {
269
+ // Best effort cleanup
270
+ }
271
+ }
272
+ }
273
+ });
274
+ }
275
+ function executeScript(command, args, inputData, timeout = 30000) {
276
+ return new Promise((resolve, reject) => {
277
+ const startTime = Date.now();
278
+ const child = spawn(command, args, {
279
+ timeout,
280
+ stdio: ["pipe", "pipe", "pipe"],
281
+ env: { ...process.env },
282
+ });
283
+ let stdout = "";
284
+ let stderr = "";
285
+ child.stdout.on("data", (data) => {
286
+ stdout += data.toString();
287
+ // Cap output at 50KB to prevent memory issues
288
+ if (stdout.length > 50 * 1024) {
289
+ stdout = stdout.slice(0, 50 * 1024) + "\n...[output truncated at 50KB]";
290
+ child.kill("SIGTERM");
291
+ }
292
+ });
293
+ child.stderr.on("data", (data) => {
294
+ stderr += data.toString();
295
+ if (stderr.length > 50 * 1024) {
296
+ stderr = stderr.slice(0, 50 * 1024) + "\n...[output truncated at 50KB]";
297
+ }
298
+ });
299
+ child.on("error", (err) => {
300
+ reject(new Error(`Failed to execute ${command}: ${err.message}`));
301
+ });
302
+ child.on("close", (code) => {
303
+ resolve({
304
+ stdout: stdout.trim(),
305
+ stderr: stderr.trim(),
306
+ exitCode: code ?? 1,
307
+ durationMs: Date.now() - startTime,
308
+ });
309
+ });
310
+ // Write stdin data if provided
311
+ if (inputData) {
312
+ child.stdin.write(inputData);
313
+ child.stdin.end();
314
+ }
315
+ else {
316
+ child.stdin.end();
317
+ }
318
+ });
319
+ }
320
+ //# sourceMappingURL=runScript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runScript.js","sourceRoot":"","sources":["../../src/tools/runScript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * hivemind_stop_mcp Tool
3
+ *
4
+ * Stops an MCP process.
5
+ */
6
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ export declare function registerStopMcpTool(server: McpServer): void;
8
+ //# sourceMappingURL=stopMcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stopMcp.d.ts","sourceRoot":"","sources":["../../src/tools/stopMcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyBzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgF3D"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * hivemind_stop_mcp Tool
3
+ *
4
+ * Stops an MCP process.
5
+ */
6
+ import { z } from "zod/v4";
7
+ import { childMcpRegistry } from "../registries/childMcpRegistry.js";
8
+ import { childMcpManager } from "../childMcp/manager.js";
9
+ // ── Input Schema ─────────────────────────────────────────────────
10
+ const StopMcpInputSchema = z.object({
11
+ mcp: z
12
+ .string()
13
+ .min(1)
14
+ .describe("Name of the MCP server to stop."),
15
+ }).strict();
16
+ // ── Tool Description ─────────────────────────────────────────────
17
+ const STOP_MCP_DESCRIPTION = `Stop a running standalone MCP server and free its resources.
18
+
19
+ Only MCPs (spawned via hivemind_initiate_mcp or by skills) can be stopped with this tool.
20
+
21
+ Example: hivemind_stop_mcp(mcp="playwright")`;
22
+ // ── Registration ─────────────────────────────────────────────────
23
+ export function registerStopMcpTool(server) {
24
+ server.registerTool("hivemind_stop_mcp", {
25
+ title: "Stop MCP",
26
+ description: STOP_MCP_DESCRIPTION,
27
+ inputSchema: StopMcpInputSchema,
28
+ annotations: {
29
+ readOnlyHint: false,
30
+ destructiveHint: true,
31
+ idempotentHint: true,
32
+ openWorldHint: false,
33
+ },
34
+ }, async (params) => {
35
+ try {
36
+ // 1. Look up MCP in ChildMcpRegistry
37
+ const entry = childMcpRegistry.get(params.mcp);
38
+ if (!entry) {
39
+ const available = childMcpRegistry.names();
40
+ const availableList = available.length > 0
41
+ ? `\n\nActive MCPs: ${available.map((n) => `\`${n}\``).join(", ")}`
42
+ : "\n\nNo MCPs currently active.";
43
+ return {
44
+ content: [
45
+ {
46
+ type: "text",
47
+ text: `❌ No active MCP named '${params.mcp}'.${availableList}`,
48
+ },
49
+ ],
50
+ isError: true,
51
+ };
52
+ }
53
+ // Standalone restriction removed
54
+ // 3. Capture info before stopping
55
+ const toolCount = entry.tools.length;
56
+ const toolNames = entry.tools.map((t) => t.name);
57
+ // 4. Stop via ChildMcpManager
58
+ await childMcpManager.stop(params.mcp);
59
+ // 5. Build summary
60
+ const lines = [];
61
+ lines.push(`## ✅ MCP Stopped: ${params.mcp}\n`);
62
+ lines.push("### Cleanup Summary\n");
63
+ lines.push(`- 🔌 Process terminated`);
64
+ lines.push(`- 🔧 ${toolCount} tool(s) removed: ${toolNames.map((n) => `\`${n}\``).join(", ") || "none"}`);
65
+ // Show remaining capacity
66
+ const remainingStandalone = childMcpRegistry.countBySource("standalone");
67
+ const remainingTotal = childMcpRegistry.count();
68
+ lines.push(`\n> ${remainingStandalone} standalone MCP(s) remaining. ${remainingTotal} total child process(es) active.`);
69
+ return {
70
+ content: [
71
+ {
72
+ type: "text",
73
+ text: lines.join("\n"),
74
+ },
75
+ ],
76
+ };
77
+ }
78
+ catch (error) {
79
+ return {
80
+ content: [
81
+ {
82
+ type: "text",
83
+ text: `❌ Error stopping MCP '${params.mcp}': ${error instanceof Error ? error.message : String(error)}`,
84
+ },
85
+ ],
86
+ isError: true,
87
+ };
88
+ }
89
+ });
90
+ }
91
+ //# sourceMappingURL=stopMcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stopMcp.js","sourceRoot":"","sources":["../../src/tools/stopMcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * hivemind_use_tool Tool
3
+ *
4
+ * Proxies tool calls to child MCP processes. This is the
5
+ * Level 3 (default) tool delivery mechanism — agents call child
6
+ * MCP tools through this single proxy tool.
7
+ */
8
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ export declare function registerUseToolTool(server: McpServer): void;
10
+ //# sourceMappingURL=useTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTool.d.ts","sourceRoot":"","sources":["../../src/tools/useTool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2BzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyG3D"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * hivemind_use_tool Tool
3
+ *
4
+ * Proxies tool calls to child MCP processes. This is the
5
+ * Level 3 (default) tool delivery mechanism — agents call child
6
+ * MCP tools through this single proxy tool.
7
+ */
8
+ import { z } from "zod/v4";
9
+ import { childMcpRegistry } from "../registries/childMcpRegistry.js";
10
+ const UseToolInputSchema = z.object({
11
+ mcp: z
12
+ .string()
13
+ .min(1)
14
+ .describe("Name of the child MCP server."),
15
+ tool: z
16
+ .string()
17
+ .min(1)
18
+ .describe("Name of the tool to call."),
19
+ params: z
20
+ .record(z.string(), z.unknown())
21
+ .optional()
22
+ .describe("Parameters to pass to the tool (as a JSON object)."),
23
+ }).strict();
24
+ const USE_TOOL_DESCRIPTION = `Execute a tool from an activated MCP server. Works for both
25
+ MCPs spawned by skills (via hivemind_initiate_skill) and standalone MCPs
26
+ (via hivemind_initiate_mcp).
27
+
28
+ Example: hivemind_use_tool(mcp="playwright", tool="navigate",
29
+ params={url: "https://example.com"})`;
30
+ export function registerUseToolTool(server) {
31
+ server.registerTool("hivemind_use_tool", {
32
+ title: "Use MCP Tool",
33
+ description: USE_TOOL_DESCRIPTION,
34
+ inputSchema: UseToolInputSchema,
35
+ annotations: {
36
+ readOnlyHint: false,
37
+ destructiveHint: false,
38
+ idempotentHint: false,
39
+ openWorldHint: true,
40
+ },
41
+ }, async (params) => {
42
+ try {
43
+ // 1. Look up the child MCP
44
+ const entry = childMcpRegistry.get(params.mcp);
45
+ if (!entry) {
46
+ // List available MCPs to help the agent
47
+ const available = childMcpRegistry.names();
48
+ const availableList = available.length > 0
49
+ ? `\n\nAvailable MCPs: ${available.map((n) => `\`${n}\``).join(", ")}`
50
+ : "\n\nNo MCPs currently active. Use hivemind_initiate_mcp or hivemind_initiate_skill to activate one.";
51
+ return {
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: `❌ No active MCP named '${params.mcp}'. Use hivemind_list_active to see what's available.${availableList}`,
56
+ },
57
+ ],
58
+ isError: true,
59
+ };
60
+ }
61
+ // 2. Verify the MCP is healthy
62
+ if (entry.status === "crashed") {
63
+ return {
64
+ content: [
65
+ {
66
+ type: "text",
67
+ text: `❌ MCP '${params.mcp}' has crashed and is no longer responding. Try restarting it.`,
68
+ },
69
+ ],
70
+ isError: true,
71
+ };
72
+ }
73
+ // 3. Verify the tool exists
74
+ const toolExists = entry.tools.some((t) => t.name === params.tool);
75
+ if (!toolExists) {
76
+ const availableTools = entry.tools.map((t) => `\`${t.name}\``).join(", ");
77
+ return {
78
+ content: [
79
+ {
80
+ type: "text",
81
+ text: `❌ Tool '${params.tool}' not found in MCP '${params.mcp}'.\n\nAvailable tools: ${availableTools || "none discovered"}`,
82
+ },
83
+ ],
84
+ isError: true,
85
+ };
86
+ }
87
+ // 4. Forward the tool call to the child MCP client
88
+ const result = await entry.client.callTool({
89
+ name: params.tool,
90
+ arguments: params.params ?? {},
91
+ });
92
+ // 5. Return the result, preserving the child's response format
93
+ if (result.content && Array.isArray(result.content)) {
94
+ return {
95
+ content: result.content.map((item) => {
96
+ if (typeof item === "object" && item !== null && "type" in item) {
97
+ return item;
98
+ }
99
+ return { type: "text", text: String(item) };
100
+ }),
101
+ isError: result.isError === true,
102
+ };
103
+ }
104
+ // Fallback: wrap raw result as text
105
+ return {
106
+ content: [
107
+ {
108
+ type: "text",
109
+ text: typeof result === "string" ? result : JSON.stringify(result, null, 2),
110
+ },
111
+ ],
112
+ };
113
+ }
114
+ catch (error) {
115
+ return {
116
+ content: [
117
+ {
118
+ type: "text",
119
+ text: `Error calling tool '${params.tool}' on MCP '${params.mcp}': ${error instanceof Error ? error.message : String(error)}`,
120
+ },
121
+ ],
122
+ isError: true,
123
+ };
124
+ }
125
+ });
126
+ }
127
+ //# sourceMappingURL=useTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTool.js","sourceRoot":"","sources":["../../src/tools/useTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Write Tools — hivemind_write_instruction, hivemind_write_mistake, hivemind_write_update
3
+ *
4
+ * Three tools sharing the same REST endpoint (POST /v1/memories)
5
+ * but with different `type` values set automatically.
6
+ */
7
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
+ export declare function registerWriteTools(server: McpServer): void;
9
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0OzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4D1D"}