tabtree-mcp 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +101 -216
  2. package/package.json +4 -4
  3. package/tabtree-mcp.mjs +886 -135
package/README.md CHANGED
@@ -1,227 +1,122 @@
1
1
  # TabTree Connector for Claude
2
2
 
3
- Let Claude read your TabTree library and build new maps for you.
3
+ Let Claude read your TabTree library and build mind maps, kanban boards and
4
+ whiteboards for you — in your account, on every device, and in your team spaces.
4
5
 
5
6
  > "Turn these meeting notes into a mind map."
6
- > "Map the structure of this codebase."
7
+ > "Make a kanban for the launch: these eight tasks, Sara owns the design ones, due Friday."
8
+ > "Add the three follow-ups from this call to the sprint board, in Doing."
7
9
  > "Draw our database schema as a board."
8
- > "Add the risks we just discussed to my Q3 plan."
9
10
 
10
- **You need TabTree itself.** This package is the bridge, not the app. It works
11
- with both editions of TabTree, and you pick the mode with ONE environment variable:
12
-
13
- | Edition | What Claude talks to | Set |
14
- | --- | --- | --- |
15
- | **TabTree** (subscription — your maps live in your account) | your account, through TabTree's API | `TABTREE_API_KEY` — the key from ⚙️ Settings → Account → **Claude connector** |
16
- | **TabTree Classic** (the local file, bought once) | the 🛟 backup folder on your disk | `TABTREE_DIR` — that folder's path |
17
-
18
- In account mode a new map appears in TabTree within a minute, on every device you
19
- are signed in on. In Classic mode it appears as a file in your backup folder, and
20
- you pull it in from *My maps* → **🛟** → **"Bring maps back from this folder…"**.
21
-
22
- In both modes the connector **only ever creates new maps.** It cannot overwrite a
23
- map, cannot delete one, and never touches your browser storage. With a folder,
24
- nothing is uploaded anywhere; with an account, it talks only to TabTree's own
25
- API for that account.
26
-
27
- Changes to a map you already have are no exception. Claude never writes to it:
28
- it files a **proposal**, TabTree shows it as a banner on that map, and you tick
29
- the changes you want. ⌘Z undoes them afterwards, like anything else you do.
11
+ **You need a TabTree account.** This package is the bridge, not the app.
30
12
 
31
13
  ---
32
14
 
33
15
  ## Before you start
34
16
 
35
- **1. Get your key, or your folder.** TabTree (subscription): open the app →
36
- ⚙️ Settings → Account → **Claude connector** → *Create a connector key*. It is
37
- shown once — copy it. TabTree Classic: open TabTree → *My maps* → 🛟 and pick a
38
- folder; that folder is what the connector reads and writes.
17
+ **1. Get your connector key.** Open TabTree → ⚙️ Settings → Account →
18
+ **Claude connector** → *Create a connector key*. It is shown once — copy it. It
19
+ starts with `tt_live_`.
39
20
 
40
- Quickest test, account mode:
41
-
42
- ```bash
43
- TABTREE_API_KEY=tt_live_… npx tabtree-mcp
44
- ```
21
+ **2. Node.js 18+ — for the npm and Claude Code routes.** Claude Desktop ships its
22
+ own Node, so the `.mcpb` install below needs nothing.
45
23
 
46
- **2. Node.js 18+ — for the npm and Claude Code routes.** Claude Desktop ships
47
- its own Node, so the `.mcpb` install below needs nothing. For the other routes,
48
- check with `node --version` and install the LTS build from
49
- [nodejs.org](https://nodejs.org) if it errors. The app itself never needs Node.
50
-
51
- ---
52
-
53
- ## Install — npm (Claude Code, Cursor, any MCP client)
54
-
55
- Nothing to clone, nothing to build. Point `TABTREE_DIR` at your backup folder:
24
+ Quickest test:
56
25
 
57
26
  ```bash
58
- claude mcp add tabtree --scope user -e TABTREE_DIR="/path/to/your/backup/folder" -- npx -y tabtree-mcp
59
- ```
60
-
61
- For any client that reads a JSON config, the same thing:
62
-
63
- ```json
64
- {
65
- "mcpServers": {
66
- "tabtree": {
67
- "command": "npx",
68
- "args": ["-y", "tabtree-mcp"],
69
- "env": { "TABTREE_DIR": "/path/to/your/backup/folder" }
70
- }
71
- }
72
- }
27
+ TABTREE_API_KEY=tt_live_… npx tabtree-mcp
73
28
  ```
74
29
 
75
- The path must be absolute — `~` and relative paths will not resolve.
76
-
77
30
  ---
78
31
 
79
32
  ## Install — Claude Desktop (double-click)
80
33
 
81
34
  **Double-click `TabTree-Connector.mcpb`.** Claude Desktop opens its install
82
- screen, asks which folder to use — pick your backup folder — and that is the
83
- whole procedure. No terminal, no config file, no Node.
84
-
85
- To change the folder later, or to remove the connector, use Claude Desktop's own
86
- extension settings. Nothing was written outside the app.
87
-
88
- ## Install — Claude Code (one command)
89
-
90
- `.mcpb` is a Claude Desktop format; Claude Code reads a config file instead. The
91
- installer writes it for you, backing up any existing one first:
92
-
93
- ```bash
94
- node mcp/install.mjs --dir "/path/to/your/backup/folder"
95
- ```
96
-
97
- It prints the `claude mcp add` command to paste for user-wide access.
98
-
99
- To see what it *would* do without writing anything:
35
+ screen and asks for your connector key — paste it, and that is the whole
36
+ procedure. To change the key later, or to remove the connector, use Claude
37
+ Desktop's own extension settings.
100
38
 
101
- ```bash
102
- node mcp/install.mjs --dir "/path/to/your/backup/folder" --dry-run
103
- ```
104
-
105
- To check an install that already exists:
39
+ ## Install — Claude Code, Cursor, any MCP client (npm)
106
40
 
107
41
  ```bash
108
- node mcp/install.mjs --check
42
+ claude mcp add tabtree --scope user -e TABTREE_API_KEY="tt_live_…" -- npx -y tabtree-mcp
109
43
  ```
110
44
 
111
- ### Manual install — Claude Code
112
-
113
- ```bash
114
- claude mcp add tabtree --scope user -e TABTREE_DIR="/path/to/your/backup/folder" -- node /absolute/path/to/mcp/tabtree-mcp.mjs
115
- ```
116
-
117
- `--scope user` makes the connector available in every project. Drop it and the
118
- connector only exists in the directory you ran the command from.
119
-
120
- If you would rather not use the CLI, put this in a `.mcp.json` file at the root
121
- of a project — same result, scoped to that project:
45
+ `--scope user` makes the connector available in every project. For any client
46
+ that reads a JSON config:
122
47
 
123
48
  ```json
124
49
  {
125
50
  "mcpServers": {
126
51
  "tabtree": {
127
- "command": "node",
128
- "args": ["/absolute/path/to/mcp/tabtree-mcp.mjs"],
129
- "env": { "TABTREE_DIR": "/path/to/your/backup/folder" }
52
+ "command": "npx",
53
+ "args": ["-y", "tabtree-mcp"],
54
+ "env": { "TABTREE_API_KEY": "tt_live_…" }
130
55
  }
131
56
  }
132
57
  }
133
58
  ```
134
59
 
135
- ### Manual install — Claude Desktop (fallback)
136
-
137
- You should not need this: the `.mcpb` above does it for you. Use it only if your
138
- Claude Desktop is too old to install extensions. Open the config file for your
139
- system:
140
-
141
- | System | File |
142
- | --- | --- |
143
- | macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
144
- | Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
145
- | Linux | `~/.config/Claude/claude_desktop_config.json` |
146
-
147
- Add the `tabtree` block shown above inside `mcpServers`, keeping any servers
148
- already listed there. Save, then **fully quit and reopen Claude Desktop** —
149
- reloading the window is not enough.
150
-
151
- Paths must be absolute in both clients. `~` and relative paths will not resolve.
152
-
153
60
  ---
154
61
 
155
62
  ## What Claude can do
156
63
 
157
64
  | Tool | What it does |
158
65
  | --- | --- |
159
- | `list_maps` | Lists every map and board — name, type, folder, size, last modified. |
160
- | `read_map` | Reads one map. A mind map comes back as a markdown outline, a board as elements and connections. |
161
- | `search_maps` | Searches the whole library — map names, nodes, notes, shapes, stickies. Case-insensitive. |
162
- | `create_mindmap` | Creates a new mind map from a markdown outline. |
163
- | `create_board` | Creates a new whiteboard — shapes and arrows that stay anchored in the app. |
164
- | `propose_changes` | Proposes changes to a map you already have. Nothing is written to it — TabTree asks you first. |
165
-
166
- `create_mindmap` takes an indented markdown outline. Headings (`#`, `##`) and
167
- bullet lists both work, two spaces per level, `[x]` for a checked item and
168
- `[title](url)` for a link. The first top-level line becomes the centre of the
169
- map.
170
-
171
- **Screenshots on nodes.** Ask Claude to build a map *with screenshots* — of an
172
- app, a website, a slide deck. Claude takes the screenshot, saves it to disk, and
173
- passes its path in `images`: `{ target: "Login page", file: "/path/to/shot.png" }`.
174
- The picture becomes the node's cover, drawn on the map, in the kanban and in
175
- every exported image. It is re-encoded on your machine before it is written
176
- (about 840 px, a few dozen KB), so a 4 MB Retina capture never bloats the map;
177
- nothing is uploaded anywhere. On macOS the connector uses the built-in `sips`;
178
- elsewhere it uses ImageMagick if installed, or its own PNG encoder. The same
179
- works on a map you already have: `propose_changes` with `op: "img"`.
180
-
181
- `create_board` takes a list of elements (`rect`, `ellipse`, `text`, `sticky`)
182
- and connections between them. Leave out the x/y coordinates and it lays the
183
- board out automatically — the connections define the hierarchy, left to right.
184
- Both accept an optional `folder`, which becomes a folder in your library.
185
-
186
- `propose_changes` is the one tool that points at a map you already have. It can
187
- add a branch, rename a node, write a note, tick a task, remove a branch, put a
188
- screenshot on a node — and, on a kanban, move a card to a column, set its colour
189
- labels, assign it to someone, give it a priority, a due date, an estimate or a
190
- `Name: value` attribute, or leave a comment on it (signed "Claude" when applied).
191
- It does none of those things by itself. It writes a small file into a
192
- `Propositions` subfolder of your backup folder; TabTree checks that folder while
193
- it is open and raises a banner on the map concerned. You review the changes one
194
- by one, tick the ones you want, and press **Apply**. ⌘Z undoes the lot.
195
-
196
- Claude names each node by its exact text, so ask it to read the map first. When
197
- the same wording appears twice, it must write a path — `"Q4 > Hire"` — and if it
198
- cannot tell them apart, the proposal is refused rather than applied to the wrong
199
- one. A proposal you ignore is moved to `Propositions/Reviewed`, never deleted.
200
-
201
- If you close TabTree, or the backup folder is not connected, nothing is lost:
202
- the proposal waits in the folder and the banner appears the next time you open
203
- the app with that folder connected.
66
+ | `list_maps` | Lists every map, kanban, note and board — yours and those of the team spaces you belong to. |
67
+ | `read_map` | Reads one map. A mind map or kanban comes back as an outline with each card's column, owner, dates, priority and labels; a board as elements and connections. |
68
+ | `search_maps` | Searches the whole library — map names, nodes, notes, shapes, stickies. |
69
+ | `create_mindmap` | Creates a mind map from a markdown outline — or a **note** (a page of text) or a **Gantt** (give it dates). |
70
+ | `create_kanban` | Creates a kanban board in one go: columns, and cards with owners, start and due days, priority, colour labels, time estimates, an Ai4X lever, a note (a Google Meet link in it becomes clickable), a link and sub-tasks. |
71
+ | `create_board` | Creates a whiteboard — shapes, **images** (`kind: "image"` + a PNG/JPEG/WebP/GIF/SVG `file`: logos, photos, posters) and arrows that stay anchored in the app. |
72
+ | `propose_changes` | Changes a map or kanban you already have — see below. |
73
+ | `harvest` | Keeps what matters from the conversation — facts, decisions, lessons — in your Company knowledge and 🌱 Lessons maps. Nothing is filed until you accept it in TabTree. |
74
+
75
+ Every creation tool takes an optional `folder` and an optional `space`. Name a
76
+ **team space** you are an editor of and the new map lives there: every member
77
+ sees it.
78
+
79
+ ### Changing a map you already have — hybrid, on purpose
80
+
81
+ **Safe changes apply by themselves.** Adding cards or branches, moving a card to
82
+ a column, ticking it, setting its owner, dates, priority, labels, estimate, Ai4X
83
+ lever, an attribute, a link, a comment, a picture — and setting up the columns
84
+ of a map that has no kanban yet. TabTree applies them within seconds while it is
85
+ open on one of your devices (or the next time you open it). **⌘Z undoes them**
86
+ like anything else you do.
87
+
88
+ **Changes that rewrite or remove what someone wrote wait for you** — renaming,
89
+ rewriting a note, deleting, replacing the columns of an existing board. TabTree
90
+ shows them as a banner on the map; you tick the ones you want and press Apply.
91
+
92
+ In one request, the safe changes that come *before* the first review-only change
93
+ apply by themselves, and everything from there on waits for you — in order, so
94
+ nothing is applied to text that is about to be renamed.
95
+
96
+ Claude names each card or node by its exact text, so ask it to read the map
97
+ first. When the same wording appears twice it writes a path — `"Q4 > Hire"` — and
98
+ if it still cannot tell them apart, the change is refused rather than applied to
99
+ the wrong one. A column is named by its name: `"Doing"`.
100
+
101
+ On a team space where your role is **viewer**, Claude can read the maps but not
102
+ change them.
103
+
104
+ ### Screenshots on nodes
105
+
106
+ Ask Claude to build a map *with screenshots* — of an app, a website, a slide
107
+ deck. Claude saves the screenshot and passes its path in `images`:
108
+ `{ target: "Login page", file: "/path/to/shot.png" }`. The picture becomes the
109
+ node's cover, on the map, in the kanban and in every exported image. It is
110
+ re-encoded on your machine first (about 840 px, a few dozen KB). The same works
111
+ on a map you already have: `propose_changes` with `op: "img"`.
204
112
 
205
113
  ---
206
114
 
207
- ## Getting the maps into TabTree
208
-
209
- New files land in your backup folder but the app does not watch that folder, so
210
- nothing appears on its own. Open *My maps*, click the **🛟** button in the
211
- toolbar, and choose **"Bring maps back from this folder…"**. Anything already in
212
- your library is skipped, so you can press it as often as you like. The same
213
- command is in ⌘K under "Bring my maps back from a folder…".
214
-
215
- There is no ♻️ button in the toolbar: it only appears when your library is
216
- empty. With maps already in it, the 🛟 menu is the way in.
217
-
218
- **The folder must match.** The connector writes to the folder you configured;
219
- TabTree reads the folder named next to its 🛟 button. If those are two different
220
- folders, maps are created correctly and never appear. Every creation message
221
- tells you which folder was written — compare it with what the app shows.
115
+ ## What the connector will never do
222
116
 
223
- Tell Claude to use a `folder` — `"Depuis Claude"`, `"Claude"`, whatever you
224
- prefer — and everything it makes stays grouped in one place in your library.
117
+ It never overwrites or deletes a map, and never touches your browser storage. It
118
+ talks only to TabTree's own API, for your account and the team spaces you are a
119
+ member of. Your key is stored by your client, never in a map.
225
120
 
226
121
  ---
227
122
 
@@ -231,56 +126,46 @@ prefer — and everything it makes stays grouped in one place in your library.
231
126
  full quit, not a window reload. Then check the config file is valid JSON; a
232
127
  trailing comma is enough to make the whole file be ignored silently.
233
128
 
234
- **"TABTREE_DIR is not set."** The `env` block is missing or the path is wrong.
235
- Run `node mcp/install.mjs --check` to see the path the connector resolves.
129
+ **"Unknown or revoked connector key."** Create a new key in TabTree → Settings →
130
+ Account → Claude connector, and paste it into the connector's settings.
236
131
 
237
- **"The TABTREE_DIR folder does not exist."** The path has a typo, or the folder
238
- is in iCloud Drive / OneDrive and has been evicted to the cloud. Open it in
239
- Finder or Explorer once to bring it back.
132
+ **"TABTREE_API_KEY does not look like a connector key."** The field is empty or
133
+ was reset — reinstalling the `.mcpb` clears it. Paste the key again.
240
134
 
241
- **New maps do not show up in the app.** They are files on disk until you press
242
- brought them in from the 🛟 menu. Check the folder in Finder first — if the file
243
- is there, the connector did its job, and the question is only which folder the
244
- app is reading.
135
+ **Claude's changes did not appear.** Safe changes are applied by TabTree itself,
136
+ so it must be open and signed in on one of your devices; they land within
137
+ seconds, or the next time it opens. Changes that need your approval appear as a
138
+ banner on that map.
245
139
 
246
- **A map comes back empty.** The connector reads `.tabtree` and `.ygmind` files
247
- one folder deep. A map filed two levels down is out of reach; move it up.
248
-
249
- **Claude filed a proposal and no banner appeared.** Three things must all be
250
- true: TabTree is open, its 🛟 folder is the folder the connector writes to, and
251
- the map the proposal targets is one this browser actually has. That last one
252
- catches the common case — a proposal for a map that only exists on your other
253
- machine stays silent here, on purpose. Type `__ygProps()` in the browser console
254
- to see what the app found.
140
+ **"The connector can read, not write."** Your trial or subscription has ended —
141
+ or, on a team space, the space owner's plan has.
255
142
 
256
143
  ---
257
144
 
258
- ## 🇫🇷 En français
145
+ ### TabTree Classic (the discontinued local file)
259
146
 
260
- Le connecteur permet à Claude de lire votre bibliothèque TabTree et de créer des
261
- cartes et des boards. Il ne crée que de **nouveaux fichiers** : il ne peut rien
262
- écraser ni supprimer, et ne touche jamais au stockage du navigateur. Pour
263
- modifier une carte existante, il dépose une **proposition** que TabTree vous
264
- présente ligne par ligne : rien n'est appliqué sans votre clic, et ⌘Z l'annule.
147
+ The connector still reads a TabTree Classic backup folder when it is given
148
+ `TABTREE_DIR` instead of a key — maps are written there as files, and changes are
149
+ always filed for review. This mode receives no new features.
265
150
 
266
- Prérequis : un dossier de sauvegarde configuré dans TabTree (🛟 dans « Mes
267
- cartes »).
151
+ ---
268
152
 
269
- **Claude Desktop** — double-cliquez `TabTree-Connector.mcpb`. Claude demande le
270
- dossier à utiliser, et c'est terminé : ni terminal, ni fichier de config, ni
271
- Node à installer.
153
+ ## 🇫🇷 En français
272
154
 
273
- **Claude Code** — `.mcpb` ne s'y applique pas, il lit un fichier de config :
155
+ Le connecteur permet à Claude de lire votre bibliothèque TabTree et d'y créer des
156
+ cartes mentales, des **kanbans**, des notes, des Gantt et des boards — dans votre
157
+ compte, sur tous vos appareils, et dans les **espaces d'équipe** dont vous êtes
158
+ membre.
274
159
 
275
- ```bash
276
- node mcp/install.mjs --dir "/chemin/vers/votre/dossier"
277
- ```
160
+ Créez votre clé dans TabTree → ⚙️ Réglages → Compte → **Claude connector**, puis :
161
+
162
+ - **Claude Desktop** — double-cliquez `TabTree-Connector.mcpb` et collez la clé.
163
+ - **Claude Code** — `claude mcp add tabtree --scope user -e TABTREE_API_KEY="tt_live_…" -- npx -y tabtree-mcp`
278
164
 
279
- Cette voie-là demande Node.js 18 ou plus. Ensuite, demandez par exemple
280
- « transforme ces notes de réunion en carte mentale » : la carte est écrite dans
281
- le dossier ; récupérez-la dans l'app par *Mes cartes* → **🛟** → **« Bring maps
282
- back from this folder… »**. Le dossier visé par le connecteur doit être celui
283
- que TabTree affiche à côté de son bouton 🛟 : s'ils diffèrent, les cartes sont
284
- créées et n'apparaissent jamais.
165
+ Pour une carte existante, le connecteur est **hybride** : ajouter ou déplacer des
166
+ cartes, cocher, poser un responsable, des dates, des étiquettes, une estimation,
167
+ un levier Ai4X s'applique tout seul en quelques secondes (⌘Z l'annule) ; renommer,
168
+ réécrire une note ou supprimer vous est d'abord présenté, et rien n'est appliqué
169
+ sans votre clic. Il n'écrase ni ne supprime jamais une carte.
285
170
 
286
171
  Support : info@ai4x.academy
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "tabtree-mcp",
3
- "version": "1.4.0",
3
+ "version": "1.6.0",
4
4
  "mcpName": "app.tabtree/tabtree",
5
- "description": "Let Claude read your TabTree library and turn conversations into mind maps and whiteboards — in your TabTree account, or from local files.",
5
+ "description": "Let Claude read your TabTree library and build mind maps, kanban boards and whiteboards in your TabTree account — team spaces included.",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "git+https://github.com/ai4xedu/tabtree-mcp.git"
@@ -32,8 +32,8 @@
32
32
  "diagram",
33
33
  "outline",
34
34
  "kanban",
35
- "local-first",
36
- "offline"
35
+ "team",
36
+ "project-management"
37
37
  ],
38
38
  "homepage": "https://tabtree.app/",
39
39
  "bugs": {