@unclick/mcp-server 0.2.5 → 0.3.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.
Files changed (142) hide show
  1. package/README.md +160 -139
  2. package/dist/abn-tool.js +1 -1
  3. package/dist/bgg-tool.js +1 -1
  4. package/dist/carboninterface-tool.js +1 -1
  5. package/dist/cards/card.d.ts +9 -0
  6. package/dist/cards/card.d.ts.map +1 -0
  7. package/dist/cards/card.js +4 -0
  8. package/dist/cards/card.js.map +1 -0
  9. package/dist/cards/search-memory-card.d.ts +11 -0
  10. package/dist/cards/search-memory-card.d.ts.map +1 -0
  11. package/dist/cards/search-memory-card.js +75 -0
  12. package/dist/cards/search-memory-card.js.map +1 -0
  13. package/dist/cards/search-memory-card.test.d.ts +2 -0
  14. package/dist/cards/search-memory-card.test.d.ts.map +1 -0
  15. package/dist/cards/search-memory-card.test.js +59 -0
  16. package/dist/cards/search-memory-card.test.js.map +1 -0
  17. package/dist/catalog.d.ts.map +1 -1
  18. package/dist/catalog.js +265 -4
  19. package/dist/catalog.js.map +1 -1
  20. package/dist/client.d.ts.map +1 -1
  21. package/dist/client.js +96 -6
  22. package/dist/client.js.map +1 -1
  23. package/dist/converter-tools.js +1 -1
  24. package/dist/crews-tool.d.ts +12 -0
  25. package/dist/crews-tool.d.ts.map +1 -0
  26. package/dist/crews-tool.js +125 -0
  27. package/dist/crews-tool.js.map +1 -0
  28. package/dist/gdelt-tool.js +4 -4
  29. package/dist/hackernews-tool.js +1 -1
  30. package/dist/index.js +0 -0
  31. package/dist/keychain-secure-input.js +42 -42
  32. package/dist/line-tool.js +1 -1
  33. package/dist/linear-tool.js +73 -73
  34. package/dist/local-catalog-handlers.js +1 -1
  35. package/dist/local-catalog-handlers.js.map +1 -1
  36. package/dist/local-tools.js +7 -7
  37. package/dist/local-tools.js.map +1 -1
  38. package/dist/memory/__tests__/bitemporal.test.d.ts +8 -0
  39. package/dist/memory/__tests__/bitemporal.test.d.ts.map +1 -0
  40. package/dist/memory/__tests__/bitemporal.test.js +148 -0
  41. package/dist/memory/__tests__/bitemporal.test.js.map +1 -0
  42. package/dist/memory/__tests__/hybrid-search.test.d.ts +14 -0
  43. package/dist/memory/__tests__/hybrid-search.test.d.ts.map +1 -0
  44. package/dist/memory/__tests__/hybrid-search.test.js +304 -0
  45. package/dist/memory/__tests__/hybrid-search.test.js.map +1 -0
  46. package/dist/memory/agent.d.ts +34 -0
  47. package/dist/memory/agent.d.ts.map +1 -0
  48. package/dist/memory/agent.js +69 -0
  49. package/dist/memory/agent.js.map +1 -0
  50. package/dist/memory/conflicts.d.ts +48 -0
  51. package/dist/memory/conflicts.d.ts.map +1 -0
  52. package/dist/memory/conflicts.js +209 -0
  53. package/dist/memory/conflicts.js.map +1 -0
  54. package/dist/memory/db.d.ts +25 -0
  55. package/dist/memory/db.d.ts.map +1 -0
  56. package/dist/memory/db.js +144 -0
  57. package/dist/memory/db.js.map +1 -0
  58. package/dist/memory/device.d.ts +20 -0
  59. package/dist/memory/device.d.ts.map +1 -0
  60. package/dist/memory/device.js +48 -0
  61. package/dist/memory/device.js.map +1 -0
  62. package/dist/memory/embeddings.d.ts +10 -0
  63. package/dist/memory/embeddings.d.ts.map +1 -0
  64. package/dist/memory/embeddings.js +40 -0
  65. package/dist/memory/embeddings.js.map +1 -0
  66. package/dist/memory/handlers.d.ts +11 -0
  67. package/dist/memory/handlers.d.ts.map +1 -0
  68. package/dist/memory/handlers.js +219 -0
  69. package/dist/memory/handlers.js.map +1 -0
  70. package/dist/memory/instrumentation.d.ts +38 -0
  71. package/dist/memory/instrumentation.d.ts.map +1 -0
  72. package/dist/memory/instrumentation.js +97 -0
  73. package/dist/memory/instrumentation.js.map +1 -0
  74. package/dist/memory/load-events.d.ts +18 -0
  75. package/dist/memory/load-events.d.ts.map +1 -0
  76. package/dist/memory/load-events.js +61 -0
  77. package/dist/memory/load-events.js.map +1 -0
  78. package/dist/memory/local.d.ts +40 -0
  79. package/dist/memory/local.d.ts.map +1 -0
  80. package/dist/memory/local.js +400 -0
  81. package/dist/memory/local.js.map +1 -0
  82. package/dist/memory/session-state.d.ts +37 -0
  83. package/dist/memory/session-state.d.ts.map +1 -0
  84. package/dist/memory/session-state.js +82 -0
  85. package/dist/memory/session-state.js.map +1 -0
  86. package/dist/memory/supabase.d.ts +104 -0
  87. package/dist/memory/supabase.d.ts.map +1 -0
  88. package/dist/memory/supabase.js +710 -0
  89. package/dist/memory/supabase.js.map +1 -0
  90. package/dist/memory/tenant-settings.d.ts +33 -0
  91. package/dist/memory/tenant-settings.d.ts.map +1 -0
  92. package/dist/memory/tenant-settings.js +79 -0
  93. package/dist/memory/tenant-settings.js.map +1 -0
  94. package/dist/memory/tool-awareness.d.ts +66 -0
  95. package/dist/memory/tool-awareness.d.ts.map +1 -0
  96. package/dist/memory/tool-awareness.js +307 -0
  97. package/dist/memory/tool-awareness.js.map +1 -0
  98. package/dist/memory/types.d.ts +97 -0
  99. package/dist/memory/types.d.ts.map +1 -0
  100. package/dist/memory/types.js +5 -0
  101. package/dist/memory/types.js.map +1 -0
  102. package/dist/monday-tool.js +46 -46
  103. package/dist/musicbrainz-tool.js +1 -1
  104. package/dist/musicbrainz-tool.js.map +1 -1
  105. package/dist/numbers-tool.js +2 -2
  106. package/dist/openfoodfacts-tool.js +1 -1
  107. package/dist/openmeteo-tool.js +1 -1
  108. package/dist/radiobrowser-tool.js +2 -2
  109. package/dist/server.d.ts.map +1 -1
  110. package/dist/server.js +838 -15
  111. package/dist/server.js.map +1 -1
  112. package/dist/signals/emit.d.ts +11 -0
  113. package/dist/signals/emit.d.ts.map +1 -0
  114. package/dist/signals/emit.js +26 -0
  115. package/dist/signals/emit.js.map +1 -0
  116. package/dist/testpass-tool.d.ts +12 -0
  117. package/dist/testpass-tool.d.ts.map +1 -0
  118. package/dist/testpass-tool.js +121 -0
  119. package/dist/testpass-tool.js.map +1 -0
  120. package/dist/toilets-tool.js +2 -2
  121. package/dist/tool-wiring.d.ts +320 -4
  122. package/dist/tool-wiring.d.ts.map +1 -1
  123. package/dist/tool-wiring.js +246 -5
  124. package/dist/tool-wiring.js.map +1 -1
  125. package/dist/trivia-tool.js +5 -5
  126. package/dist/usgs-tool.js +1 -1
  127. package/dist/uxpass-tool.d.ts +24 -0
  128. package/dist/uxpass-tool.d.ts.map +1 -0
  129. package/dist/uxpass-tool.js +165 -0
  130. package/dist/uxpass-tool.js.map +1 -0
  131. package/dist/vault-bridge.js +7 -7
  132. package/dist/vercel-tool.d.ts +3 -0
  133. package/dist/vercel-tool.d.ts.map +1 -1
  134. package/dist/vercel-tool.js +198 -7
  135. package/dist/vercel-tool.js.map +1 -1
  136. package/dist/web-tools.d.ts +62 -0
  137. package/dist/web-tools.d.ts.map +1 -0
  138. package/dist/web-tools.js +271 -0
  139. package/dist/web-tools.js.map +1 -0
  140. package/package.json +69 -65
  141. package/public/icon.svg +15 -15
  142. package/server.json +37 -37
@@ -1,15 +1,15 @@
1
1
  // Open Trivia Database integration.
2
- // No authentication required completely free and open.
2
+ // No authentication required - completely free and open.
3
3
  // Base URL: https://opentdb.com/
4
4
  const OPENTDB_BASE = "https://opentdb.com";
5
5
  // Response codes from the API
6
6
  const RESPONSE_CODES = {
7
7
  0: "Success",
8
- 1: "No results the database does not have enough questions for the requested parameters.",
9
- 2: "Invalid parameter one or more query parameters is invalid.",
8
+ 1: "No results - the database does not have enough questions for the requested parameters.",
9
+ 2: "Invalid parameter - one or more query parameters is invalid.",
10
10
  3: "Token not found.",
11
- 4: "Token is empty all available questions have been returned.",
12
- 5: "Rate limit too many requests. Please wait 5 seconds before trying again.",
11
+ 4: "Token is empty - all available questions have been returned.",
12
+ 5: "Rate limit - too many requests. Please wait 5 seconds before trying again.",
13
13
  };
14
14
  // ─── trivia_questions ─────────────────────────────────────────────────────────
15
15
  // GET /api.php?amount={n}&category={id}&difficulty={easy|medium|hard}&type={multiple|boolean}
package/dist/usgs-tool.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // ─── USGS Earthquake Data ─────────────────────────────────────────────────────
2
- // Free USGS Earthquake Hazards Program API no auth required.
2
+ // Free USGS Earthquake Hazards Program API - no auth required.
3
3
  // Docs: https://earthquake.usgs.gov/fdsnws/event/1/
4
4
  const USGS_BASE = "https://earthquake.usgs.gov/fdsnws/event/1";
5
5
  // ─── API helper ──────────────────────────────────────────────────────────────
@@ -0,0 +1,24 @@
1
+ /**
2
+ * uxpass-tool - MCP handlers for UXPass (Chunk 1 stubs).
3
+ *
4
+ * UXPass is the UI/UX sister to TestPass. The full execution pipeline
5
+ * (capture, hat panel, synthesiser, reports) ships in Chunks 2 to 4.
6
+ * Chunk 1 wires the MCP surface so agents can discover the contract,
7
+ * does a minimal pack YAML validity check, and persists registered packs
8
+ * to a local file under packs/registered/ so the wiring is end-to-end
9
+ * testable before the backend lands.
10
+ *
11
+ * Note on schema validation: the canonical zod schema for UXPass packs
12
+ * lives in @unclick/uxpass and is unit-tested there. This MCP wrapper
13
+ * cannot depend on the workspace package because mcp-server is published
14
+ * standalone to npm. The check here is intentionally shallow (parse YAML,
15
+ * confirm the required top-level keys exist). Full validation runs server
16
+ * side when the UXPass API ships in a later chunk.
17
+ */
18
+ export declare function uxpassRun(args: Record<string, unknown>): Promise<unknown>;
19
+ export declare function uxpassStatus(args: Record<string, unknown>): Promise<unknown>;
20
+ export declare function uxpassReportHtml(args: Record<string, unknown>): Promise<unknown>;
21
+ export declare function uxpassReportJson(args: Record<string, unknown>): Promise<unknown>;
22
+ export declare function uxpassReportMd(args: Record<string, unknown>): Promise<unknown>;
23
+ export declare function uxpassRegisterPack(args: Record<string, unknown>): Promise<unknown>;
24
+ //# sourceMappingURL=uxpass-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uxpass-tool.d.ts","sourceRoot":"","sources":["../src/uxpass-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAsCH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAoB/E;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAUlF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CActF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAetF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAapF;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA4CxF"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * uxpass-tool - MCP handlers for UXPass (Chunk 1 stubs).
3
+ *
4
+ * UXPass is the UI/UX sister to TestPass. The full execution pipeline
5
+ * (capture, hat panel, synthesiser, reports) ships in Chunks 2 to 4.
6
+ * Chunk 1 wires the MCP surface so agents can discover the contract,
7
+ * does a minimal pack YAML validity check, and persists registered packs
8
+ * to a local file under packs/registered/ so the wiring is end-to-end
9
+ * testable before the backend lands.
10
+ *
11
+ * Note on schema validation: the canonical zod schema for UXPass packs
12
+ * lives in @unclick/uxpass and is unit-tested there. This MCP wrapper
13
+ * cannot depend on the workspace package because mcp-server is published
14
+ * standalone to npm. The check here is intentionally shallow (parse YAML,
15
+ * confirm the required top-level keys exist). Full validation runs server
16
+ * side when the UXPass API ships in a later chunk.
17
+ */
18
+ import * as fs from "node:fs";
19
+ import * as path from "node:path";
20
+ import * as crypto from "node:crypto";
21
+ import yaml from "js-yaml";
22
+ const STUB_NOTE = "UXPass run execution lands in Chunks 2 to 4. Chunk 1 wires the MCP surface and schema only.";
23
+ const PACKS_DIR = path.resolve(process.env.UXPASS_PACKS_DIR ??
24
+ path.join(process.cwd(), "packages", "uxpass", "packs", "registered"));
25
+ const REQUIRED_PACK_KEYS = [
26
+ "name",
27
+ "url",
28
+ "viewports",
29
+ "themes",
30
+ "hats",
31
+ "synthesiser",
32
+ "budgets",
33
+ "remediation",
34
+ ];
35
+ function ensurePacksDir() {
36
+ try {
37
+ fs.mkdirSync(PACKS_DIR, { recursive: true });
38
+ }
39
+ catch {
40
+ // best effort. The handler returns a clear error if writeFileSync fails.
41
+ }
42
+ }
43
+ function safeFilename(name) {
44
+ return name.replace(/[^a-zA-Z0-9._-]+/g, "-").slice(0, 120);
45
+ }
46
+ export async function uxpassRun(args) {
47
+ const packName = typeof args.pack_name === "string" ? args.pack_name : undefined;
48
+ const url = typeof args.url === "string" ? args.url : undefined;
49
+ const hats = Array.isArray(args.hats)
50
+ ? args.hats.filter((h) => typeof h === "string")
51
+ : undefined;
52
+ if (!packName && !url) {
53
+ return { error: "Either pack_name or url is required" };
54
+ }
55
+ const runId = `uxpass_${crypto.randomBytes(8).toString("hex")}`;
56
+ return {
57
+ run_id: runId,
58
+ status: "queued",
59
+ pack_name: packName ?? null,
60
+ url: url ?? null,
61
+ hats: hats ?? null,
62
+ note: STUB_NOTE,
63
+ };
64
+ }
65
+ export async function uxpassStatus(args) {
66
+ const runId = typeof args.run_id === "string" ? args.run_id : "";
67
+ if (!runId)
68
+ return { error: "run_id is required" };
69
+ return {
70
+ run_id: runId,
71
+ status: "queued",
72
+ ux_score: null,
73
+ summary: STUB_NOTE,
74
+ };
75
+ }
76
+ export async function uxpassReportHtml(args) {
77
+ const runId = typeof args.run_id === "string" ? args.run_id : "";
78
+ if (!runId)
79
+ return { error: "run_id is required" };
80
+ const html = `<!doctype html>
81
+ <html lang="en">
82
+ <head><meta charset="utf-8"><title>UXPass Report ${runId}</title></head>
83
+ <body>
84
+ <h1>UXPass Report</h1>
85
+ <p>Run id: <code>${runId}</code></p>
86
+ <p>Run not yet implemented. ${STUB_NOTE}</p>
87
+ </body>
88
+ </html>`;
89
+ return { run_id: runId, format: "html", body: html };
90
+ }
91
+ export async function uxpassReportJson(args) {
92
+ const runId = typeof args.run_id === "string" ? args.run_id : "";
93
+ if (!runId)
94
+ return { error: "run_id is required" };
95
+ return {
96
+ run_id: runId,
97
+ format: "json",
98
+ body: {
99
+ run_id: runId,
100
+ status: "queued",
101
+ ux_score: null,
102
+ hat_verdicts: [],
103
+ note: STUB_NOTE,
104
+ },
105
+ };
106
+ }
107
+ export async function uxpassReportMd(args) {
108
+ const runId = typeof args.run_id === "string" ? args.run_id : "";
109
+ if (!runId)
110
+ return { error: "run_id is required" };
111
+ const md = [
112
+ `# UXPass Report ${runId}`,
113
+ "",
114
+ "Run not yet implemented.",
115
+ "",
116
+ STUB_NOTE,
117
+ "",
118
+ ].join("\n");
119
+ return { run_id: runId, format: "md", body: md };
120
+ }
121
+ export async function uxpassRegisterPack(args) {
122
+ const packYaml = typeof args.pack_yaml === "string" ? args.pack_yaml : "";
123
+ if (!packYaml)
124
+ return { error: "pack_yaml is required" };
125
+ let parsed;
126
+ try {
127
+ parsed = yaml.load(packYaml);
128
+ }
129
+ catch (err) {
130
+ const message = err instanceof Error ? err.message : String(err);
131
+ return { error: `pack_yaml is not valid YAML: ${message}` };
132
+ }
133
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
134
+ return { error: "pack_yaml must be a YAML object at the top level" };
135
+ }
136
+ const obj = parsed;
137
+ const missing = REQUIRED_PACK_KEYS.filter((k) => obj[k] === undefined);
138
+ if (missing.length > 0) {
139
+ return {
140
+ error: "pack is missing required keys",
141
+ missing,
142
+ hint: "Required keys are name, url, viewports, themes, hats, synthesiser, budgets, remediation. See @unclick/uxpass for the full zod schema.",
143
+ };
144
+ }
145
+ const name = typeof obj.name === "string" ? obj.name : "";
146
+ if (!name)
147
+ return { error: "pack name must be a non-empty string" };
148
+ ensurePacksDir();
149
+ const packId = `${safeFilename(name)}-${crypto.randomBytes(4).toString("hex")}`;
150
+ const filePath = path.join(PACKS_DIR, `${packId}.yaml`);
151
+ try {
152
+ fs.writeFileSync(filePath, packYaml, "utf8");
153
+ }
154
+ catch (err) {
155
+ const message = err instanceof Error ? err.message : String(err);
156
+ return { error: `failed to persist pack: ${message}` };
157
+ }
158
+ return {
159
+ pack_id: packId,
160
+ name,
161
+ file: filePath,
162
+ note: "Persisted to local file. Database-backed persistence and full schema validation land with the backend in a later chunk.",
163
+ };
164
+ }
165
+ //# sourceMappingURL=uxpass-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uxpass-tool.js","sourceRoot":"","sources":["../src/uxpass-tool.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  // ─── Credential Broker: vault-bridge ──────────────────────────────────────────
2
2
  // Resolves platform credentials before any tool call.
3
3
  // Resolution order (first match wins):
4
- // 1. Inline args credentials already in the tool call (pass-through)
5
- // 2. Env vars UNCLICK_{SLUG}_{FIELD} (e.g., UNCLICK_XERO_ACCESS_TOKEN)
6
- // 3. Local vault keys "{slug}/{field}" in ~/.unclick/vault.enc
4
+ // 1. Inline args - credentials already in the tool call (pass-through)
5
+ // 2. Env vars - UNCLICK_{SLUG}_{FIELD} (e.g., UNCLICK_XERO_ACCESS_TOKEN)
6
+ // 3. Local vault - keys "{slug}/{field}" in ~/.unclick/vault.enc
7
7
  // requires UNCLICK_VAULT_PASSWORD env var to auto-unlock
8
- // 4. Supabase encrypted credentials stored via unclick.world/connect/{slug}
8
+ // 4. Supabase - encrypted credentials stored via unclick.world/connect/{slug}
9
9
  // requires UNCLICK_API_KEY env var (the user's UnClick API key)
10
10
  // fetches from https://unclick.world/api/credentials
11
11
  //
@@ -41,7 +41,7 @@ export async function resolveCredentials(slug, args) {
41
41
  }
42
42
  // Which fields are missing from the incoming args?
43
43
  const missing = connector.credentialFields.filter((f) => !args[f.key] || String(args[f.key]).trim() === "");
44
- // All present inline pass straight through.
44
+ // All present inline - pass straight through.
45
45
  if (missing.length === 0)
46
46
  return args;
47
47
  const resolved = { ...args };
@@ -75,7 +75,7 @@ export async function resolveCredentials(slug, args) {
75
75
  }
76
76
  }
77
77
  catch {
78
- // vault miss continue to next source
78
+ // vault miss - continue to next source
79
79
  }
80
80
  }
81
81
  stillMissing = stillMissing.filter((f) => !resolved[f.key] || String(resolved[f.key]).trim() === "");
@@ -103,7 +103,7 @@ export async function resolveCredentials(slug, args) {
103
103
  }
104
104
  }
105
105
  catch {
106
- // network miss fall through to error
106
+ // network miss - fall through to error
107
107
  }
108
108
  }
109
109
  // ── 4. Return actionable error ─────────────────────────────────────────────
@@ -3,4 +3,7 @@ export declare function getVercelDeployment(args: Record<string, unknown>): Prom
3
3
  export declare function listVercelProjects(args: Record<string, unknown>): Promise<unknown>;
4
4
  export declare function getVercelDomain(args: Record<string, unknown>): Promise<unknown>;
5
5
  export declare function getVercelEnv(args: Record<string, unknown>): Promise<unknown>;
6
+ export declare function createVercelEnv(args: Record<string, unknown>): Promise<unknown>;
7
+ export declare function deleteVercelEnv(args: Record<string, unknown>): Promise<unknown>;
8
+ export declare function createVercelDeployment(args: Record<string, unknown>): Promise<unknown>;
6
9
  //# sourceMappingURL=vercel-tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vercel-tool.d.ts","sourceRoot":"","sources":["../src/vercel-tool.ts"],"names":[],"mappings":"AAoCA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA8B3F;AAGD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BzF;AAGD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BxF;AAGD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBrF;AAGD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BlF"}
1
+ {"version":3,"file":"vercel-tool.d.ts","sourceRoot":"","sources":["../src/vercel-tool.ts"],"names":[],"mappings":"AAwDA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA8B3F;AAGD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BzF;AAGD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BxF;AAGD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBrF;AAGD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BlF;AAQD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAuDrF;AAKD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAcrF;AAeD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwE5F"}
@@ -9,27 +9,42 @@ function getApiKey(args) {
9
9
  throw new Error("api_key is required (or set VERCEL_TOKEN env var).");
10
10
  return key;
11
11
  }
12
- async function vercelGet(token, path, params) {
13
- const qs = params ? "?" + new URLSearchParams(params).toString() : "";
14
- const res = await fetch(`${VERCEL_BASE}${path}${qs}`, {
15
- headers: {
16
- Authorization: `Bearer ${token}`,
17
- },
18
- });
12
+ async function vercelRequest(token, method, path, opts) {
13
+ const qs = opts?.params ? "?" + new URLSearchParams(opts.params).toString() : "";
14
+ const headers = {
15
+ Authorization: `Bearer ${token}`,
16
+ };
17
+ const init = { method, headers };
18
+ if (opts?.body !== undefined) {
19
+ headers["Content-Type"] = "application/json";
20
+ init.body = JSON.stringify(opts.body);
21
+ }
22
+ const res = await fetch(`${VERCEL_BASE}${path}${qs}`, init);
19
23
  if (res.status === 401)
20
24
  throw new Error("Invalid Vercel token.");
21
25
  if (res.status === 403)
22
26
  throw new Error("Vercel: access forbidden. Check token scopes.");
23
27
  if (res.status === 404)
24
28
  throw new Error(`Vercel: resource not found at ${path}.`);
29
+ if (res.status === 409) {
30
+ const body = await res.text().catch(() => "");
31
+ throw new Error(`Vercel conflict (409): ${body || "resource already exists."}`);
32
+ }
25
33
  if (res.status === 429)
26
34
  throw new Error("Vercel rate limit exceeded.");
27
35
  if (!res.ok) {
28
36
  const body = await res.text().catch(() => "");
29
37
  throw new Error(`Vercel HTTP ${res.status}: ${body || res.statusText}`);
30
38
  }
39
+ // 204 No Content (e.g. DELETE) returns empty body
40
+ if (res.status === 204)
41
+ return {};
31
42
  return res.json();
32
43
  }
44
+ // Backwards-compat shim for existing callers below.
45
+ async function vercelGet(token, path, params) {
46
+ return vercelRequest(token, "GET", path, { params });
47
+ }
33
48
  // list_vercel_deployments
34
49
  export async function listVercelDeployments(args) {
35
50
  try {
@@ -199,4 +214,180 @@ export async function getVercelEnv(args) {
199
214
  return { error: err instanceof Error ? err.message : String(err) };
200
215
  }
201
216
  }
217
+ // create_vercel_env
218
+ // Adds a single environment variable to a Vercel project.
219
+ // POST /v10/projects/{projectId}/env
220
+ // Accepts target as a CSV string ("production,preview,development") or an array.
221
+ // type defaults to "plain"; use "encrypted" for secrets or "sensitive" for
222
+ // reveal-once values.
223
+ export async function createVercelEnv(args) {
224
+ try {
225
+ const token = getApiKey(args);
226
+ const projectId = String(args.project_id ?? "").trim();
227
+ const key = String(args.key ?? "").trim();
228
+ const value = args.value === undefined ? "" : String(args.value);
229
+ if (!projectId)
230
+ return { error: "project_id is required." };
231
+ if (!key)
232
+ return { error: "key is required." };
233
+ if (value === "")
234
+ return { error: "value is required (use an empty string explicitly if intentional)." };
235
+ // Normalize target: accept "production" | "production,preview" | ["production", "preview"]
236
+ let target;
237
+ if (Array.isArray(args.target)) {
238
+ target = args.target.map((t) => String(t).trim()).filter(Boolean);
239
+ }
240
+ else if (typeof args.target === "string" && args.target.trim()) {
241
+ target = args.target.split(",").map((t) => t.trim()).filter(Boolean);
242
+ }
243
+ else {
244
+ // Sensible default: all three environments.
245
+ target = ["production", "preview", "development"];
246
+ }
247
+ const validTargets = new Set(["production", "preview", "development"]);
248
+ for (const t of target) {
249
+ if (!validTargets.has(t)) {
250
+ return { error: `Invalid target "${t}". Must be production, preview, or development.` };
251
+ }
252
+ }
253
+ const type = String(args.type ?? "plain");
254
+ if (!["plain", "encrypted", "sensitive", "secret", "system"].includes(type)) {
255
+ return { error: `Invalid type "${type}".` };
256
+ }
257
+ const body = { key, value, type, target };
258
+ if (args.comment)
259
+ body.comment = String(args.comment);
260
+ if (args.git_branch)
261
+ body.gitBranch = String(args.git_branch);
262
+ const params = {};
263
+ if (args.team_id)
264
+ params.teamId = String(args.team_id);
265
+ // upsert=true lets us overwrite an existing value for the same key/target
266
+ // combination instead of 409-ing — matches the "just make it so" mental
267
+ // model most agent flows want.
268
+ if (args.upsert !== false)
269
+ params.upsert = "true";
270
+ const data = await vercelRequest(token, "POST", `/v10/projects/${projectId}/env`, {
271
+ params,
272
+ body,
273
+ });
274
+ // Response shape varies: single item under data.created OR an array.
275
+ const created = data.created ??
276
+ data;
277
+ return { ok: true, created };
278
+ }
279
+ catch (err) {
280
+ return { error: err instanceof Error ? err.message : String(err) };
281
+ }
282
+ }
283
+ // delete_vercel_env
284
+ // Removes an environment variable by its env id.
285
+ // DELETE /v9/projects/{projectId}/env/{envId}
286
+ export async function deleteVercelEnv(args) {
287
+ try {
288
+ const token = getApiKey(args);
289
+ const projectId = String(args.project_id ?? "").trim();
290
+ const envId = String(args.env_id ?? "").trim();
291
+ if (!projectId)
292
+ return { error: "project_id is required." };
293
+ if (!envId)
294
+ return { error: "env_id is required (get it from vercel_get_env)." };
295
+ const params = {};
296
+ if (args.team_id)
297
+ params.teamId = String(args.team_id);
298
+ await vercelRequest(token, "DELETE", `/v9/projects/${projectId}/env/${envId}`, { params });
299
+ return { ok: true, deleted: envId };
300
+ }
301
+ catch (err) {
302
+ return { error: err instanceof Error ? err.message : String(err) };
303
+ }
304
+ }
305
+ // create_vercel_deployment
306
+ // Creates a new deployment, typically to redeploy the latest commit on a
307
+ // project — with optional build-cache skipping (the common "cache-off
308
+ // redeploy" use case when new serverless functions or env vars need to
309
+ // take effect).
310
+ // POST /v13/deployments
311
+ // Two modes:
312
+ // 1. Redeploy an existing deployment: pass { deployment_id }
313
+ // Resolves that deployment, grabs its gitSource, and submits a fresh
314
+ // deploy from the same commit.
315
+ // 2. Fresh deploy from git: pass { project_id, git_ref } (branch name or
316
+ // SHA). Uses projects API to discover the repo's gitRepository.
317
+ // Pass force_new: true to disable build cache.
318
+ export async function createVercelDeployment(args) {
319
+ try {
320
+ const token = getApiKey(args);
321
+ const teamParam = {};
322
+ if (args.team_id)
323
+ teamParam.teamId = String(args.team_id);
324
+ const forceNew = args.force_new === true || args.force_new === "true";
325
+ const target = args.target === undefined ? "production" : String(args.target);
326
+ let name = args.name ? String(args.name) : "";
327
+ let gitSource;
328
+ let meta;
329
+ if (args.deployment_id) {
330
+ // Mode 1: redeploy existing
331
+ const depId = String(args.deployment_id).trim();
332
+ const dep = await vercelRequest(token, "GET", `/v13/deployments/${depId}`, {
333
+ params: teamParam,
334
+ });
335
+ name = name || String(dep.name ?? "");
336
+ gitSource = dep.gitSource;
337
+ meta = dep.meta;
338
+ if (!gitSource) {
339
+ return {
340
+ error: "Source deployment has no gitSource; can't redeploy. Try fresh deploy mode instead.",
341
+ };
342
+ }
343
+ }
344
+ else if (args.project_id) {
345
+ // Mode 2: fresh deploy from git
346
+ const projectId = String(args.project_id).trim();
347
+ const proj = await vercelRequest(token, "GET", `/v9/projects/${projectId}`, {
348
+ params: teamParam,
349
+ });
350
+ name = name || String(proj.name ?? "");
351
+ const link = proj.link;
352
+ if (!link) {
353
+ return { error: "Project is not linked to a git repo; can't deploy from git." };
354
+ }
355
+ const ref = args.git_ref ? String(args.git_ref) : "main";
356
+ gitSource = {
357
+ type: link.type ?? "github",
358
+ repoId: link.repoId,
359
+ ref,
360
+ };
361
+ }
362
+ else {
363
+ return { error: "Provide either deployment_id (redeploy) or project_id (fresh deploy)." };
364
+ }
365
+ if (!name)
366
+ return { error: "Could not determine project name." };
367
+ const body = {
368
+ name,
369
+ target,
370
+ gitSource,
371
+ };
372
+ if (meta)
373
+ body.meta = meta;
374
+ // forceNew=1 tells Vercel to skip the build cache for this deployment.
375
+ const params = { ...teamParam };
376
+ if (forceNew)
377
+ params.forceNew = "1";
378
+ const data = await vercelRequest(token, "POST", "/v13/deployments", { params, body });
379
+ return {
380
+ ok: true,
381
+ uid: data.uid ?? data.id,
382
+ url: data.url,
383
+ state: data.readyState ?? data.status,
384
+ target: data.target,
385
+ inspector_url: data.inspectorUrl,
386
+ force_new: forceNew,
387
+ };
388
+ }
389
+ catch (err) {
390
+ return { error: err instanceof Error ? err.message : String(err) };
391
+ }
392
+ }
202
393
  //# sourceMappingURL=vercel-tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vercel-tool.js","sourceRoot":"","sources":["../src/vercel-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vercel-tool.js","sourceRoot":"","sources":["../src/vercel-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Built-in web tools for UnClick MCP: web_search, web_scrape, search_docs.
3
+ *
4
+ * These back up UnClick's "you can remove Exa/Tavily/Firecrawl/context7" nudge
5
+ * by giving it real first-party implementations. All three proxy to third-party
6
+ * APIs configured via Vercel env vars:
7
+ *
8
+ * - TAVILY_API_KEY (preferred for search + extract)
9
+ * - EXA_API_KEY (fallback for search)
10
+ * - BRAVE_SEARCH_API_KEY (fallback for search)
11
+ * - FIRECRAWL_API_KEY (preferred for scrape; Tavily extract is fallback)
12
+ *
13
+ * When none are configured, the tools return a friendly message pointing users
14
+ * at settings. context7 (search_docs) is free and needs no key.
15
+ */
16
+ export interface WebSearchResult {
17
+ title: string;
18
+ url: string;
19
+ snippet: string;
20
+ score?: number;
21
+ }
22
+ export interface WebSearchResponse {
23
+ query: string;
24
+ results: WebSearchResult[];
25
+ provider: string;
26
+ remembered?: string;
27
+ }
28
+ export declare function webSearch(args: {
29
+ query?: string;
30
+ limit?: number;
31
+ topic?: string;
32
+ }): Promise<WebSearchResponse | {
33
+ error: string;
34
+ }>;
35
+ export interface WebScrapeResponse {
36
+ url: string;
37
+ format: "text" | "markdown" | "html";
38
+ content: string;
39
+ title?: string;
40
+ provider: string;
41
+ }
42
+ export declare function webScrape(args: {
43
+ url?: string;
44
+ format?: string;
45
+ }): Promise<WebScrapeResponse | {
46
+ error: string;
47
+ }>;
48
+ export interface SearchDocsResponse {
49
+ library: string;
50
+ library_id?: string;
51
+ topic?: string;
52
+ content: string;
53
+ provider: "context7";
54
+ }
55
+ export declare function searchDocs(args: {
56
+ library?: string;
57
+ topic?: string;
58
+ max_tokens?: number;
59
+ }): Promise<SearchDocsResponse | {
60
+ error: string;
61
+ }>;
62
+ //# sourceMappingURL=web-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-tools.d.ts","sourceRoot":"","sources":["../src/web-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA2BH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAmFD,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,iBAAiB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA4CjD;AAID,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAkDD,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,iBAAiB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA0CjD;AAID,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,CAAC;CACtB;AAwBD,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,kBAAkB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAoClD"}