@sammorrowdrums/mcpi-ext 0.1.0 → 0.2.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 (170) hide show
  1. package/.github/workflows/ci.yml +1 -1
  2. package/README.md +109 -139
  3. package/docs/code-mode.md +38 -0
  4. package/docs/skills.md +57 -0
  5. package/docs/tool-cli.md +54 -0
  6. package/images/code-mode-histogram.png +0 -0
  7. package/images/skills-enabling-mcp-tools.png +0 -0
  8. package/images/tool-cli-grep.png +0 -0
  9. package/mise.toml +1 -13
  10. package/package.json +5 -7
  11. package/scripts/test-tool-cli-smoke.mjs +40 -9
  12. package/src/index.ts +24 -3
  13. package/src/tool-cli/index.ts +2 -2
  14. package/dist/code-mode/code-mode-integration.test.d.ts +0 -2
  15. package/dist/code-mode/code-mode-integration.test.d.ts.map +0 -1
  16. package/dist/code-mode/code-mode-integration.test.js +0 -116
  17. package/dist/code-mode/code-mode-integration.test.js.map +0 -1
  18. package/dist/code-mode/eligibility.d.ts +0 -10
  19. package/dist/code-mode/eligibility.d.ts.map +0 -1
  20. package/dist/code-mode/eligibility.js +0 -14
  21. package/dist/code-mode/eligibility.js.map +0 -1
  22. package/dist/code-mode/eligibility.test.d.ts +0 -2
  23. package/dist/code-mode/eligibility.test.d.ts.map +0 -1
  24. package/dist/code-mode/eligibility.test.js +0 -53
  25. package/dist/code-mode/eligibility.test.js.map +0 -1
  26. package/dist/code-mode/executor.d.ts +0 -35
  27. package/dist/code-mode/executor.d.ts.map +0 -1
  28. package/dist/code-mode/executor.js +0 -120
  29. package/dist/code-mode/executor.js.map +0 -1
  30. package/dist/code-mode/executor.test.d.ts +0 -2
  31. package/dist/code-mode/executor.test.d.ts.map +0 -1
  32. package/dist/code-mode/executor.test.js +0 -130
  33. package/dist/code-mode/executor.test.js.map +0 -1
  34. package/dist/code-mode/index.d.ts +0 -65
  35. package/dist/code-mode/index.d.ts.map +0 -1
  36. package/dist/code-mode/index.js +0 -175
  37. package/dist/code-mode/index.js.map +0 -1
  38. package/dist/code-mode/tools.d.ts +0 -45
  39. package/dist/code-mode/tools.d.ts.map +0 -1
  40. package/dist/code-mode/tools.js +0 -70
  41. package/dist/code-mode/tools.js.map +0 -1
  42. package/dist/code-mode/type-hints.d.ts +0 -20
  43. package/dist/code-mode/type-hints.d.ts.map +0 -1
  44. package/dist/code-mode/type-hints.js +0 -189
  45. package/dist/code-mode/type-hints.js.map +0 -1
  46. package/dist/code-mode/type-hints.test.d.ts +0 -2
  47. package/dist/code-mode/type-hints.test.d.ts.map +0 -1
  48. package/dist/code-mode/type-hints.test.js +0 -157
  49. package/dist/code-mode/type-hints.test.js.map +0 -1
  50. package/dist/docker-e2e.d.ts +0 -55
  51. package/dist/docker-e2e.d.ts.map +0 -1
  52. package/dist/docker-e2e.js +0 -235
  53. package/dist/docker-e2e.js.map +0 -1
  54. package/dist/docker-e2e.test.d.ts +0 -2
  55. package/dist/docker-e2e.test.d.ts.map +0 -1
  56. package/dist/docker-e2e.test.js +0 -176
  57. package/dist/docker-e2e.test.js.map +0 -1
  58. package/dist/index.d.ts +0 -3
  59. package/dist/index.d.ts.map +0 -1
  60. package/dist/index.js +0 -128
  61. package/dist/index.js.map +0 -1
  62. package/dist/index.test.d.ts +0 -2
  63. package/dist/index.test.d.ts.map +0 -1
  64. package/dist/index.test.js +0 -8
  65. package/dist/index.test.js.map +0 -1
  66. package/dist/mcp/client-manager.d.ts +0 -46
  67. package/dist/mcp/client-manager.d.ts.map +0 -1
  68. package/dist/mcp/client-manager.js +0 -148
  69. package/dist/mcp/client-manager.js.map +0 -1
  70. package/dist/mcp/client-manager.test.d.ts +0 -2
  71. package/dist/mcp/client-manager.test.d.ts.map +0 -1
  72. package/dist/mcp/client-manager.test.js +0 -204
  73. package/dist/mcp/client-manager.test.js.map +0 -1
  74. package/dist/mcp/config-loader.d.ts +0 -8
  75. package/dist/mcp/config-loader.d.ts.map +0 -1
  76. package/dist/mcp/config-loader.js +0 -43
  77. package/dist/mcp/config-loader.js.map +0 -1
  78. package/dist/mcp/config-loader.test.d.ts +0 -2
  79. package/dist/mcp/config-loader.test.d.ts.map +0 -1
  80. package/dist/mcp/config-loader.test.js +0 -93
  81. package/dist/mcp/config-loader.test.js.map +0 -1
  82. package/dist/mcp/config.d.ts +0 -46
  83. package/dist/mcp/config.d.ts.map +0 -1
  84. package/dist/mcp/config.js +0 -28
  85. package/dist/mcp/config.js.map +0 -1
  86. package/dist/mcp/index.d.ts +0 -5
  87. package/dist/mcp/index.d.ts.map +0 -1
  88. package/dist/mcp/index.js +0 -4
  89. package/dist/mcp/index.js.map +0 -1
  90. package/dist/skills/discover.d.ts +0 -10
  91. package/dist/skills/discover.d.ts.map +0 -1
  92. package/dist/skills/discover.js +0 -60
  93. package/dist/skills/discover.js.map +0 -1
  94. package/dist/skills/format.d.ts +0 -10
  95. package/dist/skills/format.d.ts.map +0 -1
  96. package/dist/skills/format.js +0 -38
  97. package/dist/skills/format.js.map +0 -1
  98. package/dist/skills/format.test.d.ts +0 -2
  99. package/dist/skills/format.test.d.ts.map +0 -1
  100. package/dist/skills/format.test.js +0 -63
  101. package/dist/skills/format.test.js.map +0 -1
  102. package/dist/skills/index.d.ts +0 -6
  103. package/dist/skills/index.d.ts.map +0 -1
  104. package/dist/skills/index.js +0 -6
  105. package/dist/skills/index.js.map +0 -1
  106. package/dist/skills/load-skill-tool.d.ts +0 -40
  107. package/dist/skills/load-skill-tool.d.ts.map +0 -1
  108. package/dist/skills/load-skill-tool.js +0 -104
  109. package/dist/skills/load-skill-tool.js.map +0 -1
  110. package/dist/skills/mcp-tool-proxy.d.ts +0 -11
  111. package/dist/skills/mcp-tool-proxy.d.ts.map +0 -1
  112. package/dist/skills/mcp-tool-proxy.js +0 -116
  113. package/dist/skills/mcp-tool-proxy.js.map +0 -1
  114. package/dist/skills/skill-integration.test.d.ts +0 -2
  115. package/dist/skills/skill-integration.test.d.ts.map +0 -1
  116. package/dist/skills/skill-integration.test.js +0 -119
  117. package/dist/skills/skill-integration.test.js.map +0 -1
  118. package/dist/skills/skill-registry.d.ts +0 -39
  119. package/dist/skills/skill-registry.d.ts.map +0 -1
  120. package/dist/skills/skill-registry.js +0 -48
  121. package/dist/skills/skill-registry.js.map +0 -1
  122. package/dist/skills/skill-registry.test.d.ts +0 -2
  123. package/dist/skills/skill-registry.test.d.ts.map +0 -1
  124. package/dist/skills/skill-registry.test.js +0 -67
  125. package/dist/skills/skill-registry.test.js.map +0 -1
  126. package/dist/test-servers/weather-server.d.ts +0 -12
  127. package/dist/test-servers/weather-server.d.ts.map +0 -1
  128. package/dist/test-servers/weather-server.js +0 -139
  129. package/dist/test-servers/weather-server.js.map +0 -1
  130. package/dist/test-servers/weather-stdio.d.ts +0 -2
  131. package/dist/test-servers/weather-stdio.d.ts.map +0 -1
  132. package/dist/test-servers/weather-stdio.js +0 -11
  133. package/dist/test-servers/weather-stdio.js.map +0 -1
  134. package/dist/tool-cli/cli.d.ts +0 -3
  135. package/dist/tool-cli/cli.d.ts.map +0 -1
  136. package/dist/tool-cli/cli.js +0 -179
  137. package/dist/tool-cli/cli.js.map +0 -1
  138. package/dist/tool-cli/constants.d.ts +0 -7
  139. package/dist/tool-cli/constants.d.ts.map +0 -1
  140. package/dist/tool-cli/constants.js +0 -15
  141. package/dist/tool-cli/constants.js.map +0 -1
  142. package/dist/tool-cli/format.d.ts +0 -8
  143. package/dist/tool-cli/format.d.ts.map +0 -1
  144. package/dist/tool-cli/format.js +0 -57
  145. package/dist/tool-cli/format.js.map +0 -1
  146. package/dist/tool-cli/format.test.d.ts +0 -2
  147. package/dist/tool-cli/format.test.d.ts.map +0 -1
  148. package/dist/tool-cli/format.test.js +0 -30
  149. package/dist/tool-cli/format.test.js.map +0 -1
  150. package/dist/tool-cli/index.d.ts +0 -4
  151. package/dist/tool-cli/index.d.ts.map +0 -1
  152. package/dist/tool-cli/index.js +0 -4
  153. package/dist/tool-cli/index.js.map +0 -1
  154. package/dist/tool-cli/rpc-client.d.ts +0 -6
  155. package/dist/tool-cli/rpc-client.d.ts.map +0 -1
  156. package/dist/tool-cli/rpc-client.js +0 -25
  157. package/dist/tool-cli/rpc-client.js.map +0 -1
  158. package/dist/tool-cli/rpc-server.d.ts +0 -48
  159. package/dist/tool-cli/rpc-server.d.ts.map +0 -1
  160. package/dist/tool-cli/rpc-server.js +0 -220
  161. package/dist/tool-cli/rpc-server.js.map +0 -1
  162. package/dist/tool-cli/rpc-server.test.d.ts +0 -2
  163. package/dist/tool-cli/rpc-server.test.d.ts.map +0 -1
  164. package/dist/tool-cli/rpc-server.test.js +0 -154
  165. package/dist/tool-cli/rpc-server.test.js.map +0 -1
  166. package/src/tool-cli/cli.ts +0 -232
  167. package/src/tool-cli/constants.ts +0 -15
  168. package/src/tool-cli/rpc-client.ts +0 -39
  169. package/src/tool-cli/rpc-server.test.ts +0 -193
  170. package/src/tool-cli/rpc-server.ts +0 -287
@@ -1 +0,0 @@
1
- {"version":3,"file":"docker-e2e.js","sourceRoot":"","sources":["../src/docker-e2e.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=docker-e2e.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docker-e2e.test.d.ts","sourceRoot":"","sources":["../src/docker-e2e.test.ts"],"names":[],"mappings":""}
@@ -1,176 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { parseJsonlLine, extractAssistantText, extractUsage, extractModel, buildDockerArgs, } from "./docker-e2e.js";
3
- describe("parseJsonlLine", () => {
4
- it("parses valid JSON event", () => {
5
- const line = '{"type":"message_start","message":{"role":"assistant"}}';
6
- const result = parseJsonlLine(line);
7
- expect(result).not.toBeNull();
8
- expect(result?.type).toBe("message_start");
9
- expect(result?.raw).toBe(line);
10
- });
11
- it("returns raw type for non-JSON", () => {
12
- const result = parseJsonlLine("some plain text output");
13
- expect(result).not.toBeNull();
14
- expect(result?.type).toBe("raw");
15
- expect(result?.raw).toBe("some plain text output");
16
- });
17
- it("returns null for empty lines", () => {
18
- expect(parseJsonlLine("")).toBeNull();
19
- expect(parseJsonlLine(" ")).toBeNull();
20
- });
21
- it("defaults to unknown type when type field missing", () => {
22
- const result = parseJsonlLine('{"data":"hello"}');
23
- expect(result?.type).toBe("unknown");
24
- });
25
- });
26
- describe("extractAssistantText", () => {
27
- it("extracts text from message_end events", () => {
28
- const log = [
29
- {
30
- type: "message_end",
31
- timestamp: 0,
32
- raw: JSON.stringify({
33
- type: "message_end",
34
- message: {
35
- role: "assistant",
36
- content: [{ type: "text", text: "Hello world" }],
37
- },
38
- }),
39
- },
40
- ];
41
- expect(extractAssistantText(log)).toBe("Hello world");
42
- });
43
- it("concatenates multiple assistant messages", () => {
44
- const makeEnd = (text) => ({
45
- type: "message_end",
46
- timestamp: 0,
47
- raw: JSON.stringify({
48
- type: "message_end",
49
- message: {
50
- role: "assistant",
51
- content: [{ type: "text", text }],
52
- },
53
- }),
54
- });
55
- const log = [makeEnd("First"), makeEnd("Second")];
56
- expect(extractAssistantText(log)).toBe("First\nSecond");
57
- });
58
- it("ignores non-assistant messages", () => {
59
- const log = [
60
- {
61
- type: "message_end",
62
- timestamp: 0,
63
- raw: JSON.stringify({
64
- type: "message_end",
65
- message: {
66
- role: "user",
67
- content: [{ type: "text", text: "ignored" }],
68
- },
69
- }),
70
- },
71
- ];
72
- expect(extractAssistantText(log)).toBe("");
73
- });
74
- it("ignores non-message_end events", () => {
75
- const log = [{ type: "message_start", timestamp: 0, raw: "{}" }];
76
- expect(extractAssistantText(log)).toBe("");
77
- });
78
- });
79
- describe("extractUsage", () => {
80
- it("accumulates usage from assistant messages", () => {
81
- const log = [
82
- {
83
- type: "message_end",
84
- timestamp: 0,
85
- raw: JSON.stringify({
86
- type: "message_end",
87
- message: {
88
- role: "assistant",
89
- content: [],
90
- usage: {
91
- input: 100,
92
- output: 50,
93
- cacheRead: 10,
94
- cacheWrite: 5,
95
- cost: { total: 0.01 },
96
- },
97
- },
98
- }),
99
- },
100
- {
101
- type: "message_end",
102
- timestamp: 0,
103
- raw: JSON.stringify({
104
- type: "message_end",
105
- message: {
106
- role: "assistant",
107
- content: [],
108
- usage: {
109
- input: 200,
110
- output: 100,
111
- cacheRead: 20,
112
- cacheWrite: 10,
113
- cost: { total: 0.02 },
114
- },
115
- },
116
- }),
117
- },
118
- ];
119
- const usage = extractUsage(log);
120
- expect(usage.turns).toBe(2);
121
- expect(usage.input).toBe(300);
122
- expect(usage.output).toBe(150);
123
- expect(usage.cacheRead).toBe(30);
124
- expect(usage.cacheWrite).toBe(15);
125
- expect(usage.cost).toBeCloseTo(0.03);
126
- });
127
- it("returns zeroes for empty log", () => {
128
- const usage = extractUsage([]);
129
- expect(usage.turns).toBe(0);
130
- expect(usage.input).toBe(0);
131
- });
132
- });
133
- describe("extractModel", () => {
134
- it("extracts model from message_end", () => {
135
- const log = [
136
- {
137
- type: "message_end",
138
- timestamp: 0,
139
- raw: JSON.stringify({
140
- type: "message_end",
141
- message: { model: "claude-sonnet-4-5", role: "assistant", content: [] },
142
- }),
143
- },
144
- ];
145
- expect(extractModel(log)).toBe("claude-sonnet-4-5");
146
- });
147
- it("returns undefined for empty log", () => {
148
- expect(extractModel([])).toBeUndefined();
149
- });
150
- });
151
- describe("buildDockerArgs", () => {
152
- it("builds basic args", () => {
153
- const args = buildDockerArgs("my-image", {
154
- task: "Fix the bug",
155
- token: "ghp_abc123",
156
- });
157
- expect(args).toEqual([
158
- "run",
159
- "--rm",
160
- "-e",
161
- "GITHUB_TOKEN=ghp_abc123",
162
- "my-image",
163
- "Fix the bug",
164
- ]);
165
- });
166
- it("includes model env var when specified", () => {
167
- const args = buildDockerArgs("my-image", {
168
- task: "Fix it",
169
- token: "ghp_abc",
170
- model: "claude-opus-4-5",
171
- });
172
- expect(args).toContain("-e");
173
- expect(args).toContain("PI_MODEL=claude-opus-4-5");
174
- });
175
- });
176
- //# sourceMappingURL=docker-e2e.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docker-e2e.test.js","sourceRoot":"","sources":["../src/docker-e2e.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import type { ExtensionAPI } from "@sammorrowdrums/mcpi";
2
- export default function (pi: ExtensionAPI): void;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,YAAY,EAIb,MAAM,sBAAsB,CAAC;AAa9B,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QA0IxC"}
package/dist/index.js DELETED
@@ -1,128 +0,0 @@
1
- import { CodeModeManager } from "./code-mode/index.js";
2
- import { dockerE2ETool } from "./docker-e2e.js";
3
- import { McpClientManager, loadMcpConfig } from "./mcp/index.js";
4
- import { SkillRegistry, createLoadSkillTool, discoverSkillsFromServer, formatMcpSkillsForPrompt, registerMcpToolProxies, } from "./skills/index.js";
5
- import { ToolCliRpcServer, formatToolCliForPrompt } from "./tool-cli/index.js";
6
- export default function (pi) {
7
- pi.registerTool(dockerE2ETool);
8
- pi.registerFlag("mcp-config", {
9
- description: "Path to MCP server configuration JSON file",
10
- type: "string",
11
- });
12
- const mcpManager = new McpClientManager();
13
- const skillRegistry = new SkillRegistry();
14
- const rpcServer = new ToolCliRpcServer(mcpManager);
15
- const codeModeManager = new CodeModeManager();
16
- const enabledTools = new Set();
17
- const gatedToolNames = new Set();
18
- // Register the load_skill tool so the model can activate MCP skills
19
- pi.registerTool(createLoadSkillTool({ registry: skillRegistry, mcpManager, enabledTools }));
20
- pi.on("session_start", async (_event, ctx) => {
21
- if (ctx.hasUI) {
22
- ctx.ui.notify("mcpi-ext loaded", "info");
23
- }
24
- const configPath = pi.getFlag("mcp-config");
25
- const log = (msg) => {
26
- if (ctx.hasUI) {
27
- ctx.ui.notify(msg, "info");
28
- }
29
- else {
30
- console.error(msg);
31
- }
32
- };
33
- try {
34
- const config = await loadMcpConfig(configPath);
35
- const serverCount = Object.keys(config.mcpServers).length;
36
- if (serverCount > 0) {
37
- await mcpManager.connectAll(config, log);
38
- const tools = mcpManager.getTools();
39
- log(`MCP: ${mcpManager.getConnectedServers().length} server(s), ${tools.length} tool(s) discovered`);
40
- // Pre-register all MCP tools as deferred Pi tool proxies
41
- // (in tools array for dispatch but excluded from system prompt)
42
- const allToolNames = tools.map((t) => t.name);
43
- registerMcpToolProxies(allToolNames, mcpManager, pi);
44
- // Discover skills from all connected servers
45
- for (const serverName of mcpManager.getConnectedServers()) {
46
- const client = mcpManager.getClient(serverName);
47
- if (!client)
48
- continue;
49
- try {
50
- const skills = await discoverSkillsFromServer(client, serverName, log);
51
- skillRegistry.registerAll(skills);
52
- }
53
- catch (err) {
54
- log(`[skills] Failed to discover skills from "${serverName}": ${err.message}`);
55
- }
56
- }
57
- if (skillRegistry.size > 0) {
58
- for (const skill of skillRegistry.getAll()) {
59
- for (const t of skill.allowedTools) {
60
- gatedToolNames.add(t);
61
- }
62
- }
63
- log(`MCP: ${skillRegistry.size} skill(s) discovered, ${gatedToolNames.size} tool(s) deferred`);
64
- }
65
- // Start the tool-cli RPC server for progressive tool discovery
66
- try {
67
- await rpcServer.start(log);
68
- }
69
- catch (err) {
70
- log(`[tool-cli] Failed to start RPC server: ${err.message}`);
71
- }
72
- // Initialize code mode (Tier 3) for read-only tools with structured output
73
- codeModeManager.initialize(mcpManager);
74
- if (codeModeManager.isActive) {
75
- const { codeSearch, codeExecute } = codeModeManager.createTools();
76
- pi.registerTool(codeSearch);
77
- pi.registerTool(codeExecute);
78
- log(`MCP: Code mode active (${codeModeManager.getEligibleTools().length} eligible tool(s))`);
79
- }
80
- }
81
- }
82
- catch (err) {
83
- const msg = `MCP config error: ${err.message}`;
84
- if (ctx.hasUI) {
85
- ctx.ui.notify(msg, "warning");
86
- }
87
- else {
88
- console.error(msg);
89
- }
90
- }
91
- });
92
- // Inject MCP skills, tool-cli advice, and code mode type hints into the system prompt
93
- pi.on("before_agent_start", async (event) => {
94
- let extra = "";
95
- const skills = skillRegistry.getAll();
96
- if (skills.length > 0) {
97
- extra += formatMcpSkillsForPrompt(skills);
98
- }
99
- const serverCount = mcpManager.getConnectedServers().length;
100
- extra += formatToolCliForPrompt(serverCount);
101
- if (codeModeManager.isActive) {
102
- extra += codeModeManager.formatSystemPromptSection();
103
- }
104
- if (extra.length === 0)
105
- return;
106
- return { systemPrompt: event.systemPrompt + extra };
107
- });
108
- // Block deferred MCP tools until their skill is loaded
109
- pi.on("tool_call", async (event) => {
110
- const name = "toolName" in event ? event.toolName : undefined;
111
- if (!name || !gatedToolNames.has(name) || enabledTools.has(name))
112
- return;
113
- const relevantSkills = skillRegistry
114
- .getAll()
115
- .filter((s) => s.allowedTools.includes(name))
116
- .map((s) => s.name);
117
- return {
118
- block: true,
119
- reason: `Tool "${name}" requires loading a skill first. Call load_skill with one of: ${relevantSkills.join(", ")}`,
120
- };
121
- });
122
- pi.on("session_shutdown", async () => {
123
- await rpcServer.stop();
124
- await mcpManager.disconnectAll();
125
- skillRegistry.clear();
126
- });
127
- }
128
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
@@ -1,8 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- describe("mcpi-ext", () => {
3
- it("exports a default function", async () => {
4
- const mod = await import("./index.js");
5
- expect(typeof mod.default).toBe("function");
6
- });
7
- });
8
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,46 +0,0 @@
1
- import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
- import type { McpConfig, ServerConfig } from "./config.js";
3
- /** An MCP tool as discovered from a server. */
4
- export interface McpTool {
5
- /** Tool name as reported by the server. */
6
- name: string;
7
- description?: string;
8
- /** JSON Schema for the tool's parameters. */
9
- inputSchema: Record<string, unknown>;
10
- /** JSON Schema for structured output, if declared. */
11
- outputSchema?: Record<string, unknown>;
12
- /** Tool annotations (readOnlyHint, destructiveHint, etc.). */
13
- annotations?: Record<string, unknown>;
14
- /** Which configured server this tool came from. */
15
- serverName: string;
16
- }
17
- /**
18
- * Manages connections to multiple MCP servers and aggregates their tools.
19
- *
20
- * Tools are discovered and stored internally. They are NOT registered with pi
21
- * automatically — that responsibility belongs to the access tiers (Skills,
22
- * Football, Code Mode).
23
- */
24
- export declare class McpClientManager {
25
- private connections;
26
- /**
27
- * Connect to all servers defined in the config.
28
- * Connections that fail are logged and skipped — partial success is fine.
29
- */
30
- connectAll(config: McpConfig, log?: (msg: string) => void): Promise<void>;
31
- /** Connect to a single server by name. */
32
- connectOne(name: string, serverConfig: ServerConfig, log?: (msg: string) => void): Promise<void>;
33
- /** Disconnect a single server. */
34
- disconnectOne(name: string): Promise<void>;
35
- /** Disconnect all servers. */
36
- disconnectAll(): Promise<void>;
37
- /** Get all discovered tools across all connected servers. */
38
- getTools(): McpTool[];
39
- /** Get tools from a specific server. */
40
- getToolsForServer(name: string): McpTool[];
41
- /** Get the MCP Client for a specific server (needed to call tools). */
42
- getClient(name: string): Client | undefined;
43
- /** List connected server names. */
44
- getConnectedServers(): string[];
45
- }
46
- //# sourceMappingURL=client-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-manager.d.ts","sourceRoot":"","sources":["../../src/mcp/client-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3D,+CAA+C;AAC/C,MAAM,WAAW,OAAO;IACtB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAwC;IAE3D;;;OAGG;IACG,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAc9F,0CAA0C;IACpC,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,YAAY,EAC1B,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAoB,GACzC,OAAO,CAAC,IAAI,CAAC;IAwDhB,kCAAkC;IAC5B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhD,8BAA8B;IACxB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpC,6DAA6D;IAC7D,QAAQ,IAAI,OAAO,EAAE;IAQrB,wCAAwC;IACxC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE;IAI1C,uEAAuE;IACvE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3C,mCAAmC;IACnC,mBAAmB,IAAI,MAAM,EAAE;CAGhC"}
@@ -1,148 +0,0 @@
1
- import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
- import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
3
- import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
4
- /**
5
- * Manages connections to multiple MCP servers and aggregates their tools.
6
- *
7
- * Tools are discovered and stored internally. They are NOT registered with pi
8
- * automatically — that responsibility belongs to the access tiers (Skills,
9
- * Football, Code Mode).
10
- */
11
- export class McpClientManager {
12
- connections = new Map();
13
- /**
14
- * Connect to all servers defined in the config.
15
- * Connections that fail are logged and skipped — partial success is fine.
16
- */
17
- async connectAll(config, log = console.error) {
18
- const entries = Object.entries(config.mcpServers);
19
- const results = await Promise.allSettled(entries.map(([name, serverConfig]) => this.connectOne(name, serverConfig, log)));
20
- for (let i = 0; i < results.length; i++) {
21
- const result = results[i];
22
- if (result.status === "rejected") {
23
- log(`[mcp] Failed to connect to "${entries[i][0]}": ${result.reason}`);
24
- }
25
- }
26
- }
27
- /** Connect to a single server by name. */
28
- async connectOne(name, serverConfig, log = console.error) {
29
- // Disconnect existing connection with this name if any
30
- if (this.connections.has(name)) {
31
- await this.disconnectOne(name);
32
- }
33
- const transport = createTransport(serverConfig);
34
- const client = new Client({ name: "mcpi-ext", version: "0.1.0" }, {
35
- capabilities: {},
36
- listChanged: {
37
- tools: {
38
- onChanged: (_error, tools) => {
39
- if (tools) {
40
- const conn = this.connections.get(name);
41
- if (conn && conn.client === client) {
42
- conn.tools = toMcpTools(name, tools);
43
- log(`[mcp] Tools updated for "${name}" (${conn.tools.length} tools)`);
44
- }
45
- }
46
- },
47
- },
48
- },
49
- });
50
- // Insert placeholder so listChanged notifications during connect aren't dropped
51
- this.connections.set(name, { client, transport, tools: [] });
52
- try {
53
- await client.connect(transport);
54
- const toolsResult = await client.listTools();
55
- const tools = toMcpTools(name, toolsResult.tools);
56
- const conn = this.connections.get(name);
57
- if (conn && conn.client === client) {
58
- conn.tools = tools;
59
- }
60
- log(`[mcp] Connected to "${name}" (${tools.length} tools)`);
61
- }
62
- catch (error) {
63
- // Clean up on failure so we don't leak a partially connected client
64
- const conn = this.connections.get(name);
65
- if (conn && conn.client === client) {
66
- this.connections.delete(name);
67
- }
68
- try {
69
- await client.close();
70
- }
71
- catch {
72
- // best-effort cleanup
73
- }
74
- throw error;
75
- }
76
- }
77
- /** Disconnect a single server. */
78
- async disconnectOne(name) {
79
- const conn = this.connections.get(name);
80
- if (!conn)
81
- return;
82
- this.connections.delete(name);
83
- try {
84
- await conn.client.close();
85
- }
86
- catch {
87
- // best-effort
88
- }
89
- }
90
- /** Disconnect all servers. */
91
- async disconnectAll() {
92
- const names = [...this.connections.keys()];
93
- await Promise.allSettled(names.map((n) => this.disconnectOne(n)));
94
- }
95
- /** Get all discovered tools across all connected servers. */
96
- getTools() {
97
- const tools = [];
98
- for (const conn of this.connections.values()) {
99
- tools.push(...conn.tools);
100
- }
101
- return tools;
102
- }
103
- /** Get tools from a specific server. */
104
- getToolsForServer(name) {
105
- return this.connections.get(name)?.tools ?? [];
106
- }
107
- /** Get the MCP Client for a specific server (needed to call tools). */
108
- getClient(name) {
109
- return this.connections.get(name)?.client;
110
- }
111
- /** List connected server names. */
112
- getConnectedServers() {
113
- return [...this.connections.keys()];
114
- }
115
- }
116
- function createTransport(config) {
117
- if (config.type === "stdio") {
118
- const env = config.env
119
- ? Object.fromEntries(Object.entries({ ...process.env, ...config.env }).filter((entry) => entry[1] !== undefined))
120
- : undefined;
121
- return new StdioClientTransport({
122
- command: config.command,
123
- args: config.args,
124
- env,
125
- cwd: config.cwd,
126
- });
127
- }
128
- const headers = {
129
- ...(config.headers ?? {}),
130
- };
131
- return new StreamableHTTPClientTransport(new URL(config.url), {
132
- requestInit: {
133
- headers,
134
- },
135
- });
136
- }
137
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
138
- function toMcpTools(serverName, tools) {
139
- return tools.map((t) => ({
140
- name: t.name,
141
- description: t.description,
142
- inputSchema: t.inputSchema,
143
- outputSchema: t.outputSchema,
144
- annotations: t.annotations,
145
- serverName,
146
- }));
147
- }
148
- //# sourceMappingURL=client-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-manager.js","sourceRoot":"","sources":["../../src/mcp/client-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAwBnG;;;;;;GAMG;AACH,MAAM,OAAO,gBAAgB;IACnB,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;IAE3D;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,MAAiB,EAAE,MAA6B,OAAO,CAAC,KAAK;QAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAChF,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,GAAG,CAAC,+BAA+B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,UAAU,CACd,IAAY,EACZ,YAA0B,EAC1B,MAA6B,OAAO,CAAC,KAAK;QAE1C,uDAAuD;QACvD,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,EACtC;YACE,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE;gBACX,KAAK,EAAE;oBACL,SAAS,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;wBAC3B,IAAI,KAAK,EAAE,CAAC;4BACV,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;4BACxC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gCACnC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gCACrC,GAAG,CAAC,4BAA4B,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;4BACxE,CAAC;wBACH,CAAC;oBACH,CAAC;iBACF;aACF;SACF,CACF,CAAC;QAEF,gFAAgF;QAChF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAEhC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,CAAC;YACD,GAAG,CAAC,uBAAuB,IAAI,MAAM,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oEAAoE;YACpE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACnC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,sBAAsB;YACxB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,aAAa,CAAC,IAAY;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,KAAK,CAAC,aAAa;QACjB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,6DAA6D;IAC7D,QAAQ;QACN,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wCAAwC;IACxC,iBAAiB,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,uEAAuE;IACvE,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAC5C,CAAC;IAED,mCAAmC;IACnC,mBAAmB;QACjB,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;CACF;AAED,SAAS,eAAe,CACtB,MAAoB;IAEpB,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG;YACpB,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CACtD,CAAC,KAAK,EAA6B,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAC7D,CACF;YACH,CAAC,CAAC,SAAS,CAAC;QACd,OAAO,IAAI,oBAAoB,CAAC;YAC9B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG;YACH,GAAG,EAAE,MAAM,CAAC,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;KAC1B,CAAC;IAEF,OAAO,IAAI,6BAA6B,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QAC5D,WAAW,EAAE;YACX,OAAO;SACR;KACF,CAAC,CAAC;AACL,CAAC;AAED,8DAA8D;AAC9D,SAAS,UAAU,CAAC,UAAkB,EAAE,KAAY;IAClD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAsC;QACrD,YAAY,EAAE,CAAC,CAAC,YAAmD;QACnE,WAAW,EAAE,CAAC,CAAC,WAAkD;QACjE,UAAU;KACX,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=client-manager.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-manager.test.d.ts","sourceRoot":"","sources":["../../src/mcp/client-manager.test.ts"],"names":[],"mappings":""}