@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 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
- - **Key management**: `create_key`, `list_keys`, `rotate_key`, `revoke_key`
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 local skills directory (see below). Purely local; no API call.
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 (e.g. Claude Code) how to
143
- use these tools well. It ships inside this package; install it any of three
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 `~/.claude/skills` by hand.
188
+ from the repo into `~/.agents/skills` by hand.
160
189
 
161
- Pass `--dir <path>` to target a different skills directory. Restart your agent
162
- after installing.
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)
@@ -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.replace(/\/+$/, "").replace(/\/v1$/, ""),
16
+ baseUrl: normalizeBaseUrl(baseUrl),
12
17
  apiKey,
13
18
  clientType: env.OPEN_BRAIN_CLIENT_TYPE ?? "mcp",
14
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAWA,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,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACzD,MAAM;QACN,UAAU,EAAE,GAAG,CAAC,sBAAsB,IAAI,KAAK;KAChD,CAAC;AACJ,CAAC"}
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 server = new McpServer({ name: "open-brain", version: "0.1.0" }, { instructions: buildInstructions() });
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
- registerSkillTools(server);
21
+ if (localSkills)
22
+ registerSkillTools(server);
19
23
  return server;
20
24
  }
21
25
  //# sourceMappingURL=server.js.map
@@ -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;IACxB,MAAM,IAAI,GACR,8GAA8G,CAAC;IACjH,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;AAED,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,EACxC,EAAE,YAAY,EAAE,iBAAiB,EAAE,EAAE,CACtC,CAAC;IACF,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC"}
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 user's
3
- // Claude Code skills directory (~/.claude/skills) so an assistant knows how to
4
- // drive the Open Brain tools well. These are pure local file operations — no
5
- // API or auth involved. The skill content is copied into this package at build
6
- // time from the repo's .agents/skills (see scripts/bundle-skills.mjs), which
7
- // stays the single source of truth.
8
- import { cpSync, existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, rmSync, } from "node:fs";
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
- mkdirSync(root, { recursive: true });
52
- return wanted.map((skill) => {
53
- const dest = join(root, skill.name);
54
- const exists = existsSync(dest);
55
- if (exists && !opts.force)
56
- return { name: skill.name, status: "skipped", dest };
57
- if (exists)
58
- rmSync(dest, { recursive: true, force: true });
59
- cpSync(skill.path, dest, {
60
- recursive: true,
61
- filter: (p) => !lstatSync(p).isSymbolicLink(),
62
- });
63
- return { name: skill.name, status: exists ? "overwritten" : "installed", dest };
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 dest = join(root, name);
73
- const removed = existsSync(dest);
74
- if (removed)
75
- rmSync(dest, { recursive: true, force: true });
76
- return { name, removed, dest };
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) {
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -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;AACxC,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"}
@@ -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", {
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/tools/keys.ts"],"names":[],"mappings":"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"}
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"}
@@ -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; }
@@ -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;AAmBD,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,IAAI,CAAC,KAAa;IACzB,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,2DAA2D,CAAC;IACtF,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACV,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,IAAI,YAAY,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC;QAClD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,EAAE,CAAC,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC,aAAa,KAAK,QAAQ;YACtC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,SAAS,CAAC,CAAC;QAC7C,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO;YACD,KAAK;gCACe,UAAU,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC;YACtE,UAAU,CAAC,EAAE,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;UACxF,CAAC;IACP,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,KAAa;IACpD,OAAO;UACC,UAAU,CAAC,OAAO,CAAC,wBAAwB,KAAK,CAAC,MAAM;;;eAGlD,IAAI,CAAC,KAAK,CAAC;;aAEb,CAAC;AACd,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,IAAY;IACjD,OAAO;;;;SAIA,UAAU,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;MAmBpB,UAAU,CAAC,KAAK,CAAC;EACrB,IAAI;;QAEE,CAAC;AACT,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"}
@@ -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 their
3
- // skills directory when the agent (with the user's consent) asks for it. This
4
- // pairs with the server instructions, which tell a freshly connected agent to
5
- // offer the install once.
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("Target skills directory (default ~/.claude/skills)"),
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 user's local skills directory (~/.claude/skills) so future sessions 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.",
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 }),
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/tools/skills.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,8EAA8E;AAC9E,0BAA0B;AAE1B,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,CAAC,oDAAoD,CAAC;CAClE,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,gSAAgS;QAClS,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"}
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"}
@@ -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", {
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cpenned/mcp",
3
- "version": "0.7.3",
3
+ "version": "0.8.0",
4
4
  "description": "MCP server for Open Brain - a thin adapter over the /v1 HTTP API.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -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
- - **Keys**: `create_key`, `list_keys`, `rotate_key`, `revoke_key`.
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