@cpenned/mcp 0.7.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -10
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -1
- package/dist/config.js +6 -1
- package/dist/config.js.map +1 -1
- package/dist/server.js +8 -4
- package/dist/server.js.map +1 -1
- package/dist/skills.js +95 -30
- package/dist/skills.js.map +1 -1
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/keys.js +5 -1
- package/dist/tools/keys.js.map +1 -1
- package/dist/tools/profile.js +27 -0
- package/dist/tools/profile.js.map +1 -0
- package/dist/tools/render.js +5 -1
- package/dist/tools/render.js.map +1 -1
- package/dist/tools/shares.js +35 -0
- package/dist/tools/shares.js.map +1 -0
- package/dist/tools/skills.js +8 -6
- package/dist/tools/skills.js.map +1 -1
- package/dist/tools/tasks.js +17 -2
- package/dist/tools/tasks.js.map +1 -1
- package/package.json +1 -1
- package/skills/open-brain-mcp/SKILL.md +38 -2
package/README.md
CHANGED
|
@@ -16,7 +16,10 @@ Set via environment variables:
|
|
|
16
16
|
|
|
17
17
|
The key's scopes gate the tools: resource tools need `<resource>:read|write`,
|
|
18
18
|
review tools `reviews:*`, settings tools `settings:read|write`, and
|
|
19
|
-
`find_tasks` / `ai_triage` need `ai:invoke`.
|
|
19
|
+
`find_tasks` / `ai_triage` need `ai:invoke`. `list_shares`/`list_shared_tasks`
|
|
20
|
+
additionally need the key to have been minted with `includeGrants: true` (via
|
|
21
|
+
`create_key`'s `includeGrants` flag or the web app) - without it, a key only
|
|
22
|
+
ever sees the vault's own data, even with `*`.
|
|
20
23
|
|
|
21
24
|
## Run
|
|
22
25
|
|
|
@@ -46,6 +49,16 @@ The server speaks MCP over stdio.
|
|
|
46
49
|
}
|
|
47
50
|
```
|
|
48
51
|
|
|
52
|
+
### Remote (hosted on Vercel)
|
|
53
|
+
|
|
54
|
+
The repo's Vercel deploy also exposes this tool surface as a remote MCP server
|
|
55
|
+
over Streamable HTTP at `/api/mcp` (see the root README, "Hosted MCP
|
|
56
|
+
endpoint"). The hosted variant reuses `createServer` with
|
|
57
|
+
`{ localSkills: false }`, so `install_skills` and the skill-install nudge are
|
|
58
|
+
local-transport only. Auth is per-request: `Authorization: Bearer obr_...`, or
|
|
59
|
+
`/api/mcp/<key>` for clients that can't send headers (claude.ai custom
|
|
60
|
+
connectors).
|
|
61
|
+
|
|
49
62
|
### From source (development)
|
|
50
63
|
|
|
51
64
|
Building from the monorepo instead of npm:
|
|
@@ -66,6 +79,10 @@ Point the `args` at the absolute `packages/mcp/dist/index.js` path with
|
|
|
66
79
|
`add_task_tags`, `remove_task_tags`; the `*_project`, `*_garden`, `*_tag`
|
|
67
80
|
equivalents. Task/project `deferDate`/`deadline` are calendar days
|
|
68
81
|
(`YYYY-MM-DD`); inputs also accept relative tokens like `today`/`+3d`.
|
|
82
|
+
Tasks also carry `assigneeUserId` (settable via `create_task(s)`/
|
|
83
|
+
`update_task(s)` as a user id, `"me"`, or `null` to unassign - only
|
|
84
|
+
meaningful in a garden shared with another user, see Mind Meld below);
|
|
85
|
+
`list_tasks` filters by `assignee: "me"|"unassigned"|<userId>`.
|
|
69
86
|
- **People** (personal CRM): `create_person`, `list_people` (`query` searches
|
|
70
87
|
name, aliases, company, notes, and more), `get_person`,
|
|
71
88
|
`update_person` (null clears fields; `archived: false` restores),
|
|
@@ -130,21 +147,33 @@ Point the `args` at the absolute `packages/mcp/dist/index.js` path with
|
|
|
130
147
|
- **UI (read-only MCPUI)**: `ui_view`, `ui_review_queue`, `ui_garden_board`,
|
|
131
148
|
`ui_habits`
|
|
132
149
|
return `ui://` HTML resources.
|
|
133
|
-
- **
|
|
150
|
+
- **Mind Meld** (shared gardens, guest side - sharing/invites/revoke are
|
|
151
|
+
web-app-only): `list_shares` (gardens shared with the caller: capabilities,
|
|
152
|
+
owner, participants - empty unless the key has `includeGrants`),
|
|
153
|
+
`list_shared_tasks` (`{shareId, status?, includeCanceled?}`, capped at
|
|
154
|
+
500). In a shared garden, a guest's status moves are gated by the owner's
|
|
155
|
+
capability grant rather than the usual status machine: `complete` only
|
|
156
|
+
moves an open task to `done`; any other move (including reopening `done`/
|
|
157
|
+
`canceled`) needs `edit`; `canceled` needs `cancel`.
|
|
158
|
+
- **Profile**: `get_profile`, `update_profile` (`displayName`, 1-60 chars;
|
|
159
|
+
avatar upload is web-only).
|
|
160
|
+
- **Key management**: `create_key` (optional `includeGrants` so the minted key
|
|
161
|
+
can see gardens shared with its owner - only settable if the calling key
|
|
162
|
+
itself has it), `list_keys`, `rotate_key`, `revoke_key`
|
|
134
163
|
(require the configured key to hold `keys:manage`). A key can only grant
|
|
135
164
|
scopes it itself holds; secrets are returned once. Grant `keys:manage`
|
|
136
165
|
deliberately - it lets the agent mint and revoke keys.
|
|
137
166
|
- **Skills**: `install_skills` copies the bundled `open-brain-mcp` agent skill
|
|
138
|
-
into the
|
|
167
|
+
into the shared skills directory (see below). Purely local; no API call.
|
|
139
168
|
|
|
140
169
|
## Agent skill
|
|
141
170
|
|
|
142
|
-
The `open-brain-mcp` agent skill teaches an assistant
|
|
143
|
-
|
|
144
|
-
ways:
|
|
171
|
+
The `open-brain-mcp` agent skill teaches an assistant how to use these tools
|
|
172
|
+
well - Claude Code, or any other agent that reads `~/.agents/skills`. It ships
|
|
173
|
+
inside this package; install it any of three ways:
|
|
145
174
|
|
|
146
175
|
```bash
|
|
147
|
-
npx -y @cpenned/mcp install-skills # into ~/.claude/skills
|
|
176
|
+
npx -y @cpenned/mcp install-skills # into ~/.agents/skills (+ links ~/.claude/skills)
|
|
148
177
|
npx -y @cpenned/mcp install-skills --force # overwrite an existing copy
|
|
149
178
|
npx -y @cpenned/mcp list-skills # what's bundled
|
|
150
179
|
npx -y @cpenned/mcp uninstall-skills
|
|
@@ -156,10 +185,13 @@ npx -y @cpenned/mcp uninstall-skills
|
|
|
156
185
|
- **Via the CLI package** (bundles the CLI skill too):
|
|
157
186
|
`npm i -g @cpenned/cli && ob skills install`.
|
|
158
187
|
- Or copy [`.agents/skills/open-brain-mcp`](../../.agents/skills/open-brain-mcp)
|
|
159
|
-
from the repo into `~/.
|
|
188
|
+
from the repo into `~/.agents/skills` by hand.
|
|
160
189
|
|
|
161
|
-
|
|
162
|
-
|
|
190
|
+
By default, skills install into the shared `~/.agents/skills` directory and
|
|
191
|
+
`~/.claude/skills` is symlinked to that copy, so Claude Code and any other
|
|
192
|
+
agent using the shared directory both pick it up. Pass `--dir <path>` to
|
|
193
|
+
install directly into one specific agent's own skills directory instead
|
|
194
|
+
(no shared dir, no symlink). Restart your agent after installing.
|
|
163
195
|
|
|
164
196
|
## Publishing
|
|
165
197
|
|
package/dist/client.js
CHANGED
|
@@ -25,6 +25,8 @@ export class OpenBrainClient {
|
|
|
25
25
|
Authorization: `Bearer ${this.config.apiKey}`,
|
|
26
26
|
"X-Client": this.config.clientType,
|
|
27
27
|
};
|
|
28
|
+
if (this.config.forwardedFor)
|
|
29
|
+
headers["X-Forwarded-For"] = this.config.forwardedFor;
|
|
28
30
|
if (opts.body !== undefined)
|
|
29
31
|
headers["Content-Type"] = "application/json";
|
|
30
32
|
if (opts.idempotencyKey)
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
// Strip trailing slashes and a trailing /v1 - tool paths carry the /v1
|
|
2
|
+
// prefix themselves.
|
|
3
|
+
export function normalizeBaseUrl(baseUrl) {
|
|
4
|
+
return baseUrl.replace(/\/+$/, "").replace(/\/v1$/, "");
|
|
5
|
+
}
|
|
1
6
|
export function loadConfig(env = process.env) {
|
|
2
7
|
const baseUrl = env.OPEN_BRAIN_API_URL;
|
|
3
8
|
const apiKey = env.OPEN_BRAIN_API_KEY;
|
|
@@ -8,7 +13,7 @@ export function loadConfig(env = process.env) {
|
|
|
8
13
|
throw new Error("OPEN_BRAIN_API_KEY is required");
|
|
9
14
|
}
|
|
10
15
|
return {
|
|
11
|
-
baseUrl: baseUrl
|
|
16
|
+
baseUrl: normalizeBaseUrl(baseUrl),
|
|
12
17
|
apiKey,
|
|
13
18
|
clientType: env.OPEN_BRAIN_CLIENT_TYPE ?? "mcp",
|
|
14
19
|
};
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAeA,uEAAuE;AACvE,qBAAqB;AACrB,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,kBAAkB,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO;QACL,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;QAClC,MAAM;QACN,UAAU,EAAE,GAAG,CAAC,sBAAsB,IAAI,KAAK;KAChD,CAAC;AACJ,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -4,18 +4,22 @@ import { registerSkillTools, skillsStatus } from "./tools/skills.js";
|
|
|
4
4
|
// Surfaced to the client on initialize. When the bundled skill isn't installed
|
|
5
5
|
// locally yet, nudge the agent to offer installing it - this is the "prompt on
|
|
6
6
|
// install" path, since MCP servers can't initiate conversation themselves.
|
|
7
|
-
function buildInstructions() {
|
|
7
|
+
function buildInstructions(localSkills) {
|
|
8
8
|
const base = "Open Brain MCP: personal task management (tasks, projects, gardens, tags, people, reviews) over the /v1 API.";
|
|
9
|
+
if (!localSkills)
|
|
10
|
+
return base;
|
|
9
11
|
const missing = skillsStatus().filter((s) => !s.installed);
|
|
10
12
|
if (missing.length === 0)
|
|
11
13
|
return base;
|
|
12
14
|
return (`${base} The bundled agent skill (${missing.map((s) => s.name).join(", ")}) is not installed on this machine. ` +
|
|
13
15
|
"Early in the first conversation, offer once to install it with the install_skills tool (a local copy into ~/.claude/skills) so future sessions drive these tools well; respect the user's answer and don't re-offer.");
|
|
14
16
|
}
|
|
15
|
-
export function createServer(client) {
|
|
16
|
-
const
|
|
17
|
+
export function createServer(client, options = {}) {
|
|
18
|
+
const localSkills = options.localSkills ?? true;
|
|
19
|
+
const server = new McpServer({ name: "open-brain", version: "0.1.0" }, { instructions: buildInstructions(localSkills) });
|
|
17
20
|
registerAllTools(server, client);
|
|
18
|
-
|
|
21
|
+
if (localSkills)
|
|
22
|
+
registerSkillTools(server);
|
|
19
23
|
return server;
|
|
20
24
|
}
|
|
21
25
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAErE,+EAA+E;AAC/E,+EAA+E;AAC/E,2EAA2E;AAC3E,SAAS,iBAAiB;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAErE,+EAA+E;AAC/E,+EAA+E;AAC/E,2EAA2E;AAC3E,SAAS,iBAAiB,CAAC,WAAoB;IAC7C,MAAM,IAAI,GACR,8GAA8G,CAAC;IACjH,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,CACL,GAAG,IAAI,6BAA6B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC;QAC/G,sNAAsN,CACvN,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,YAAY,CAC1B,MAAuB,EACvB,UAA+B,EAAE;IAEjC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,EACxC,EAAE,YAAY,EAAE,iBAAiB,CAAC,WAAW,CAAC,EAAE,CACjD,CAAC;IACF,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,WAAW;QAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/skills.js
CHANGED
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
// Bundled agent skills shipped with the MCP server. `open-brain-mcp
|
|
2
|
-
// install-skills` (or the install_skills tool) copies them into the
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
|
|
2
|
+
// install-skills` (or the install_skills tool) copies them into the shared
|
|
3
|
+
// agent skills directory (~/.agents/skills) and links Claude Code's own
|
|
4
|
+
// skills directory (~/.claude/skills) to that copy - the same one-canonical-
|
|
5
|
+
// copy-per-skill, one-symlink-per-agent layout other tools on the machine
|
|
6
|
+
// already use, so any agent that reads ~/.agents/skills picks the skill up
|
|
7
|
+
// too. These are pure local file operations, no API or auth involved. The
|
|
8
|
+
// skill content is copied into this package at build time from the repo's
|
|
9
|
+
// .agents/skills (see scripts/bundle-skills.mjs), which stays the single
|
|
10
|
+
// source of truth.
|
|
11
|
+
import { cpSync, existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, rmSync, symlinkSync, } from "node:fs";
|
|
9
12
|
import { homedir } from "node:os";
|
|
10
|
-
import { dirname, join } from "node:path";
|
|
13
|
+
import { dirname, join, relative } from "node:path";
|
|
11
14
|
import { fileURLToPath } from "node:url";
|
|
12
15
|
// Resolved relative to the compiled file (dist/skills.js) so it points at the
|
|
13
16
|
// package's bundled `skills/` dir regardless of where the server is installed.
|
|
14
17
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
15
18
|
const bundledSkillsDir = join(here, "..", "skills");
|
|
19
|
+
// The shared, agent-agnostic store: any tool that knows to look here finds
|
|
20
|
+
// the skill without needing Open Brain to know about it specifically.
|
|
21
|
+
export function canonicalSkillsDir() {
|
|
22
|
+
return join(homedir(), ".agents", "skills");
|
|
23
|
+
}
|
|
24
|
+
// Claude Code's own skills directory. Populated with a symlink into the
|
|
25
|
+
// canonical dir above, not a real copy.
|
|
16
26
|
export function defaultSkillsDir() {
|
|
17
27
|
return join(homedir(), ".claude", "skills");
|
|
18
28
|
}
|
|
@@ -44,36 +54,91 @@ function readDescription(skillFile) {
|
|
|
44
54
|
}
|
|
45
55
|
return parts.join(" ").replace(/\s+/g, " ").trim();
|
|
46
56
|
}
|
|
57
|
+
// existsSync follows symlinks, so it reports false for a dangling link this
|
|
58
|
+
// code needs to clean up. lexists mirrors `test -e` / `rm -rf` semantics.
|
|
59
|
+
function lexists(path) {
|
|
60
|
+
try {
|
|
61
|
+
lstatSync(path);
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function copySkill(src, dest) {
|
|
69
|
+
cpSync(src, dest, {
|
|
70
|
+
recursive: true,
|
|
71
|
+
filter: (p) => !lstatSync(p).isSymbolicLink(),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
47
74
|
export function installSkills(opts = {}) {
|
|
48
|
-
const root = opts.dir ?? defaultSkillsDir();
|
|
49
75
|
const wanted = pick(listBundledSkills(opts.srcDir), opts.only);
|
|
50
|
-
if (wanted.length)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
76
|
+
if (!wanted.length)
|
|
77
|
+
return [];
|
|
78
|
+
if (opts.dir) {
|
|
79
|
+
mkdirSync(opts.dir, { recursive: true });
|
|
80
|
+
return wanted.map((skill) => installDirect(skill, opts.dir, opts.force));
|
|
81
|
+
}
|
|
82
|
+
const canonicalDir = opts.canonicalDir ?? canonicalSkillsDir();
|
|
83
|
+
const claudeDir = opts.claudeDir ?? defaultSkillsDir();
|
|
84
|
+
mkdirSync(canonicalDir, { recursive: true });
|
|
85
|
+
mkdirSync(claudeDir, { recursive: true });
|
|
86
|
+
return wanted.map((skill) => installShared(skill, canonicalDir, claudeDir, opts.force));
|
|
87
|
+
}
|
|
88
|
+
function installDirect(skill, root, force) {
|
|
89
|
+
const dest = join(root, skill.name);
|
|
90
|
+
const exists = existsSync(dest);
|
|
91
|
+
if (exists && !force)
|
|
92
|
+
return { name: skill.name, status: "skipped", dest };
|
|
93
|
+
if (exists)
|
|
94
|
+
rmSync(dest, { recursive: true, force: true });
|
|
95
|
+
copySkill(skill.path, dest);
|
|
96
|
+
return { name: skill.name, status: exists ? "overwritten" : "installed", dest };
|
|
97
|
+
}
|
|
98
|
+
// Writes the real files to the shared canonical dir and points Claude Code's
|
|
99
|
+
// skills directory at it with a symlink, so the two never drift apart.
|
|
100
|
+
function installShared(skill, canonicalDir, claudeDir, force) {
|
|
101
|
+
const canonicalDest = join(canonicalDir, skill.name);
|
|
102
|
+
const claudeDest = join(claudeDir, skill.name);
|
|
103
|
+
const exists = existsSync(canonicalDest) || lexists(claudeDest);
|
|
104
|
+
if (exists && !force)
|
|
105
|
+
return { name: skill.name, status: "skipped", dest: canonicalDest };
|
|
106
|
+
if (existsSync(canonicalDest))
|
|
107
|
+
rmSync(canonicalDest, { recursive: true, force: true });
|
|
108
|
+
if (lexists(claudeDest))
|
|
109
|
+
rmSync(claudeDest, { recursive: true, force: true });
|
|
110
|
+
copySkill(skill.path, canonicalDest);
|
|
111
|
+
symlinkSync(relative(claudeDir, canonicalDest), claudeDest, "dir");
|
|
112
|
+
return {
|
|
113
|
+
name: skill.name,
|
|
114
|
+
status: exists ? "overwritten" : "installed",
|
|
115
|
+
dest: canonicalDest,
|
|
116
|
+
};
|
|
65
117
|
}
|
|
66
118
|
export function uninstallSkills(opts = {}) {
|
|
67
|
-
const root = opts.dir ?? defaultSkillsDir();
|
|
68
119
|
const names = opts.only?.length
|
|
69
120
|
? opts.only
|
|
70
121
|
: listBundledSkills(opts.srcDir).map((s) => s.name);
|
|
122
|
+
if (opts.dir) {
|
|
123
|
+
return names.map((name) => {
|
|
124
|
+
const dest = join(opts.dir, name);
|
|
125
|
+
const removed = lexists(dest);
|
|
126
|
+
if (removed)
|
|
127
|
+
rmSync(dest, { recursive: true, force: true });
|
|
128
|
+
return { name, removed, dest };
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
const canonicalDir = opts.canonicalDir ?? canonicalSkillsDir();
|
|
132
|
+
const claudeDir = opts.claudeDir ?? defaultSkillsDir();
|
|
71
133
|
return names.map((name) => {
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
134
|
+
const canonicalDest = join(canonicalDir, name);
|
|
135
|
+
const claudeDest = join(claudeDir, name);
|
|
136
|
+
const removed = existsSync(canonicalDest) || lexists(claudeDest);
|
|
137
|
+
if (lexists(claudeDest))
|
|
138
|
+
rmSync(claudeDest, { recursive: true, force: true });
|
|
139
|
+
if (existsSync(canonicalDest))
|
|
140
|
+
rmSync(canonicalDest, { recursive: true, force: true });
|
|
141
|
+
return { name, removed, dest: canonicalDest };
|
|
77
142
|
});
|
|
78
143
|
}
|
|
79
144
|
function pick(skills, only) {
|
package/dist/skills.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,2EAA2E;AAC3E
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -6,9 +6,11 @@ import { registerHabitTools } from "./habits.js";
|
|
|
6
6
|
import { registerKeyTools } from "./keys.js";
|
|
7
7
|
import { registerListTools } from "./lists.js";
|
|
8
8
|
import { registerPeopleTools } from "./people.js";
|
|
9
|
+
import { registerProfileTools } from "./profile.js";
|
|
9
10
|
import { registerProjectTools } from "./projects.js";
|
|
10
11
|
import { registerReadingTools } from "./reading.js";
|
|
11
12
|
import { registerSettingsTools } from "./settings.js";
|
|
13
|
+
import { registerShareTools } from "./shares.js";
|
|
12
14
|
import { registerStravaTools } from "./strava.js";
|
|
13
15
|
import { registerTagTools } from "./tags.js";
|
|
14
16
|
import { registerTaskTools } from "./tasks.js";
|
|
@@ -31,5 +33,7 @@ export function registerAllTools(server, client) {
|
|
|
31
33
|
registerUiTools(server, client);
|
|
32
34
|
registerKeyTools(server, client);
|
|
33
35
|
registerSettingsTools(server, client);
|
|
36
|
+
registerShareTools(server, client);
|
|
37
|
+
registerProfileTools(server, client);
|
|
34
38
|
}
|
|
35
39
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAuB;IACzE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAuB;IACzE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC"}
|
package/dist/tools/keys.js
CHANGED
|
@@ -10,6 +10,10 @@ const createKeySchema = z.object({
|
|
|
10
10
|
.array(z.string())
|
|
11
11
|
.describe("e.g. tasks:read, tasks:write, reviews:*, ai:invoke, * (owner)"),
|
|
12
12
|
clientType: z.enum(["cli", "mcp", "web", "integration"]).optional(),
|
|
13
|
+
includeGrants: z
|
|
14
|
+
.boolean()
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("Let this key read/write gardens shared with the caller too, not just the vault's own data. Only settable when the calling key itself has includeGrants (no privilege escalation)."),
|
|
13
17
|
rateLimit: z
|
|
14
18
|
.object({
|
|
15
19
|
perMin: z.number().int().positive().optional(),
|
|
@@ -34,7 +38,7 @@ export function revokeKey(client, args) {
|
|
|
34
38
|
export function registerKeyTools(server, client) {
|
|
35
39
|
server.registerTool("create_key", {
|
|
36
40
|
title: "Create API key",
|
|
37
|
-
description: "Mint an API key (secret shown once). Cannot grant scopes the calling key lacks.",
|
|
41
|
+
description: "Mint an API key (secret shown once). Cannot grant scopes, or includeGrants, the calling key lacks.",
|
|
38
42
|
inputSchema: createKeySchema.shape,
|
|
39
43
|
}, (args) => runTool(() => createKey(client, args)));
|
|
40
44
|
server.registerTool("list_keys", {
|
package/dist/tools/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/tools/keys.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,gEAAgE;AAGhE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,CAAC,+DAA+D,CAAC;IAC5E,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnE,SAAS,EAAE,CAAC;SACT,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC9C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KACpD,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS,CAAC,MAAuB,EAAE,IAAmB;IACpE,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAuB;IAC9C,OAAO,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAEjD,MAAM,UAAU,SAAS,CAAC,MAAuB,EAAE,IAAe;IAChE,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,MAAuB,EAAE,IAAe;IAChE,OAAO,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAuB;IACzE,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/tools/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// The caller's profile (display name, avatar). This is what garden owners and
|
|
2
|
+
// guests see of each other in a Mind Meld share. Avatar upload is a web-only
|
|
3
|
+
// flow (image storage); this surface only edits the display name.
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { runTool } from "../result.js";
|
|
6
|
+
export function getProfile(client) {
|
|
7
|
+
return client.get("/v1/profile");
|
|
8
|
+
}
|
|
9
|
+
const updateProfileSchema = z.object({
|
|
10
|
+
displayName: z.string().min(1).max(60),
|
|
11
|
+
});
|
|
12
|
+
export function updateProfile(client, args) {
|
|
13
|
+
return client.patch("/v1/profile", args);
|
|
14
|
+
}
|
|
15
|
+
export function registerProfileTools(server, client) {
|
|
16
|
+
server.registerTool("get_profile", {
|
|
17
|
+
title: "Get profile",
|
|
18
|
+
description: "The caller's profile: user id, display name, and avatar URL.",
|
|
19
|
+
inputSchema: {},
|
|
20
|
+
}, () => runTool(() => getProfile(client)));
|
|
21
|
+
server.registerTool("update_profile", {
|
|
22
|
+
title: "Update profile",
|
|
23
|
+
description: "Set the caller's display name (1-60 chars) - shown to garden owners/guests in a Mind Meld share. Avatar upload is web-only.",
|
|
24
|
+
inputSchema: updateProfileSchema.shape,
|
|
25
|
+
}, (args) => runTool(() => updateProfile(client, args)));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/tools/profile.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,6EAA6E;AAC7E,kEAAkE;AAGlE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,UAAU,UAAU,CAAC,MAAuB;IAChD,OAAO,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,MAAuB,EAAE,IAAuB;IAC5E,OAAO,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAuB;IAC7E,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE,EAAE;KAChB,EACD,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CACxC,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,6HAA6H;QAC/H,WAAW,EAAE,mBAAmB,CAAC,KAAK;KACvC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACrD,CAAC;AACJ,CAAC"}
|
package/dist/tools/render.js
CHANGED
|
@@ -19,6 +19,9 @@ function rows(items) {
|
|
|
19
19
|
return items
|
|
20
20
|
.map((it) => {
|
|
21
21
|
const label = escapeHtml(it.title ?? it.name ?? "(untitled)");
|
|
22
|
+
const assignee = typeof it.assigneeUserId === "string"
|
|
23
|
+
? ` <span class="assignee">→ ${escapeHtml(it.assigneeUserId)}</span>`
|
|
24
|
+
: "";
|
|
22
25
|
const status = it.status ?? it.relationship ?? "";
|
|
23
26
|
const details = [];
|
|
24
27
|
if (it.dueToday)
|
|
@@ -29,7 +32,7 @@ function rows(items) {
|
|
|
29
32
|
details.push(`${it.periodProgress.done ?? 0}/${it.periodProgress.required ?? 0}`);
|
|
30
33
|
}
|
|
31
34
|
return `<tr>
|
|
32
|
-
<td>${label}</td>
|
|
35
|
+
<td>${label}${assignee}</td>
|
|
33
36
|
<td><span class="status ${escapeHtml(it.status ?? "")}">${escapeHtml(status)}</span></td>
|
|
34
37
|
<td>${escapeHtml(it.priority ?? details.join(" · "))}</td>
|
|
35
38
|
<td>${escapeHtml(isoDay(it.deadline) || isoDay(it.nextReviewAt) || isoDay(it.nextContactAt))}</td>
|
|
@@ -58,6 +61,7 @@ export function htmlDoc(title, body) {
|
|
|
58
61
|
h1 { font-size: 18px; margin: 0 0 12px; }
|
|
59
62
|
h2 { font-size: 14px; margin: 16px 0 6px; text-transform: uppercase; letter-spacing: .04em; color: #555; }
|
|
60
63
|
.count { color: #999; font-weight: 400; }
|
|
64
|
+
.assignee { color: #888; font-size: 11px; }
|
|
61
65
|
table { width: 100%; border-collapse: collapse; font-size: 13px; }
|
|
62
66
|
th, td { text-align: left; padding: 6px 8px; border-bottom: 1px solid #eee; }
|
|
63
67
|
th { color: #888; font-weight: 500; }
|
package/dist/tools/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tools/render.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAChC,UAAU,EACV,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CACvE,CAAC,CACQ,CACd,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/tools/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Mind Meld read tools: gardens another user has shared with the caller (guest
|
|
2
|
+
// side), and their tasks. Sharing itself - creating an invite, editing
|
|
3
|
+
// capabilities, revoking a share - is web-only by design; there is no write
|
|
4
|
+
// surface here. Requires the configured key to have includeGrants, otherwise
|
|
5
|
+
// list_shares comes back empty.
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { runTool } from "../result.js";
|
|
8
|
+
import { statusEnum } from "./schemas.js";
|
|
9
|
+
export function listShares(client) {
|
|
10
|
+
return client.get("/v1/shares");
|
|
11
|
+
}
|
|
12
|
+
const listSharedTasksSchema = z.object({
|
|
13
|
+
shareId: z.string(),
|
|
14
|
+
status: z.array(statusEnum).optional(),
|
|
15
|
+
includeCanceled: z.boolean().optional(),
|
|
16
|
+
});
|
|
17
|
+
export function listSharedTasks(client, args) {
|
|
18
|
+
return client.get(`/v1/shares/${args.shareId}/tasks`, {
|
|
19
|
+
status: args.status?.length ? args.status.join(",") : undefined,
|
|
20
|
+
includeCanceled: args.includeCanceled,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function registerShareTools(server, client) {
|
|
24
|
+
server.registerTool("list_shares", {
|
|
25
|
+
title: "List shared gardens",
|
|
26
|
+
description: "Gardens another user has shared with the caller: capabilities, owner, and participants. Empty unless the key has includeGrants. Sharing/invites/revoke are web-only.",
|
|
27
|
+
inputSchema: {},
|
|
28
|
+
}, () => runTool(() => listShares(client)));
|
|
29
|
+
server.registerTool("list_shared_tasks", {
|
|
30
|
+
title: "List tasks in a shared garden",
|
|
31
|
+
description: "Guest-projection tasks for a garden shared with the caller (from list_shares), capped at 500. Each task carries assigneeUserId and a sharedFrom marker.",
|
|
32
|
+
inputSchema: listSharedTasksSchema.shape,
|
|
33
|
+
}, (args) => runTool(() => listSharedTasks(client, args)));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=shares.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shares.js","sourceRoot":"","sources":["../../src/tools/shares.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,uEAAuE;AACvE,4EAA4E;AAC5E,6EAA6E;AAC7E,gCAAgC;AAGhC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,UAAU,CAAC,MAAuB;IAChD,OAAO,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;IACtC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,MAAuB,EAAE,IAAyB;IAChF,OAAO,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,OAAO,QAAQ,EAAE;QACpD,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/D,eAAe,EAAE,IAAI,CAAC,eAAe;KACtC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAuB;IAC3E,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,sKAAsK;QACxK,WAAW,EAAE,EAAE;KAChB,EACD,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CACxC,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,+BAA+B;QACtC,WAAW,EACT,yJAAyJ;QAC3J,WAAW,EAAE,qBAAqB,CAAC,KAAK;KACzC,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC"}
|
package/dist/tools/skills.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// Skill installation over MCP. The server runs locally on the user's machine
|
|
2
|
-
// (stdio), so it can drop the bundled open-brain-mcp agent skill into
|
|
3
|
-
// skills directory when the agent (with the user's consent)
|
|
4
|
-
//
|
|
5
|
-
//
|
|
2
|
+
// (stdio), so it can drop the bundled open-brain-mcp agent skill into the
|
|
3
|
+
// shared agent skills directory when the agent (with the user's consent)
|
|
4
|
+
// asks for it - available to any agent that reads that directory, not just
|
|
5
|
+
// the one that asked. This pairs with the server instructions, which tell a
|
|
6
|
+
// freshly connected agent to offer the install once.
|
|
6
7
|
import { existsSync } from "node:fs";
|
|
7
8
|
import { join } from "node:path";
|
|
8
9
|
import { z } from "zod";
|
|
@@ -16,7 +17,8 @@ const installSkillsSchema = z.object({
|
|
|
16
17
|
dir: z
|
|
17
18
|
.string()
|
|
18
19
|
.optional()
|
|
19
|
-
.describe("
|
|
20
|
+
.describe("Install directly into this directory instead of the shared default " +
|
|
21
|
+
"(~/.agents/skills, linked into ~/.claude/skills for Claude Code)"),
|
|
20
22
|
});
|
|
21
23
|
export function skillsStatus(dir = defaultSkillsDir()) {
|
|
22
24
|
return listBundledSkills().map((s) => ({
|
|
@@ -28,7 +30,7 @@ export function skillsStatus(dir = defaultSkillsDir()) {
|
|
|
28
30
|
export function registerSkillTools(server) {
|
|
29
31
|
server.registerTool("install_skills", {
|
|
30
32
|
title: "Install agent skills",
|
|
31
|
-
description: "Copy the bundled open-brain-mcp agent skill into the
|
|
33
|
+
description: "Copy the bundled open-brain-mcp agent skill into the shared agent skills directory (~/.agents/skills, linked into ~/.claude/skills for Claude Code) so future sessions - in any agent that reads that shared directory - know how to drive these tools well. Local file write only - ask the user before calling. Returns per-skill status; the agent must be restarted to pick new skills up.",
|
|
32
34
|
inputSchema: installSkillsSchema.shape,
|
|
33
35
|
}, (args) => runTool(async () => ({
|
|
34
36
|
results: installSkills({ force: args.force, dir: args.dir }),
|
package/dist/tools/skills.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/tools/skills.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/tools/skills.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,4EAA4E;AAC5E,qDAAqD;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAElF,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qEAAqE;QACnE,kEAAkE,CACrE;CACJ,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,MAAc,gBAAgB,EAAE;IAC3D,OAAO,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;KACzC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,gYAAgY;QAClY,WAAW,EAAE,mBAAmB,CAAC,KAAK;KACvC,EACD,CAAC,IAAI,EAAE,EAAE,CACP,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACnB,OAAO,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5D,IAAI,EAAE,mDAAmD;KAC1D,CAAC,CAAC,CACN,CAAC;AACJ,CAAC"}
|
package/dist/tools/tasks.js
CHANGED
|
@@ -30,6 +30,11 @@ const taskFields = {
|
|
|
30
30
|
.string()
|
|
31
31
|
.optional()
|
|
32
32
|
.describe("Link to a synced calendar event (id); pass null on update to clear."),
|
|
33
|
+
assigneeUserId: z
|
|
34
|
+
.string()
|
|
35
|
+
.nullable()
|
|
36
|
+
.optional()
|
|
37
|
+
.describe('Assign within a shared garden: a user id, "me" (the caller), or null to leave unassigned. Only valid once the garden has an active share.'),
|
|
33
38
|
};
|
|
34
39
|
const createTaskSchema = z.object({ ...taskFields, idempotencyKey });
|
|
35
40
|
export function createTask(client, args) {
|
|
@@ -54,6 +59,10 @@ const listTasksSchema = z.object({
|
|
|
54
59
|
deadlineAfter: dateField.optional(),
|
|
55
60
|
dueForReview: z.boolean().optional(),
|
|
56
61
|
q: z.string().optional().describe("Substring text filter"),
|
|
62
|
+
assignee: z
|
|
63
|
+
.string()
|
|
64
|
+
.optional()
|
|
65
|
+
.describe('Filter by assignee: "me", "unassigned", or a user id (home vault only)'),
|
|
57
66
|
includeCanceled: z.boolean().optional(),
|
|
58
67
|
sort: z
|
|
59
68
|
.string()
|
|
@@ -78,6 +87,7 @@ export function listTasks(client, args) {
|
|
|
78
87
|
deadlineAfter: args.deadlineAfter,
|
|
79
88
|
dueForReview: args.dueForReview,
|
|
80
89
|
q: args.q,
|
|
90
|
+
assignee: args.assignee,
|
|
81
91
|
includeCanceled: args.includeCanceled,
|
|
82
92
|
sort: args.sort,
|
|
83
93
|
limit: args.limit,
|
|
@@ -120,6 +130,11 @@ const updateTaskSchema = z.object({
|
|
|
120
130
|
.nullable()
|
|
121
131
|
.optional()
|
|
122
132
|
.describe("Link to a synced calendar event (id); pass null on update to clear."),
|
|
133
|
+
assigneeUserId: z
|
|
134
|
+
.string()
|
|
135
|
+
.nullable()
|
|
136
|
+
.optional()
|
|
137
|
+
.describe('Reassign within a shared garden: a user id, "me", or null to unassign.'),
|
|
123
138
|
});
|
|
124
139
|
export function updateTask(client, args) {
|
|
125
140
|
const { id, ...patch } = args;
|
|
@@ -171,12 +186,12 @@ export function registerTaskTools(server, client) {
|
|
|
171
186
|
}, (args) => runTool(() => listTasks(client, args)));
|
|
172
187
|
server.registerTool("get_task", {
|
|
173
188
|
title: "Get task",
|
|
174
|
-
description: "Fetch one task by id (full detail).",
|
|
189
|
+
description: "Fetch one task by id (full detail). If the key has includeGrants, this also resolves tasks in gardens shared with the caller (returned with a sharedFrom field).",
|
|
175
190
|
inputSchema: getTaskSchema.shape,
|
|
176
191
|
}, (args) => runTool(() => getTask(client, args)));
|
|
177
192
|
server.registerTool("update_task", {
|
|
178
193
|
title: "Update task",
|
|
179
|
-
description: "Patch task fields and/or drive its status.",
|
|
194
|
+
description: "Patch task fields and/or drive its status. Also works on a task shared with the caller (includeGrants keys only), subject to the garden owner's capabilities.",
|
|
180
195
|
inputSchema: updateTaskSchema.shape,
|
|
181
196
|
}, (args) => runTool(() => updateTask(client, args)));
|
|
182
197
|
server.registerTool("delete_task", {
|
package/dist/tools/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,gBAAgB;AAGhB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,MAAM,GAAG,GAAG,CAAC,CAAuB,EAAc,EAAE,CAClD,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAEtC,MAAM,UAAU,GAAG;IACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC3E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;IACjD,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE;IACjC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE;IAClD,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACvC,cAAc,EAAE,oBAAoB;SACjC,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CACP,kFAAkF,CACnF;IACH,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC9E,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qEAAqE,CAAC;
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -73,6 +73,22 @@ pre-guessing constraints.
|
|
|
73
73
|
`create_book`/`refresh_book_metadata` and only fill fields you left empty.
|
|
74
74
|
`archived`/`deleted` are independent reversible booleans, same pattern as
|
|
75
75
|
reading list items.
|
|
76
|
+
- **Mind Meld (shared gardens)** = a garden owner shares one garden with
|
|
77
|
+
another signed-in user on the same deployment via the web app (invites,
|
|
78
|
+
capability edits, and revoke are web-only - there is no tool for them).
|
|
79
|
+
A guest sees the shared garden's tasks and, per the owner's chosen
|
|
80
|
+
capability preset, can arrange (move/complete), edit fields, create tasks,
|
|
81
|
+
or cancel - never see the owner's people/habit/calendar links, and never
|
|
82
|
+
see other gardens. Status changes for a guest follow the capability, not
|
|
83
|
+
the usual status machine: `complete` only moves an open task to `done`;
|
|
84
|
+
reopening a `done`/`canceled` task, or any other status move, needs `edit`;
|
|
85
|
+
`canceled` needs `cancel`. Tasks in a shared garden can carry
|
|
86
|
+
`assigneeUserId` (a participant's user id, `"me"`, or `null` to unassign) -
|
|
87
|
+
set it via `create_task`/`update_task`. `list_shares` (needs the key's
|
|
88
|
+
`includeGrants`) shows gardens shared with the caller, their capabilities,
|
|
89
|
+
and participants; `list_shared_tasks {shareId}` lists that garden's tasks.
|
|
90
|
+
`create_key`'s `includeGrants` flag is what lets a key see shared data at
|
|
91
|
+
all - a key without it only ever sees the vault's own data, even with `*`.
|
|
76
92
|
- **Strava activity** = a GPS-tracked activity mirrored in from Strava
|
|
77
93
|
(real-time webhook, plus `sync_strava_activities` for backfill/fallback).
|
|
78
94
|
Never created here — every field except `notes`, `archived`, `deleted`, and
|
|
@@ -87,11 +103,18 @@ pre-guessing constraints.
|
|
|
87
103
|
|
|
88
104
|
## Tool catalog
|
|
89
105
|
|
|
90
|
-
- **Tasks**: `create_task`, `list_tasks` (filter or multi-get via `ids
|
|
106
|
+
- **Tasks**: `create_task`, `list_tasks` (filter or multi-get via `ids`;
|
|
107
|
+
`assignee: "me"|"unassigned"|<userId>` filters the home vault by assignee),
|
|
91
108
|
`get_task`, `update_task` (drives status), `delete_task`, batch
|
|
92
109
|
`create_tasks`/`update_tasks`, `add_task_tags`/`remove_task_tags`.
|
|
93
110
|
`create_task`/`update_task` accept `eventId` to link a synced calendar event
|
|
94
111
|
(read-only mirror); `eventId: null` on update unlinks it.
|
|
112
|
+
`create_task`/`create_tasks`/`update_task`/`update_tasks` also accept
|
|
113
|
+
`assigneeUserId` (a user id, `"me"`, or `null` to unassign) - only
|
|
114
|
+
meaningful once the task's garden has an active share (see Mind Meld
|
|
115
|
+
above). `get_task`/`update_task` also resolve a task shared with the
|
|
116
|
+
caller when the key has `includeGrants` (returned/patched with a
|
|
117
|
+
`sharedFrom` marker).
|
|
95
118
|
- **Projects**: `create_project`, `list_projects`, `get_project`,
|
|
96
119
|
`update_project`, `delete_project`, `create_projects`/`update_projects`.
|
|
97
120
|
- **Gardens**: `create_garden`, `list_gardens`, `get_garden`, `update_garden`,
|
|
@@ -170,7 +193,16 @@ pre-guessing constraints.
|
|
|
170
193
|
deadlines/deferDates from integrations like Linear resolve against;
|
|
171
194
|
`yearlyBookGoal`, the reading-challenge target for books finished this
|
|
172
195
|
calendar year - `null` clears it).
|
|
173
|
-
- **
|
|
196
|
+
- **Mind Meld** (shared gardens, guest side; sharing/invites/revoke are
|
|
197
|
+
web-only): `list_shares` (gardens shared with the caller: capabilities,
|
|
198
|
+
owner, participants - empty unless the key has `includeGrants`),
|
|
199
|
+
`list_shared_tasks {shareId, status?, includeCanceled?}` (that garden's
|
|
200
|
+
tasks, capped at 500).
|
|
201
|
+
- **Profile**: `get_profile` (user id, display name, avatar URL),
|
|
202
|
+
`update_profile {displayName}` (1-60 chars; avatar upload is web-only).
|
|
203
|
+
- **Keys**: `create_key` (optional `includeGrants` to let the new key see
|
|
204
|
+
gardens shared with its owner - only settable if the calling key itself
|
|
205
|
+
has it), `list_keys`, `rotate_key`, `revoke_key`.
|
|
174
206
|
|
|
175
207
|
## Workflows
|
|
176
208
|
|
|
@@ -279,6 +311,10 @@ pre-guessing constraints.
|
|
|
279
311
|
key (it clears the review queue's people section).
|
|
280
312
|
- Created secrets (`create_key`/`rotate_key`) are shown ONCE — surface them to
|
|
281
313
|
the user immediately; they are never retrievable again.
|
|
314
|
+
- `list_shares`/`list_shared_tasks` need a key minted with `includeGrants:
|
|
315
|
+
true`; an ordinary key (even `*`) comes back empty for `list_shares`. There
|
|
316
|
+
is no tool to create/edit/revoke a share or invite - point the user at the
|
|
317
|
+
web app's garden sharing settings for that.
|
|
282
318
|
- Prefer batch tools (`create_tasks`, `update_tasks`) over many single calls
|
|
283
319
|
when acting on several items at once.
|
|
284
320
|
- **Tagging is cheapest at creation.** Pass `tagIds` to `create_task(s)`. There
|