@toolbeltai/skills 0.2.4 → 1.0.6
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 +30 -35
- package/bin/install.js +17 -4
- package/package.json +3 -10
- package/toolbelt/SKILL.md +288 -0
- package/assets/demos/fake-curl.sh +0 -3
- package/assets/demos/toolbelt-geo-demo.sh +0 -85
- package/assets/demos/toolbelt-start-demo.sh +0 -66
- package/assets/geo-analyst-demo.gif +0 -0
- package/assets/run-toolbelt-demo.gif +0 -0
- package/assets/signup-demo.gif +0 -0
- package/assets/toolbelt-geo-demo.gif +0 -0
- package/assets/toolbelt-start-demo.gif +0 -0
- package/toolbelt-analyze/SKILL.md +0 -307
- package/toolbelt-entities/SKILL.md +0 -351
- package/toolbelt-find/SKILL.md +0 -257
- package/toolbelt-geo/README.md +0 -7
- package/toolbelt-geo/SKILL.md +0 -239
- package/toolbelt-invite/SKILL.md +0 -214
- package/toolbelt-start/README.md +0 -122
- package/toolbelt-start/SKILL.md +0 -235
- package/toolbelt-stream/SKILL.md +0 -347
package/README.md
CHANGED
|
@@ -1,63 +1,58 @@
|
|
|
1
1
|
# @toolbeltai/skills
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
The official skill for [Toolbelt](https://toolbelt.ai). Installs one
|
|
4
|
+
`/toolbelt` skill that any MCP-capable agent can use to connect to a
|
|
5
|
+
Toolbelt namespace and hand off to Toolbelt's MCP tools.
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
[](https://www.npmjs.com/package/@toolbeltai/skills)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
|
|
10
|
+
## Install
|
|
7
11
|
|
|
8
12
|
```bash
|
|
9
13
|
npx @toolbeltai/skills install
|
|
10
14
|
```
|
|
11
15
|
|
|
12
|
-
Copies
|
|
13
|
-
|
|
14
|
-
`/toolbelt
|
|
15
|
-
|
|
16
|
-
No account required; no network calls to Toolbelt. Skills work against any
|
|
17
|
-
Toolbelt MCP server (cloud or self-hosted).
|
|
16
|
+
Copies `toolbelt/SKILL.md` into `~/.claude/skills/toolbelt/` (flat
|
|
17
|
+
layout per the [AgentSkills spec](https://agentskills.io)). Restart your
|
|
18
|
+
client; the skill appears as `/toolbelt`.
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
No Toolbelt account required — the skill provisions one on first use.
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
## What the skill does
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
npx @toolbeltai/cli
|
|
25
|
-
```
|
|
24
|
+
When an agent runs `/toolbelt` for the first time, it:
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
1. Checks for an existing Toolbelt MCP connection.
|
|
27
|
+
2. If none, calls the public `/api/onboard` endpoint to provision a
|
|
28
|
+
free anonymous account.
|
|
29
|
+
3. Writes the MCP connection into the agent's client config.
|
|
30
|
+
4. Hands off to Toolbelt's MCP tools for the actual work.
|
|
29
31
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
| Skill | Command | What it does |
|
|
33
|
-
| --- | --- | --- |
|
|
34
|
-
| [toolbelt-start](toolbelt-start/) | `/toolbelt-start` | Onboard end-to-end — provision, ingest, first query |
|
|
35
|
-
| [toolbelt-analyze](toolbelt-analyze/) | `/toolbelt-analyze` | Upload 1+ CSVs, ask in plain English, get SQL answers (single-table or multi-table JOIN) |
|
|
36
|
-
| [toolbelt-find](toolbelt-find/) | `/toolbelt-find` | Upload a document, retrieve passages by semantic similarity |
|
|
37
|
-
| [toolbelt-entities](toolbelt-entities/) | `/toolbelt-entities` | Auto-extract entities and relationships from docs, explore with Cypher |
|
|
38
|
-
| [toolbelt-geo](toolbelt-geo/) | `/toolbelt-geo` | GPU-accelerated geospatial — distance, containment, routing, map rendering |
|
|
39
|
-
| [toolbelt-stream](toolbelt-stream/) | `/toolbelt-stream` | Connect Kafka, aggregate over windows, detect anomalies |
|
|
40
|
-
| [toolbelt-invite](toolbelt-invite/) | `/toolbelt-invite` | Emit a connection URL so another agent can join this workspace |
|
|
32
|
+
Full playbook in [toolbelt/SKILL.md](toolbelt/SKILL.md).
|
|
41
33
|
|
|
42
34
|
## Works with
|
|
43
35
|
|
|
44
|
-
Claude Code · OpenClaw · Cursor · Gemini CLI · Codex
|
|
36
|
+
Claude Code · Claude Desktop · OpenClaw · Cursor · Gemini CLI · Codex
|
|
37
|
+
CLI · Windsurf · any MCP client.
|
|
45
38
|
|
|
46
39
|
## Commands
|
|
47
40
|
|
|
48
41
|
```bash
|
|
49
|
-
npx @toolbeltai/skills install # install
|
|
50
|
-
npx @toolbeltai/skills uninstall # remove
|
|
51
|
-
npx @toolbeltai/skills list #
|
|
42
|
+
npx @toolbeltai/skills install # install
|
|
43
|
+
npx @toolbeltai/skills uninstall # remove
|
|
44
|
+
npx @toolbeltai/skills list # show what would install
|
|
52
45
|
npx @toolbeltai/skills path # print install target
|
|
53
46
|
```
|
|
54
47
|
|
|
55
|
-
##
|
|
48
|
+
## Links
|
|
56
49
|
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
50
|
+
- Site: <https://toolbelt.ai>
|
|
51
|
+
- Docs: <https://toolbelt.ai/docs>
|
|
52
|
+
- App / billing: <https://app.toolbelt.ai>
|
|
60
53
|
- Contributing: [CONTRIBUTING.md](./CONTRIBUTING.md)
|
|
54
|
+
- Releasing: [RELEASING.md](./RELEASING.md)
|
|
55
|
+
- Support: <support@toolbelt.ai>
|
|
61
56
|
|
|
62
57
|
## License
|
|
63
58
|
|
package/bin/install.js
CHANGED
|
@@ -26,11 +26,16 @@ const PKG_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..');
|
|
|
26
26
|
const TARGET = join(homedir(), '.claude', 'skills');
|
|
27
27
|
const LEGACY_NESTED_DIR = join(TARGET, 'toolbelt');
|
|
28
28
|
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
29
|
+
// Skill folder names that earlier versions of this package installed
|
|
30
|
+
// but no longer ship. Removed on install so upgraders don't see ghost
|
|
31
|
+
// slash commands for skills that were renamed, merged, or collapsed.
|
|
32
|
+
//
|
|
33
|
+
// v0.1.x → v0.2.0 prefix rename + a couple of merges
|
|
34
|
+
// v0.2.x → v1.0.0 seven task skills collapsed into one `toolbelt`
|
|
35
|
+
//
|
|
36
|
+
// Safe to drop these in a future major once the userbase has cycled.
|
|
33
37
|
const LEGACY_SKILL_NAMES = [
|
|
38
|
+
// pre-v0.2.0
|
|
34
39
|
'run-toolbelt',
|
|
35
40
|
'sql-analyst',
|
|
36
41
|
'data-blend',
|
|
@@ -39,6 +44,14 @@ const LEGACY_SKILL_NAMES = [
|
|
|
39
44
|
'geo-analyst',
|
|
40
45
|
'streaming-analyst',
|
|
41
46
|
'multi-agent-workspace',
|
|
47
|
+
// pre-v1.0.0 (the seven that collapsed into the flagship)
|
|
48
|
+
'toolbelt-start',
|
|
49
|
+
'toolbelt-analyze',
|
|
50
|
+
'toolbelt-find',
|
|
51
|
+
'toolbelt-entities',
|
|
52
|
+
'toolbelt-geo',
|
|
53
|
+
'toolbelt-stream',
|
|
54
|
+
'toolbelt-invite',
|
|
42
55
|
];
|
|
43
56
|
|
|
44
57
|
/** Any top-level directory containing a SKILL.md is a skill. */
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toolbeltai/skills",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Official Toolbelt
|
|
3
|
+
"version": "1.0.6",
|
|
4
|
+
"description": "Official Toolbelt skill — one /toolbelt slash command that gives any MCP-capable agent a shared brain for your data. Detects or provisions a free Toolbelt account, configures the MCP connection, and hands off to Toolbelt's MCP tools (vector, knowledge graph, SQL, geospatial, streaming, timeline).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://toolbelt.ai",
|
|
7
7
|
"repository": {
|
|
@@ -31,14 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"files": [
|
|
33
33
|
"bin",
|
|
34
|
-
"
|
|
35
|
-
"toolbelt-start",
|
|
36
|
-
"toolbelt-analyze",
|
|
37
|
-
"toolbelt-find",
|
|
38
|
-
"toolbelt-entities",
|
|
39
|
-
"toolbelt-geo",
|
|
40
|
-
"toolbelt-stream",
|
|
41
|
-
"toolbelt-invite",
|
|
34
|
+
"toolbelt",
|
|
42
35
|
"LICENSE",
|
|
43
36
|
"README.md"
|
|
44
37
|
],
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: toolbelt
|
|
3
|
+
description: >
|
|
4
|
+
Toolbelt is a collaborative substrate for your agents — one shared brain
|
|
5
|
+
for your data. Connect AI agents to vector search, knowledge graph, SQL,
|
|
6
|
+
geospatial, and streaming data through one MCP server. Findings,
|
|
7
|
+
decisions, and observations persist across sessions and across agents.
|
|
8
|
+
|
|
9
|
+
Use this skill at the start of any task where an agent needs persistent
|
|
10
|
+
memory across sessions, natural-language access to structured or
|
|
11
|
+
unstructured data, or shared state with other agents working on the same
|
|
12
|
+
data. The skill handles first-time setup: provisions a free Toolbelt
|
|
13
|
+
account if none exists, configures the MCP connection in the agent's
|
|
14
|
+
client, optionally upgrades the account by email, and hands off to
|
|
15
|
+
Toolbelt's MCP tools for the actual work.
|
|
16
|
+
|
|
17
|
+
NOT for one-off lookups that don't benefit from persistent memory or
|
|
18
|
+
structured data — use the agent's native tools for those.
|
|
19
|
+
license: MIT
|
|
20
|
+
compatibility: >
|
|
21
|
+
Requires an MCP-compatible AI agent (Claude Code, Claude Desktop,
|
|
22
|
+
OpenClaw, Cursor, Windsurf, Gemini CLI, Codex CLI, or any client that
|
|
23
|
+
supports MCP server connections). No Toolbelt account required — this
|
|
24
|
+
skill provisions one on first use.
|
|
25
|
+
version: "1.0.0"
|
|
26
|
+
metadata:
|
|
27
|
+
author: toolbeltai
|
|
28
|
+
homepage: "https://toolbelt.ai"
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
# Toolbelt — A collaborative substrate for your agents
|
|
32
|
+
|
|
33
|
+
**Your data. Your agents. One shared brain.**
|
|
34
|
+
|
|
35
|
+
Toolbelt connects AI agents to vector search, knowledge graph, SQL,
|
|
36
|
+
geospatial, and streaming data through one MCP server. Findings,
|
|
37
|
+
decisions, and observations persist across sessions and across agents.
|
|
38
|
+
|
|
39
|
+
## Two surfaces — keep them straight
|
|
40
|
+
|
|
41
|
+
Toolbelt has exactly two surfaces. Knowing which is which is the most
|
|
42
|
+
important thing in this skill:
|
|
43
|
+
|
|
44
|
+
| Surface | URL | Who uses it | When |
|
|
45
|
+
|---|---|---|---|
|
|
46
|
+
| **MCP server** (the agentic surface) | `https://mcp.toolbelt.ai/mcp` | **Agents** | Every data operation. This is where the agentic flow happens — search, SQL, knowledge graph, record findings, read timeline. |
|
|
47
|
+
| **app.toolbelt.ai** (the human web UI) | `https://app.toolbelt.ai` | **Humans** (in a browser) | Sign in, view/manage namespaces, billing, Pro/Team upgrade. Plus a small HTTP API at `/api/onboard*` used **once** during setup. |
|
|
48
|
+
|
|
49
|
+
**Rule: once the MCP connection is configured (Phase 3 below), the agent
|
|
50
|
+
NEVER talks to `app.toolbelt.ai` again** — every subsequent action goes
|
|
51
|
+
through MCP. The only reason to mention `app.toolbelt.ai` to a user
|
|
52
|
+
after setup is when they want to do something only a human can do
|
|
53
|
+
(billing, viewing the namespace in a UI, claiming the account).
|
|
54
|
+
|
|
55
|
+
## When to invoke this skill
|
|
56
|
+
|
|
57
|
+
Run at the start of any task that:
|
|
58
|
+
|
|
59
|
+
- Mentions Toolbelt by name.
|
|
60
|
+
- Needs persistent memory across turns or sessions.
|
|
61
|
+
- Needs natural-language access to structured or unstructured data.
|
|
62
|
+
- Involves multiple agents collaborating on the same data.
|
|
63
|
+
- Would otherwise require wiring up several separate MCP tools.
|
|
64
|
+
|
|
65
|
+
## Phases — execute in order, no human prompts unless explicitly stated
|
|
66
|
+
|
|
67
|
+
### Phase 1 — Detect existing connection
|
|
68
|
+
|
|
69
|
+
Try calling the Toolbelt MCP tool `toolbelt_list_namespaces`.
|
|
70
|
+
|
|
71
|
+
- Returns successfully → user is already connected → skip to **Phase 4**.
|
|
72
|
+
- Tool unavailable or returns auth error → continue to **Phase 2**.
|
|
73
|
+
|
|
74
|
+
### Phase 2 — Provision a free Toolbelt account (one HTTP call)
|
|
75
|
+
|
|
76
|
+
This is the only time the agent hits `app.toolbelt.ai`'s HTTP API
|
|
77
|
+
directly. Anonymous; no auth required.
|
|
78
|
+
|
|
79
|
+
```http
|
|
80
|
+
POST https://app.toolbelt.ai/api/onboard
|
|
81
|
+
Content-Type: application/json
|
|
82
|
+
|
|
83
|
+
{}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Response shape (verify against this exact structure):
|
|
87
|
+
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"success": true,
|
|
91
|
+
"user": { "id": "@anon_..." },
|
|
92
|
+
"namespace": { "id": "<uuid>", "name": "My Namespace" },
|
|
93
|
+
"mcpUrl": "https://mcp.toolbelt.ai/mcp",
|
|
94
|
+
"token": "tb_...",
|
|
95
|
+
"expiresAt": "<ISO timestamp>"
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Capture: `token`, `mcpUrl`, `user.id`, `namespace.id`, `expiresAt`. The
|
|
100
|
+
`token` doubles as the auth bearer for both MCP calls **and** the
|
|
101
|
+
optional `/claim` upgrade in Phase 5.
|
|
102
|
+
|
|
103
|
+
The account starts on the **Anonymous** tier (see "Tiers and quotas"
|
|
104
|
+
below) and the token expires per `expiresAt` (30 days). Claim by email
|
|
105
|
+
in Phase 5 to make it persistent.
|
|
106
|
+
|
|
107
|
+
### Phase 3 — Configure the agent's MCP client (one-time)
|
|
108
|
+
|
|
109
|
+
Write the MCP connection into the agent's client config. The shape is
|
|
110
|
+
identical across clients — only the file path differs.
|
|
111
|
+
|
|
112
|
+
**Claude Code (CLI):**
|
|
113
|
+
```bash
|
|
114
|
+
claude mcp add toolbelt \
|
|
115
|
+
--transport http <mcpUrl> \
|
|
116
|
+
--header "Authorization: Bearer <token>"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Claude Desktop / Cursor / Windsurf / OpenClaw / Gemini CLI / Codex CLI** —
|
|
120
|
+
add to the client's MCP config JSON:
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"mcpServers": {
|
|
125
|
+
"toolbelt": {
|
|
126
|
+
"url": "<mcpUrl>",
|
|
127
|
+
"headers": { "Authorization": "Bearer <token>" }
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Config file locations:
|
|
134
|
+
|
|
135
|
+
| Client | Path |
|
|
136
|
+
|---|---|
|
|
137
|
+
| Claude Desktop (macOS) | `~/Library/Application Support/Claude/claude_desktop_config.json` |
|
|
138
|
+
| Claude Desktop (Windows) | `%APPDATA%\Claude\claude_desktop_config.json` |
|
|
139
|
+
| Cursor | `~/.cursor/mcp.json` |
|
|
140
|
+
| Windsurf | `~/.codeium/windsurf/mcp_config.json` |
|
|
141
|
+
| OpenClaw | `~/.openclaw/mcp.json` |
|
|
142
|
+
| Gemini CLI | `~/.gemini/mcp.json` |
|
|
143
|
+
| Codex CLI | `~/.codex/mcp.json` |
|
|
144
|
+
|
|
145
|
+
Tell the user **once**: "Toolbelt is provisioned. Reload your MCP
|
|
146
|
+
connection to activate it." Most clients pick up changes on next
|
|
147
|
+
request; some need a restart.
|
|
148
|
+
|
|
149
|
+
### Phase 4 — Orient, then hand off (everything happens over MCP from here on)
|
|
150
|
+
|
|
151
|
+
Call `toolbelt_context(namespace_id)` first. It returns the namespace's
|
|
152
|
+
available assets, suggested next moves, and per-tool routing guidance
|
|
153
|
+
emitted by the MCP server itself.
|
|
154
|
+
|
|
155
|
+
Then pick the right Toolbelt MCP tool for the user's task:
|
|
156
|
+
|
|
157
|
+
| Tool | Purpose |
|
|
158
|
+
|---|---|
|
|
159
|
+
| `toolbelt_search` | Vector RAG over documents |
|
|
160
|
+
| `toolbelt_sql` | SQL over structured tables |
|
|
161
|
+
| `toolbelt_entity` | Entity profile from the knowledge graph |
|
|
162
|
+
| `toolbelt_graph` | Cypher graph traversal |
|
|
163
|
+
| `toolbelt_record` | Save a finding to the persistent timeline — this is what makes findings compound across sessions and across agents |
|
|
164
|
+
| `toolbelt_timeline` | Read chronological events from the timeline |
|
|
165
|
+
| `toolbelt_save` | Persist an asset to the namespace |
|
|
166
|
+
| `toolbelt_share` | Emit a connection URL so another agent / teammate can join |
|
|
167
|
+
| `toolbelt_list_namespaces` | List workspaces this account can access |
|
|
168
|
+
|
|
169
|
+
The MCP server's tool descriptions carry per-tool routing logic — pick
|
|
170
|
+
by task shape, not by this skill's instructions.
|
|
171
|
+
|
|
172
|
+
### Phase 5 — Optional: claim the account by email
|
|
173
|
+
|
|
174
|
+
Anonymous accounts expire (30 days). To make persistent and increase
|
|
175
|
+
quota, prompt the user for an email and call:
|
|
176
|
+
|
|
177
|
+
```http
|
|
178
|
+
POST https://app.toolbelt.ai/api/onboard/claim
|
|
179
|
+
Authorization: Bearer <token>
|
|
180
|
+
Content-Type: application/json
|
|
181
|
+
|
|
182
|
+
{"email": "user@example.com"}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
User receives a verification email. Then:
|
|
186
|
+
|
|
187
|
+
```http
|
|
188
|
+
POST https://app.toolbelt.ai/api/onboard/claim/verify
|
|
189
|
+
Authorization: Bearer <token>
|
|
190
|
+
Content-Type: application/json
|
|
191
|
+
|
|
192
|
+
{"code": "<code from email>"}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
After verification the account is upgraded from **Anonymous** to
|
|
196
|
+
**Verified** — same token, higher quota, persistent across sessions.
|
|
197
|
+
|
|
198
|
+
## Tiers and quotas
|
|
199
|
+
|
|
200
|
+
Match `toolbelt.ai/#pricing` exactly:
|
|
201
|
+
|
|
202
|
+
| Tier | Price | Calls / month | Storage | Namespaces | How to get there |
|
|
203
|
+
|---|---|---:|---:|---:|---|
|
|
204
|
+
| **Anonymous** | Free | 1,000 | — | 1 | Auto-provisioned by this skill (Phase 2) |
|
|
205
|
+
| **Verified** | Free | 2,000 | 1 GB | 10 | Phase 5 (email claim) |
|
|
206
|
+
| **Pro** | $29 / month | 150,000 | 50 GB | 50 | Human web step — see below |
|
|
207
|
+
| **Team** | $89 / month | 500,000 | 100 GB | Unlimited | Human web step — see below |
|
|
208
|
+
|
|
209
|
+
## Pro / Team upgrades — direct the human to app.toolbelt.ai
|
|
210
|
+
|
|
211
|
+
Stripe checkout requires a real browser session. **Agents cannot do
|
|
212
|
+
this; do not pretend to.** When a user wants Pro or Team:
|
|
213
|
+
|
|
214
|
+
> "Upgrading to Pro or Team takes about a minute on the web. Open
|
|
215
|
+
> <https://app.toolbelt.ai>, sign in with the email you used to claim
|
|
216
|
+
> this account, and follow the Upgrade flow. The new tier activates on
|
|
217
|
+
> the next MCP call — no re-provisioning, no new tokens."
|
|
218
|
+
|
|
219
|
+
Do not invent upgrade URLs. Do not collect credit card info. Do not
|
|
220
|
+
prompt for billing data. The skill's job ends at "direct the human to
|
|
221
|
+
the right page."
|
|
222
|
+
|
|
223
|
+
## Output after Phase 4 succeeds
|
|
224
|
+
|
|
225
|
+
Emit a brief connection status to the user:
|
|
226
|
+
|
|
227
|
+
```yaml
|
|
228
|
+
toolbelt_connection:
|
|
229
|
+
status: connected
|
|
230
|
+
mcp_url: <mcpUrl>
|
|
231
|
+
user_id: <user.id>
|
|
232
|
+
namespace_id: <namespace.id>
|
|
233
|
+
account_tier: <anonymous | verified | pro | team>
|
|
234
|
+
expires_at: <expiresAt>
|
|
235
|
+
app_url: https://app.toolbelt.ai
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Then proceed with the user's actual task using the MCP tools.
|
|
239
|
+
|
|
240
|
+
## Multi-agent collaboration
|
|
241
|
+
|
|
242
|
+
Toolbelt's real value shows when multiple agents share state:
|
|
243
|
+
|
|
244
|
+
- An agent records a finding via `toolbelt_record` → it lands on the
|
|
245
|
+
namespace timeline.
|
|
246
|
+
- A future agent — same MCP client or different, same user or invited
|
|
247
|
+
teammate — reads it via `toolbelt_timeline` or `toolbelt_search` and
|
|
248
|
+
builds on it.
|
|
249
|
+
- To invite another agent or teammate, call `toolbelt_share` and forward
|
|
250
|
+
the resulting URL.
|
|
251
|
+
|
|
252
|
+
Tell users: "Each finding I record is available to your next session
|
|
253
|
+
and any other agent connected to this namespace."
|
|
254
|
+
|
|
255
|
+
## Reference URLs
|
|
256
|
+
|
|
257
|
+
| Purpose | URL |
|
|
258
|
+
|---|---|
|
|
259
|
+
| Marketing site + pricing | <https://toolbelt.ai> |
|
|
260
|
+
| Docs (concepts, tools, self-hosting) | <https://toolbelt.ai/docs> |
|
|
261
|
+
| Human web UI (sign in, billing, namespace UI) | <https://app.toolbelt.ai> |
|
|
262
|
+
| MCP endpoint (set in Phase 3) | `https://mcp.toolbelt.ai/mcp` |
|
|
263
|
+
| Onboard API base (Phase 2 + 5 only) | `https://app.toolbelt.ai/api/onboard` |
|
|
264
|
+
| Support | <support@toolbelt.ai> |
|
|
265
|
+
|
|
266
|
+
## Common failure modes
|
|
267
|
+
|
|
268
|
+
| Symptom | Cause | Handling |
|
|
269
|
+
|---|---|---|
|
|
270
|
+
| `toolbelt_list_namespaces` returns 401 | Stored MCP token expired or was revoked | Go back to Phase 2, provision a fresh anonymous account. |
|
|
271
|
+
| Anonymous account expired (after 30 days) | `expiresAt` in the past | Same as 401 — re-provision. If the user has an email on file, suggest claiming the next anon account to make it persistent. |
|
|
272
|
+
| MCP call returns 429 with `error: "QUOTA_EXCEEDED"` | Tier quota exhausted | Surface the tier table; suggest Phase 5 (email claim) for Anonymous → Verified, or direct the human to `https://app.toolbelt.ai` for Pro/Team. |
|
|
273
|
+
| Email verification code doesn't arrive | Spam folder, or first send didn't go | Tell the user to check spam from `noreply@toolbelt.ai`, or call `POST /api/onboard/claim` again to re-send. |
|
|
274
|
+
| `mcp.toolbelt.ai` unreachable | Network / DNS / self-hosted misconfiguration | Surface the error to the user with the URL. Don't attempt fallback — there's no fallback endpoint. |
|
|
275
|
+
|
|
276
|
+
## What this skill does NOT do
|
|
277
|
+
|
|
278
|
+
Stay in your lane:
|
|
279
|
+
|
|
280
|
+
- **Does not collect credit cards.** Stripe is a browser flow.
|
|
281
|
+
- **Does not generate or store passwords.** Authentication is by token,
|
|
282
|
+
managed by the MCP client config.
|
|
283
|
+
- **Does not call MCP tools beyond `toolbelt_list_namespaces` and
|
|
284
|
+
`toolbelt_context` itself.** Once oriented, hand off — let the agent
|
|
285
|
+
pick the right tool per task from the MCP server's own tool descriptions.
|
|
286
|
+
- **Does not invent endpoints.** Only `POST /api/onboard`, `POST
|
|
287
|
+
/api/onboard/claim`, `POST /api/onboard/claim/verify`. Everything else
|
|
288
|
+
is MCP.
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Simulates the toolbelt-geo skill running inside Claude Code
|
|
3
|
-
|
|
4
|
-
G='\033[0;32m' # green
|
|
5
|
-
B='\033[0;34m' # blue
|
|
6
|
-
Y='\033[1;33m' # yellow
|
|
7
|
-
C='\033[0;36m' # cyan
|
|
8
|
-
D='\033[2;37m' # dim
|
|
9
|
-
W='\033[1;37m' # bold white
|
|
10
|
-
NC='\033[0m'
|
|
11
|
-
|
|
12
|
-
printf "\n"
|
|
13
|
-
printf "${D}> /toolbelt-geo${NC}\n"
|
|
14
|
-
sleep 0.8
|
|
15
|
-
|
|
16
|
-
printf "\n"
|
|
17
|
-
printf "${C}● Phase 0 Verifying Toolbelt MCP connection...${NC}\n"
|
|
18
|
-
sleep 0.6
|
|
19
|
-
printf "${G} ✓ Connected${NC} | namespace: demo-workspace\n"
|
|
20
|
-
sleep 0.3
|
|
21
|
-
|
|
22
|
-
printf "\n"
|
|
23
|
-
printf "${C}● Phase 1 Resolving namespace...${NC}\n"
|
|
24
|
-
sleep 0.4
|
|
25
|
-
printf "${G} ✓ Using${NC} demo-workspace (a3f2c1d9-4b2e-4a7c-9f1d-8e3b0c2d6a5f)\n"
|
|
26
|
-
sleep 0.2
|
|
27
|
-
|
|
28
|
-
printf "\n"
|
|
29
|
-
printf "${C}● Phase 2 Uploading Tampa Bay sensor data...${NC}\n"
|
|
30
|
-
sleep 0.4
|
|
31
|
-
printf " ${D}10 sensors | columns: id, name, lat, lon${NC}\n"
|
|
32
|
-
sleep 0.8
|
|
33
|
-
printf " ${Y}[ingest]${NC} running...\n"
|
|
34
|
-
sleep 1.2
|
|
35
|
-
printf " ${G}[ingest]${NC} completed ✓\n"
|
|
36
|
-
sleep 0.3
|
|
37
|
-
printf "${G} ✓ Sensor table:${NC} ${W}sensor_locations${NC} (10 rows)\n"
|
|
38
|
-
sleep 0.3
|
|
39
|
-
|
|
40
|
-
printf "\n"
|
|
41
|
-
printf "${C}● Phase 3 Running GPU geospatial queries...${NC}\n"
|
|
42
|
-
sleep 0.3
|
|
43
|
-
|
|
44
|
-
printf "\n"
|
|
45
|
-
printf " ${B}Query 1${NC} Pairwise Distance ${D}ST_DISTANCE()${NC}\n"
|
|
46
|
-
sleep 1.0
|
|
47
|
-
printf " ┌────────────┬────────────┬────────────┐\n"
|
|
48
|
-
printf " │ sensor_a │ sensor_b │ distance_m │\n"
|
|
49
|
-
printf " ├────────────┼────────────┼────────────┤\n"
|
|
50
|
-
printf " │ Sensor A │ Sensor B │ 2,847 │\n"
|
|
51
|
-
printf " │ Sensor A │ Sensor J │ 4,213 │\n"
|
|
52
|
-
printf " │ Sensor B │ Sensor J │ 5,091 │\n"
|
|
53
|
-
printf " └────────────┴────────────┴────────────┘\n"
|
|
54
|
-
sleep 0.5
|
|
55
|
-
|
|
56
|
-
printf "\n"
|
|
57
|
-
printf " ${B}Query 2${NC} Point-in-Polygon ${D}ST_CONTAINS()${NC}\n"
|
|
58
|
-
sleep 0.9
|
|
59
|
-
printf " Zone: Downtown Tampa bounding polygon\n"
|
|
60
|
-
printf " ${G} 2 sensors inside zone:${NC} Sensor A, Sensor B\n"
|
|
61
|
-
sleep 0.5
|
|
62
|
-
|
|
63
|
-
printf "\n"
|
|
64
|
-
printf " ${B}Query 3${NC} Track Line ${D}ST_MAKELINE()${NC}\n"
|
|
65
|
-
sleep 0.9
|
|
66
|
-
printf " LINESTRING(-82.4572 27.9506, -82.4398 27.9659, ...)\n"
|
|
67
|
-
printf " ${G} Track complete:${NC} 10 points\n"
|
|
68
|
-
|
|
69
|
-
printf "\n"
|
|
70
|
-
printf "${W}RESULT:${NC}\n"
|
|
71
|
-
printf " ${D}namespace_id:${NC} a3f2c1d9-4b2e-4a7c-9f1d-8e3b0c2d6a5f\n"
|
|
72
|
-
printf " ${D}sensor_table:${NC} sensor_locations (10 rows)\n"
|
|
73
|
-
printf " ${D}phases_run:${NC} [0, 1, 2, 3]\n"
|
|
74
|
-
printf "\n"
|
|
75
|
-
printf " ${D}distance_query:${NC}\n"
|
|
76
|
-
printf " ${D}closest_pair:${NC} Sensor A → Sensor B\n"
|
|
77
|
-
printf " ${D}min_distance:${NC} 2,847 m\n"
|
|
78
|
-
printf "\n"
|
|
79
|
-
printf " ${D}point_in_polygon:${NC}\n"
|
|
80
|
-
printf " ${D}in_zone_count:${NC} 2\n"
|
|
81
|
-
printf " ${D}in_zone_sensors:${NC} [Sensor A, Sensor B]\n"
|
|
82
|
-
printf "\n"
|
|
83
|
-
printf " ${D}track:${NC}\n"
|
|
84
|
-
printf " ${D}point_count:${NC} 10\n"
|
|
85
|
-
printf "\n"
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Simulates the toolbelt-start skill running inside Claude Code
|
|
3
|
-
|
|
4
|
-
G='\033[0;32m' # green
|
|
5
|
-
B='\033[0;34m' # blue
|
|
6
|
-
Y='\033[1;33m' # yellow
|
|
7
|
-
C='\033[0;36m' # cyan
|
|
8
|
-
D='\033[2;37m' # dim
|
|
9
|
-
W='\033[1;37m' # bold white
|
|
10
|
-
NC='\033[0m'
|
|
11
|
-
|
|
12
|
-
printf "\n"
|
|
13
|
-
printf "${D}> /toolbelt-start document_url=https://docs.toolbelt.ai/intro.pdf question=\"What is Toolbelt?\"${NC}\n"
|
|
14
|
-
sleep 0.8
|
|
15
|
-
|
|
16
|
-
printf "\n"
|
|
17
|
-
printf "${C}● Phase 0 Verifying Toolbelt MCP connection...${NC}\n"
|
|
18
|
-
sleep 0.6
|
|
19
|
-
printf "${G} ✓ Connected${NC} | namespace: demo-workspace | 1 namespace found\n"
|
|
20
|
-
sleep 0.3
|
|
21
|
-
|
|
22
|
-
printf "\n"
|
|
23
|
-
printf "${C}● Phase 1 Resolving namespace...${NC}\n"
|
|
24
|
-
sleep 0.4
|
|
25
|
-
printf "${G} ✓ Using${NC} demo-workspace (a3f2c1d9-4b2e-4a7c-9f1d-8e3b0c2d6a5f)\n"
|
|
26
|
-
sleep 0.2
|
|
27
|
-
|
|
28
|
-
printf "\n"
|
|
29
|
-
printf "${C}● Phase 2 Inspecting current state...${NC}\n"
|
|
30
|
-
sleep 0.5
|
|
31
|
-
printf "${G} ✓ Context loaded${NC} | 0 tables | 0 vector collections\n"
|
|
32
|
-
sleep 0.2
|
|
33
|
-
|
|
34
|
-
printf "\n"
|
|
35
|
-
printf "${C}● Phase 3 Uploading document...${NC}\n"
|
|
36
|
-
sleep 0.4
|
|
37
|
-
printf " ${D}file:${NC} intro.pdf ${D}source:${NC} docs.toolbelt.ai\n"
|
|
38
|
-
sleep 0.8
|
|
39
|
-
printf " ${Y}[ingest]${NC} running...\n"
|
|
40
|
-
sleep 1.2
|
|
41
|
-
printf " ${G}[ingest]${NC} completed ✓\n"
|
|
42
|
-
sleep 0.4
|
|
43
|
-
printf " ${Y}[semantic]${NC} running...\n"
|
|
44
|
-
sleep 1.6
|
|
45
|
-
printf " ${G}[semantic]${NC} completed ✓\n"
|
|
46
|
-
sleep 0.3
|
|
47
|
-
printf "${G} ✓ Ingested${NC} → table: ${W}intro_pdf${NC}\n"
|
|
48
|
-
sleep 0.3
|
|
49
|
-
|
|
50
|
-
printf "\n"
|
|
51
|
-
printf "${C}● Phase 5 Answering question...${NC}\n"
|
|
52
|
-
sleep 0.4
|
|
53
|
-
printf " ${D}toolbelt_search question=\"What is Toolbelt?\"${NC}\n"
|
|
54
|
-
sleep 1.2
|
|
55
|
-
printf "${G} ✓ Done${NC}\n"
|
|
56
|
-
|
|
57
|
-
printf "\n"
|
|
58
|
-
printf "${W}RESULT:${NC}\n"
|
|
59
|
-
printf " ${D}namespace_id:${NC} a3f2c1d9-4b2e-4a7c-9f1d-8e3b0c2d6a5f\n"
|
|
60
|
-
printf " ${D}phases_run:${NC} [0, 1, 2, 3, 5]\n"
|
|
61
|
-
printf " ${D}document_table:${NC} intro_pdf\n"
|
|
62
|
-
printf " ${D}answer:${NC} Toolbelt is a GPU-accelerated data workspace\n"
|
|
63
|
-
printf " providing SQL, vector search, knowledge graphs,\n"
|
|
64
|
-
printf " geospatial queries, and Kafka streaming via MCP.\n"
|
|
65
|
-
printf " ${D}sources:${NC} [intro.pdf]\n"
|
|
66
|
-
printf "\n"
|
|
Binary file
|
|
Binary file
|
package/assets/signup-demo.gif
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|