@pascalcouturier/skill-builder-mcp 1.0.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/CHANGELOG.md +19 -0
- package/LICENSE +21 -0
- package/README.md +387 -0
- package/SECURITY.md +107 -0
- package/dist/THIRD_PARTY_LICENSES.md +105 -0
- package/dist/cli.js +14661 -0
- package/package.json +47 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Every release of `@pascalcouturier/skill-builder-mcp`. Versions follow
|
|
4
|
+
[semantic versioning](https://semver.org); the major version matches the protocol Skill
|
|
5
|
+
Builder speaks, so any `1.x` connector works with the current site.
|
|
6
|
+
|
|
7
|
+
To update, change the version in your AI tool's settings and restart its MCP server (see
|
|
8
|
+
**Updating** in the [README](./README.md#updating)).
|
|
9
|
+
|
|
10
|
+
## 1.0.0
|
|
11
|
+
|
|
12
|
+
First release.
|
|
13
|
+
|
|
14
|
+
- Connects GitHub Copilot (VS Code), Claude Code, OpenAI Codex, Cursor, Claude Desktop and
|
|
15
|
+
other MCP clients to Skill Builder open in the browser or the installed app.
|
|
16
|
+
- 57 tools: read, build and edit sessions, skills, agents, blocks and files; run the checks;
|
|
17
|
+
save, compare and restore versions; export; manage the library; undo AI changes.
|
|
18
|
+
- Pairing with a code only the AI tool shows, checked in both directions; signed, numbered
|
|
19
|
+
messages; origin and `Host` checks; listens on 127.0.0.1 only.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Pascal Couturier
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
# @pascalcouturier/skill-builder-mcp
|
|
2
|
+
|
|
3
|
+
**The Connect AI connector for [Skill Builder](https://skill-builder.pascalcouturier.com).**
|
|
4
|
+
It lets AI tools on your computer (**GitHub Copilot** in VS Code, **Claude Code**, **OpenAI
|
|
5
|
+
Codex**, **Cursor**, **Claude Desktop** and other MCP clients) work in the Skill Builder you
|
|
6
|
+
have open in your browser, over the [Model Context Protocol](https://modelcontextprotocol.io).
|
|
7
|
+
|
|
8
|
+
Skill Builder is a web app for building AI agent skills (`SKILL.md` with reference files) and
|
|
9
|
+
agent definitions with drag and drop. With this connector you can build them from the chat
|
|
10
|
+
instead: _"Create a session called Backend with a skill for our API conventions, based on
|
|
11
|
+
#file:docs/api.md"_. The AI creates sessions, adds skills, agents and blocks, runs the
|
|
12
|
+
checks, fixes issues and saves versions, and you watch the changes appear in Skill Builder.
|
|
13
|
+
|
|
14
|
+
> **This package only works with Skill Builder.** It accepts connections only from
|
|
15
|
+
> `https://skill-builder.pascalcouturier.com` and speaks Skill Builder's own protocol. It is
|
|
16
|
+
> not a general-purpose MCP server and does nothing on its own.
|
|
17
|
+
|
|
18
|
+
- [How it works](#how-it-works)
|
|
19
|
+
- [What you need](#what-you-need)
|
|
20
|
+
- [Setup](#setup)
|
|
21
|
+
- [Pairing](#pairing)
|
|
22
|
+
- [What you can ask](#what-you-can-ask)
|
|
23
|
+
- [What the AI can do](#what-the-ai-can-do)
|
|
24
|
+
- [What you see in Skill Builder](#what-you-see-in-skill-builder)
|
|
25
|
+
- [Privacy](#privacy)
|
|
26
|
+
- [Security](#security)
|
|
27
|
+
- [Troubleshooting](#troubleshooting)
|
|
28
|
+
- [Updating](#updating)
|
|
29
|
+
- [Removing it](#removing-it)
|
|
30
|
+
- [Options](#options)
|
|
31
|
+
- [Limits](#limits)
|
|
32
|
+
- [Licence](#licence)
|
|
33
|
+
|
|
34
|
+
## How it works
|
|
35
|
+
|
|
36
|
+
A website can not accept connections, so this small program sits in between. **Your AI tool
|
|
37
|
+
starts it for you**; you never run it by hand.
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
VS Code / Claude Code / Codex / Cursor / Claude Desktop
|
|
41
|
+
│ MCP over stdio (the AI tool starts the connector with npx)
|
|
42
|
+
▼
|
|
43
|
+
This connector (on your computer, 127.0.0.1 only)
|
|
44
|
+
▲ WebSocket on 127.0.0.1:47320-47329, paired and signed
|
|
45
|
+
│
|
|
46
|
+
Skill Builder in your browser or the installed app
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
- The connector only passes messages between the two. It has no access to your files and
|
|
50
|
+
does not know what the tools do.
|
|
51
|
+
- Skill Builder runs every tool call with the same code as its buttons, so its checks,
|
|
52
|
+
security scanner and auto-save work exactly as when you edit yourself.
|
|
53
|
+
- Your work stays in your browser (IndexedDB). There is no account, no server and no cloud.
|
|
54
|
+
|
|
55
|
+
## What you need
|
|
56
|
+
|
|
57
|
+
- **A computer** (Mac, Windows or Linux). Connect AI is not available on phones or tablets.
|
|
58
|
+
- **Skill Builder** open at <https://skill-builder.pascalcouturier.com>, or installed as an
|
|
59
|
+
app, in **Chrome, Edge, Firefox** or another Chromium browser. Safari is not supported.
|
|
60
|
+
- **Node.js 20 or later** on the same computer. Check with `node --version`; install the LTS
|
|
61
|
+
version from <https://nodejs.org> if needed.
|
|
62
|
+
- An AI tool that supports MCP servers.
|
|
63
|
+
|
|
64
|
+
## Setup
|
|
65
|
+
|
|
66
|
+
### 1. Add the connector to your AI tool
|
|
67
|
+
|
|
68
|
+
Once per AI tool. Each tool keeps its own list of MCP servers, so if you use Copilot, Claude
|
|
69
|
+
Code and Codex inside VS Code, add it to each. In Skill Builder, **Settings → Connect AI**
|
|
70
|
+
shows the same steps with copy buttons and one-click install links for VS Code and Cursor.
|
|
71
|
+
|
|
72
|
+
Every tool runs the same command, with an exact version:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npx -y @pascalcouturier/skill-builder-mcp@1.0.0
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**VS Code (GitHub Copilot).** Command Palette → **MCP: Add Server…** → **Command (stdio)** →
|
|
79
|
+
enter the command above, name it `skill-builder` and choose **Global**. Or run **MCP: Open
|
|
80
|
+
User Configuration** and add:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"servers": {
|
|
85
|
+
"skill-builder": {
|
|
86
|
+
"type": "stdio",
|
|
87
|
+
"command": "npx",
|
|
88
|
+
"args": ["-y", "@pascalcouturier/skill-builder-mcp@1.0.0"]
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Then switch Copilot Chat to **Agent** mode and tick the **skill-builder** tools under
|
|
95
|
+
**Configure Tools**.
|
|
96
|
+
|
|
97
|
+
**Claude Code** (CLI and the VS Code extension), once in a terminal:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
claude mcp add --scope user skill-builder -- npx -y @pascalcouturier/skill-builder-mcp@1.0.0
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**OpenAI Codex** (CLI and the VS Code extension), in `~/.codex/config.toml`
|
|
104
|
+
(`%USERPROFILE%\.codex\config.toml` on Windows), then restart Codex:
|
|
105
|
+
|
|
106
|
+
```toml
|
|
107
|
+
[mcp_servers.skill-builder]
|
|
108
|
+
command = "npx"
|
|
109
|
+
args = ["-y", "@pascalcouturier/skill-builder-mcp@1.0.0"]
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Cursor** (`~/.cursor/mcp.json`), **Claude Desktop** (**Settings → Developer → Edit
|
|
113
|
+
Config**, then restart it) and most other clients (Windsurf, Cline, Zed…):
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"mcpServers": {
|
|
118
|
+
"skill-builder": {
|
|
119
|
+
"command": "npx",
|
|
120
|
+
"args": ["-y", "@pascalcouturier/skill-builder-mcp@1.0.0"]
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
On **Windows**, if the tool can not start `npx`, use `"command": "cmd"` and
|
|
127
|
+
`"args": ["/c", "npx", "-y", "@pascalcouturier/skill-builder-mcp@1.0.0"]`.
|
|
128
|
+
|
|
129
|
+
### 2. Turn on Connect AI in Skill Builder
|
|
130
|
+
|
|
131
|
+
Open Skill Builder, go to **Settings → Connect AI** and switch on **Connect AI tools**. It is off
|
|
132
|
+
by default. If the browser asks to let the site access apps and services on this device
|
|
133
|
+
(local network access), click **Allow**.
|
|
134
|
+
|
|
135
|
+
### 3. Pair
|
|
136
|
+
|
|
137
|
+
See [Pairing](#pairing) below. Then chat.
|
|
138
|
+
|
|
139
|
+
## Pairing
|
|
140
|
+
|
|
141
|
+
Each time the connector starts, you approve it once:
|
|
142
|
+
|
|
143
|
+
1. In your AI tool's chat, ask _"What is open in Skill Builder?"_.
|
|
144
|
+
2. The AI tool replies with a pairing code like `K7Q2-M9XD-4RTA` (it is also in the tool's
|
|
145
|
+
MCP log). If it does not, ask _"What is the Skill Builder pairing code?"_.
|
|
146
|
+
3. Skill Builder shows **Connect _your tool_?**. Type the code and click **Connect**. Case,
|
|
147
|
+
spaces and dashes do not matter. If you did not start this, click **Deny**.
|
|
148
|
+
|
|
149
|
+
The code is made by the connector and shown only in your AI tool; it never travels over the
|
|
150
|
+
connection. Both sides prove they know it, so no other program on your computer can pose as
|
|
151
|
+
Skill Builder or as the connector. Three wrong codes close the connection; ten in one run
|
|
152
|
+
turn pairing off until you restart the AI tool. You pair again after restarting the AI tool
|
|
153
|
+
or reloading Skill Builder; the code is new every time and you never need to keep it.
|
|
154
|
+
|
|
155
|
+
## What you can ask
|
|
156
|
+
|
|
157
|
+
- _"List my sessions."_
|
|
158
|
+
- _"Create a session called Frontend with a skill for our component conventions. Use
|
|
159
|
+
#file:src/components/Button.vue and #file:docs/styleguide.md as the source."_
|
|
160
|
+
- _"Add an agent called code-reviewer that uses the frontend-conventions skill."_
|
|
161
|
+
- _"Turn the error handling in #file:src/api/client.ts into a Rules block in the api-design
|
|
162
|
+
skill."_
|
|
163
|
+
- _"Run the checks and fix what you can."_
|
|
164
|
+
- _"Save a version with the message 'First draft'."_
|
|
165
|
+
- _"Import the skills from https://github.com/anthropics/skills/tree/main/skills/pdf into my
|
|
166
|
+
library."_
|
|
167
|
+
- _"Undo your last changes."_
|
|
168
|
+
|
|
169
|
+
## What the AI can do
|
|
170
|
+
|
|
171
|
+
The AI can do what you can do in the app, except anything to do with the cloud (sign-in,
|
|
172
|
+
sync, the AI check, the community library). Tools marked **asks** wait for your confirmation
|
|
173
|
+
in Skill Builder.
|
|
174
|
+
|
|
175
|
+
| Tool | What it does | Asks |
|
|
176
|
+
| ------------------------- | ----------------------------------------------------------------------- | ------------- |
|
|
177
|
+
| `get_status` | What is open: session, skill or agent, file, unsaved changes | |
|
|
178
|
+
| `list_sessions` | Search, filter, sort and page sessions | |
|
|
179
|
+
| `get_session` | A session's skills and agents, files and links | |
|
|
180
|
+
| `get_document` | A skill or agent with every block (uids, types, values) | |
|
|
181
|
+
| `read_file` | The markdown a file produces, or a script's text | |
|
|
182
|
+
| `list_block_types` | Block types and their fields | |
|
|
183
|
+
| `list_templates` | Templates for new skills and agents | |
|
|
184
|
+
| `list_library` | Built-in skills and your library items | |
|
|
185
|
+
| `get_library_item` | One library item with its files, scan result and versions | |
|
|
186
|
+
| `validate` | The checks (errors, warnings, info), with one-click fixes | |
|
|
187
|
+
| `preview_export` | The files the zip would contain (ready for a project, or plain folders) | |
|
|
188
|
+
| `list_versions` | Saved versions | |
|
|
189
|
+
| `diff_versions` | Line changes between versions or against the working copy | |
|
|
190
|
+
| `get_canvas` | The canvas graph | |
|
|
191
|
+
| `create_session` | New session | |
|
|
192
|
+
| `open_session` | Show a session, skill or agent, or file in the app | |
|
|
193
|
+
| `update_session` | Rename, change author or description | |
|
|
194
|
+
| `duplicate_session` | Copy a session | |
|
|
195
|
+
| `set_favourite` | Star or unstar | |
|
|
196
|
+
| `delete_session` | Delete a session and its versions | asks |
|
|
197
|
+
| `add_document` | Add a skill or agent, optionally from a template | |
|
|
198
|
+
| `update_document` | Set name, description, licence, allowed tools, model… | |
|
|
199
|
+
| `duplicate_document` | Copy a skill or agent | |
|
|
200
|
+
| `remove_document` | Delete a skill or agent | asks |
|
|
201
|
+
| `add_block` | Add a block with values at a position | |
|
|
202
|
+
| `update_block` | Change block values, collapse or expand | |
|
|
203
|
+
| `move_block` | Up, down, or to another file | |
|
|
204
|
+
| `duplicate_block` | Copy a block | |
|
|
205
|
+
| `remove_block` | Remove a block | |
|
|
206
|
+
| `convert_block` | Turn a block into Custom markdown | |
|
|
207
|
+
| `break_down_block` | Split Custom markdown into built-in blocks | |
|
|
208
|
+
| `extract_block_to_file` | Move a long block into a new reference file | |
|
|
209
|
+
| `add_file` | Add a reference, script or asset | |
|
|
210
|
+
| `write_code_file` | Write a script or data file (scanned, never run) | |
|
|
211
|
+
| `add_files` | Add several supporting files by path (scanned like uploads) | |
|
|
212
|
+
| `rename_file` | Rename a reference | |
|
|
213
|
+
| `remove_file` | Delete a file | asks |
|
|
214
|
+
| `connect` | Link an agent to a skill, or point a reference or Resource link block | |
|
|
215
|
+
| `disconnect` | Remove such a link | |
|
|
216
|
+
| `add_from_library` | Add a library skill or agent to the session | |
|
|
217
|
+
| `apply_fix` | Apply a fix from `validate` | |
|
|
218
|
+
| `save_version` | Save a version (bump suggested from the changes) | |
|
|
219
|
+
| `restore_version` | Replace the working copy with a version | asks |
|
|
220
|
+
| `download_export` | Download the zip in the browser, for the AI tools you choose | |
|
|
221
|
+
| `download_backup` | Download a backup in the browser | |
|
|
222
|
+
| `tidy_canvas` | Tidy the canvas layout | |
|
|
223
|
+
| `undo_ai_changes` | Same as **Undo AI changes** | if you edited |
|
|
224
|
+
| `save_block_type` | Create or edit a custom block type | |
|
|
225
|
+
| `delete_block_type` | Delete a custom block type | asks |
|
|
226
|
+
| `add_library_item` | Add your own skill or agent to the library from markdown | if warnings |
|
|
227
|
+
| `update_library_item` | Edit a library item (saved as a new version) | |
|
|
228
|
+
| `restore_library_version` | Bring back an older version of a library item | |
|
|
229
|
+
| `copy_builtin_to_library` | Make an editable copy of a built-in skill | |
|
|
230
|
+
| `set_library_hidden` | Hide or show a built-in skill | |
|
|
231
|
+
| `remove_library_item` | Delete a library item | asks |
|
|
232
|
+
| `import_from_github` | List and import skills and agents from a public GitHub repo | if warnings |
|
|
233
|
+
| `set_preferences` | Default author, Blocks or Canvas view, block matching on import | |
|
|
234
|
+
|
|
235
|
+
Edits carry the session's revision. If you changed the session since the AI last read it,
|
|
236
|
+
the edit is refused and the AI reads it again, so it never overwrites your work by accident.
|
|
237
|
+
|
|
238
|
+
### How the AI knows what to change
|
|
239
|
+
|
|
240
|
+
- **Skill Builder or your project?** Every Skill Builder tool says "In Skill Builder" in its
|
|
241
|
+
description, and the connector tells the AI to use them only when you mean Skill Builder.
|
|
242
|
+
Saying "Skill Builder", "session", "skill" or "agent" in your request is usually enough. In
|
|
243
|
+
VS Code you can also type `#` and pick a Skill Builder tool, or untick the tools in the tools
|
|
244
|
+
picker while you work only on your project.
|
|
245
|
+
- **Which session, skill or agent?** Everything has a unique id. The AI finds the one you
|
|
246
|
+
named, then works with its id. If you do not name one, it uses what is open in Skill
|
|
247
|
+
Builder, so _"add a rule to this skill"_ works.
|
|
248
|
+
- **When it is unclear,** for example two sessions called "Backend" or a search that matches
|
|
249
|
+
several, the result tells the AI to ask you which one before changing anything.
|
|
250
|
+
- **It tells you where it worked.** Before its first change the AI says what it is about to
|
|
251
|
+
change, and every change reports the session and skill or agent it landed in
|
|
252
|
+
(`changedIn`), so it can tell you exactly what it did. The app also jumps to it and
|
|
253
|
+
highlights it, and **Undo AI changes** puts it back.
|
|
254
|
+
|
|
255
|
+
## What you see in Skill Builder
|
|
256
|
+
|
|
257
|
+
- **Changes appear at once**, and the app opens what is being changed.
|
|
258
|
+
- **Highlights:** changed blocks show **Changed by AI**; changed files and canvas cards get
|
|
259
|
+
an accent outline, until you undo or keep the changes.
|
|
260
|
+
- **Undo AI changes**, in the AI menu in the header, puts the session back to how it was
|
|
261
|
+
before the latest batch of AI changes. Undo again to go further back (up to 10 steps per
|
|
262
|
+
session).
|
|
263
|
+
- **Confirmations:** deleting a session, skill, agent, file, custom block or library item,
|
|
264
|
+
and restoring a version, always ask you in the app first.
|
|
265
|
+
- **Saving:** AI changes are saved in the browser straight away, like your own edits. They
|
|
266
|
+
are not a version until you (or the AI) save one. Saved versions can never be changed, so
|
|
267
|
+
**save a version before a big AI session**: you can always go back to it from **History**.
|
|
268
|
+
|
|
269
|
+
## Privacy
|
|
270
|
+
|
|
271
|
+
- **Your work stays in your browser.** The connector holds content only in memory, while
|
|
272
|
+
passing a result to your AI tool. No telemetry, no analytics, no account, no cloud.
|
|
273
|
+
- **What your AI provider sees:** anything the AI reads through these tools becomes part of
|
|
274
|
+
your chat, so it is sent to your AI tool's model provider (for example GitHub, Anthropic
|
|
275
|
+
or OpenAI), the same as text you paste into the chat. The pairing code is shown there too;
|
|
276
|
+
it works once, for one connection.
|
|
277
|
+
- **Imported skills are instructions.** A skill or agent from someone else tells an AI what
|
|
278
|
+
to do. Read it before you use it: Skill Builder's security scanner catches common attacks,
|
|
279
|
+
not all of them.
|
|
280
|
+
|
|
281
|
+
## Security
|
|
282
|
+
|
|
283
|
+
The connector is the only part that runs on your computer outside the browser, and it is
|
|
284
|
+
built to do as little as possible:
|
|
285
|
+
|
|
286
|
+
| The connector… | |
|
|
287
|
+
| --------------------------------------------------- | -------------------------------------------------------------- |
|
|
288
|
+
| connects to the internet or other servers | **Never.** It only accepts one connection, on 127.0.0.1. |
|
|
289
|
+
| can be reached from other devices on your network | **No.** It listens on 127.0.0.1 only. |
|
|
290
|
+
| reads or writes your files | **No.** It reads only its own code. |
|
|
291
|
+
| starts programs or shells | **Never.** |
|
|
292
|
+
| runs code it receives, or generates code at runtime | **Never** (`eval` and `new Function` are not used). |
|
|
293
|
+
| keeps running after the AI tool closes | **No.** It exits when the AI tool closes it or quits. |
|
|
294
|
+
| installs other packages | **No.** One bundled file, no dependencies, no install scripts. |
|
|
295
|
+
| sends telemetry | **No.** |
|
|
296
|
+
|
|
297
|
+
An automated test runs the exact published file inside Node's permission model with a
|
|
298
|
+
guard that fails on any network connection, host name lookup, program start, file write or
|
|
299
|
+
runtime code generation.
|
|
300
|
+
|
|
301
|
+
- **Only Skill Builder can connect from a browser:** the WebSocket `Origin` must be exactly
|
|
302
|
+
`https://skill-builder.pascalcouturier.com`, and the `Host` header must be `127.0.0.1` or
|
|
303
|
+
`localhost` (DNS-rebinding protection).
|
|
304
|
+
- **Pairing with a code only you see,** proven in both directions (ECDH P-256 and
|
|
305
|
+
HMAC-SHA256); the code itself is never sent.
|
|
306
|
+
- **Every message is signed and numbered** (HMAC-SHA256), so it can not be forged, replayed
|
|
307
|
+
or reordered, and limited to 1 MB. At most 120 calls a minute per AI tool.
|
|
308
|
+
- **Inputs are checked** against schemas, and text the AI writes goes through Skill
|
|
309
|
+
Builder's security scanner (prompt-injection phrases, hidden characters, secrets,
|
|
310
|
+
download-and-run commands). Scripts are stored as text and never run.
|
|
311
|
+
- **Exact versions:** install `@1.0.0`, not `@latest`. Published npm versions can never be
|
|
312
|
+
changed, so you run exactly the release you chose.
|
|
313
|
+
|
|
314
|
+
**Keep your AI tool's confirmations on.** The bigger risk with any MCP server is what an AI
|
|
315
|
+
does with text it reads: the AI in VS Code, Claude Code or Codex may be allowed to run
|
|
316
|
+
commands or edit files. Do not turn on auto-approve for terminal commands, and only approve
|
|
317
|
+
pairing requests you started yourself.
|
|
318
|
+
|
|
319
|
+
Details, the threat model, how to check a release yourself and how to report a problem
|
|
320
|
+
(privately, to [security@giondesign.com](mailto:security@giondesign.com)): [SECURITY.md](./SECURITY.md).
|
|
321
|
+
|
|
322
|
+
## Troubleshooting
|
|
323
|
+
|
|
324
|
+
| Problem | What to do |
|
|
325
|
+
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
326
|
+
| The AI says _"Skill Builder is not connected"_ | Open Skill Builder, go to **Settings → Connect AI** and switch on **Connect AI tools**. Wait a few seconds and ask again. |
|
|
327
|
+
| Nothing appears to approve in Skill Builder | Check the AI tool started the server (VS Code: **MCP: List Servers**; Claude Code: `/mcp`). Allow local network access: in Chrome or Edge, click the icon left of the address bar → **Site settings**. |
|
|
328
|
+
| _"Skill Builder is waiting for approval"_ | Type the code the AI shows into Skill Builder (the dialog, or **Settings → Connect AI → Enter code**). |
|
|
329
|
+
| _"That code is not right"_ | Use the code from this AI tool's latest message; each connection gets a new one. |
|
|
330
|
+
| _"Pairing is blocked after too many wrong codes"_ | Restart the AI tool or its MCP server (VS Code: **MCP: List Servers → skill-builder → Restart**). |
|
|
331
|
+
| _"…could not prove it belongs to your AI tool"_ | Skill Builder refused a connection that did not know your code. Something else on this computer may be imitating the connector: check what is running, then restart your AI tool. |
|
|
332
|
+
| `spawn npx ENOENT` or _"command not found"_ | Node.js is missing or not on the AI tool's PATH. Install Node.js 20+, or use the full path from `which npx` (macOS, Linux) or `where npx` (Windows). On Windows, try the `cmd /c` configuration. |
|
|
333
|
+
| _"Ports 47320-47329 are all in use"_ | Ten connectors are already running. Close unused AI tool windows or chats, or restart the AI tool. |
|
|
334
|
+
| _"AI tools are connected in another tab"_ | Click **Use this tab** in Skill Builder, or close the other tab or window. |
|
|
335
|
+
| _"Connector x.y.z; the current one is …"_ in the app | See [Updating](#updating). |
|
|
336
|
+
| _"Not saved: the security check refused it"_ | The text contains something the scanner does not allow (for example an API key or a `curl … \| sh` command). Remove it and try again. |
|
|
337
|
+
| Company network blocks `npx` | Ask for `registry.npmjs.org` to be allowed, or install once with `npm install -g @pascalcouturier/skill-builder-mcp@1.0.0` and use `skill-builder-mcp` as the command. |
|
|
338
|
+
| Safari | Not supported: Safari blocks websites from connecting to programs on your computer. Use Chrome, Edge or Firefox. |
|
|
339
|
+
|
|
340
|
+
The connector logs connection events (never your content) to your AI tool's MCP log (VS
|
|
341
|
+
Code: **MCP: List Servers → skill-builder → Show Output**).
|
|
342
|
+
|
|
343
|
+
## Updating
|
|
344
|
+
|
|
345
|
+
Your AI tool runs exactly the version in its settings; nothing updates on its own. When
|
|
346
|
+
Skill Builder's **Settings → Connect AI** says a newer connector is available:
|
|
347
|
+
|
|
348
|
+
1. Read what changed in [CHANGELOG.md](./CHANGELOG.md).
|
|
349
|
+
2. In your AI tool's settings, change `@pascalcouturier/skill-builder-mcp@1.0.0` to the new
|
|
350
|
+
version. The snippets in **Settings → Connect AI** always show the current one.
|
|
351
|
+
3. Restart the MCP server (VS Code: **MCP: List Servers → skill-builder → Restart**; Claude
|
|
352
|
+
Code: `claude mcp remove skill-builder`, then the new `claude mcp add` line).
|
|
353
|
+
|
|
354
|
+
## Removing it
|
|
355
|
+
|
|
356
|
+
- Remove the `skill-builder` entry from your AI tool's MCP settings (Claude Code:
|
|
357
|
+
`claude mcp remove skill-builder`).
|
|
358
|
+
- Switch off **Connect AI tools** in Skill Builder.
|
|
359
|
+
- Optional: delete the `_npx` folder inside your npm cache folder (`npm config get cache`
|
|
360
|
+
prints where it is) to remove the copy `npx` downloaded.
|
|
361
|
+
|
|
362
|
+
Nothing else is installed, and the connector leaves no files behind.
|
|
363
|
+
|
|
364
|
+
## Options
|
|
365
|
+
|
|
366
|
+
| Option | Meaning |
|
|
367
|
+
| ------------ | ------------------------------------------------------------------------------ |
|
|
368
|
+
| `--dev` | Also accept a local Skill Builder dev server (`http://localhost:5173`, `4173`) |
|
|
369
|
+
| `--port <n>` | Use only this port (47320-47329) |
|
|
370
|
+
| `--help` | Show help |
|
|
371
|
+
| `--version` | Show the version |
|
|
372
|
+
|
|
373
|
+
## Limits
|
|
374
|
+
|
|
375
|
+
- The AI tool and the browser must be on the **same computer**; phones and tablets are not
|
|
376
|
+
supported.
|
|
377
|
+
- **ChatGPT** (web and desktop) only supports remote MCP servers, so it can not use this
|
|
378
|
+
connector.
|
|
379
|
+
- **Safari** is not supported.
|
|
380
|
+
- **Pair on each start:** pairing is not remembered between restarts or reloads.
|
|
381
|
+
- **Cloud features** (sign-in, sync, the AI check, the community library) are not available
|
|
382
|
+
to AI tools.
|
|
383
|
+
|
|
384
|
+
## Licence
|
|
385
|
+
|
|
386
|
+
[MIT](./LICENSE) © 2026 Pascal Couturier. Bundled third-party packages keep their own
|
|
387
|
+
licences, listed in `dist/THIRD_PARTY_LICENSES.md`.
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Security and privacy
|
|
2
|
+
|
|
3
|
+
This connector runs on your computer, started by your AI tool. This page says exactly what
|
|
4
|
+
it does and does not do, how that is enforced, and how to check it yourself.
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
|
|
8
|
+
- Talks MCP with the AI tool that started it, over that process's stdin and stdout.
|
|
9
|
+
- Listens for **one** Skill Builder tab on `127.0.0.1`, on the first free port from 47320 to
|
|
10
|
+
47329, and passes tool calls and results between the two.
|
|
11
|
+
- Writes short status lines (never your content) to stderr, which your AI tool shows in its
|
|
12
|
+
MCP log.
|
|
13
|
+
|
|
14
|
+
## What it never does
|
|
15
|
+
|
|
16
|
+
- **No outbound connections.** It does not contact any server, not npm, not GitHub, not
|
|
17
|
+
Skill Builder's website. It only accepts a connection on 127.0.0.1.
|
|
18
|
+
- **Not reachable from your network.** It binds to 127.0.0.1 only.
|
|
19
|
+
- **No files.** It does not read your files (other than its own code) or write any.
|
|
20
|
+
- **No programs.** It does not start other programs or shells.
|
|
21
|
+
- **No code from outside.** It never evaluates code it receives, and it does not generate
|
|
22
|
+
code at runtime (`eval` and `new Function` are never called).
|
|
23
|
+
- **No telemetry, no analytics, no accounts, no cloud.**
|
|
24
|
+
- **No secrets stored.** Keys are made fresh for each connection and kept in memory only.
|
|
25
|
+
|
|
26
|
+
These are checked by an automated test (`src/sandbox.test.ts`) that runs the exact file
|
|
27
|
+
published to npm under Node's permission model (`--permission`, with read access to the
|
|
28
|
+
package only) and a guard that fails the test on any network connection, DNS lookup of a host
|
|
29
|
+
name, program start, file write or runtime code generation.
|
|
30
|
+
|
|
31
|
+
## Who can talk to it
|
|
32
|
+
|
|
33
|
+
| Who | What happens |
|
|
34
|
+
| --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
35
|
+
| Another website in your browser | Refused: only `https://skill-builder.pascalcouturier.com` is accepted (exact match; `--dev` adds `http://localhost:5173` and `:4173`), and the `Host` header must be `127.0.0.1:<port>` or `localhost:<port>`, which stops DNS-rebinding attacks. |
|
|
36
|
+
| Other devices on your network | Can not connect: it only listens on 127.0.0.1. |
|
|
37
|
+
| A program on your computer pretending to be Skill Builder | Can connect (programs can fake the `Origin` header), but can not pair: the connector makes a random 60-bit pairing code and shows it only to you, through your AI tool and its log. The tab must prove it knows the code (HMAC bound to this connection's ECDH key). Three wrong codes close the connection; ten in one run turn pairing off until the AI tool restarts. Until paired, it receives nothing and can send nothing to your AI tool. |
|
|
38
|
+
| A program pretending to be this connector | Can not pair with Skill Builder: after you type the code, Skill Builder also asks the connector to prove it knows it. Only the connector that showed the code in your AI tool can, so an imitation is refused and the user is told. The code itself never crosses the connection. |
|
|
39
|
+
| Your approved Skill Builder tab | Can answer the tool calls your AI tool makes. Every message is signed (HMAC-SHA256) and numbered, so it can not be forged, replayed or reordered. Messages are limited to 1 MB. |
|
|
40
|
+
|
|
41
|
+
## Data and privacy
|
|
42
|
+
|
|
43
|
+
- Your skills, agents and sessions stay in your browser (IndexedDB). The connector holds them
|
|
44
|
+
only in memory, while passing a result to your AI tool.
|
|
45
|
+
- What the AI tool reads through the tools becomes part of your chat, so it is sent to your
|
|
46
|
+
AI tool's model provider (for example GitHub, Anthropic or OpenAI), as if you had pasted it.
|
|
47
|
+
The pairing code is also shown there; it is single-use and useless without access to your
|
|
48
|
+
computer.
|
|
49
|
+
- Skill Builder tells the AI that stored text is content, not instructions, and scans what
|
|
50
|
+
the AI writes with its security scanner.
|
|
51
|
+
|
|
52
|
+
## Keeping your AI tool safe
|
|
53
|
+
|
|
54
|
+
An MCP server's results are read by an AI that may be able to act on your computer (run
|
|
55
|
+
commands, edit files). Treat any tool's output as untrusted, including this one's:
|
|
56
|
+
|
|
57
|
+
- Keep your AI tool's confirmations on for terminal commands and file edits (in VS Code, do
|
|
58
|
+
not turn on auto-approve for terminal tools). Skill Builder's own tools are marked
|
|
59
|
+
read-only or destructive so your AI tool can ask before running them.
|
|
60
|
+
- Only approve a pairing request you started yourself.
|
|
61
|
+
- Turn **Connect AI** off in Skill Builder when you are not using it.
|
|
62
|
+
|
|
63
|
+
## What is in the package
|
|
64
|
+
|
|
65
|
+
- `dist/cli.js`: one file, built by GitHub Actions. It bundles the MCP TypeScript SDK, `ws`
|
|
66
|
+
and `zod` at locked versions. It is **not minified**, so you can read exactly what runs:
|
|
67
|
+
on npmjs.com open the package's **Code** tab, or look in your npm cache after the first
|
|
68
|
+
run.
|
|
69
|
+
- `dist/THIRD_PARTY_LICENSES.md`: every bundled package, its version and licence.
|
|
70
|
+
- The package has **no dependencies to install** and **no install scripts**.
|
|
71
|
+
- Releases are published only by a GitHub Actions workflow with npm trusted publishing: no
|
|
72
|
+
npm token exists that could leak, and publishing with a token is turned off for this
|
|
73
|
+
package. Every release waits for the maintainer's approval. (Skill Builder's source
|
|
74
|
+
repository is private, and npm adds provenance attestations only for public repositories,
|
|
75
|
+
so releases do not carry one.)
|
|
76
|
+
|
|
77
|
+
## Check it yourself
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# What it contains, and its checksum
|
|
81
|
+
npm pack @pascalcouturier/skill-builder-mcp@1.0.0
|
|
82
|
+
tar -tzf pascalcouturier-skill-builder-mcp-1.0.0.tgz
|
|
83
|
+
npm view @pascalcouturier/skill-builder-mcp@1.0.0 dist.integrity
|
|
84
|
+
|
|
85
|
+
# That the registry signed it (in a project that installs it)
|
|
86
|
+
npm audit signatures
|
|
87
|
+
|
|
88
|
+
# Run it with Node's permission model (no file writes, no programs).
|
|
89
|
+
# Unpack the tarball first (tar -xzf …), then:
|
|
90
|
+
node --permission --allow-fs-read="$PWD/package" package/dist/cli.js --help
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
On Node.js 25 and later the permission model also covers the network. `--help` needs none,
|
|
94
|
+
but to run the connector itself this way add `--allow-net`: it only listens on 127.0.0.1,
|
|
95
|
+
and the sandbox test still checks that it never connects anywhere.
|
|
96
|
+
|
|
97
|
+
Install instructions pin an exact version (`@1.0.0`, not `@1` or `@latest`). Published npm
|
|
98
|
+
versions can never be changed, so your computer runs exactly the release you chose, and an
|
|
99
|
+
update happens only when you change the version yourself.
|
|
100
|
+
|
|
101
|
+
## Reporting a problem
|
|
102
|
+
|
|
103
|
+
Please report security issues privately by email to
|
|
104
|
+
[security@giondesign.com](mailto:security@giondesign.com), with the connector version, your
|
|
105
|
+
AI tool and browser, and the steps to reproduce. Please do not post them publicly before
|
|
106
|
+
they are fixed. Fixes are released as a new patch version and listed in
|
|
107
|
+
[CHANGELOG.md](./CHANGELOG.md).
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Third-party software in this package
|
|
2
|
+
|
|
3
|
+
dist/cli.js bundles the following packages. Their licences follow.
|
|
4
|
+
|
|
5
|
+
- @modelcontextprotocol/sdk@1.31.0 (MIT)
|
|
6
|
+
- ws@8.22.0 (MIT)
|
|
7
|
+
- zod@4.6.5 (MIT)
|
|
8
|
+
- zod-to-json-schema@3.25.2 (ISC)
|
|
9
|
+
|
|
10
|
+
## @modelcontextprotocol/sdk@1.31.0
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
MIT License
|
|
14
|
+
|
|
15
|
+
Copyright (c) 2024 Anthropic, PBC
|
|
16
|
+
|
|
17
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
18
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
19
|
+
in the Software without restriction, including without limitation the rights
|
|
20
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
21
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
22
|
+
furnished to do so, subject to the following conditions:
|
|
23
|
+
|
|
24
|
+
The above copyright notice and this permission notice shall be included in all
|
|
25
|
+
copies or substantial portions of the Software.
|
|
26
|
+
|
|
27
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
28
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
29
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
30
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
31
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
32
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
33
|
+
SOFTWARE.
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## ws@8.22.0
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>
|
|
40
|
+
Copyright (c) 2013 Arnout Kazemier and contributors
|
|
41
|
+
Copyright (c) 2016 Luigi Pinca and contributors
|
|
42
|
+
|
|
43
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
44
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
45
|
+
the Software without restriction, including without limitation the rights to
|
|
46
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
47
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
48
|
+
subject to the following conditions:
|
|
49
|
+
|
|
50
|
+
The above copyright notice and this permission notice shall be included in all
|
|
51
|
+
copies or substantial portions of the Software.
|
|
52
|
+
|
|
53
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
54
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
55
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
56
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
57
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
58
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## zod@4.6.5
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
MIT License
|
|
65
|
+
|
|
66
|
+
Copyright (c) 2025 Colin McDonnell
|
|
67
|
+
|
|
68
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
69
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
70
|
+
in the Software without restriction, including without limitation the rights
|
|
71
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
72
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
73
|
+
furnished to do so, subject to the following conditions:
|
|
74
|
+
|
|
75
|
+
The above copyright notice and this permission notice shall be included in all
|
|
76
|
+
copies or substantial portions of the Software.
|
|
77
|
+
|
|
78
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
79
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
80
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
81
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
82
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
83
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
84
|
+
SOFTWARE.
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## zod-to-json-schema@3.25.2
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
ISC License
|
|
91
|
+
|
|
92
|
+
Copyright (c) 2020, Stefan Terdell
|
|
93
|
+
|
|
94
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
95
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
96
|
+
copyright notice and this permission notice appear in all copies.
|
|
97
|
+
|
|
98
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
99
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
100
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
101
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
102
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
103
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
104
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
105
|
+
```
|