@yugabytedb/meko-mcp 2.1.0 → 2.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.
- package/README.md +152 -27
- package/assets/hooks-handlers/codex-session-end.sh +4 -69
- package/assets/hooks-handlers/cursor-session-start.sh +19 -1
- package/assets/hooks-handlers/lib/capture-notices.js +321 -0
- package/assets/hooks-handlers/lib/capture-state.js +2079 -0
- package/assets/hooks-handlers/lib/capture-status-cli.js +82 -0
- package/assets/hooks-handlers/lib/capture.js +1578 -299
- package/assets/hooks-handlers/lib/checkpoint-timer.js +444 -81
- package/assets/hooks-handlers/lib/kiro-handler.js +738 -0
- package/assets/hooks-handlers/lib/terminal-handoff.js +418 -0
- package/assets/hooks-handlers/session-end.sh +3 -34
- package/assets/scripts/meko-statusline.sh +41 -1
- package/assets/skills/meko-mcp-tools/SKILL.md +72 -125
- package/assets/skills/meko-mcp-tools/references/_sections.md +2 -2
- package/assets/skills/meko-mcp-tools/references/tools-agent-id-conventions.md +12 -13
- package/assets/skills/meko-mcp-tools/references/tools-cookbook.md +15 -12
- package/assets/skills/meko-mcp-tools/references/tools-known-limitations.md +25 -1
- package/assets/skills/meko-mcp-tools/references/tools-memory-vs-conversation.md +19 -77
- package/assets/skills/meko-mcp-tools/references/tools-overview.md +8 -7
- package/assets/skills/meko-mcp-tools/references/tools-troubleshooting.md +22 -1
- package/assets/skills/meko-mcp-tools/references/tools-user-id-conventions.md +1 -1
- package/assets/skills/meko-mcp-tools-desktop/SKILL.md +8 -8
- package/assets/skills/meko-mcp-tools-desktop/desktop/README.md +1 -1
- package/assets/skills/meko-mcp-tools-desktop/references/_sections.md +1 -1
- package/assets/skills/meko-mcp-tools-desktop/references/tools-agent-id-conventions.md +6 -1
- package/assets/skills/meko-mcp-tools-desktop/references/tools-cookbook.md +6 -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 +7 -6
- package/assets/skills/meko-select-datapack-desktop/SKILL.md +1 -1
- package/assets/skills/meko-select-datapack-desktop/references/cookbook.md +3 -3
- package/bin/create-meko-setup.mjs +48 -10
- package/lib/capture-status.mjs +67 -0
- package/lib/clients/aliases.mjs +5 -0
- package/lib/clients/claude-desktop.mjs +120 -5
- package/lib/clients/codex.mjs +6 -3
- package/lib/clients/index.mjs +2 -0
- package/lib/clients/kiro.mjs +705 -0
- package/lib/config.mjs +90 -0
- package/lib/installer.mjs +1 -0
- package/lib/migrate/adapters/codex.mjs +490 -0
- package/lib/migrate/id.mjs +28 -3
- package/lib/migrate/orchestrator.mjs +34 -7
- package/lib/migrate.mjs +4 -2
- package/lib/prompt.mjs +16 -1
- package/package.json +4 -4
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
- A **preference**: "Customer budget is $50k"
|
|
9
9
|
- An **entity relationship**: "Alice works at Acme Corp"
|
|
10
10
|
|
|
11
|
-
Memory is backed by pgvector
|
|
11
|
+
Memory is backed by pgvector. Search is hybrid: semantic similarity, keyword matching, and a boost for memories that mention the entities named in your query (people, projects, tools). It retrieves relevant facts by meaning, not by conversation order.
|
|
12
12
|
|
|
13
13
|
```
|
|
14
14
|
memory_add(agent_id="support_bot",
|
|
@@ -71,7 +71,7 @@ Agents on Cloud Meko have two distinct read surfaces. Pick the right one for the
|
|
|
71
71
|
|
|
72
72
|
| Read path | What it returns | How to call |
|
|
73
73
|
|---|---|---|
|
|
74
|
-
| Your personal memories | Everything you and any of your agents wrote for this user — filtered by `(datapack_id, user_id)`, **not** by `agent_id
|
|
74
|
+
| Your personal memories | Everything you and any of your agents wrote for this user — filtered by `(datapack_id, user_id)`, **not** by `agent_id`; one call covers every bucket | `memory_search(agent_id="<your agent_id>", query="...", ...)` |
|
|
75
75
|
| Team's shared knowledge | Promoted memories + uploaded documents, visible to every member of the datapack | `knowledgebase_search(agent_id="<anything>", datapack_id="<datapack UUID>", query="...")` — `agent_id` is ignored |
|
|
76
76
|
|
|
77
77
|
`agent_id` does not filter memory reads, so a single `memory_search` already spans all of your agents; there is no per-agent fan-out to do.
|
|
@@ -80,7 +80,7 @@ Agents on Cloud Meko have two distinct read surfaces. Pick the right one for the
|
|
|
80
80
|
|
|
81
81
|
- **Personal memories** — written by `memory_add`. The `agent_id` records the writer but does not restrict reads; memories are scoped **per-user**, so any of that user's agents can read them via MCP, and no other user can.
|
|
82
82
|
- **Team-shared Shared Knowledge** — arrives two ways:
|
|
83
|
-
1. An agent calls `memory_promote` for exact, user-confirmed memory UUIDs, or the user promotes them from the Cloud UI's Learnings tab. Promotion moves the memories
|
|
83
|
+
1. An agent calls `memory_promote` for exact, user-confirmed memory UUIDs, or the user promotes them from the Cloud UI's Learnings tab. Promotion moves the memories into shared knowledge, strips `user_id`, preserves originating `agent_id` as provenance, and evicts the private mem0 records.
|
|
84
84
|
2. The user uploads a file via Datapack → Actions → **Add Knowledge** in the Cloud UI. PDF/TXT/MD/JSON/MP4 up to 5MB each.
|
|
85
85
|
|
|
86
86
|
Both show up in `knowledgebase_search`, tagged `metadata_filters.source: "memory"` vs other values so the agent can distinguish provenance in responses.
|
|
@@ -89,18 +89,7 @@ Agents on Cloud Meko have two distinct read surfaces. Pick the right one for the
|
|
|
89
89
|
|
|
90
90
|
### When the user asks "what do you know about X?"
|
|
91
91
|
|
|
92
|
-
A full sweep is two calls (
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
memory_search(agent_id="<your-agent-id>", query="X", conversation_id=..., ...) # all your personal memories, every agent
|
|
96
|
-
knowledgebase_search(agent_id="<anything>", datapack_id="<uuid>", query="X", conversation_id=..., ...)
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
The single `memory_search` already returns everything you and any other agent wrote for this user (`agent_id` doesn't filter memory reads) — no per-agent fan-out. When you answer, be explicit about scope so the user knows why something is or isn't there:
|
|
100
|
-
|
|
101
|
-
- "I found this in your personal memories (something you or another of your agents saved earlier)…"
|
|
102
|
-
- "I found this in your team's Shared Knowledge — someone (you or a teammate) promoted it earlier…"
|
|
103
|
-
- "I couldn't find anything in your personal memories. You might want to check the Cloud UI's Memory Summary tab."
|
|
92
|
+
A full sweep is two calls: `memory_search` (all your personal memories, every agent — no per-agent fan-out) then `knowledgebase_search` (team-shared knowledge). When you answer, name which surface each finding came from, so the user knows why something is or isn't there.
|
|
104
93
|
|
|
105
94
|
## Memory limitations for structured data
|
|
106
95
|
|
|
@@ -114,72 +103,28 @@ There is no MCP-side "just put it in a database table" option — raw SQL access
|
|
|
114
103
|
|
|
115
104
|
## Memory Storage: automatic, not proactive
|
|
116
105
|
|
|
117
|
-
On Claude Code, do **not** proactively `memory_add` facts the user states
|
|
118
|
-
|
|
119
|
-
Explicit `memory_add` is reserved for the three cases automatic extraction cannot reach:
|
|
120
|
-
|
|
121
|
-
- **Explicit request** → the user says "remember this" / "save this."
|
|
122
|
-
- **Output-only / tool-derived fact** → a durable fact that lives only in your output or a tool result, never in a user turn. Extraction reads only the user turn, so it never sees these.
|
|
123
|
-
- **Overwriting correction** → a prior fact was negated and the stale memory must not survive. Extraction is additive (it adds the new fact but leaves the old one live), so `memory_search` for the stale memory and `memory_update` / `memory_delete_by_id` it.
|
|
124
|
-
|
|
125
|
-
Use `memory_search` at the start of sessions to recall what you already know before asking the user to repeat themselves.
|
|
126
|
-
|
|
127
|
-
## Using Both Together
|
|
128
|
-
|
|
129
|
-
Capture stores the full conversation (preserves structure) and extraction derives searchable memories from it — both happen automatically. Add an explicit `memory_add` only for the three cases above.
|
|
106
|
+
On Claude Code, do **not** proactively `memory_add` facts the user states — capture + server-side extraction stores them automatically. Explicit `memory_add` is reserved for the three cases extraction cannot reach (explicit "remember this"; output-only/tool-derived facts; overwriting a negated fact) — the canonical list and rules live in SKILL.md. Use `memory_search` at session start to recall what you already know.
|
|
130
107
|
|
|
131
108
|
## Key Retrieval Difference
|
|
132
109
|
|
|
133
|
-
- `memory_search`: **semantic similarity** across all memories
|
|
134
|
-
- `conversation_get`: **ordered
|
|
110
|
+
- `memory_search`: **semantic similarity** across all memories — relevant facts regardless of when stored.
|
|
111
|
+
- `conversation_get`: **ordered message turns** for one conversation. No semantic search; requires `conversation_id`.
|
|
135
112
|
|
|
136
113
|
## Automatic Conversation Capture
|
|
137
114
|
|
|
138
|
-
The
|
|
115
|
+
The plugin captures conversations via three mechanisms — a periodic checkpoint (~10 min), a PreCompact hook, and a SessionEnd hook — storing the full transcript verbatim (user prompts as `input`, assistant text as `output`, tool calls and results as `reasoning`).
|
|
139
116
|
|
|
140
|
-
|
|
141
|
-
2. **PreCompact hook** — Shell script that fires before Claude Code's auto-compaction, captures via MCP JSON-RPC
|
|
142
|
-
3. **SessionEnd hook** — Shell script that fires at session termination, captures final exchanges
|
|
117
|
+
Each message's seed is `<conversation_id>:<user_message_uuid>`; all three mechanisms derive the same deterministic trace ID from it, so overlapping captures are idempotent. A shared watermark file tracks what has been saved.
|
|
143
118
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
The full transcript including:
|
|
147
|
-
- **User prompts** — verbatim text (the `input` field)
|
|
148
|
-
- **Assistant responses** — all text blocks (the `output` field)
|
|
149
|
-
- **Tool calls** — tool name + input parameters (the `reasoning` field)
|
|
150
|
-
- **Tool results** — output from tool executions (appended to `reasoning`)
|
|
151
|
-
|
|
152
|
-
This is more than just text — tool calls and results are critical context for session replay, cross-agent sharing, and compaction.
|
|
153
|
-
|
|
154
|
-
### Seed-based deduplication
|
|
155
|
-
|
|
156
|
-
Each message's seed is `<conversation_id>:<user_message_uuid>`. All three capture mechanisms generate the same seed for the same exchange, producing the same deterministic trace ID via `sha256(seed)[:16].hex()`. This means duplicate writes from overlapping captures are idempotent.
|
|
157
|
-
|
|
158
|
-
### When to manually store conversations
|
|
159
|
-
|
|
160
|
-
Automatic capture handles the raw exchange. You should still manually use `conversation_create` + `conversation_add_message` when:
|
|
161
|
-
- The user explicitly asks to "save this conversation"
|
|
162
|
-
- You want to add curated `reasoning` traces beyond raw tool calls
|
|
163
|
-
- You want to store a selected subset of the conversation with a descriptive title
|
|
164
|
-
|
|
165
|
-
### Watermark coordination
|
|
166
|
-
|
|
167
|
-
A shared watermark file at `~/.claude/meko-capture/<session-id>.watermark.json` tracks what has been saved. Both hooks and the agent's periodic checkpoint use this to avoid reprocessing already-captured exchanges.
|
|
119
|
+
Manually use `conversation_create` + `conversation_add_message` only when the user explicitly asks to save a conversation, or you want curated `reasoning` traces or a titled subset.
|
|
168
120
|
|
|
169
121
|
## Observability: conversation_id IS the Langfuse trace ID
|
|
170
122
|
|
|
171
|
-
This is the feature agents tend to miss.
|
|
123
|
+
This is the feature agents tend to miss.
|
|
172
124
|
|
|
173
|
-
- `conversation_create` returns a `conversation_id
|
|
174
|
-
-
|
|
175
|
-
-
|
|
176
|
-
- Child spans reveal internals. Observed structure:
|
|
177
|
-
- `memory_add`: `Memory Add (Meko MCP)` → `Create a new memory in Mem0` → `Bulk Payload Update (yugabytedb / vector)` → `Execute Query (yugabytedb / vector)`
|
|
178
|
-
- `memory_search`: `Memory Search (Meko MCP)` → `Search for memories based on a query in Mem0` (Retriever)
|
|
179
|
-
- `conversation_add_message`: `Conversation Add Message (Meko MCP)` → `Conversation Message Added` span → `Reasoning` generation (the `reasoning` field is stored as a Langfuse *generation*-typed span, not a plain text field)
|
|
180
|
-
- `knowledgebase_search`: `Knowledgebase Search (Meko MCP)` → multiple `Execute Query (yugabytedb)` child spans
|
|
181
|
-
- Trace tags include `agent:<agent_id>` and the Meko org UUID. Both are searchable/filterable in Langfuse.
|
|
182
|
-
- Each datapack has its own Langfuse project — traces for a tool call land in the project for whichever `datapack_id` was on the call (or the default datapack if omitted).
|
|
125
|
+
- `conversation_create` returns a `conversation_id`; that ID **is** the Langfuse trace_id — not a separate trace, the same identifier.
|
|
126
|
+
- Every MCP tool call made with that `conversation_id` becomes a span under the trace, named after the tool (e.g. `Memory Search (Meko MCP)`), with child spans exposing the storage steps.
|
|
127
|
+
- Trace tags include `agent:<agent_id>` and are filterable. Each datapack has its own Langfuse project — traces land in the project of whichever `datapack_id` was on the call.
|
|
183
128
|
|
|
184
129
|
### Finding a trace in the UI
|
|
185
130
|
|
|
@@ -190,14 +135,14 @@ Two navigation paths, both verified in the Meko UI:
|
|
|
190
135
|
|
|
191
136
|
The Conversations-tab row preview shows the first user turn verbatim, plus the agent_id tag, message count, and started-at timestamp. If you want a conversation to be recognizable in the UI, call `conversation_add_message` with a clean first-turn `input` early in the session.
|
|
192
137
|
|
|
193
|
-
###
|
|
138
|
+
### Typical latencies
|
|
194
139
|
|
|
195
140
|
From real traces, not the docstring happy path:
|
|
196
141
|
|
|
197
142
|
| Tool | Latency per call |
|
|
198
143
|
|---|---|
|
|
199
|
-
| `memory_add` |
|
|
200
|
-
| `memory_search` |
|
|
144
|
+
| `memory_add` | ~10-30 seconds (calls an LLM for extraction, then writes to the vector store; scales with payload size) |
|
|
145
|
+
| `memory_search` | ~2-6 seconds (small, focused memories; whole-document stores read ~4x slower — chunk on write) |
|
|
201
146
|
| `knowledgebase_search` | 0.6 seconds (empty index; will grow with index size) |
|
|
202
147
|
| `conversation_add_message` | 0.11 seconds (fire-and-forget; queued to Langfuse) |
|
|
203
148
|
|
|
@@ -205,9 +150,6 @@ From real traces, not the docstring happy path:
|
|
|
205
150
|
|
|
206
151
|
### Proactive diagnostic pattern
|
|
207
152
|
|
|
208
|
-
If a user reports "my memory_add didn't seem to save", open the Observe hub
|
|
209
|
-
|
|
210
|
-
- A `Memory Add (Meko MCP)` span with `Create a new memory in Mem0` child → the call reached Mem0. The fact extractor may have returned `"results": []` (common on short or non-fact-shaped text; not a bug, but lossy).
|
|
211
|
-
- No span at all → the call never reached the server. Likely a transport / auth / `conversation_id` mismatch issue.
|
|
153
|
+
If a user reports "my memory_add didn't seem to save", open the Observe hub, filter on their `conversation_id`, and check the span tree: a memory-add span present means the call arrived (the extractor may still have returned `"results": []` on non-fact-shaped text); no span means the call never reached the server (transport / auth / `conversation_id` mismatch).
|
|
212
154
|
|
|
213
|
-
The mem0 extractor is lossy — it extracts atomic facts and
|
|
155
|
+
The mem0 extractor is lossy — it extracts atomic facts and may drop prose that doesn't look fact-shaped to it; a `memory_add` can return `"results": []` on non-fact-shaped text. When preserving authoritative text matters, store it via `conversation_add_message` (verbatim in `input`/`output`/`reasoning`) — the conversation path preserves text without LLM re-extraction.
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
# Complete Tool Catalog and Decision Tree
|
|
2
2
|
|
|
3
|
-
**23 tools
|
|
3
|
+
**23 Meko data tools covered by this skill.** These are the tools available in production, grouped as: Memory (8), Conversation (6), Knowledge Base (1), Datapack (5), Artifacts (2), Observability (1). Combined Meko + AMP endpoints may expose additional infrastructure tools; those are outside this skill's scope.
|
|
4
4
|
|
|
5
5
|
## Quick health check before using tools
|
|
6
6
|
|
|
7
7
|
Before starting a session, verify that the Meko MCP tools are working:
|
|
8
8
|
|
|
9
9
|
1. `memory_search(query="test", agent_id="<your-session-agent-id>", conversation_id="<session-conversation-id>")` — Confirms memory subsystem is up. Use the `agent_id` and `conversation_id` from the SessionStart `additionalContext`. May fail with "connection already closed" — see `tools-troubleshooting.md`.
|
|
10
|
-
2. `datapack_list()` — Confirms Meko API connectivity. Returns the datapacks your token has access to.
|
|
10
|
+
2. `datapack_list(conversation_id="<session-conversation-id>")` — Confirms Meko API connectivity. Returns the datapacks your token has access to.
|
|
11
11
|
|
|
12
12
|
## Decision tree: which tool do I need?
|
|
13
13
|
|
|
14
14
|
```
|
|
15
15
|
User wants to...
|
|
16
|
-
├── Search
|
|
16
|
+
├── Search personal context? ---------------> memory_search (read)
|
|
17
|
+
├── Search shared datapack knowledge? ------> knowledgebase_search (read)
|
|
17
18
|
├── Add documents to a knowledge base? -----> point user at Meko UI: Datapack → Actions → Add Knowledge
|
|
18
19
|
│ (no MCP tool — Cloud uses UI ingestion only)
|
|
19
20
|
├── Store or recall information?
|
|
@@ -42,13 +43,13 @@ Agent / knowledge-base lifecycle is managed **outside** the MCP surface — typi
|
|
|
42
43
|
| Tool | Purpose |
|
|
43
44
|
|------|---------|
|
|
44
45
|
| `memory_add(text, agent_id, conversation_id, run_id=None, metadata=None, messages=None, datapack_id=None)` | Store fact/preference/entity as long-term memory |
|
|
45
|
-
| `memory_search(query, agent_id, conversation_id="", limit=10, datapack_id=None)` |
|
|
46
|
+
| `memory_search(query, agent_id, conversation_id="", limit=10, datapack_id=None)` | Hybrid search across memories (semantic + keyword + entity boost). `conversation_id` optional (omit or pass `""` for cross-conversation discovery). |
|
|
46
47
|
| `memory_get_by_id(memory_id, agent_id, conversation_id, datapack_id=None)` | Direct pgvector row lookup by UUID. Preferred over `memory_search` for exact-id verification. |
|
|
47
48
|
| `memory_get_all(agent_id, conversation_id, run_id=None, datapack_id=None)` | List all of the user's memories (every agent — `agent_id` does not filter) |
|
|
48
49
|
| `memory_update(memory_id, text, agent_id, conversation_id, datapack_id=None)` | Overwrite memory text |
|
|
49
50
|
| `memory_delete_by_id(memory_id, agent_id, conversation_id, datapack_id=None)` | Delete a single memory |
|
|
50
51
|
| `memory_delete_all(agent_id, conversation_id, run_id=None, datapack_id=None)` | Delete all memories for agent (destructive) |
|
|
51
|
-
| `memory_promote(conversation_id, memory_ids, agent_id=None, datapack_id=None)` | Promote private memories into the datapack's shared knowledge base (moves them
|
|
52
|
+
| `memory_promote(conversation_id, memory_ids, agent_id=None, datapack_id=None)` | Promote private memories into the datapack's shared knowledge base (moves them out of mem0, then evicts from mem0 — one-way). Owners/maintainers only; viewers/contributors get 403. |
|
|
52
53
|
|
|
53
54
|
## Conversation Tools (6)
|
|
54
55
|
|
|
@@ -66,9 +67,9 @@ Agent / knowledge-base lifecycle is managed **outside** the MCP surface — typi
|
|
|
66
67
|
| Tool | Purpose |
|
|
67
68
|
|------|---------|
|
|
68
69
|
| `datapack_create(name)` | Create new datapack |
|
|
69
|
-
| `datapack_list()` | List all datapacks |
|
|
70
|
+
| `datapack_list(conversation_id, datapack_id=None)` | List all datapacks. `conversation_id` is required for trace nesting; omit `datapack_id` to use the endpoint default. |
|
|
70
71
|
| `datapack_describe(datapack_id, include_status=False)` | Describe datapack by UUID |
|
|
71
|
-
| `datapack_update(datapack_id, name=None, description=None)` | Rename a datapack and/or
|
|
72
|
+
| `datapack_update(datapack_id, name=None, description=None, conversation_search_opt_out=None)` | Rename a datapack, update its description, and/or opt out of (or back into) conversation-search caching. Pass at least one field. Opt-out is owner/maintainer only. |
|
|
72
73
|
| `datapack_delete(datapack_id)` | Delete datapack by UUID (irreversible) |
|
|
73
74
|
|
|
74
75
|
## Artifact Tools (2)
|
|
@@ -7,7 +7,7 @@ These patterns are extracted from real agent sessions. Follow them to avoid wast
|
|
|
7
7
|
1. **Never retry the identical failed call more than once.** If it fails twice with the same error, it's not transient — diagnose the cause.
|
|
8
8
|
2. **Distinguish transient vs persistent failures.** "Connection already closed" is transient (retry once). "Permission denied" is persistent (stop, don't retry).
|
|
9
9
|
3. **Don't guess parameters sequentially.** If a tool fails with one parameter format, don't try 4 variations. Check this skill's docs for the correct format first.
|
|
10
|
-
4. **Use your session's `agent_id` consistently on writes
|
|
10
|
+
4. **Use your session's `agent_id` consistently on writes** (the SessionStart-injected value), and on `conversation_get` — conversations are owned by the creating `agent_id`; a wrong value returns `agent_id_mismatch`. Memory reads and `conversation_list` are unaffected by `agent_id`. Don't switch write forms mid-session.
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
@@ -26,6 +26,27 @@ These patterns are extracted from real agent sessions. Follow them to avoid wast
|
|
|
26
26
|
|
|
27
27
|
---
|
|
28
28
|
|
|
29
|
+
## An error payload is a FAILED search, never an empty one
|
|
30
|
+
|
|
31
|
+
Quota errors, rate-limit errors, and tool refusals come back as an error object with **no `results` key** — reading `response.get("results", [])` first silently converts "you were refused" into "the store is empty." Follow SKILL.md operating contract 1: report it as "search failed: `<error code>` — findings unknown," never as "no results."
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Rate limiting: `PAT_RATE_LIMITED`
|
|
36
|
+
|
|
37
|
+
Bursts of requests on one token return:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{"error": "PAT_RATE_LIMITED", "detail": "too many requests for this token; retry after 60s"}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- Throttling is **endpoint-specific**: `artifact_put` bursts and high-concurrency `memory_get_all` trigger it readily; `memory_search` tolerates far more. Do not assume one safe concurrency level for every tool.
|
|
44
|
+
- A rate-limited `artifact_put` returns this error **instead of** a `content_hash` — checking only for the hash misreads throttling as silent write loss.
|
|
45
|
+
- Honor the retry-after (~60s) or back off exponentially; pace sustained work. Retry only idempotent operations or hash-protected writes.
|
|
46
|
+
- Distinct from the lifetime quota error (`free_tier_limit_reached`) — waiting never recovers that one.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
29
50
|
## agent_id errors
|
|
30
51
|
|
|
31
52
|
On the Cloud multi-tenant schema, `agent_id` is a TEXT column value — not a PostgreSQL identifier — so arbitrary strings are accepted.
|
|
@@ -75,6 +75,6 @@ Personal content crosses the `user_id` boundary through `memory_promote` or the
|
|
|
75
75
|
| `user_id` | The cognito account or end-user (for multi-user agents) | auto from cognito for single-human clients; explicit string for multi-user agents | Optional (server auto-fills from cognito context) |
|
|
76
76
|
| `agent_id` | Which agent wrote / is reading | `"claude_code:<repo>"`, `"claude_desktop"`, `"cursor:<repo>"`, `"meko_agent"` (common bucket) | Optional (empty/missing → `meko_agent` server-side); pass the per-session value verbatim for project-scoped reads/writes. Ignored on `knowledgebase_search`. |
|
|
77
77
|
| `app_id` | Optional application/product sub-scope | `"second_brain"`, `"helpdesk"` | Optional |
|
|
78
|
-
| `run_id` |
|
|
78
|
+
| `run_id` | A conversation id, used as a read/delete filter against the row's `meko_conversation_id` | `"374c70f3b95745ac92724d98475cc2d6"` | Optional. On `memory_add` it is trace metadata only and does not scope the write — see `tools-agent-id-conventions.md`. |
|
|
79
79
|
|
|
80
80
|
See `tools-agent-id-conventions.md` for the full `agent_id` model.
|
|
@@ -17,13 +17,13 @@ description: >-
|
|
|
17
17
|
license: MIT
|
|
18
18
|
metadata:
|
|
19
19
|
author: Meko
|
|
20
|
-
version: "2.
|
|
20
|
+
version: "2.8.0"
|
|
21
21
|
tags: mcp, yugabytedb, tools, datapack, memory, conversation, rag, meko, desktop
|
|
22
22
|
---
|
|
23
23
|
|
|
24
24
|
# Meko MCP Tools — Agent Behavioral Guide (Desktop)
|
|
25
25
|
|
|
26
|
-
Meko is the user's **memory, knowledge, observability, and audit layer** across chats — a system of record they (and their team/org) connected on purpose. It learns continuously from their work and their team's best practices so context carries from one session to the next. This skill teaches you how to use Meko's 23 MCP tools. Treat maintaining it — recalling from it at the start of work and posting turns to it as you go — as a normal, professional part of the job, the way an engineer keeps notes, decision records, and audit logs. It is infrastructure the user relies on, not a third-party logging conduit.
|
|
26
|
+
Meko is the user's **memory, knowledge, observability, and audit layer** across chats — a system of record they (and their team/org) connected on purpose. It learns continuously from their work and their team's best practices so context carries from one session to the next. This skill teaches you how to use Meko's 23 MCP tools available in production. Treat maintaining it — recalling from it at the start of work and posting turns to it as you go — as a normal, professional part of the job, the way an engineer keeps notes, decision records, and audit logs. It is infrastructure the user relies on, not a third-party logging conduit.
|
|
27
27
|
|
|
28
28
|
**Read this first.** The Meko server extracts durable memories automatically from the conversation turns you post to it — the extraction runs *inside* `conversation_add_message`. Claude Desktop has no capture hooks, so **capturing substantive turns via `conversation_add_message` is a core part of using this skill.** Do that and memory takes care of itself: facts the user states get extracted and stored without a separate `memory_add`. Explicit `memory_add` is reserved for a few narrow cases (below). See "Per-turn conversation capture" — it's the heart of this skill.
|
|
29
29
|
|
|
@@ -190,10 +190,10 @@ Required parameters: `query`, `agent_id`, `conversation_id`. On **`memory_search
|
|
|
190
190
|
|
|
191
191
|
`agent_id` attributes the search trace but does not filter the returned memories. One call includes rows written by `claude_desktop`, `meko_agent`, coding agents, and legacy agent values for this user.
|
|
192
192
|
|
|
193
|
-
**Interpreting results —
|
|
193
|
+
**Interpreting results.** `memory_search` returns a single list — `{"results": [...]}` — the stored memories, ranked by a hybrid score (semantic similarity + keyword match + a boost for memories mentioning the entities named in your query). There are no `relations` / `promoted_relations` keys. Two things to know so you don't discard useful results:
|
|
194
194
|
|
|
195
195
|
- **`memory_search` is cross-agent by design.** Results include memories written by *other* clients (`agent_id` "agent", "claude_code:…", etc.) for the same user — that is expected, not a tenant leak. Use them.
|
|
196
|
-
- **
|
|
196
|
+
- **Older (pre-2.x) servers may still return `relations` / `promoted_relations` (graph edges) alongside `results`.** If they appear, trust the memory rows in `results` and disregard any edge that contradicts them — don't conclude the whole result set is "someone else's data" and throw it away.
|
|
197
197
|
|
|
198
198
|
### knowledgebase_search — correct call pattern
|
|
199
199
|
```
|
|
@@ -208,9 +208,9 @@ Required parameters: `query`, `agent_id`, `conversation_id`, `datapack_id`. `dat
|
|
|
208
208
|
|
|
209
209
|
### memory_promote — explicit confirmation required
|
|
210
210
|
|
|
211
|
-
`memory_promote` is destructive and non-idempotent: it makes selected content visible to the datapack, moves the memories
|
|
211
|
+
`memory_promote` is destructive and non-idempotent: it makes selected content visible to the datapack, moves the memories into shared knowledge, and evicts the private mem0 records. There is no MCP rollback.
|
|
212
212
|
|
|
213
|
-
1. Use `memory_search` or `memory_get_all` to obtain exact memory UUIDs. Never pass
|
|
213
|
+
1. Use `memory_search` or `memory_get_all` to obtain exact memory UUIDs from the `id` field. Never pass any other identifier.
|
|
214
214
|
2. Present each exact candidate memory and its UUID to the user.
|
|
215
215
|
3. State that promotion is one-way, team-visible, and removes the private records.
|
|
216
216
|
4. Obtain explicit confirmation for those exact candidates before calling `memory_promote`.
|
|
@@ -228,7 +228,7 @@ The Cloud UI's Learnings tab remains an alternative user-driven path.
|
|
|
228
228
|
|
|
229
229
|
## Key concepts
|
|
230
230
|
|
|
231
|
-
1. **23 tools in 6 groups
|
|
231
|
+
1. **23 tools in 6 groups** (all available in production): Memory (8 — including `memory_promote`), Conversation (6), Knowledge Base (1 — `knowledgebase_search`), Datapack (5), Artifacts (2 — `artifact_put`, `artifact_get`), Observability (1 — `track_token_usage`). Memory is captured automatically from turns posted with `conversation_add_message` — post each substantive turn and the server extracts durable memories from it. KB ingestion is UI-only (Datapack → Actions → Add Knowledge); raw SQL is not exposed. See `tools-overview.md`.
|
|
232
232
|
2. **datapack_id routing**: DB, RAG, and memory tools accept optional `datapack_id` (default datapack if omitted). `knowledgebase_search` is the exception: `datapack_id` is **required** there.
|
|
233
233
|
3. **agent_id is multi-agent**: For Claude Desktop, use `agent_id="claude_desktop"` for normal writes and `agent_id="meko_agent"` for cross-project facts. Writes are attributed to `(datapack_id, user_id, agent_id)`. Personal memory reads and `conversation_list` span all of this user's agents; `conversation_get` remains agent-owned. `knowledgebase_search` ignores `agent_id` entirely. See `tools-agent-id-conventions.md`.
|
|
234
234
|
4. **Personal memory vs. team-shared knowledge**: Un-promoted memories are scoped per-user — readable across all of that user's agents, but no other user can see them. With explicit confirmation, `memory_promote` moves exact memories into Shared Knowledge; the Cloud UI's Learnings tab is an alternative. Promoted content is visible to every datapack member. `knowledgebase_search` is the MCP read path for both Shared Knowledge and uploaded documents.
|
|
@@ -243,7 +243,7 @@ The Cloud UI's Learnings tab remains an alternative user-driven path.
|
|
|
243
243
|
|
|
244
244
|
| File | What it covers |
|
|
245
245
|
|------|---------------|
|
|
246
|
-
| `tools-overview.md` | Complete catalog of all 23 tools with decision tree |
|
|
246
|
+
| `tools-overview.md` | Complete catalog of all 23 tools available in production, with decision tree |
|
|
247
247
|
| `tools-cookbook.md` | Per-tool examples with correct parameters, responses, and error cases |
|
|
248
248
|
| `tools-memory-vs-conversation.md` | When to use memory tools vs conversation tools |
|
|
249
249
|
| `tools-rag-workflow.md` | End-to-end RAG pipeline flow |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Meko MCP Tools — Claude Desktop Setup
|
|
2
2
|
|
|
3
|
-
Use the Meko MCP tools skill natively in Claude Desktop. Because Desktop has no lifecycle hooks, the skill teaches Claude to capture each substantive turn by posting it via `conversation_add_message` (the server extracts durable memories from those posts), to reserve explicit `memory_add` for the narrow cases (the user says "remember this", a fact lives only in the assistant's output or a tool result, or a corrected fact needs overwriting), to classify information, to use all <!--tool-count-->
|
|
3
|
+
Use the Meko MCP tools skill natively in Claude Desktop. Because Desktop has no lifecycle hooks, the skill teaches Claude to capture each substantive turn by posting it via `conversation_add_message` (the server extracts durable memories from those posts), to reserve explicit `memory_add` for the narrow cases (the user says "remember this", a fact lives only in the assistant's output or a tool result, or a corrected fact needs overwriting), to classify information, to use all <!--tool-count-->24<!--/tool-count--> Meko MCP tools correctly, and to handle errors gracefully.
|
|
4
4
|
|
|
5
5
|
## Setup
|
|
6
6
|
|
|
@@ -6,7 +6,7 @@ description: Maps reference files to their topics for the meko-mcp-tools-desktop
|
|
|
6
6
|
# Reference Sections
|
|
7
7
|
|
|
8
8
|
## Tool Selection & Catalog
|
|
9
|
-
- [tools-overview.md](tools-overview.md) — Complete catalog of all 23 tools with a decision tree
|
|
9
|
+
- [tools-overview.md](tools-overview.md) — Complete catalog of all 23 tools available in production, with a decision tree
|
|
10
10
|
|
|
11
11
|
## Tool-Specific Guidance
|
|
12
12
|
- [tools-agent-id-conventions.md](tools-agent-id-conventions.md) — Multi-agent model: the three buckets (project `<client>:<repo-basename>`, common `meko_agent`, loose client name), personal vs. team-shared read surfaces
|
|
@@ -92,7 +92,12 @@ Always tell the user which surface you searched: personal memory or team-shared
|
|
|
92
92
|
|
|
93
93
|
Optional parameters can narrow a call further:
|
|
94
94
|
- `user_id` — explicitly scope writes/reads to a specific end-user if your agent serves multiple (rare in Claude Desktop; more common in API products)
|
|
95
|
-
- `run_id` —
|
|
95
|
+
- `run_id` — **read/delete filter only**, and it filters on the row's
|
|
96
|
+
`meko_conversation_id`, so the value to pass is a *conversation id*, not a
|
|
97
|
+
free-form run label. On `memory_add` it is Langfuse trace metadata only and is
|
|
98
|
+
never persisted on the row: writing with `run_id=X` then reading with
|
|
99
|
+
`memory_search(run_id=X)` returns nothing, silently. Scope writes with
|
|
100
|
+
`conversation_id` instead (MEKO-473).
|
|
96
101
|
|
|
97
102
|
Available on `memory_add`, `memory_search`, `memory_get_all`, `memory_delete_all`, `conversation_create`, `conversation_list`.
|
|
98
103
|
|
|
@@ -46,6 +46,8 @@ memory_add(agent_id="agent", user_id="amiram",
|
|
|
46
46
|
|
|
47
47
|
**Cross-conversation discovery.** `memory_search` returns hits across every stored conversation for the `(datapack_id, user_id)` pair, across all agents (the tool intentionally passes `meko_agent_id=None` to mem0, so the `agent_id` argument scopes the trace but does not filter results). When a hit references an interesting conversation, follow up with `conversation_list` to browse the associated threads and `conversation_get` to read a specific one — the memory hit's `meko_conversation_id` field is the id to fetch. Pass `run_id` on the search itself to narrow to a single conversation up front.
|
|
48
48
|
|
|
49
|
+
**Relevance floor.** Vector-matched `results` below `MEMORY_SEARCH_MIN_SCORE` (mem0's cosine-similarity score, default `0.5`) are dropped as weak matches rather than returned. A query can come back with fewer results than `limit`, or an empty list, when nothing clears the bar; that means no sufficiently relevant memory, not a broken call.
|
|
50
|
+
|
|
49
51
|
```
|
|
50
52
|
memory_search(query="What programming language does the team use?", agent_id="agent")
|
|
51
53
|
```
|
|
@@ -127,7 +129,7 @@ memory_promote(memory_ids=["mem-uuid-123", "mem-uuid-456"],
|
|
|
127
129
|
{"inserted_ids": ["mem-uuid-123"], "updated_ids": ["mem-uuid-456"], "not_found_ids": []}
|
|
128
130
|
```
|
|
129
131
|
|
|
130
|
-
Get exact UUIDs from the `id` field of `memory_search` / `memory_get_all` results; never
|
|
132
|
+
Get exact UUIDs from the `id` field of `memory_search` / `memory_get_all` results; never pass any other identifier. Before the call, show the user each exact memory and UUID, explain that promotion is team-visible, one-way, and evicts the private records, then obtain explicit confirmation for those candidates. Pass the active `conversation_id` and intended `agent_id` / `datapack_id`; on legacy schemas that expose `scope`, use `write`, not `admin`.
|
|
131
133
|
|
|
132
134
|
On 403, authentication, or permission failure, report the error and stop — do not escalate scope, change datapacks, or alter identity. After a successful call, `knowledgebase_search` may verify shared visibility, but it is not a rollback mechanism.
|
|
133
135
|
|
|
@@ -155,8 +157,6 @@ conversation_create(agent_id="agent", user_id="amiram",
|
|
|
155
157
|
|
|
156
158
|
**When to use:** Add a user/assistant exchange to an existing conversation. **All fields must be verbatim** — never summarize or rephrase.
|
|
157
159
|
|
|
158
|
-
Leave `index_for_search` at its default (`False`). Conversation-cache embedding is currently a WorkbenchLM-only feature — the inference gateway opts in on its own turns; agent-harness conversations should not opt in.
|
|
159
|
-
|
|
160
160
|
```
|
|
161
161
|
conversation_add_message(conversation_id="conv-uuid-123", agent_id="agent",
|
|
162
162
|
input="Why is the auth middleware returning 401?",
|
|
@@ -327,18 +327,19 @@ For large files use `local_path` to read the file. S3 URLs are never exposed.
|
|
|
327
327
|
|
|
328
328
|
```
|
|
329
329
|
datapack_create(name="analytics_prod")
|
|
330
|
-
datapack_list() # returns datapack_id for each datapack
|
|
330
|
+
datapack_list(conversation_id="<this conversation's id>") # returns datapack_id for each datapack
|
|
331
331
|
datapack_describe(datapack_id="<uuid>", include_status=True)
|
|
332
332
|
```
|
|
333
333
|
|
|
334
334
|
### datapack_update / datapack_delete
|
|
335
335
|
|
|
336
|
-
`datapack_update` renames
|
|
336
|
+
`datapack_update` renames a datapack, edits its description, and/or opts it in/out of conversation-search embedding. At least one of `name` / `description` / `conversation_search_opt_out` must be provided (or the tool returns `nothing_to_update`). The server refuses to rename `meko_default_datapack` — the error is `"meko_default_datapack cannot be renamed"`. Passing `description=""` does NOT clear an existing description. `conversation_search_opt_out=True` stops future turns from being indexed and is restricted to the datapack's owner or a maintainer. This is best-effort, not a hard guarantee — a transient database error on the live embed path's opt-out check fails open, so a turn can occasionally still get embedded for an opted-out datapack.
|
|
337
337
|
|
|
338
338
|
```
|
|
339
339
|
datapack_update(datapack_id="<uuid>", name="renamed-datapack")
|
|
340
340
|
datapack_update(datapack_id="<uuid>", description="new description")
|
|
341
341
|
datapack_update(datapack_id="<uuid>", name="x", description="y")
|
|
342
|
+
datapack_update(datapack_id="<uuid>", conversation_search_opt_out=True)
|
|
342
343
|
datapack_delete(datapack_id="<uuid>") # Irreversible!
|
|
343
344
|
```
|
|
344
345
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
- A **preference**: "Customer budget is $50k"
|
|
9
9
|
- An **entity relationship**: "Alice works at Acme Corp"
|
|
10
10
|
|
|
11
|
-
Memory is backed by pgvector
|
|
11
|
+
Memory is backed by pgvector. Search is hybrid: semantic similarity, keyword matching, and a boost for memories that mention the entities named in your query (people, projects, tools). It retrieves relevant facts by meaning, not by conversation order.
|
|
12
12
|
|
|
13
13
|
```
|
|
14
14
|
memory_add(agent_id="support_bot",
|
|
@@ -80,7 +80,7 @@ One `memory_search` already spans this user's memories across all agents; no per
|
|
|
80
80
|
|
|
81
81
|
- **Personal memories** — written by `memory_add`. The `agent_id` records the writer but does not restrict reads; memories are scoped per-user, so any of that user's agents can read them and no other user can.
|
|
82
82
|
- **Team-shared Shared Knowledge** — arrives two ways:
|
|
83
|
-
1. An agent calls `memory_promote` for exact, user-confirmed memory UUIDs, or the user promotes them from the Cloud UI's Learnings tab. Promotion moves the memories
|
|
83
|
+
1. An agent calls `memory_promote` for exact, user-confirmed memory UUIDs, or the user promotes them from the Cloud UI's Learnings tab. Promotion moves the memories into shared knowledge, strips `user_id`, preserves originating `agent_id` as provenance, and evicts the private mem0 records.
|
|
84
84
|
2. The user uploads a file via Datapack → Actions → **Add Knowledge** in the Cloud UI. PDF/TXT/MD/JSON/MP4 up to 5MB each.
|
|
85
85
|
|
|
86
86
|
Both show up in `knowledgebase_search`, tagged `metadata_filters.source: "memory"` vs other values so the agent can distinguish provenance in responses.
|
|
@@ -194,7 +194,7 @@ From real traces, not the docstring happy path:
|
|
|
194
194
|
|
|
195
195
|
| Tool | Latency per call |
|
|
196
196
|
|---|---|
|
|
197
|
-
| `memory_add` | 12-21 seconds (calls OpenAI for extraction, then writes to vector
|
|
197
|
+
| `memory_add` | 12-21 seconds (calls OpenAI for extraction, then writes to the vector store) |
|
|
198
198
|
| `memory_search` | 1.8-5.9 seconds |
|
|
199
199
|
| `knowledgebase_search` | 0.6 seconds (empty index; will grow with index size) |
|
|
200
200
|
| `conversation_add_message` | 0.11 seconds (fire-and-forget; queued to Langfuse) |
|
|
@@ -208,4 +208,4 @@ If a user reports "my memory_add didn't seem to save", open the Observe hub for
|
|
|
208
208
|
- A `Memory Add (Meko MCP)` span with `Create a new memory in Mem0` child → the call reached Mem0. The fact extractor may have returned `"results": []` (common on short or non-fact-shaped text; not a bug, but lossy).
|
|
209
209
|
- No span at all → the call never reached the server. Likely a transport / auth / `conversation_id` mismatch issue.
|
|
210
210
|
|
|
211
|
-
The mem0 extractor is lossy — it extracts atomic facts and
|
|
211
|
+
The mem0 extractor is lossy — it extracts atomic facts and may drop prose that doesn't look fact-shaped to it. Observed 2026-05-07 (on the graph-era server): 2 of 5 `memory_add` calls returned `"results": []`. When preserving authoritative text matters, store it via `conversation_add_message` (verbatim in `input`/`output`/`reasoning`) — the conversation path preserves text without LLM re-extraction.
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
# Complete Tool Catalog and Decision Tree
|
|
2
2
|
|
|
3
|
-
**23 tools
|
|
3
|
+
**23 Meko data tools covered by this skill.** These are the tools available in production, grouped as: Memory (8), Conversation (6), Knowledge Base (1), Datapack (5), Artifacts (2), Observability (1). Combined Meko + AMP endpoints may expose additional infrastructure tools; those are outside this skill's scope.
|
|
4
4
|
|
|
5
5
|
## Quick health check before using tools
|
|
6
6
|
|
|
7
7
|
Before starting a session, verify that the Meko MCP tools are working:
|
|
8
8
|
|
|
9
9
|
1. `memory_search(query="test", agent_id="<your-session-agent-id>", conversation_id="<session-conversation-id>")` — Confirms memory subsystem is up. Use the `agent_id` and `conversation_id` from the SessionStart `additionalContext`. May fail with "connection already closed" — see `tools-troubleshooting.md`.
|
|
10
|
-
2. `datapack_list()` — Confirms Meko API connectivity. Returns the datapacks your token has access to.
|
|
10
|
+
2. `datapack_list(conversation_id="<this conversation's id>")` — Confirms Meko API connectivity. Returns the datapacks your token has access to.
|
|
11
11
|
|
|
12
12
|
## Decision tree: which tool do I need?
|
|
13
13
|
|
|
14
14
|
```
|
|
15
15
|
User wants to...
|
|
16
|
-
├── Search
|
|
16
|
+
├── Search personal context? ---------------> memory_search (read)
|
|
17
|
+
├── Search shared datapack knowledge? ------> knowledgebase_search (read)
|
|
17
18
|
├── Add documents to a knowledge base? -----> point user at Meko UI: Datapack → Actions → Add Knowledge
|
|
18
19
|
│ (no MCP tool — Cloud uses UI ingestion only)
|
|
19
20
|
├── Store or recall information?
|
|
@@ -42,13 +43,13 @@ Agent / knowledge-base lifecycle is managed **outside** the MCP surface — typi
|
|
|
42
43
|
| Tool | Purpose |
|
|
43
44
|
|------|---------|
|
|
44
45
|
| `memory_add(text, agent_id, conversation_id, user_id=None, app_id=None, run_id=None, metadata=None, messages=None, datapack_id=None)` | Store fact/preference/entity as long-term memory |
|
|
45
|
-
| `memory_search(query, agent_id, conversation_id="", user_id=None, limit=10, datapack_id=None)` |
|
|
46
|
+
| `memory_search(query, agent_id, conversation_id="", user_id=None, limit=10, datapack_id=None)` | Hybrid search across memories (semantic + keyword + entity boost). `conversation_id` optional (omit or pass `""` for cross-conversation discovery). |
|
|
46
47
|
| `memory_get_by_id(memory_id, agent_id, conversation_id, datapack_id=None)` | Direct pgvector row lookup by UUID. Preferred over `memory_search` for exact-id verification. |
|
|
47
48
|
| `memory_get_all(agent_id, conversation_id, user_id=None, app_id=None, run_id=None, datapack_id=None)` | List all memories for agent |
|
|
48
49
|
| `memory_update(memory_id, text, agent_id, conversation_id, datapack_id=None)` | Overwrite memory text |
|
|
49
50
|
| `memory_delete_by_id(memory_id, agent_id, conversation_id, datapack_id=None)` | Delete a single memory |
|
|
50
51
|
| `memory_delete_all(agent_id, conversation_id, user_id=None, app_id=None, run_id=None, datapack_id=None)` | Delete all memories for agent (destructive) |
|
|
51
|
-
| `memory_promote(conversation_id, memory_ids, agent_id=None, datapack_id=None)` | Promote private memories into the datapack's shared knowledge base (moves them
|
|
52
|
+
| `memory_promote(conversation_id, memory_ids, agent_id=None, datapack_id=None)` | Promote private memories into the datapack's shared knowledge base (moves them out of mem0, then evicts from mem0 — one-way). Owners/maintainers only; viewers/contributors get 403.
|
|
52
53
|
|
|
53
54
|
## Conversation Tools (6)
|
|
54
55
|
|
|
@@ -66,7 +67,7 @@ Agent / knowledge-base lifecycle is managed **outside** the MCP surface — typi
|
|
|
66
67
|
| Tool | Purpose |
|
|
67
68
|
|------|---------|
|
|
68
69
|
| `datapack_create(name)` | Create new datapack |
|
|
69
|
-
| `datapack_list()` | List all datapacks |
|
|
70
|
+
| `datapack_list(conversation_id, datapack_id=None)` | List all datapacks. `conversation_id` is required for trace nesting; omit `datapack_id` to use the endpoint default. |
|
|
70
71
|
| `datapack_describe(datapack_id, include_status=False)` | Describe datapack by UUID |
|
|
71
72
|
| `datapack_update(datapack_id, name=None, description=None)` | Rename a datapack and/or update its description. Pass at least one of `name` / `description`. |
|
|
72
73
|
| `datapack_delete(datapack_id)` | Delete datapack by UUID (irreversible) |
|
|
@@ -11,7 +11,7 @@ Concrete transcripts of the four flows the skill supports on Claude Desktop.
|
|
|
11
11
|
> memory_search(query="meko_active_datapack", agent_id="claude_desktop", limit=1)
|
|
12
12
|
[empty]
|
|
13
13
|
|
|
14
|
-
> datapack_list()
|
|
14
|
+
> datapack_list(conversation_id="<conv-id>")
|
|
15
15
|
[14 entries returned, filtering by "prod-research"]
|
|
16
16
|
|
|
17
17
|
One match: `prod-research`. Pinning.
|
|
@@ -44,7 +44,7 @@ datapack_id flows through automatically.
|
|
|
44
44
|
> memory_search(query="meko_active_datapack", agent_id="claude_desktop", limit=1)
|
|
45
45
|
[returns id=mem_abc123, text="meko_active_datapack=8b1c…f4a2 name=prod-research …"]
|
|
46
46
|
|
|
47
|
-
> datapack_list()
|
|
47
|
+
> datapack_list(conversation_id="<conv-id>")
|
|
48
48
|
[14 entries returned, filtering by "q2-roadmap-deck"]
|
|
49
49
|
|
|
50
50
|
One match: `q2-roadmap-deck`. Switching pin.
|
|
@@ -69,7 +69,7 @@ The `memory_update` is critical here — using `memory_add` again would create a
|
|
|
69
69
|
> memory_search(query="meko_active_datapack", agent_id="claude_desktop", limit=1)
|
|
70
70
|
[empty]
|
|
71
71
|
|
|
72
|
-
> datapack_list()
|
|
72
|
+
> datapack_list(conversation_id="<conv-id>")
|
|
73
73
|
[1 entry returned]
|
|
74
74
|
|
|
75
75
|
Only one datapack: `meko-local-setup`. Auto-selecting.
|