@yugabytedb/meko-mcp 2.3.0 → 2.5.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.
- package/README.md +72 -33
- package/assets/hooks-handlers/lib/capture-cleanup-cli.js +735 -74
- package/assets/hooks-handlers/lib/capture-notices.js +94 -1
- package/assets/hooks-handlers/lib/capture-state.js +111 -0
- package/assets/hooks-handlers/lib/capture.js +129 -4
- package/assets/hooks-handlers/lib/checkpoint-timer.js +394 -8
- package/assets/hooks-handlers/lib/opencode-handler.js +29 -6
- package/assets/scripts/meko-statusline.sh +17 -1
- package/assets/skills/meko-mcp-tools/SKILL.md +5 -5
- package/assets/skills/meko-mcp-tools/references/_sections.md +1 -1
- package/assets/skills/meko-mcp-tools/references/tools-cookbook.md +193 -9
- package/assets/skills/meko-mcp-tools/references/tools-datapack-workflow.md +6 -3
- package/assets/skills/meko-mcp-tools/references/tools-known-limitations.md +11 -6
- package/assets/skills/meko-mcp-tools/references/tools-memory-vs-conversation.md +4 -4
- package/assets/skills/meko-mcp-tools/references/tools-overview.md +16 -11
- package/assets/skills/meko-mcp-tools/references/tools-rag-workflow.md +67 -8
- package/assets/skills/meko-mcp-tools/references/tools-troubleshooting.md +3 -1
- package/assets/skills/meko-mcp-tools-desktop/SKILL.md +7 -7
- package/assets/skills/meko-mcp-tools-desktop/desktop/README.md +4 -4
- package/assets/skills/meko-mcp-tools-desktop/references/_sections.md +1 -1
- package/assets/skills/meko-mcp-tools-desktop/references/tools-cookbook.md +193 -9
- package/assets/skills/meko-mcp-tools-desktop/references/tools-known-limitations.md +10 -5
- package/assets/skills/meko-mcp-tools-desktop/references/tools-memory-vs-conversation.md +4 -4
- package/assets/skills/meko-mcp-tools-desktop/references/tools-overview.md +16 -11
- package/assets/skills/meko-mcp-tools-desktop/references/tools-rag-workflow.md +67 -8
- package/assets/skills/meko-mcp-tools-desktop/references/tools-troubleshooting.md +3 -1
- package/assets/skills/meko-select-datapack-desktop/SKILL.md +91 -12
- package/assets/skills/meko-select-datapack-desktop/references/cookbook.md +39 -7
- package/assets/skills/meko-select-datapack-desktop/references/role-display-future.md +8 -6
- package/assets/skills/meko-select-datapack-desktop/references/troubleshooting.md +13 -1
- package/bin/create-meko-setup.mjs +117 -24
- package/lib/autofix.mjs +100 -0
- package/lib/browser-login.mjs +495 -0
- package/lib/clients/opencode.mjs +6 -1
- package/lib/migrate/datapack.mjs +254 -16
- package/lib/migrate/mcp-client.mjs +34 -0
- package/lib/migrate/orchestrator.mjs +1 -1
- package/lib/migrate.mjs +1 -1
- package/lib/validate.mjs +111 -22
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -6,19 +6,38 @@ Reduces manual setup to a single command.
|
|
|
6
6
|
|
|
7
7
|
## What this installer authenticates with
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
Every client the installer configures authenticates with a Meko API key. Each
|
|
10
|
+
one sends `Authorization: Bearer <your-api-key>` on the wire, plus the
|
|
11
11
|
`User-Agent` the Cloud WAF requires. Most adapters store the header value in
|
|
12
12
|
client config. Codex stores `bearer_token_env_var = "MEKO_API_KEY"` and resolves
|
|
13
13
|
the key from its runtime environment; Claude Desktop passes the same variable
|
|
14
|
-
through `mcp-remote` header interpolation.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
through `mcp-remote` header interpolation. Capture hooks use the same key.
|
|
15
|
+
|
|
16
|
+
You don't need to have a key already. The installer gets one in this order:
|
|
17
|
+
|
|
18
|
+
1. `--api-key <key>`.
|
|
19
|
+
2. The `MEKO_API_KEY` environment variable.
|
|
20
|
+
3. **Browser sign-in (the default).** The installer opens the Meko sign-in page,
|
|
21
|
+
and after you sign in it creates a key named `Meko installer (<host>)
|
|
22
|
+
<timestamp>`. It uses the MCP server's OAuth flow with a `localhost`
|
|
23
|
+
callback, then calls the server's `POST /api-keys`. The OAuth session is
|
|
24
|
+
discarded; only the key is kept.
|
|
25
|
+
|
|
26
|
+
Sign in with the same method you use for the Meko console. If the browser
|
|
27
|
+
signs in as a user with no Meko account (for example Google here, email and
|
|
28
|
+
password in the console), the server refuses to create a key, and the
|
|
29
|
+
installer tells you how to retry or fall back to `--api-key`.
|
|
30
|
+
|
|
31
|
+
The new key counts toward your 10 active keys and expires after 365 days. You
|
|
32
|
+
can revoke it at cloud.mekodata.ai > **Settings > API Keys**. Use `--no-browser`
|
|
33
|
+
to print the sign-in URL instead of opening a browser, for example over SSH.
|
|
34
|
+
Runs with no terminal attached (CI, scripts, redirected stdin) skip sign-in and
|
|
35
|
+
require a key, with or without `--yes`.
|
|
36
|
+
|
|
37
|
+
Separately, some clients can run their own browser **OAuth** flow against Cloud
|
|
38
|
+
Meko, configured in the client's own UI with no API key. The installer doesn't
|
|
39
|
+
set that up. Don't configure both against the same client; see [Two
|
|
40
|
+
authentication modes](../README.md#two-authentication-modes--pick-one-dont-mix-them).
|
|
22
41
|
|
|
23
42
|
**Note:** The server accepts the key only as `Authorization: Bearer …` on the
|
|
24
43
|
wire. An `API_KEY` or `MEKO_API_KEY` environment variable does nothing unless
|
|
@@ -48,7 +67,7 @@ Claude Desktop has two install paths: a one-click `.mcpb` Desktop Extension down
|
|
|
48
67
|
npx @yugabytedb/meko-mcp
|
|
49
68
|
```
|
|
50
69
|
|
|
51
|
-
The installer walks you through connection type
|
|
70
|
+
The installer walks you through connection type and URL, signs you in through your browser to create an API key (unless you pass `--api-key` or set `$MEKO_API_KEY`), then asks about skills.
|
|
52
71
|
|
|
53
72
|
**Local one-liner (docker-compose stack already running):**
|
|
54
73
|
|
|
@@ -88,7 +107,7 @@ You can also combine both: install via `.mcpb` for the MCP wiring, then run Opti
|
|
|
88
107
|
|
|
89
108
|
**Option A — Desktop Extension (`.mcpb`), one-click:**
|
|
90
109
|
|
|
91
|
-
1. Download `meko-<version>.mcpb` from the [GitHub Releases page](https://github.com/yugabyte/meko-mcp-server/releases) (e.g. `meko-
|
|
110
|
+
1. Download `meko-<version>.mcpb` from the [GitHub Releases page](https://github.com/yugabyte/meko-mcp-server/releases) (e.g. `meko-2.5.0.mcpb`). From 2.5.0, the `.mcpb`, the npm installer, and the public plugin share one version number.
|
|
92
111
|
2. Open **Claude Desktop > Settings > Extensions > Install from file** and select the file (or drag the file onto that pane).
|
|
93
112
|
3. When prompted, paste your Meko MCP URL and API key.
|
|
94
113
|
4. Quit and relaunch Claude Desktop.
|
|
@@ -136,7 +155,13 @@ npx @yugabytedb/meko-mcp --client all --local --yes
|
|
|
136
155
|
|
|
137
156
|
Each client is installed sequentially. A failure on one does not abort the others — the command exits with status 2 on partial success, 1 on total failure.
|
|
138
157
|
|
|
139
|
-
**
|
|
158
|
+
**Cloud Meko (signs in through your browser):**
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
npx @yugabytedb/meko-mcp --url https://mcp.mekodata.ai/mcp --client claude-code
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**CI / non-interactive (Cloud Meko, existing API key):**
|
|
140
165
|
|
|
141
166
|
```bash
|
|
142
167
|
npx @yugabytedb/meko-mcp \
|
|
@@ -155,13 +180,13 @@ The installer performs up to 5 steps (some are skippable via flags):
|
|
|
155
180
|
| 2 | Set hook environment vars | Writes `MEKO_MCP_URL` and `MEKO_API_KEY` into `~/.claude/settings.json` under the `env` key. Also prunes any stale Meko hook entries in `settings.json.hooks` that point at a prior install path (e.g. a previous `npx` cache or homebrew-global copy) so only the current install's hooks fire. |
|
|
156
181
|
| 3 | Register public plugin marketplace | `claude plugin marketplace add https://github.com/yugabyte/meko-skills.git --scope user` |
|
|
157
182
|
| 4 | Install skills plugin | `claude plugin install meko-agent-skills --scope user` |
|
|
158
|
-
| 5 | Validate setup | Config check via `claude mcp list`, MCP `initialize` handshake, `tools/list` verification, and a canary `
|
|
183
|
+
| 5 | Validate setup | Config check via `claude mcp list`, MCP `initialize` handshake, `tools/list` verification, and a canary `datapack_search` call (`datapack_list` on older servers) |
|
|
159
184
|
|
|
160
185
|
### Post-install validation (canary)
|
|
161
186
|
|
|
162
|
-
Step 5 includes a **canary call** that invokes the read-only `
|
|
187
|
+
Step 5 includes a **canary call** that invokes the read-only `datapack_search(limit=1)` tool and asserts it returns at least one datapack. On a server whose `tools/list` has no `datapack_search`, it calls `datapack_list` instead and asserts a non-empty JSON array; `datapack_search` reads one page whatever the account size, where `datapack_list` reads the whole account. This proves the part of the stack that connectivity + `tools/list` don't cover: the API token authenticated as a real Meko identity, the tenant resolver found an account for it, and datapack routing wired up the user's actual workspace. A successful `tools/list` only proves the server speaks MCP — it says nothing about whether a Meko tool call would actually find the user's data.
|
|
163
188
|
|
|
164
|
-
The canary used to do a `memory_add` → `memory_get_by_id` → `memory_delete_by_id` round-trip, but mem0's LLM fact-extractor is non-deterministic for synthetic test text — for the same input it sometimes returned `results: []` (no facts extracted) while still adding graph relations, which the installer reported as "no memory id" and surfaced as a validation failure even when the server was healthy.
|
|
189
|
+
The canary used to do a `memory_add` → `memory_get_by_id` → `memory_delete_by_id` round-trip, but mem0's LLM fact-extractor is non-deterministic for synthetic test text — for the same input it sometimes returned `results: []` (no facts extracted) while still adding graph relations, which the installer reported as "no memory id" and surfaced as a validation failure even when the server was healthy. Both datapack tools are a single SQL read with no LLM in the path and return deterministically.
|
|
165
190
|
|
|
166
191
|
`--no-canary` skips the canary entirely. The `initialize` and `tools/list` checks still run. Use this when you've already proved the round-trip in a prior step (CI, pre-flight smoke).
|
|
167
192
|
|
|
@@ -203,7 +228,7 @@ The canary used to do a `memory_add` → `memory_get_by_id` → `memory_delete_b
|
|
|
203
228
|
- Steering file: `~/.kiro/steering/meko.md` or `.kiro/steering/meko.md`. It follows hook capture when the session-start marker is present and falls back to agent-driven persistence only when hooks are disabled, untrusted, or a different CLI 2.x agent is selected. See [Kiro notes](#kiro-notes).
|
|
204
229
|
- **OpenCode CLI/TUI 1.18.x**
|
|
205
230
|
- User plugin: `$OPENCODE_CONFIG_DIR/plugins/meko.js` when set, otherwise `~/.config/opencode/plugins/meko.js`; project plugin: `<project>/.opencode/plugins/meko.js`.
|
|
206
|
-
- Stable runtime and private environment: `$OPENCODE_CONFIG_DIR/meko/` when set, otherwise `~/.config/opencode/meko/`, or `<project>/.opencode/meko/`. `opencode-hook-env.json` is mode 0600 and contains the MCP URL, API key, server name, User-Agent, hook client, stable Node executable, and watermark dir. Automatic capture uses the server-default datapack in this release. `--datapack` applies only to `--migrate`. OpenCode does not read `pin-<slug>.json` (no SessionStart, and `meko-select-datapack` is not installed).
|
|
231
|
+
- Stable runtime and private environment: `$OPENCODE_CONFIG_DIR/meko/` when set, otherwise `~/.config/opencode/meko/`, or `<project>/.opencode/meko/`. `opencode-hook-env.json` is mode 0600 and contains the MCP URL, API key, server name, User-Agent, hook client, stable Node executable, and watermark dir. Edits to this file reach the next capture attempt, including the retries of a running capture timer. Removing `MEKO_MCP_URL` or `MEKO_API_KEY` from the file, as `--uninstall` does, also removes it from a running timer's next attempt. Automatic capture uses the server-default datapack in this release. `--datapack` applies only to `--migrate`. OpenCode does not read `pin-<slug>.json` (no SessionStart, and `meko-select-datapack` is not installed).
|
|
207
232
|
- Skill: `$OPENCODE_CONFIG_DIR/skills/meko-mcp-tools/` when set, otherwise `~/.config/opencode/skills/meko-mcp-tools/`, or `<project>/.opencode/skills/meko-mcp-tools/`.
|
|
208
233
|
- The plugin mutates OpenCode's resolved configuration at runtime with a native remote MCP entry (`type: remote`, `enabled: true`, `oauth: false`). It does **not** edit `opencode.json` or `opencode.jsonc`; validation runs `opencode debug config` and verifies the resolved entry.
|
|
209
234
|
- Restart OpenCode after install. Reinstall upgrades installer-owned assets while preserving durable capture state and user-owned collisions.
|
|
@@ -231,14 +256,15 @@ Usage:
|
|
|
231
256
|
|------|-------------|---------|
|
|
232
257
|
| `--client <list>` | Target client(s): one or more of `claude-code`, `claude-desktop`, `cursor`, `codex`, `kiro`, `opencode`. Comma-separated, or `all`. `codex` covers both the OpenAI Codex CLI and the Codex Desktop App (they share `~/.codex/config.toml`); `kiro` covers both the Kiro IDE and `kiro-cli` (they share `~/.kiro/settings/mcp.json`). OpenCode is version-gated to CLI/TUI 1.18.x. Aliases: `claude` → `claude-code`, `kiro-cli` / `kiro-ide` → `kiro`. | `claude-code` |
|
|
233
258
|
| `--url <url>` | MCP server URL (from cloud.mekodata.ai > Datapacks > Connect) | Shared existing endpoint, otherwise production; conflicts prompt or require `--url` under `--yes` |
|
|
234
|
-
| `--api-key <key>` |
|
|
259
|
+
| `--api-key <key>` | Use an existing Cloud Meko API key instead of signing in. Without this flag, the installer falls back to `$MEKO_API_KEY`, then to browser sign-in, which creates a key. Fails hard when no TTY is attached, with or without `--yes`. | _(`$MEKO_API_KEY`, else browser sign-in)_ |
|
|
260
|
+
| `--no-browser` | Print the sign-in URL instead of opening a browser. | `false` |
|
|
235
261
|
| `--local` | Use local Meko at `http://localhost:8000/mcp` (no API key needed) | `false` |
|
|
236
262
|
| `--scope <scope>` | Config scope: `user` or `project` (`claude-desktop` uses user scope config) | `user` |
|
|
237
263
|
| `--name <name>` | MCP server name in config | `meko` |
|
|
238
264
|
| `--cursor-hook-mode <mode>` | Cursor hook strategy: `native` or `claude-compat` | `native` |
|
|
239
265
|
| `--skip-skills` | Skip plugin marketplace and skills installation (steps 3-4) | `false` |
|
|
240
266
|
| `--skip-validation` | Skip post-install validation (step 5) | `false` |
|
|
241
|
-
| `--no-canary` | Skip the canary `datapack_list` call. Basic connectivity + tools/list still run. | `false` |
|
|
267
|
+
| `--no-canary` | Skip the canary `datapack_search` / `datapack_list` call. Basic connectivity + tools/list still run. | `false` |
|
|
242
268
|
| `--dry-run` | Show what would be done without making changes | `false` |
|
|
243
269
|
| `--uninstall` | Remove Meko MCP server, skills, env vars, and marketplace entry | `false` |
|
|
244
270
|
| `--verbose` | Show detailed output (API keys are always redacted) | `false` |
|
|
@@ -252,7 +278,9 @@ Capture health flags (durable outbox / recovery — Capture V2):
|
|
|
252
278
|
|------|-------------|---------|
|
|
253
279
|
| `--capture-status` | Report aggregate conversation-capture health from `~/.claude/meko-capture` (or `MEKO_WATERMARK_DIR`). Exit `0` = healthy\|catching_up, `2` = degraded_retrying, `3` = blocked_action_required. | `false` |
|
|
254
280
|
| `--json` | With `--capture-status`, print machine-readable JSON matching the capture-health cache shape. Also accepted by `--capture-cleanup`. | `false` |
|
|
255
|
-
| `--
|
|
281
|
+
| `--no-autofix` | Turn off automatic capture repair. The capture timer otherwise runs `--capture-cleanup fix` every 30 minutes (`MEKO_AUTOFIX_INTERVAL`) when a session is stuck. Saved for every client; a reinstall keeps it. | `false` |
|
|
282
|
+
| `--autofix` | Turn automatic capture repair back on. | `false` |
|
|
283
|
+
| `--capture-cleanup <action>` | Inspect and clean up stuck capture on this machine. Actions: `status`, `fix`, `stop`, `resume`, `drain`, `discard`, `repair`. Start with `fix`. See [Clean up stuck capture](../OPERATIONS.md#clean-up-stuck-capture). Exit `0` = done, `1` = error, `2` = partly done. | |
|
|
256
284
|
| `--session <id>` | With `--capture-cleanup`, act on one session. Repeatable; a unique prefix of the ID is enough. A bare ID after the action works too: `--capture-cleanup drain c0acdeb2`. | |
|
|
257
285
|
| `--all` | With `--capture-cleanup`, act on every session. `drain` and `discard` need `--session` or `--all`. | `false` |
|
|
258
286
|
| `--max-exchanges <n>` | With `--capture-cleanup drain`, stop after sending this many exchanges in total. | `200` |
|
|
@@ -397,6 +425,14 @@ auth skipped: 0 (calls dropped on a mid-run 401/403; re-run to re
|
|
|
397
425
|
- **`--yes` without `--with-migrate`**: install succeeds silently and prints a one-line tip pointing at `create-meko-setup --migrate`. No migration is started.
|
|
398
426
|
- **`--yes --with-migrate`**: install succeeds, then the detached migration is started automatically. Progress via `--migrate-status`.
|
|
399
427
|
|
|
428
|
+
### Destination datapack
|
|
429
|
+
|
|
430
|
+
`--datapack <name|id>` picks the datapack the migration writes to; without it the migration uses `meko_default_datapack`, or the server's own default when that row isn't visible. The resolved destination is printed before the run starts.
|
|
431
|
+
|
|
432
|
+
- A name is looked up with `datapack_search(name=...)`, preferring a datapack you own over a shared one with the same name. A miss lists similar names.
|
|
433
|
+
- A UUID is looked up with `datapack_describe`, so any datapack the API key can open resolves, however many the account has.
|
|
434
|
+
- On a server whose `tools/list` has no `datapack_search`, both are matched against the `datapack_list` response instead.
|
|
435
|
+
|
|
400
436
|
### Idempotency, resume, and state
|
|
401
437
|
|
|
402
438
|
- Per-run logs: `~/.meko/migrate/<run-id>/log.ndjson` (one JSON object per line). `tail -f | jq .` is a reasonable debug loop. This is the file the start banner points at, and the only one with run diagnostics in it.
|
|
@@ -412,7 +448,7 @@ auth skipped: 0 (calls dropped on a mid-run 401/403; re-run to re
|
|
|
412
448
|
### What does NOT get migrated (v1)
|
|
413
449
|
|
|
414
450
|
- Slash-command skills, hooks, and `.claude/settings.json` — those remain in Claude Code's own config; Meko has no equivalent tool.
|
|
415
|
-
- Knowledge-base documents — KB
|
|
451
|
+
- Knowledge-base documents — this migration doesn't re-upload old KB files; add them via `knowledgebase_upload_document` or the UI (Datapack → Actions → Add Knowledge) after migrating.
|
|
416
452
|
- Transcripts from unregistered coding agents (for example Aider, Continue.dev, or Windsurf).
|
|
417
453
|
- `user_id` is left null on every call (the server fills it from the API key). Multi-user routing is a follow-up.
|
|
418
454
|
|
|
@@ -442,8 +478,8 @@ Cursor previously had a hybrid hook mode that also wrote Claude-compatible hooks
|
|
|
442
478
|
**Never use the `mcp-remote` bridge with Kiro.** Kiro speaks remote MCP natively, so the installer registers `{ url, headers }` directly.
|
|
443
479
|
|
|
444
480
|
What was measured against `https://mcp.mekodata.ai` before 2026-09-24. Production
|
|
445
|
-
now accepts loopback redirects on `/register`, `/authorize`, and `/token
|
|
446
|
-
(`mcp.mekodev.com`)
|
|
481
|
+
now accepts loopback redirects on `/register`, `/authorize`, and `/token`, and a
|
|
482
|
+
2026-10-07 re-measure found DEV (`mcp.mekodev.com`) accepts them too ([#277](https://github.com/yugabyte/meko-mcp-server/issues/277)). The `mcp-remote` findings below still
|
|
447
483
|
apply, because an API key behind the bridge is never sent.
|
|
448
484
|
|
|
449
485
|
- `mcp-remote@0.1.38` reads no auth env var (its only `process.env` reference is `MCP_REMOTE_CONFIG_DIR`), so `MEKO_API_KEY` is never sent; headers come only from `--header`. It therefore connects unauthenticated and begins OAuth.
|
|
@@ -460,7 +496,7 @@ Confirmed on `kiro-cli` 2.18.1 itself. Its DCR registration is:
|
|
|
460
496
|
|
|
461
497
|
so against Cloud Meko it fails with `Dynamic registration failed: Registration failed: HTTP 403 Forbidden`. Its first `POST /mcp` also goes out with **no `User-Agent`**, which trips a second HTML-403 rule independently. With Mode 1 headers and a valid `mko_tkn_…` key it connects and lists all 23 tools — no OAuth, no 403.
|
|
462
498
|
|
|
463
|
-
Both surfaces are verified against Cloud Meko with a real key. On the **Kiro IDE** (1.0.337), the installer's config produces `[meko] Connected` in its `Kiro - MCP Logs` output. On **`kiro-cli`** (2.18.1) the agent
|
|
499
|
+
Both surfaces are verified against Cloud Meko with a real key. On the **Kiro IDE** (1.0.337), the installer's config produces `[meko] Connected` in its `Kiro - MCP Logs` output. On **`kiro-cli`** (2.18.1) the agent enumerated all 23 tools the server had at the time; production now lists 42, including 14 `amp_*` tools. The steering file is confirmed to reach the model, not just disk: asked with tools disabled what its Meko steering requires, the agent answered that it must call `memory_add` when the user states a durable fact and that this "explicitly overrides the meko-mcp-tools skill", which assumes capture hooks are running.
|
|
464
500
|
|
|
465
501
|
One naming correction worth knowing, since it has caused confusion: **`Q DEV CLI` is not an OAuth client id.** It is the MCP `initialize` handshake's `clientInfo.name` (`"clientInfo":{"name":"Q DEV CLI","version":"1.0.0"}`); the string appears nowhere in the `kiro-cli` binary's OAuth path, and its actual DCR `client_name` is `kiro`. There is nothing named `Q DEV CLI` to allowlist. See [#277](https://github.com/yugabyte/meko-mcp-server/issues/277).
|
|
466
502
|
|
|
@@ -481,12 +517,12 @@ Uninstall removes only files carrying installer ownership markers: the three sta
|
|
|
481
517
|
| | Cloud Meko | Local Meko |
|
|
482
518
|
|---|-----------|-----------|
|
|
483
519
|
| **URL** | `https://mcp.mekodata.ai/mcp` (or the endpoint shown by cloud.mekodata.ai) | `http://localhost:8000/mcp` |
|
|
484
|
-
| **Authentication** |
|
|
520
|
+
| **Authentication** | Browser sign-in creates an API key, or pass `--api-key` / `$MEKO_API_KEY` | None |
|
|
485
521
|
| **MCP registration** | Includes `-H "Authorization: Bearer <key>"` header | No auth header |
|
|
486
522
|
| **Hook env vars** | Both `MEKO_MCP_URL` and `MEKO_API_KEY` written to settings | Only `MEKO_MCP_URL` written |
|
|
487
523
|
| **Infrastructure** | Hosted, no local setup needed | Requires `docker compose up -d` running the Meko stack |
|
|
488
524
|
| **Use case** | Production, team collaboration | Development, testing |
|
|
489
|
-
| **Flag** | `--url <url
|
|
525
|
+
| **Flag** | `--url <url>` (optionally `--api-key <key>`) | `--local` |
|
|
490
526
|
|
|
491
527
|
The installer auto-detects cloud vs local based on the URL: any URL containing `localhost` or `127.0.0.1` is treated as local (no API key required). All other URLs are cloud and require authentication.
|
|
492
528
|
|
|
@@ -558,7 +594,7 @@ Re-running the installer is idempotent but not inert. A re-run:
|
|
|
558
594
|
|
|
559
595
|
### Updating the skills plugin (Claude Code)
|
|
560
596
|
|
|
561
|
-
The `meko-agent-skills` plugin is distributed via the Claude Code plugin marketplace
|
|
597
|
+
The `meko-agent-skills` plugin is distributed via the Claude Code plugin marketplace from yugabyte/meko-skills, not npm. It also carries the Claude Code capture hooks. From 2.5.0, the plugin, the installer, and the `.mcpb` share one version number. Re-running the installer now picks up the latest skill definitions automatically: it probes `claude plugin list` and, when the plugin is already present, calls
|
|
562
598
|
|
|
563
599
|
```bash
|
|
564
600
|
claude plugin update meko-agent-skills@meko-agent-skills --scope <scope>
|
|
@@ -725,10 +761,11 @@ Three known causes:
|
|
|
725
761
|
- **No `User-Agent` header.** The WAF refuses any request without one. Add
|
|
726
762
|
`User-Agent: meko-mcp-installer/1.0`. The installer always does; hand-written
|
|
727
763
|
configs and some native MCP clients don't.
|
|
728
|
-
- **An OAuth callback on a loopback address (DEV
|
|
729
|
-
any `redirect_uri` pointing at an internal host, so dynamic client
|
|
730
|
-
registration
|
|
731
|
-
including IDEs. Production accepts these callbacks as of 2026-09-24
|
|
764
|
+
- **An OAuth callback on a loopback address (DEV, historically).** The DEV WAF
|
|
765
|
+
refused any `redirect_uri` pointing at an internal host, so dynamic client
|
|
766
|
+
registration failed there for any client that registers such a callback,
|
|
767
|
+
including IDEs. Production accepts these callbacks as of 2026-09-24, and a
|
|
768
|
+
2026-10-07 re-measure didn't reproduce the DEV block. Tracked in
|
|
732
769
|
[#277](https://github.com/yugabyte/meko-mcp-server/issues/277).
|
|
733
770
|
- **Message text that looks like a path.** Capture writes containing `../` or
|
|
734
771
|
absolute paths can trip a traversal rule. Tracked in
|
|
@@ -745,7 +782,7 @@ API-key checks:
|
|
|
745
782
|
- If using `$MEKO_API_KEY` env var, ensure it is exported in the current shell.
|
|
746
783
|
- Confirm the key environment matches the URL: PATs minted on `app.mekodev.com` only validate against `mcp.mekodev.com`; PATs minted on `cloud.mekodata.ai` only validate against `mcp.mekodata.ai`.
|
|
747
784
|
- The installer normalizes API keys (trims surrounding whitespace and a single matching pair of quotes) so a paste with a trailing newline or a literal `"…"` from a `.env` file is fine — but your raw shell variable might still be contaminated. Echo it (`echo "[$MEKO_API_KEY]"`) and check the brackets bracket the key tightly with no extra characters.
|
|
748
|
-
- Re-run the installer
|
|
785
|
+
- Re-run the installer in a terminal without `--api-key` and with `$MEKO_API_KEY` unset to sign in through the browser and create a new key, or pass a new key with `--api-key`.
|
|
749
786
|
|
|
750
787
|
### Plugin marketplace already registered
|
|
751
788
|
|
|
@@ -774,7 +811,7 @@ cp ~/.claude/settings.json.bak ~/.claude/settings.json
|
|
|
774
811
|
Missing core tools: memory_search, memory_get_by_id, conversation_create. Found 0 tool(s) total.
|
|
775
812
|
```
|
|
776
813
|
|
|
777
|
-
The MCP server responded but does not expose the expected tools (`memory_search`, `memory_get_by_id`, `conversation_create`, `datapack_list`). This usually means a server version mismatch. Update the MCP server or check which datapack is connected.
|
|
814
|
+
The MCP server responded but does not expose the expected tools (`memory_search`, `memory_get_by_id`, `conversation_create`, `datapack_list`). This usually means a server version mismatch. Update the MCP server or check which datapack is connected. The canary itself calls `datapack_search`, or `datapack_list` on a server without it (see [Post-install validation](#post-install-validation-canary) above).
|
|
778
815
|
|
|
779
816
|
### DNS lookup failed
|
|
780
817
|
|
|
@@ -862,6 +899,8 @@ node installer/bin/create-meko-setup.mjs --uninstall --verbose
|
|
|
862
899
|
|---|----------|-------|-----------------|
|
|
863
900
|
| M1 | Fresh local install | `node installer/bin/create-meko-setup.mjs --local --yes` with docker stack running | All 5 steps pass, validation shows 3 green checks |
|
|
864
901
|
| M2 | Fresh cloud install | Run interactively, provide Cloud Meko URL + API key | MCP registered with `Authorization: Bearer` header, env vars set, validation passes |
|
|
902
|
+
| M2b | Browser sign-in | In a terminal with `$MEKO_API_KEY` unset, run `--url https://mcp.mekodata.ai/mcp` without `--api-key` and sign in | A key is created through `POST /api-keys`; validation passes |
|
|
903
|
+
| M2c | No terminal, no key | Pipe stdin (or run under CI) with no `--api-key` and no `$MEKO_API_KEY` | Exits with "API key is required for Cloud Meko" |
|
|
865
904
|
| M3 | Existing config | Run installer when `meko` MCP is already registered | Prompts to overwrite; answering No keeps existing config |
|
|
866
905
|
| M4 | No claude CLI | Run on a machine without `claude` in PATH | Exits with error message and install link |
|
|
867
906
|
| M5 | Server unreachable | Install with `--skip-validation`, then re-run without it | Install succeeds; validation warns about connectivity |
|