@yugabytedb/meko-mcp 1.0.6 → 1.1.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 (38) hide show
  1. package/README.md +189 -36
  2. package/assets/hooks-handlers/lib/capture.js +177 -78
  3. package/assets/hooks-handlers/lib/package.json +1 -0
  4. package/assets/hooks-handlers/test_single_conversation.sh +1 -1
  5. package/assets/skills/meko-mcp-tools/SKILL.md +167 -53
  6. package/assets/skills/meko-mcp-tools/references/_sections.md +1 -1
  7. package/assets/skills/meko-mcp-tools/references/tools-agent-id-conventions.md +84 -22
  8. package/assets/skills/meko-mcp-tools/references/tools-cookbook.md +89 -56
  9. package/assets/skills/meko-mcp-tools/references/tools-datapack-workflow.md +15 -7
  10. package/assets/skills/meko-mcp-tools/references/tools-known-limitations.md +17 -9
  11. package/assets/skills/meko-mcp-tools/references/tools-memory-vs-conversation.md +94 -5
  12. package/assets/skills/meko-mcp-tools/references/tools-overview.md +52 -37
  13. package/assets/skills/meko-mcp-tools/references/tools-rag-workflow.md +108 -37
  14. package/assets/skills/meko-mcp-tools/references/tools-scope-permissions.md +6 -10
  15. package/assets/skills/meko-mcp-tools/references/tools-troubleshooting.md +30 -18
  16. package/assets/skills/meko-mcp-tools/references/tools-user-id-conventions.md +55 -69
  17. package/bin/create-meko-setup.mjs +152 -26
  18. package/lib/clients/aliases.mjs +30 -0
  19. package/lib/clients/claude-code.mjs +384 -69
  20. package/lib/clients/claude-desktop.mjs +43 -8
  21. package/lib/clients/codex.mjs +977 -0
  22. package/lib/clients/common.mjs +142 -1
  23. package/lib/clients/cursor.mjs +73 -5
  24. package/lib/clients/index.mjs +2 -0
  25. package/lib/config.mjs +30 -0
  26. package/lib/detect.mjs +52 -44
  27. package/lib/installer.mjs +9 -2
  28. package/lib/mcp-transport.mjs +63 -4
  29. package/lib/migrate/adapters/memory-md.mjs +13 -6
  30. package/lib/migrate/datapack.mjs +167 -0
  31. package/lib/migrate/id.mjs +127 -9
  32. package/lib/migrate/mcp-client.mjs +1 -1
  33. package/lib/migrate/orchestrator.mjs +68 -10
  34. package/lib/migrate.mjs +346 -3
  35. package/lib/prompt.mjs +50 -76
  36. package/lib/validate.mjs +314 -10
  37. package/lib/version-check.mjs +178 -0
  38. package/package.json +2 -1
@@ -8,7 +8,14 @@ import {
8
8
  readJsonFile,
9
9
  removeKeys,
10
10
  } from "../config.mjs";
11
- import { getRepoRoot, run } from "./common.mjs";
11
+ import {
12
+ getInstallerVersion,
13
+ getRepoRoot,
14
+ markerIsStale,
15
+ readInstallerMarker,
16
+ run,
17
+ writeInstallerMarker,
18
+ } from "./common.mjs";
12
19
 
13
20
  /**
14
21
  * Claude Desktop adapter.
@@ -24,13 +31,13 @@ import { getRepoRoot, run } from "./common.mjs";
24
31
  * "meko": {
25
32
  * "command": "npx",
26
33
  * "args": ["-y", "mcp-remote", "<url>", "--transport", "http-only",
27
- * "--header", "API_KEY:${MEKO_API_KEY}"],
34
+ * "--header", "Authorization:Bearer ${MEKO_API_KEY}"],
28
35
  * "env": { "MEKO_API_KEY": "<key>" }
29
36
  * }
30
37
  *
31
38
  * The header uses the `${ENV_VAR}` interpolation form (documented by
32
- * mcp-remote) with no space around the colon — some clients mis-parse
33
- * space-containing `--header` args.
39
+ * mcp-remote) with no space around the colon after the header name —
40
+ * some clients mis-parse space-containing `--header` args.
34
41
  *
35
42
  * installSkills() runs skills/scripts/package-desktop-skill.sh to build the
36
43
  * .skill bundle and prints import instructions. Desktop has no programmatic
@@ -122,10 +129,17 @@ export function createClaudeDesktopAdapter(options = {}) {
122
129
  const repoRoot = repoRootResolver();
123
130
  const script = join(repoRoot, "skills", "scripts", "package-desktop-skill.sh");
124
131
  const output = join(repoRoot, "skills", "meko-mcp-tools-desktop.skill");
132
+ // The .skill output is a ZIP file, so we can't drop a marker inside it.
133
+ // Stamp the marker in the parent dir instead — it signals which
134
+ // installer version produced the bundle sitting alongside it, so a
135
+ // re-run can tell whether the existing .skill is stale.
136
+ const markerDir = dirname(output);
137
+ const currentVersion = getInstallerVersion();
125
138
 
126
139
  if (dryRun) {
127
140
  log.dim(` Would run: bash ${script}`);
128
141
  log.dim(` Would produce: ${output}`);
142
+ log.dim(` Would write .meko-installer marker (version=${currentVersion}) in ${markerDir}`);
129
143
  return { marketplace: "skipped", skills: "dry-run", output };
130
144
  }
131
145
 
@@ -137,6 +151,17 @@ export function createClaudeDesktopAdapter(options = {}) {
137
151
  return { marketplace: "skipped", skills: "script-missing" };
138
152
  }
139
153
 
154
+ // If a previous build's marker is stale, warn visibly — the user has to
155
+ // re-drag the .skill into Claude Desktop's Extensions panel; we can't do
156
+ // that step for them. Keep rebuilding either way.
157
+ const existingMarker = readInstallerMarker(markerDir);
158
+ if (existsSync(output) && existingMarker && markerIsStale(markerDir, currentVersion)) {
159
+ log.warn(
160
+ `Claude Desktop .skill bundle was produced by installer ${existingMarker.version}. ` +
161
+ `Rebuilding — you will need to re-drag it into Claude Desktop > Settings > Extensions.`,
162
+ );
163
+ }
164
+
140
165
  try {
141
166
  packageRunner(script);
142
167
  } catch (err) {
@@ -149,6 +174,15 @@ export function createClaudeDesktopAdapter(options = {}) {
149
174
  return { marketplace: "skipped", skills: "error" };
150
175
  }
151
176
 
177
+ // Stamp the marker after a successful build so the next run knows what
178
+ // version the sibling .skill was produced by.
179
+ try {
180
+ writeInstallerMarker(markerDir);
181
+ } catch (err) {
182
+ // Marker is best-effort — a failure here doesn't invalidate the build.
183
+ log.warn(`Could not write .skill installer marker: ${err.message}`);
184
+ }
185
+
152
186
  log.info(`Built Meko skill bundle: ${output}`);
153
187
  log.info(
154
188
  "Install it in Claude Desktop: Settings > Extensions > Import skill, " +
@@ -228,10 +262,11 @@ export function buildMcpRemoteEntry({ url, apiKey }) {
228
262
  const args = ["-y", "mcp-remote", url, "--transport", "http-only"];
229
263
  const entry = { command: "npx", args };
230
264
  if (apiKey) {
231
- // `API_KEY:${MEKO_API_KEY}` with no space around the colon — mcp-remote
232
- // docs call out a spacing bug in some clients' arg parsing. The header
233
- // name matches what the Meko server expects (see capture.js mcpPost).
234
- args.push("--header", "API_KEY:${MEKO_API_KEY}");
265
+ // `Authorization:Bearer ${MEKO_API_KEY}` with no space around the colon
266
+ // after the header name — mcp-remote docs call out a spacing bug in some
267
+ // clients' arg parsing. The space between `Bearer` and the token value
268
+ // is part of the header value and is required by RFC 6750.
269
+ args.push("--header", "Authorization:Bearer ${MEKO_API_KEY}");
235
270
  entry.env = { MEKO_API_KEY: apiKey };
236
271
  }
237
272
  return entry;