@geohar/pi-svg-mcp 0.6.2 → 0.7.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAER,YAAY,EAIf,MAAM,SAAS,CAAA;AAuHhB,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA6FrD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAER,YAAY,EAIf,MAAM,SAAS,CAAA;AAuHhB,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAkGrD"}
package/dist/index.js CHANGED
@@ -26,7 +26,8 @@
26
26
  // entry — see mcp.json.example and the README; static, and unnecessary when
27
27
  // combiner-served. The sharedserver resolution is ported from plugins/opencode.
28
28
  import { spawnSync } from "node:child_process";
29
- import { existsSync, readFileSync } from "node:fs";
29
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
30
+ import { homedir } from "node:os";
30
31
  import { dirname, join } from "node:path";
31
32
  import { fileURLToPath } from "node:url";
32
33
  import { resolveSharedserver } from "./sharedserver-resolve.js";
@@ -151,15 +152,19 @@ export default function svgMcp(pi) {
151
152
  });
152
153
  // ── /svg-mcp command: inspect the extension (verb: system-prompt) ──
153
154
  pi.registerCommand("svg-mcp", {
154
- description: "svg-mcp extension — verb: system-prompt (show the injected directive)",
155
+ description: "svg-mcp extension — verbs: system-prompt (show the injected directive), install-config [path] (write mcp.json)",
155
156
  getArgumentCompletions: (prefix) => completeVerbs(prefix),
156
157
  handler: (args, ctx) => {
157
- const verb = args.trim();
158
+ const [verb, ...rest] = args.trim().split(/\s+/);
158
159
  if (verb === "" || verb === "system-prompt") {
159
160
  showDirective(ctx, "svg-mcp", SVG_DIAGRAM_DIRECTIVE, wantInstructions);
160
161
  return;
161
162
  }
162
- ctx.ui?.notify?.(`svg-mcp: unknown verb "${verb}". Try: system-prompt`, "warn");
163
+ if (verb === "install-config") {
164
+ installConfig(ctx, rest.join(" ") || undefined);
165
+ return;
166
+ }
167
+ ctx.ui?.notify?.(`svg-mcp: unknown verb "${verb}". Try: system-prompt, install-config`, "warn");
163
168
  },
164
169
  });
165
170
  // Combiner-served or manage=false: nothing to launch. The directive still applies.
@@ -224,12 +229,91 @@ export default function svgMcp(pi) {
224
229
  // directive this extension injects — the show-command pattern from pi-custom-system-prompt,
225
230
  // since `before_agent_start` injections are per-turn and never appear in Pi's own
226
231
  // `/system-prompt` (which reports the base prompt only).
227
- const COMMAND_VERBS = ["system-prompt"];
232
+ const COMMAND_VERBS = ["system-prompt", "install-config"];
228
233
  function completeVerbs(prefix) {
229
234
  const p = prefix.trim();
230
235
  const matches = COMMAND_VERBS.filter((v) => v.startsWith(p));
231
236
  return matches.length ? matches.map((v) => ({ value: v, label: v })) : null;
232
237
  }
238
+ // ── /svg-mcp install-config: write the pi-mcp-adapter mcp.json entry ──
239
+ // A USER-INVOKED write — on request, merge the svg-mcp entry into pi-mcp-adapter's
240
+ // mcp.json, wired for svg-mcp's optional inbound bearer auth:
241
+ //
242
+ // { "url": "…/mcp", "auth": "bearer", "bearerTokenEnv": "SVG_MCP_AUTH_TOKEN" }
243
+ //
244
+ // - auth:"bearer" → the adapter attaches `Authorization: Bearer <token>` (it gates the
245
+ // header on `auth === "bearer"`, NOT on bearerTokenEnv alone), AND makes
246
+ // supportsOAuth() false so a wrong/missing token surfaces as an honest 401 rather
247
+ // than a Dynamic-Client-Registration 404.
248
+ // - bearerTokenEnv → names the env var the token is read from at connect (nothing
249
+ // written to disk). The backend enforces only when SVG_MCP_AUTH_TOKEN is set on ITS
250
+ // side; unset ⇒ open, the env var is unset here too so no header is sent. The one
251
+ // shape is correct whether or not auth is enabled. Ported from mcp-companion's
252
+ // /mcp-combiner install-config.
253
+ function expandHome(p) {
254
+ if (p === "~")
255
+ return homedir();
256
+ if (p.startsWith("~/"))
257
+ return join(homedir(), p.slice(2));
258
+ return p;
259
+ }
260
+ /** The URL the adapter should reach svg-mcp at — 127.0.0.1:<port>/mcp with the same
261
+ * port defaults the backend serves on ($SVG_MCP_PORT, else 7731). */
262
+ function defaultSvgUrl() {
263
+ let port = DEFAULT_PORT;
264
+ const raw = env("SVG_MCP_PORT");
265
+ if (raw !== undefined) {
266
+ const n = Number(raw);
267
+ if (Number.isInteger(n) && n > 0)
268
+ port = n;
269
+ }
270
+ return `http://127.0.0.1:${port}/mcp`;
271
+ }
272
+ function installConfig(ctx, pathArg) {
273
+ const target = pathArg ? expandHome(pathArg) : join(homedir(), ".config", "mcp", "mcp.json");
274
+ const key = DEFAULT_NAME;
275
+ // Read + parse existing (tolerate absence; refuse to clobber non-JSON).
276
+ let doc = {};
277
+ if (existsSync(target)) {
278
+ try {
279
+ const parsed = JSON.parse(readFileSync(target, "utf8"));
280
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
281
+ ctx.ui?.notify?.(`svg-mcp: ${target} is not a JSON object; not overwriting`, "error");
282
+ return;
283
+ }
284
+ doc = parsed;
285
+ }
286
+ catch (e) {
287
+ ctx.ui?.notify?.(`svg-mcp: ${target} is not valid JSON; not overwriting (${e})`, "error");
288
+ return;
289
+ }
290
+ }
291
+ const servers = (doc.mcpServers ??= {});
292
+ const prev = (servers[key] ?? {});
293
+ const before = JSON.stringify(prev);
294
+ // Preserve any existing url and other fields; only ensure the auth-wiring keys.
295
+ servers[key] = {
296
+ ...prev,
297
+ url: typeof prev.url === "string" && prev.url ? prev.url : defaultSvgUrl(),
298
+ auth: "bearer",
299
+ bearerTokenEnv: "SVG_MCP_AUTH_TOKEN",
300
+ };
301
+ const existed = before !== "{}" && Object.keys(prev).length > 0;
302
+ const changed = before !== JSON.stringify(servers[key]);
303
+ try {
304
+ mkdirSync(dirname(target), { recursive: true });
305
+ writeFileSync(target, `${JSON.stringify(doc, null, 2)}\n`, "utf8");
306
+ }
307
+ catch (e) {
308
+ ctx.ui?.notify?.(`svg-mcp: failed to write ${target} (${e})`, "error");
309
+ return;
310
+ }
311
+ const what = !existed ? "added" : changed ? "updated" : "already configured";
312
+ ctx.ui?.notify?.(`svg-mcp: ${what} "${key}" in ${target}\n` +
313
+ `Sends "Authorization: Bearer $SVG_MCP_AUTH_TOKEN" when that env var is set ` +
314
+ `(auth:"bearer" both sends the token and suppresses OAuth probing). ` +
315
+ `Run /reload so pi-mcp-adapter re-reads mcp.json.`, "info");
316
+ }
233
317
  const SHOW_LIMIT = 1600;
234
318
  function showDirective(ctx, label, directive, enabled) {
235
319
  if (!directive) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geohar/pi-svg-mcp",
3
- "version": "0.6.2",
3
+ "version": "0.7.1",
4
4
  "description": "Pi extension: run the svg-mcp MCP server via sharedserver and inject the diagram-authoring directive. Pairs with pi-mcp-adapter, which makes svg-mcp's tools reachable from Pi.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -26,6 +26,7 @@
26
26
  "prepublishOnly": "npm run clean && npm run build"
27
27
  },
28
28
  "keywords": [
29
+ "pi-package",
29
30
  "pi",
30
31
  "pi-extension",
31
32
  "pi-mono",
package/src/index.ts CHANGED
@@ -27,7 +27,8 @@
27
27
  // combiner-served. The sharedserver resolution is ported from plugins/opencode.
28
28
 
29
29
  import { spawnSync } from "node:child_process"
30
- import { existsSync, readFileSync } from "node:fs"
30
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"
31
+ import { homedir } from "node:os"
31
32
  import { dirname, join } from "node:path"
32
33
  import { fileURLToPath } from "node:url"
33
34
  import type {
@@ -171,15 +172,20 @@ export default function svgMcp(pi: ExtensionAPI): void {
171
172
 
172
173
  // ── /svg-mcp command: inspect the extension (verb: system-prompt) ──
173
174
  pi.registerCommand("svg-mcp", {
174
- description: "svg-mcp extension — verb: system-prompt (show the injected directive)",
175
+ description:
176
+ "svg-mcp extension — verbs: system-prompt (show the injected directive), install-config [path] (write mcp.json)",
175
177
  getArgumentCompletions: (prefix) => completeVerbs(prefix),
176
178
  handler: (args, ctx) => {
177
- const verb = args.trim()
179
+ const [verb, ...rest] = args.trim().split(/\s+/)
178
180
  if (verb === "" || verb === "system-prompt") {
179
181
  showDirective(ctx, "svg-mcp", SVG_DIAGRAM_DIRECTIVE, wantInstructions)
180
182
  return
181
183
  }
182
- ctx.ui?.notify?.(`svg-mcp: unknown verb "${verb}". Try: system-prompt`, "warn")
184
+ if (verb === "install-config") {
185
+ installConfig(ctx, rest.join(" ") || undefined)
186
+ return
187
+ }
188
+ ctx.ui?.notify?.(`svg-mcp: unknown verb "${verb}". Try: system-prompt, install-config`, "warn")
183
189
  },
184
190
  })
185
191
 
@@ -256,13 +262,98 @@ export default function svgMcp(pi: ExtensionAPI): void {
256
262
  // directive this extension injects — the show-command pattern from pi-custom-system-prompt,
257
263
  // since `before_agent_start` injections are per-turn and never appear in Pi's own
258
264
  // `/system-prompt` (which reports the base prompt only).
259
- const COMMAND_VERBS = ["system-prompt"]
265
+ const COMMAND_VERBS = ["system-prompt", "install-config"]
260
266
  function completeVerbs(prefix: string): AutocompleteItem[] | null {
261
267
  const p = prefix.trim()
262
268
  const matches = COMMAND_VERBS.filter((v) => v.startsWith(p))
263
269
  return matches.length ? matches.map((v) => ({ value: v, label: v })) : null
264
270
  }
265
271
 
272
+ // ── /svg-mcp install-config: write the pi-mcp-adapter mcp.json entry ──
273
+ // A USER-INVOKED write — on request, merge the svg-mcp entry into pi-mcp-adapter's
274
+ // mcp.json, wired for svg-mcp's optional inbound bearer auth:
275
+ //
276
+ // { "url": "…/mcp", "auth": "bearer", "bearerTokenEnv": "SVG_MCP_AUTH_TOKEN" }
277
+ //
278
+ // - auth:"bearer" → the adapter attaches `Authorization: Bearer <token>` (it gates the
279
+ // header on `auth === "bearer"`, NOT on bearerTokenEnv alone), AND makes
280
+ // supportsOAuth() false so a wrong/missing token surfaces as an honest 401 rather
281
+ // than a Dynamic-Client-Registration 404.
282
+ // - bearerTokenEnv → names the env var the token is read from at connect (nothing
283
+ // written to disk). The backend enforces only when SVG_MCP_AUTH_TOKEN is set on ITS
284
+ // side; unset ⇒ open, the env var is unset here too so no header is sent. The one
285
+ // shape is correct whether or not auth is enabled. Ported from mcp-companion's
286
+ // /mcp-combiner install-config.
287
+
288
+ function expandHome(p: string): string {
289
+ if (p === "~") return homedir()
290
+ if (p.startsWith("~/")) return join(homedir(), p.slice(2))
291
+ return p
292
+ }
293
+
294
+ /** The URL the adapter should reach svg-mcp at — 127.0.0.1:<port>/mcp with the same
295
+ * port defaults the backend serves on ($SVG_MCP_PORT, else 7731). */
296
+ function defaultSvgUrl(): string {
297
+ let port = DEFAULT_PORT
298
+ const raw = env("SVG_MCP_PORT")
299
+ if (raw !== undefined) {
300
+ const n = Number(raw)
301
+ if (Number.isInteger(n) && n > 0) port = n
302
+ }
303
+ return `http://127.0.0.1:${port}/mcp`
304
+ }
305
+
306
+ function installConfig(ctx: ExtensionCommandContext, pathArg?: string): void {
307
+ const target = pathArg ? expandHome(pathArg) : join(homedir(), ".config", "mcp", "mcp.json")
308
+ const key = DEFAULT_NAME
309
+
310
+ // Read + parse existing (tolerate absence; refuse to clobber non-JSON).
311
+ let doc: Record<string, unknown> = {}
312
+ if (existsSync(target)) {
313
+ try {
314
+ const parsed = JSON.parse(readFileSync(target, "utf8"))
315
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
316
+ ctx.ui?.notify?.(`svg-mcp: ${target} is not a JSON object; not overwriting`, "error")
317
+ return
318
+ }
319
+ doc = parsed as Record<string, unknown>
320
+ } catch (e) {
321
+ ctx.ui?.notify?.(`svg-mcp: ${target} is not valid JSON; not overwriting (${e})`, "error")
322
+ return
323
+ }
324
+ }
325
+
326
+ const servers = (doc.mcpServers ??= {}) as Record<string, Record<string, unknown>>
327
+ const prev = (servers[key] ?? {}) as Record<string, unknown>
328
+ const before = JSON.stringify(prev)
329
+ // Preserve any existing url and other fields; only ensure the auth-wiring keys.
330
+ servers[key] = {
331
+ ...prev,
332
+ url: typeof prev.url === "string" && prev.url ? prev.url : defaultSvgUrl(),
333
+ auth: "bearer",
334
+ bearerTokenEnv: "SVG_MCP_AUTH_TOKEN",
335
+ }
336
+ const existed = before !== "{}" && Object.keys(prev).length > 0
337
+ const changed = before !== JSON.stringify(servers[key])
338
+
339
+ try {
340
+ mkdirSync(dirname(target), { recursive: true })
341
+ writeFileSync(target, `${JSON.stringify(doc, null, 2)}\n`, "utf8")
342
+ } catch (e) {
343
+ ctx.ui?.notify?.(`svg-mcp: failed to write ${target} (${e})`, "error")
344
+ return
345
+ }
346
+
347
+ const what = !existed ? "added" : changed ? "updated" : "already configured"
348
+ ctx.ui?.notify?.(
349
+ `svg-mcp: ${what} "${key}" in ${target}\n` +
350
+ `Sends "Authorization: Bearer $SVG_MCP_AUTH_TOKEN" when that env var is set ` +
351
+ `(auth:"bearer" both sends the token and suppresses OAuth probing). ` +
352
+ `Run /reload so pi-mcp-adapter re-reads mcp.json.`,
353
+ "info",
354
+ )
355
+ }
356
+
266
357
  const SHOW_LIMIT = 1600
267
358
  function showDirective(ctx: ExtensionCommandContext, label: string, directive: string, enabled: boolean): void {
268
359
  if (!directive) {