@letta-ai/letta-code 0.31.10 → 0.31.12
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 +17 -15
- package/dist/agent-presets.js +3 -3
- package/dist/agent-presets.js.map +1 -1
- package/dist/mcp-client.js +2 -2
- package/dist/mcp-client.js.map +1 -1
- package/dist/types/agent/skills.d.ts.map +1 -1
- package/dist/types/agent/subagents/manager.d.ts +1 -1
- package/dist/types/backend/api/metadata.d.ts +2 -0
- package/dist/types/backend/api/metadata.d.ts.map +1 -1
- package/dist/types/reminders/state.d.ts +4 -0
- package/dist/types/reminders/state.d.ts.map +1 -1
- package/dist/types/tools/impl/task.d.ts +2 -2
- package/letta.js +796 -864
- package/package.json +1 -1
- package/scripts/source-file-size-baseline.json +2 -2
- package/skills/browser-use/SKILL.md +22 -61
- package/skills/messaging-agents/SKILL.md +17 -17
- package/skills/scheduling-tasks/SKILL.md +1 -1
- package/skills/submitting-feedback/SKILL.md +17 -5
- package/skills/teleporting-between-environments/SKILL.md +12 -12
- package/skills/using-mcp-tools/SKILL.md +44 -0
- package/skills/using-cloud-mcp/SKILL.md +0 -37
package/package.json
CHANGED
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"src/cli/mods/local-mod-loader.test.ts": 1043,
|
|
22
22
|
"src/cli/reflection-transcript.test.ts": 1084,
|
|
23
23
|
"src/cli/subcommands/skills.ts": 1264,
|
|
24
|
-
"src/headless.ts":
|
|
24
|
+
"src/headless.ts": 4986,
|
|
25
25
|
"src/hooks/integration.test.ts": 1147,
|
|
26
|
-
"src/index.ts":
|
|
26
|
+
"src/index.ts": 2773,
|
|
27
27
|
"src/mods/learning-harness.ts": 2434,
|
|
28
28
|
"src/mods/mod-engine.test.ts": 2153,
|
|
29
29
|
"src/mods/mod-engine.ts": 1838,
|
|
@@ -19,66 +19,30 @@ Protocol reference: https://chromedevtools.github.io/devtools-protocol/.
|
|
|
19
19
|
The running browser's exact schema is at `http://127.0.0.1:<port>/json/protocol`;
|
|
20
20
|
tip-of-tree docs can differ from the installed version.
|
|
21
21
|
|
|
22
|
-
##
|
|
23
|
-
|
|
24
|
-
When
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
It starts the managed desktop and launches Chrome through the persistent Cua
|
|
39
|
-
Driver with its required root flag. Then load `computer-use` for visible
|
|
40
|
-
interaction. If protocol-level control is necessary, use Cua Driver's explicit
|
|
41
|
-
`browser_prepare` flow after binding the exact visible window; do not pass
|
|
42
|
-
remote-debugging flags through `launch_app`. The launcher exits zero only
|
|
43
|
-
after Cua Driver reports an on-screen browser window. If it exits nonzero, stop
|
|
44
|
-
and report the launch failure instead of claiming the browser opened.
|
|
22
|
+
## Visible by default when a display exists
|
|
23
|
+
|
|
24
|
+
When the computer has a display, prefer a visible (headful) browser for any
|
|
25
|
+
task the user might watch or take over: clicking or typing, forms, sign-in,
|
|
26
|
+
checkout/payment, CAPTCHAs or bot protection, and user handoff. Most browser
|
|
27
|
+
tasks exist because plain HTTP is not enough; a headless browser is more
|
|
28
|
+
likely to trigger bot protection and gives the user no way to observe or step
|
|
29
|
+
in. Visible does not mean pixel-driven: keep operating the page over CDP, and
|
|
30
|
+
the user sees every action in the window.
|
|
31
|
+
|
|
32
|
+
Use headless mode only for work the user explicitly wants in the background
|
|
33
|
+
and that cannot require interaction or handoff, such as read-only scraping,
|
|
34
|
+
CI, or screenshot/PDF generation, or when no display exists. A headless page
|
|
35
|
+
does not satisfy a request to open or reopen a site in a browser the user can
|
|
36
|
+
see.
|
|
45
37
|
|
|
46
38
|
When the user asks to review, watch, or take over, leave that browser window
|
|
47
39
|
open after the task. Do not kill or close it before replying.
|
|
48
40
|
|
|
49
|
-
1. Run `start-letta-desktop` and use its exit status as the result. Warnings
|
|
50
|
-
from optional services do not mean startup failed when the command exits 0.
|
|
51
|
-
If it exits nonzero, stop and report that the managed desktop is
|
|
52
|
-
unavailable. Never create another Xvfb, VNC server, or private display: the
|
|
53
|
-
Computer viewer only shows the managed desktop.
|
|
54
|
-
2. Load `computer-use`, inspect the managed desktop, and use Cua Driver to
|
|
55
|
-
operate an existing Chrome window or launch Chrome there. When launching,
|
|
56
|
-
round-trip Chrome's `launch_path` from `cua-driver call list_apps '{}'
|
|
57
|
-
instead of rebuilding it; the managed launch path carries required flags.
|
|
58
|
-
For forms, sign-in, checkout, CAPTCHA, and bot-protected pages, keep using
|
|
59
|
-
Cua Driver so the interaction remains visible and available for user
|
|
60
|
-
takeover.
|
|
61
|
-
3. Use CDP only when protocol-level inspection or deterministic automation is
|
|
62
|
-
needed. Bind the exact visible browser window with Cua Driver, then use its
|
|
63
|
-
explicit `browser_prepare` flow. Do not pass remote-debugging flags
|
|
64
|
-
through `launch_app`. Include `--no-sandbox` when running Chrome as
|
|
65
|
-
root. Do not add `--headless` or override `DISPLAY`.
|
|
66
|
-
4. Use headless mode only for work the user explicitly wants in the background
|
|
67
|
-
and that cannot require interaction or handoff, such as read-only scraping,
|
|
68
|
-
CI, or screenshot/PDF generation.
|
|
69
|
-
5. Verify the result through the managed desktop window (Cua Driver window
|
|
70
|
-
state or screenshot), not only through DOM output or a screenshot from a
|
|
71
|
-
separate process.
|
|
72
|
-
|
|
73
|
-
A headless page does not satisfy a request to open or reopen a site in the
|
|
74
|
-
user-visible browser.
|
|
75
|
-
|
|
76
41
|
## Workflow
|
|
77
42
|
|
|
78
43
|
1. Find a Chromium-based browser (below). If none exists, see "No Chrome installed".
|
|
79
|
-
2.
|
|
80
|
-
|
|
81
|
-
attach to the user's normal profile unless explicitly asked.
|
|
44
|
+
2. Launch with a dedicated profile and remote debugging. Never attach to the
|
|
45
|
+
user's normal profile unless explicitly asked.
|
|
82
46
|
3. Discover targets via `/json/list`; pick the `"page"` target by URL or title.
|
|
83
47
|
4. Connect to its `webSocketDebuggerUrl` and enable only the domains you need
|
|
84
48
|
(usually `Page`, `Runtime`, `DOM`, `Input`; add `Network`, `Log` when debugging).
|
|
@@ -124,7 +88,7 @@ Tell the user that browser use requires Chrome or another Chromium-based
|
|
|
124
88
|
browser and recommend either:
|
|
125
89
|
|
|
126
90
|
1. Install Chrome on the current computer, then retry the browser task.
|
|
127
|
-
2. Teleport the conversation back to its Cloud sandbox, where
|
|
91
|
+
2. Teleport the conversation back to its Cloud sandbox, where a
|
|
128
92
|
browser is already installed.
|
|
129
93
|
|
|
130
94
|
Wait for the user to choose. Do not silently replace the browser task with
|
|
@@ -132,9 +96,8 @@ plain HTTP or claim browser automation succeeded.
|
|
|
132
96
|
|
|
133
97
|
## Launching
|
|
134
98
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
`id -u` is 0:
|
|
99
|
+
Use a disposable profile and a fixed port. Chrome refuses to run as root
|
|
100
|
+
without `--no-sandbox`, so add that flag when `id -u` is 0:
|
|
138
101
|
|
|
139
102
|
```bash
|
|
140
103
|
chrome_args=( \
|
|
@@ -149,10 +112,8 @@ chrome_args=( \
|
|
|
149
112
|
"$CHROME" "${chrome_args[@]}" https://example.com
|
|
150
113
|
```
|
|
151
114
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
the visible-browser rule above and never replace its managed display with a
|
|
155
|
-
private one.
|
|
115
|
+
Add `--headless=new` only for explicitly invisible work or when no display
|
|
116
|
+
exists (see "Visible by default" above).
|
|
156
117
|
With `--remote-debugging-port=0`, read the chosen port from
|
|
157
118
|
`<user-data-dir>/DevToolsActivePort`. Launch in the background and poll
|
|
158
119
|
`http://127.0.0.1:9222/json/version` until it responds.
|
|
@@ -66,15 +66,15 @@ Results include `agent_id` for each matching message.
|
|
|
66
66
|
letta -p --from-agent $LETTA_AGENT_ID --agent <id> "message text"
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
When no `--
|
|
70
|
-
|
|
69
|
+
When no `--computer` is specified, the target agent will run on the same
|
|
70
|
+
computer as the caller agent.
|
|
71
71
|
|
|
72
|
-
To route the target agent turn through a specific remote/local
|
|
72
|
+
To route the target agent turn through a specific remote/local computer:
|
|
73
73
|
|
|
74
74
|
```bash
|
|
75
75
|
letta -p --from-agent $LETTA_AGENT_ID \
|
|
76
76
|
--agent <id> \
|
|
77
|
-
--
|
|
77
|
+
--computer <name-or-device-id-or-connection-id> \
|
|
78
78
|
"message text"
|
|
79
79
|
```
|
|
80
80
|
|
|
@@ -83,7 +83,7 @@ letta -p --from-agent $LETTA_AGENT_ID \
|
|
|
83
83
|
|-----|----------|-------------|
|
|
84
84
|
| `--agent <id>` | Yes | Target agent ID to message |
|
|
85
85
|
| `--from-agent <id>` | Yes | Sender agent ID (injects agent-to-agent system reminder) |
|
|
86
|
-
| `--
|
|
86
|
+
| `--computer <selector>` | No | Route through an online computer by connection name, device ID, or connection ID |
|
|
87
87
|
| `"message text"` | Yes | Message body (positional after flags) |
|
|
88
88
|
|
|
89
89
|
**Example:**
|
|
@@ -109,34 +109,34 @@ letta -p --from-agent $LETTA_AGENT_ID \
|
|
|
109
109
|
letta -p --from-agent $LETTA_AGENT_ID --conversation <id> "message text"
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
-
Add `--
|
|
112
|
+
Add `--computer <selector>` to continue the conversation on a specific computer.
|
|
113
113
|
|
|
114
|
-
### Discovering
|
|
114
|
+
### Discovering Computers
|
|
115
115
|
|
|
116
116
|
```bash
|
|
117
|
-
letta
|
|
117
|
+
letta computers list --online-only
|
|
118
118
|
# alias:
|
|
119
119
|
letta envs list --online-only
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
Use `connectionName`, `deviceId`, or `connectionId` from the JSON output as the
|
|
123
|
-
`--
|
|
124
|
-
`connectionId`. In `
|
|
123
|
+
`--computer` selector. If a name is ambiguous, prefer `deviceId` or
|
|
124
|
+
`connectionId`. In `computers list`, the current local runtime is marked with
|
|
125
125
|
`"isCurrent": true`.
|
|
126
126
|
|
|
127
|
-
To force the target agent onto the current registered Letta Code
|
|
128
|
-
resolve the current
|
|
127
|
+
To force the target agent onto the current registered Letta Code computer,
|
|
128
|
+
resolve the current computer and pass its `connectionId`:
|
|
129
129
|
|
|
130
130
|
```bash
|
|
131
|
-
|
|
131
|
+
CURRENT_COMPUTER=$(letta computers current | jq -r .connectionId)
|
|
132
132
|
letta -p --from-agent $LETTA_AGENT_ID \
|
|
133
133
|
--agent agent-abc123 \
|
|
134
|
-
--
|
|
135
|
-
"Run on my same
|
|
134
|
+
--computer "$CURRENT_COMPUTER" \
|
|
135
|
+
"Run on my same computer."
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
-
Omit `--
|
|
139
|
-
|
|
138
|
+
Omit `--computer` when you want the target agent to run on the same computer as
|
|
139
|
+
the caller agent.
|
|
140
140
|
|
|
141
141
|
**Arguments:**
|
|
142
142
|
| Arg | Required | Description |
|
|
@@ -21,7 +21,7 @@ This skill lets you create, list, and manage scheduled tasks using the `letta cr
|
|
|
21
21
|
Pass a flag only when you have a requirement the default can't infer:
|
|
22
22
|
|
|
23
23
|
- **`--runner cloud`** — the schedule must fire no matter which computers are online; execute in the agent's cloud sandbox.
|
|
24
|
-
- **`--computer <deviceId>`** — the work needs a specific connected computer (its filesystem, services, or credentials). Get the deviceId from `letta
|
|
24
|
+
- **`--computer <deviceId>`** — the work needs a specific connected computer (its filesystem, services, or credentials). Get the deviceId from `letta computers list`. If that computer is offline at fire time, execution falls back to the cloud sandbox.
|
|
25
25
|
- **`--runner local`** — the work must only ever run on the current computer, even if that means missing fires while no session is running here.
|
|
26
26
|
|
|
27
27
|
The CLI reports its placement in the command output. If it warns that the schedule is local (this happens when the cloud scheduler cannot reach the current computer), the schedule only fires while a Letta session is running here — read the warning and decide whether that's acceptable.
|
|
@@ -1,21 +1,33 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: submitting-feedback
|
|
3
|
-
description: Submits user-approved feedback about Letta Code
|
|
3
|
+
description: Submits user-approved product feedback and bug reports about Letta Code to the Letta team. Load when the user reports a Letta Code bug, requests a product or developer change, or explicitly asks to send feedback. Do not load for corrections to the current agent's behavior or preferences; those are memory edits. Works with cloud-hosted and local agents. Ask before submitting unless the user already explicitly requested submission.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Submitting Feedback
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Use this skill for product and developer feedback about Letta Code: reproducible bugs, broken features, confusing product behavior, and requested changes to the software or its developer-facing behavior.
|
|
9
|
+
|
|
10
|
+
Do **not** use this skill when the user corrects how the current agent should behave, communicate, remember, or work with them. Treat that as learning: make the appropriate memory edit so the correction changes the agent's future behavior. A user's frustration with the agent is not by itself product feedback and is not a reason to offer feedback submission.
|
|
9
11
|
|
|
10
12
|
If the user says yes, or directly asks you to submit feedback:
|
|
11
13
|
|
|
12
|
-
1.
|
|
13
|
-
2.
|
|
14
|
+
1. Gather the relevant context already available in the conversation and environment. If a detail essential to understanding or reproducing the problem is missing, ask the user one focused question before submitting. Do not invent missing details.
|
|
15
|
+
2. Write a concise, factual report in your own voice as the agent. Do not impersonate the user or make the report sound user-authored. The first line must disclose: `Agent-submitted feedback on behalf of the user.`
|
|
16
|
+
|
|
17
|
+
Include:
|
|
18
|
+
- Your agent name.
|
|
19
|
+
- Who you are working with (the user's name or role, if known; otherwise say `user not identified`).
|
|
20
|
+
- The task or goal underway when the problem occurred and enough surrounding context to understand why it mattered.
|
|
21
|
+
- What actually happened, what the user expected, and the impact on the task.
|
|
22
|
+
- Concrete evidence already available, such as exact error text, the failed command or action, relevant paths or links, and reliable reproduction steps. Distinguish what the user reported from what you observed or inferred.
|
|
23
|
+
|
|
24
|
+
Prefer specific nouns and observable behavior over generic judgments. Do not submit context-free summaries such as “the feature is broken,” “the UX should be improved,” or polished product-language filler. Keep unknowns explicit rather than guessing.
|
|
25
|
+
3. Submit it with:
|
|
14
26
|
|
|
15
27
|
```bash
|
|
16
28
|
letta feedback --message '<feedback>'
|
|
17
29
|
```
|
|
18
30
|
|
|
19
|
-
|
|
31
|
+
4. Tell the user whether submission succeeded. If it failed, report the safe CLI error and do not claim the team received it.
|
|
20
32
|
|
|
21
33
|
Do not include secrets, credentials, unrelated conversation content, or private file contents. The command adds the current agent and conversation identifiers so the team can find the relevant run.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: teleporting-between-environments
|
|
3
|
-
description: Moves the current agent conversation to Cloud, Desktop Local, or another
|
|
3
|
+
description: Moves the current agent conversation to Cloud, Desktop Local, or another connected computer while coordinating machine-local files and setup. Use when the user says "let's continue this task on cloud", asks to continue or move work on another connected computer, wants to teleport between computers, or needs to upload or download artifacts before a handoff.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Teleporting Between
|
|
6
|
+
# Teleporting Between Computers
|
|
7
7
|
|
|
8
8
|
Teleport the current agent and conversation without losing conversational memory. Prepare machine-local state first, then let the destination continue the same task.
|
|
9
9
|
|
|
@@ -20,13 +20,13 @@ Teleport the current agent and conversation without losing conversational memory
|
|
|
20
20
|
letta teleport list
|
|
21
21
|
letta teleport cloud
|
|
22
22
|
letta teleport local
|
|
23
|
-
letta teleport <
|
|
23
|
+
letta teleport <computer>
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
- `list`: show accessible online Cloud-registered targets.
|
|
27
27
|
- `cloud`: create or resume this conversation’s managed Cloud sandbox.
|
|
28
|
-
- `local`: target the one online Letta Desktop
|
|
29
|
-
- `<
|
|
28
|
+
- `local`: target the one online Letta Desktop computer. Desktop Remote Access must be enabled. If several Desktop computers are online, use `list` and target one explicitly.
|
|
29
|
+
- `<computer>`: target a listed remote computer by its friendly selector.
|
|
30
30
|
|
|
31
31
|
Do not run or recommend `letta teleport back`; return to Desktop with `local`.
|
|
32
32
|
|
|
@@ -79,21 +79,21 @@ If the command reports an offline, stale, unsupported, same-source, or startup e
|
|
|
79
79
|
|
|
80
80
|
### Return to Desktop Local
|
|
81
81
|
|
|
82
|
-
1. Retain the next local action and any setup the Desktop
|
|
83
|
-
2. Confirm Desktop is open with Remote Access enabled. If more than one Desktop
|
|
82
|
+
1. Retain the next local action and any setup the Desktop computer needs.
|
|
83
|
+
2. Confirm Desktop is open with Remote Access enabled. If more than one Desktop computer is online, use `letta teleport list` and choose one explicitly.
|
|
84
84
|
3. As the final action, run:
|
|
85
85
|
|
|
86
86
|
```bash
|
|
87
87
|
letta teleport local
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
### Run a separate headless turn on
|
|
90
|
+
### Run a separate headless turn on a computer
|
|
91
91
|
|
|
92
|
-
Use `--
|
|
92
|
+
Use `--computer` when a separate headless invocation, rather than the current conversation handoff, should execute on Cloud or another online computer:
|
|
93
93
|
|
|
94
94
|
```bash
|
|
95
|
-
letta -p --conversation <id> --
|
|
96
|
-
letta -p --conversation <id> --
|
|
95
|
+
letta -p --conversation <id> --computer cloud "<prompt>"
|
|
96
|
+
letta -p --conversation <id> --computer <name|device-id|connection-id> "<prompt>"
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
This routes that headless message only. Use `letta teleport ...` to move the currently executing conversation.
|
|
@@ -110,5 +110,5 @@ This routes that headless message only. Use `letta teleport ...` to move the cur
|
|
|
110
110
|
3. As the final action, run:
|
|
111
111
|
|
|
112
112
|
```bash
|
|
113
|
-
letta teleport <
|
|
113
|
+
letta teleport <computer>
|
|
114
114
|
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: using-mcp-tools
|
|
3
|
+
description: Reference for the `letta mcp` CLI, which finds and invokes MCP tools available to this agent. A system reminder already lists your connected MCP servers and the basic search/schema/call commands; invoke this skill when you need more — browsing a server's tools, passing large or file-based arguments, tuning search, or troubleshooting missing servers, tools, and errors.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Using MCP tools
|
|
7
|
+
|
|
8
|
+
`letta mcp` gives the agent one unified view of every MCP server it can reach: servers connected to the agent in Letta Cloud and servers configured locally on this machine. It works from any surface where the agent runs — cloud sandboxes (chat.letta.com), Letta Desktop, and terminals. All output is JSON.
|
|
9
|
+
|
|
10
|
+
## Commands
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
letta mcp list # servers: [{name, transport}]
|
|
14
|
+
letta mcp get <server> # one server's connection configuration (credentials redacted)
|
|
15
|
+
letta mcp tools [server] # tool names + descriptions only
|
|
16
|
+
letta mcp tools [server] --full # ...including every tool's complete schema
|
|
17
|
+
letta mcp schema <tool-name> # one tool's complete schema
|
|
18
|
+
letta mcp search <query> [--mode] [--limit] # ranked tool schemas: [{tool, rank, score}]
|
|
19
|
+
letta mcp call <tool-name> [--args | --args-file] # run a tool, print a CallToolResult
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Every command accepts `--agent <id>`, defaulting to `LETTA_AGENT_ID`/`AGENT_ID` — do not pass it unless targeting another agent.
|
|
23
|
+
|
|
24
|
+
## Search options
|
|
25
|
+
|
|
26
|
+
- `--mode <hybrid|vector|fts>` — default `hybrid`. `vector` uses server-side embeddings and covers only cloud-connected servers; `fts` and `hybrid` also rank local tools lexically. Agents on a local backend cannot use `vector`.
|
|
27
|
+
- `--limit <n>` — result count, 1-100 (default 5).
|
|
28
|
+
- Rank order is meaningful; absolute scores are not comparable across queries. When even the top results look unrelated to the query, no relevant tool likely exists — do not force the best-ranked one.
|
|
29
|
+
|
|
30
|
+
## Call arguments and results
|
|
31
|
+
|
|
32
|
+
- `--args '<json>'` — inline JSON object.
|
|
33
|
+
- `--args-file <path>` — read the JSON object from a file; `--args-file -` reads stdin. Use these for large or shell-quoting-hostile payloads.
|
|
34
|
+
- Output is an MCP CallToolResult: `content` (array of typed blocks), optional `structuredContent`, and `isError`.
|
|
35
|
+
- Exit codes: `0` success, `1` CLI/usage error (JSON on stderr: `{error: {code, message, hint?}}`), `2` the tool ran and returned an error result — read `content` for the server's message, fix the arguments, and retry.
|
|
36
|
+
- Summarize relevant results instead of pasting large raw payloads.
|
|
37
|
+
|
|
38
|
+
## Troubleshooting
|
|
39
|
+
|
|
40
|
+
- `list` empty → no MCP servers are available. Ask the user to connect one on the Letta Cloud MCP servers page or configure a local one in the Letta Code app.
|
|
41
|
+
- Cloud server with no tools (or `0 tools` in the reminder) → tools were never synced. Ask the user to resync it from the MCP servers page; the CLI has no refresh action.
|
|
42
|
+
- `unauthorized` or another auth error on `call` → the server's stored credentials are missing or stale (`tools` can still list from previously synced rows). Ask the user to re-authenticate the server: cloud servers on the MCP servers page, local OAuth servers by connecting once in the Letta Code app — this CLI is non-interactive and only reuses persisted credentials.
|
|
43
|
+
- `ambiguous_server_name` → two servers share a name; the error hint explains how to disambiguate.
|
|
44
|
+
- Duplicate tool names across servers get a numeric suffix (`_2`); the printed name is always the callable one.
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: using-cloud-mcp
|
|
3
|
-
description: Uses MCP servers connected to the current Letta Cloud agent (cloud MCP). Load when the user asks to use a connected MCP server, list the agent's MCP servers or MCP tools, run an MCP tool connected in ADE/chat, or mentions cloud MCP, server-side MCP, agent MCP, or `letta cloud-mcp`.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Using Cloud MCP
|
|
7
|
-
|
|
8
|
-
Letta Cloud stores MCP server connections per agent. The `letta cloud-mcp` CLI lists and runs those servers' tools through the Letta API, so it works from any surface where the agent runs: cloud sandboxes (chat.letta.com), Letta Desktop, and terminals.
|
|
9
|
-
|
|
10
|
-
## Workflow
|
|
11
|
-
|
|
12
|
-
1. List MCP servers connected to this agent:
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
letta cloud-mcp list
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
2. Pick the relevant `id` from the JSON output, then list its tools:
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
letta cloud-mcp tools <mcp-server-id>
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
3. Pick a tool `id`, inspect its name and description, and run it with a JSON object:
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
letta cloud-mcp run <mcp-server-id> <tool-id> --args '{"key":"value"}'
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Rules
|
|
31
|
-
|
|
32
|
-
- Do not ask for an agent ID unless the user wants another agent. The CLI reads `LETTA_AGENT_ID`/`AGENT_ID` from the environment.
|
|
33
|
-
- Treat command output as JSON. Summarize relevant results instead of pasting large raw payloads.
|
|
34
|
-
- If `list` is empty, ask the user to connect an MCP server to the agent on the MCP servers page.
|
|
35
|
-
- If `tools` is empty for a connected server, the server's tools were never synced. Ask the user to resync the server from the MCP servers page; the CLI has no refresh action.
|
|
36
|
-
- If a connected server has type `stdio`, its tools cannot run on hosted Letta Cloud. Tell the user instead of retrying.
|
|
37
|
-
- This requires a signed-in Letta Cloud agent. MCP servers configured locally in the terminal (`/mcp`) are unrelated to this CLI.
|