@creator-notes/cnotes 0.25.2 → 0.29.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 +3 -4
- package/dist/cn.js +0 -2
- package/dist/cn.js.map +1 -1
- package/dist/commands/auth-keys.d.ts +3 -0
- package/dist/commands/auth-keys.d.ts.map +1 -0
- package/dist/commands/auth-keys.js +69 -0
- package/dist/commands/auth-keys.js.map +1 -0
- package/dist/commands/auth.d.ts +1 -0
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +65 -7
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/canvas.d.ts.map +1 -1
- package/dist/commands/canvas.js +125 -54
- package/dist/commands/canvas.js.map +1 -1
- package/dist/commands/files.d.ts.map +1 -1
- package/dist/commands/files.js +11 -1
- package/dist/commands/files.js.map +1 -1
- package/dist/commands/relationships.d.ts.map +1 -1
- package/dist/commands/relationships.js +145 -14
- package/dist/commands/relationships.js.map +1 -1
- package/dist/lib/api-client.d.ts +1 -1
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +2 -1
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/build-schema.d.ts +3 -1
- package/dist/lib/build-schema.d.ts.map +1 -1
- package/dist/lib/build-schema.js +3 -1
- package/dist/lib/build-schema.js.map +1 -1
- package/dist/lib/canvas-read.d.ts +59 -13
- package/dist/lib/canvas-read.d.ts.map +1 -1
- package/dist/lib/canvas-read.js +209 -17
- package/dist/lib/canvas-read.js.map +1 -1
- package/dist/lib/install-skill.d.ts +7 -2
- package/dist/lib/install-skill.d.ts.map +1 -1
- package/dist/lib/install-skill.js +44 -12
- package/dist/lib/install-skill.js.map +1 -1
- package/dist/lib/mcp-local-file.d.ts +11 -0
- package/dist/lib/mcp-local-file.d.ts.map +1 -0
- package/dist/lib/mcp-local-file.js +62 -0
- package/dist/lib/mcp-local-file.js.map +1 -0
- package/dist/mcp-server.js +63 -59
- package/dist/mcp-server.js.map +1 -1
- package/package.json +1 -1
- package/skills/cnotes/SKILL.md +144 -73
- package/skills/cnotes/references/humanizer.md +267 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas-read.js","sourceRoot":"","sources":["../../src/lib/canvas-read.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"canvas-read.js","sourceRoot":"","sources":["../../src/lib/canvas-read.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,8 +70,13 @@ export declare function installSkillFolder(name: string, target: SkillTarget): S
|
|
|
70
70
|
*/
|
|
71
71
|
export declare function refreshInstalledSkills(): SkillInstallResult[];
|
|
72
72
|
/**
|
|
73
|
-
* Copy the bundled skill
|
|
74
|
-
* Caller is responsible for any prompting
|
|
73
|
+
* Copy the bundled skill *folder* (SKILL.md plus its `references/`) into a
|
|
74
|
+
* target agent's skills dir. Caller is responsible for any prompting.
|
|
75
|
+
*
|
|
76
|
+
* The whole folder is copied — not just SKILL.md — so progressively-disclosed
|
|
77
|
+
* references (e.g. `references/humanizer.md`, loaded only for writing tasks) ship
|
|
78
|
+
* alongside the skill. `destPath` still points at the SKILL.md so callers'
|
|
79
|
+
* messages read the same.
|
|
75
80
|
*/
|
|
76
81
|
export declare function installSkill(target?: SkillTarget): SkillInstallResult;
|
|
77
82
|
//# sourceMappingURL=install-skill.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../src/lib/install-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,mDAAmD;AACnD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7C,eAAO,MAAM,aAAa,EAAE,WAAW,EAAwB,CAAC;AAEhE,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAE5D;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAOD,kEAAkE;AAClE,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,WAAsB,GAAG,MAAM,CAEvE;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAE9D;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,WAAsB,GAAG,OAAO,CAE7E;AAOD,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAEjE;
|
|
1
|
+
{"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../src/lib/install-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,mDAAmD;AACnD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7C,eAAO,MAAM,aAAa,EAAE,WAAW,EAAwB,CAAC;AAEhE,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAE5D;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAOD,kEAAkE;AAClE,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,WAAsB,GAAG,MAAM,CAEvE;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAE9D;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,MAAM,GAAE,WAAsB,GAAG,OAAO,CAE7E;AAOD,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAEjE;AAkDD;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,IAAI,EAAE,OAAO,CAAC;CACf;AAED,eAAO,MAAM,aAAa,EAAE,YAAY,EAiBvC,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAK3E;AAaD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,kBAAkB,CAexF;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,IAAI,kBAAkB,EAAE,CAc7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,WAAsB,GAAG,kBAAkB,CAkB/E"}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* At runtime this file lives at <package>/dist/lib/install-skill.js, so the
|
|
10
10
|
* skill source is two directories up.
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
13
|
-
import { dirname, resolve } from "path";
|
|
12
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync } from "fs";
|
|
13
|
+
import { dirname, relative, resolve } from "path";
|
|
14
14
|
import { homedir } from "os";
|
|
15
15
|
import { fileURLToPath } from "url";
|
|
16
16
|
export const SKILL_TARGETS = ["claude", "codex"];
|
|
@@ -66,6 +66,32 @@ function filesAreIdentical(a, b) {
|
|
|
66
66
|
return false;
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
+
/** Every file path under `dir`, relative to it (recursive). */
|
|
70
|
+
function listFilesRecursive(dir, base = dir) {
|
|
71
|
+
const out = [];
|
|
72
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
73
|
+
const full = resolve(dir, entry.name);
|
|
74
|
+
if (entry.isDirectory())
|
|
75
|
+
out.push(...listFilesRecursive(full, base));
|
|
76
|
+
else
|
|
77
|
+
out.push(relative(base, full));
|
|
78
|
+
}
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* True when every bundled file under `sourceDir` (SKILL.md plus any references/)
|
|
83
|
+
* exists byte-identical under `destDir`. The skill folder is a handful of small
|
|
84
|
+
* files, so this per-invocation compare stays cheap — and unlike a SKILL.md-only
|
|
85
|
+
* check it also notices a changed reference and triggers a refresh.
|
|
86
|
+
*/
|
|
87
|
+
function skillTreeUpToDate(sourceDir, destDir) {
|
|
88
|
+
for (const rel of listFilesRecursive(sourceDir)) {
|
|
89
|
+
if (!filesAreIdentical(resolve(sourceDir, rel), resolve(destDir, rel))) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
69
95
|
export const SKILL_CATALOG = [
|
|
70
96
|
{
|
|
71
97
|
name: "cnotes",
|
|
@@ -108,8 +134,7 @@ export function installSkillFolder(name, target) {
|
|
|
108
134
|
throw new Error(`Bundled skill "${name}" not found at ${source}`);
|
|
109
135
|
}
|
|
110
136
|
const dest = skillFolderDest(name, target);
|
|
111
|
-
const upToDate = existsSync(dest) &&
|
|
112
|
-
filesAreIdentical(resolve(source, "SKILL.md"), resolve(dest, "SKILL.md"));
|
|
137
|
+
const upToDate = existsSync(dest) && skillTreeUpToDate(source, dest);
|
|
113
138
|
if (!upToDate) {
|
|
114
139
|
mkdirSync(dirname(dest), { recursive: true });
|
|
115
140
|
cpSync(source, dest, { recursive: true });
|
|
@@ -143,20 +168,27 @@ export function refreshInstalledSkills() {
|
|
|
143
168
|
return results;
|
|
144
169
|
}
|
|
145
170
|
/**
|
|
146
|
-
* Copy the bundled skill
|
|
147
|
-
* Caller is responsible for any prompting
|
|
171
|
+
* Copy the bundled skill *folder* (SKILL.md plus its `references/`) into a
|
|
172
|
+
* target agent's skills dir. Caller is responsible for any prompting.
|
|
173
|
+
*
|
|
174
|
+
* The whole folder is copied — not just SKILL.md — so progressively-disclosed
|
|
175
|
+
* references (e.g. `references/humanizer.md`, loaded only for writing tasks) ship
|
|
176
|
+
* alongside the skill. `destPath` still points at the SKILL.md so callers'
|
|
177
|
+
* messages read the same.
|
|
148
178
|
*/
|
|
149
179
|
export function installSkill(target = "claude") {
|
|
150
|
-
const
|
|
180
|
+
const sourceFile = getBundledSkillPath();
|
|
151
181
|
const dest = getSkillDestPath(target);
|
|
152
|
-
|
|
153
|
-
|
|
182
|
+
const sourceDir = dirname(sourceFile);
|
|
183
|
+
const destDir = dirname(dest);
|
|
184
|
+
if (!existsSync(sourceFile)) {
|
|
185
|
+
throw new Error(`Bundled skill not found at ${sourceFile}`);
|
|
154
186
|
}
|
|
155
|
-
if (existsSync(dest) &&
|
|
187
|
+
if (existsSync(dest) && skillTreeUpToDate(sourceDir, destDir)) {
|
|
156
188
|
return { target, installed: false, destPath: dest, alreadyUpToDate: true };
|
|
157
189
|
}
|
|
158
|
-
mkdirSync(
|
|
159
|
-
|
|
190
|
+
mkdirSync(destDir, { recursive: true });
|
|
191
|
+
cpSync(sourceDir, destDir, { recursive: true }); // SKILL.md + references/
|
|
160
192
|
removeLegacySkill(target); // drop the old `cn` skill once the new one is in place
|
|
161
193
|
return { target, installed: true, destPath: dest };
|
|
162
194
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/lib/install-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/lib/install-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Throws when `absPath` is outside the permitted local-read scope.
|
|
3
|
+
*/
|
|
4
|
+
export declare function assertMcpLocalFileReadable(absPath: string): void;
|
|
5
|
+
/**
|
|
6
|
+
* Return canonical effective roots. `/` and the user's home are intentionally
|
|
7
|
+
* excluded as implicit cwd roots: MCP clients commonly start there, which
|
|
8
|
+
* would otherwise make the containment check cover all or nearly all files.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getMcpLocalFileRoots(): string[];
|
|
11
|
+
//# sourceMappingURL=mcp-local-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-local-file.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-local-file.ts"],"names":[],"mappings":"AAkCA;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAahE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAU/C"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { realpathSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
/**
|
|
5
|
+
* Guardrails for MCP `cnotes_files_upload` local reads (SOC2 pen-test MEDIUM-3).
|
|
6
|
+
*
|
|
7
|
+
* By default only files under the process cwd or explicit allowlist dirs may be
|
|
8
|
+
* read. Set CNOTES_MCP_ALLOW_ANY_LOCAL_FILE=1 to disable (not recommended).
|
|
9
|
+
*/
|
|
10
|
+
function canonicalPath(value) {
|
|
11
|
+
try {
|
|
12
|
+
return realpathSync(value);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
throw new Error(`MCP local-read scope does not exist or is unreadable: "${value}"`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function parseAllowedDirs() {
|
|
19
|
+
const raw = process.env.CNOTES_MCP_ALLOWED_DIRS;
|
|
20
|
+
if (!raw)
|
|
21
|
+
return [];
|
|
22
|
+
return raw
|
|
23
|
+
.split(path.delimiter)
|
|
24
|
+
.map((d) => d.trim())
|
|
25
|
+
.filter(Boolean)
|
|
26
|
+
.map((d) => canonicalPath(path.resolve(d)));
|
|
27
|
+
}
|
|
28
|
+
function isUnderRoot(filePath, root) {
|
|
29
|
+
const rel = path.relative(root, filePath);
|
|
30
|
+
return rel === "" || (!rel.startsWith("..") && !path.isAbsolute(rel));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Throws when `absPath` is outside the permitted local-read scope.
|
|
34
|
+
*/
|
|
35
|
+
export function assertMcpLocalFileReadable(absPath) {
|
|
36
|
+
if (process.env.CNOTES_MCP_ALLOW_ANY_LOCAL_FILE === "1")
|
|
37
|
+
return;
|
|
38
|
+
const resolved = canonicalPath(path.resolve(absPath));
|
|
39
|
+
const roots = getMcpLocalFileRoots();
|
|
40
|
+
if (roots.some((root) => isUnderRoot(resolved, root)))
|
|
41
|
+
return;
|
|
42
|
+
throw new Error(`Refusing to read "${resolved}" — outside the MCP local-read scope (cwd: ${process.cwd()}). ` +
|
|
43
|
+
`Set CNOTES_MCP_ALLOWED_DIRS to add directories (colon-separated), or ` +
|
|
44
|
+
`CNOTES_MCP_ALLOW_ANY_LOCAL_FILE=1 to disable this guard (not recommended).`);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Return canonical effective roots. `/` and the user's home are intentionally
|
|
48
|
+
* excluded as implicit cwd roots: MCP clients commonly start there, which
|
|
49
|
+
* would otherwise make the containment check cover all or nearly all files.
|
|
50
|
+
*/
|
|
51
|
+
export function getMcpLocalFileRoots() {
|
|
52
|
+
if (process.env.CNOTES_MCP_ALLOW_ANY_LOCAL_FILE === "1")
|
|
53
|
+
return [];
|
|
54
|
+
const cwd = canonicalPath(path.resolve(process.cwd()));
|
|
55
|
+
const unsafeImplicitRoots = new Set([
|
|
56
|
+
canonicalPath(path.parse(cwd).root),
|
|
57
|
+
canonicalPath(homedir()),
|
|
58
|
+
]);
|
|
59
|
+
const implicitRoots = unsafeImplicitRoots.has(cwd) ? [] : [cwd];
|
|
60
|
+
return [...new Set([...implicitRoots, ...parseAllowedDirs()])];
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=mcp-local-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-local-file.js","sourceRoot":"","sources":["../../src/lib/mcp-local-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;GAKG;AAEH,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0DAA0D,KAAK,GAAG,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,GAAG;SACP,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,IAAY;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,IAAI,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,GAAG;QAAE,OAAO;IAEhE,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IAErC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAAE,OAAO;IAE9D,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,8CAA8C,OAAO,CAAC,GAAG,EAAE,KAAK;QAC3F,uEAAuE;QACvE,4EAA4E,CAC/E,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IAEnE,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACvD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;QAClC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnC,aAAa,CAAC,OAAO,EAAE,CAAC;KACzB,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -28,6 +28,7 @@ import { ApiError, CliError, NotFoundError } from "./lib/errors.js";
|
|
|
28
28
|
import { resolveNoteId } from "./lib/resolve-note.js";
|
|
29
29
|
import { readCanvasMarkdown } from "./lib/canvas-read.js";
|
|
30
30
|
import { buildSchema } from "./lib/build-schema.js";
|
|
31
|
+
import { assertMcpLocalFileReadable, getMcpLocalFileRoots, } from "./lib/mcp-local-file.js";
|
|
31
32
|
// ---------------------------------------------------------------------------
|
|
32
33
|
// Environment
|
|
33
34
|
// ---------------------------------------------------------------------------
|
|
@@ -372,28 +373,25 @@ server.tool("cnotes_canvas_add_node", "[Deprecated: use cnotes_canvas_bulk_add]
|
|
|
372
373
|
action: "bulkAddNodes",
|
|
373
374
|
items: [{ type: "note", noteId, positionX: x, positionY: y }],
|
|
374
375
|
})));
|
|
375
|
-
|
|
376
|
+
// The canvas has ONE free-form text element, called "Text", and it is a `richtext`
|
|
377
|
+
// node on the wire. The old `text` node kind (the "Heading") is LEGACY: existing ones
|
|
378
|
+
// still render / move / delete, but nothing creates them any more — a Text element with
|
|
379
|
+
// no background tint and `# Foo` inside IS a heading.
|
|
380
|
+
const TEXT_ELEMENT_CONTENT_DESC = "Text content as markdown (headings, emphasis, images all work — a heading is just `# Title`). Plain markdown ONLY — do NOT use [NOTE-X](relationship:...) or [[...]] mention syntax here (it corrupts the card, which renders blank); reference notes as plain display IDs (\"see RISK-64\"). Keep it card-sized (≤ ~3 sentences): text elements are unversioned, unsearchable presentation furniture — knowledge worth keeping belongs in a typed note.";
|
|
381
|
+
const textElementSchema = {
|
|
376
382
|
canvasId: z.string().describe("Canvas ID"),
|
|
377
|
-
|
|
378
|
-
size: z.enum(["heading", "paragraph"]).optional().default("heading").describe("Text size"),
|
|
379
|
-
color: z.enum(["normal", "muted", "highlighted"]).optional().describe("Color variant"),
|
|
380
|
-
x: z.number().optional().default(100).describe("X position"),
|
|
381
|
-
y: z.number().optional().default(100).describe("Y position"),
|
|
382
|
-
}, async ({ canvasId, text, size, color, x, y }) => withErrorHandling(() => api.post(`/api/canvas/${canvasId}`, {
|
|
383
|
-
action: "bulkAddNodes",
|
|
384
|
-
items: [{ type: "text", content: text, fontSize: size === "paragraph" ? 18 : 32, colorVariant: color, positionX: x, positionY: y }],
|
|
385
|
-
})));
|
|
386
|
-
server.tool("cnotes_canvas_add_richtext", "[Deprecated: use cnotes_canvas_bulk_add] Add a richtext annotation node to a canvas.", {
|
|
387
|
-
canvasId: z.string().describe("Canvas ID"),
|
|
388
|
-
content: z.string().describe("Richtext content as markdown. Plain markdown ONLY — do NOT use [NOTE-X](relationship:...) or [[...]] mention syntax here (it corrupts the card, which renders blank); reference notes as plain display IDs (\"see RISK-64\"). Keep it sticky-sized (≤ ~3 sentences): richtext is unversioned, unsearchable presentation furniture — knowledge worth keeping belongs in a typed note."),
|
|
383
|
+
content: z.string().describe(TEXT_ELEMENT_CONTENT_DESC),
|
|
389
384
|
size: z.enum(["small", "medium", "large"]).optional().default("small").describe("Display size"),
|
|
390
|
-
color: z.string().optional().describe("Background color hex"),
|
|
385
|
+
color: z.string().optional().describe("Background tint color hex. Default is NO background — omit unless the tint encodes a role used consistently on this canvas."),
|
|
391
386
|
x: z.number().optional().default(100).describe("X position"),
|
|
392
387
|
y: z.number().optional().default(100).describe("Y position"),
|
|
393
|
-
}
|
|
388
|
+
};
|
|
389
|
+
const addTextElement = ({ canvasId, content, size, color, x, y }) => withErrorHandling(() => api.post(`/api/canvas/${canvasId}`, {
|
|
394
390
|
action: "bulkAddNodes",
|
|
395
391
|
items: [{ type: "richtext", content, size, colorHex: color, positionX: x, positionY: y }],
|
|
396
|
-
}))
|
|
392
|
+
}));
|
|
393
|
+
server.tool("cnotes_canvas_add_text", "[Deprecated: use cnotes_canvas_bulk_add] Add a Text element to a canvas — free-form rich text placed directly on the canvas (markdown: headings, emphasis, images), with an optional background tint (none by default). A heading is just content '# Title'.", textElementSchema, addTextElement);
|
|
394
|
+
server.tool("cnotes_canvas_add_richtext", "[Deprecated: use cnotes_canvas_add_text or cnotes_canvas_bulk_add] Alias of cnotes_canvas_add_text — adds the same Text element (richtext) with the same arguments.", textElementSchema, addTextElement);
|
|
397
395
|
server.tool("cnotes_canvas_add_list", "[Deprecated: use cnotes_canvas_bulk_add] Add a list/grid node grouping notes on a canvas. The description is the only label; its first paragraph derives the searchable title.", {
|
|
398
396
|
canvasId: z.string().describe("Canvas ID"),
|
|
399
397
|
description: z.string().min(1).describe("Rich-text description (markdown). Required. First paragraph derives the searchable title."),
|
|
@@ -422,7 +420,7 @@ server.tool("cnotes_canvas_add_link", "[Deprecated: use cnotes_canvas_bulk_add]
|
|
|
422
420
|
items: [{ type: "canvas", linkedCanvasId: targetCanvasId, positionX: x, positionY: y }],
|
|
423
421
|
})));
|
|
424
422
|
// --- Primary bulk tool ---
|
|
425
|
-
server.tool("cnotes_canvas_bulk_add", "Add one or more items to a canvas. Use this for ALL canvas additions — single or multiple.
|
|
423
|
+
server.tool("cnotes_canvas_bulk_add", "Add one or more items to a canvas. Use this for ALL canvas additions — single or multiple. Supported item types: note, richtext (the Text element), list, canvas (link to another canvas), section (named region frame), and edge. ALWAYS prefer this over repeated single-item calls. Items are processed in order so edges can reference nodes created earlier in the same batch via sourceItemIndex/targetItemIndex.\n\nELEMENT CHOICE — notes are the knowledge tier (typed, versioned, searchable, the only content agents read back in full); everything else is presentation furniture. Default any claim/fact/decision/finding worth keeping to a typed NOTE. Use richtext (the Text element) for card-sized framing — orientation banners, a markdown heading used as a label ('# Q1 Goals', untinted), emphasis quoting a note, image tiles — never as the sole home of a claim; section for a named REGION of the canvas; list for grouping member notes (description = one-line frame; N distinct things = N notes); canvas for portals; edge for note-to-note relationships (notes only — richtext endpoints fail; mirror the relationship as a mention in the note bodies).", {
|
|
426
424
|
canvasId: z.string().describe("Canvas ID"),
|
|
427
425
|
notes: z.array(z.object({
|
|
428
426
|
noteId: z.string().describe("Note display ID or Convex ID"),
|
|
@@ -437,20 +435,14 @@ server.tool("cnotes_canvas_bulk_add", "Add one or more items to a canvas. Use th
|
|
|
437
435
|
y: z.number().describe("Y position"),
|
|
438
436
|
}),
|
|
439
437
|
z.object({
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
x: z.number().describe("X position"),
|
|
443
|
-
y: z.number().describe("Y position"),
|
|
444
|
-
fontSize: z.number().optional().describe("Font size (default 18, h1=32, h2=24)"),
|
|
445
|
-
colorVariant: z.enum(["normal", "muted", "highlighted"]).optional(),
|
|
446
|
-
}),
|
|
447
|
-
z.object({
|
|
438
|
+
// `richtext` IS the Text element. There is no `text` item type any more:
|
|
439
|
+
// the legacy `text` node (the old "Heading") can no longer be created.
|
|
448
440
|
type: z.literal("richtext"),
|
|
449
|
-
content: z.string().describe("Markdown content. Plain markdown ONLY — no [NOTE-X](relationship:...) / [[...]] mention syntax (corrupts the card); reference notes as plain display IDs.
|
|
441
|
+
content: z.string().describe("Markdown content — this is the Text element (headings, emphasis, images; a heading is just '# Title'). Plain markdown ONLY — no [NOTE-X](relationship:...) / [[...]] mention syntax (corrupts the card); reference notes as plain display IDs. Card-sized (≤ ~3 sentences); knowledge worth keeping goes in a note."),
|
|
450
442
|
x: z.number().describe("X position"),
|
|
451
443
|
y: z.number().describe("Y position"),
|
|
452
444
|
size: z.enum(["small", "medium", "large"]).optional().describe("Node size"),
|
|
453
|
-
colorHex: z.string().optional().describe("Background
|
|
445
|
+
colorHex: z.string().optional().describe("Background tint hex. Default is NO background — omit unless the tint encodes a role used consistently on this canvas."),
|
|
454
446
|
}),
|
|
455
447
|
z.object({
|
|
456
448
|
type: z.literal("list"),
|
|
@@ -513,13 +505,13 @@ server.tool("cnotes_canvas_bulk_add", "Add one or more items to a canvas. Use th
|
|
|
513
505
|
items: allItems,
|
|
514
506
|
});
|
|
515
507
|
}));
|
|
516
|
-
server.tool("cnotes_canvas_place", "Place items on a canvas using a DECLARATIVE LAYOUT (no x/y math). The server measures every item, packs them with no overlaps, and inserts them in a single batch. PREFER THIS over cnotes_canvas_bulk_add whenever you can express the layout as stacks/grids/anchors — which is almost always. The agent should describe STRUCTURE (rows, columns, what's near what), not pixel coordinates.\n\nELEMENT CHOICE: default content to typed NOTES (the only versioned, searchable tier agents can read back);
|
|
508
|
+
server.tool("cnotes_canvas_place", "Place items on a canvas using a DECLARATIVE LAYOUT (no x/y math). The server measures every item, packs them with no overlaps, and inserts them in a single batch. PREFER THIS over cnotes_canvas_bulk_add whenever you can express the layout as stacks/grids/anchors — which is almost always. The agent should describe STRUCTURE (rows, columns, what's near what), not pixel coordinates.\n\nELEMENT CHOICE: default content to typed NOTES (the only versioned, searchable tier agents can read back); richtext = the Text element, card-sized framing only (a heading is just content '# Title', untinted), section = a named region frame, list = member notes behind a one-line frame, edges connect notes only.\n\nThe call is best-effort, NOT atomic: per-item failures are reported in the response (HTTP 207) but the items that succeeded stay on the canvas. Always inspect `items[].error` and `edges[].error` in the response.\n\nThe `doc` argument is a layout document:\n { root: <LayoutNode>, edges?: [{from, to, label?}], origin?: {x, y} }\n\n<LayoutNode> is one of:\n • { kind: 'stack', axis: 'vertical'|'horizontal', gap?: 'tight'|'medium'|'spacious'|<px>, align?: 'start'|'center'|'end', items: [<LayoutNode>...] }\n • { kind: 'grid', columns: <n>, gap?: ..., items: [<LayoutNode>...] }\n • { kind: 'anchor', to: '<displayId or canvas node id>', direction: 'right'|'left'|'above'|'below', gap?: ..., child: <LayoutNode> }\n • { kind: 'item', type: 'note'|'richtext'|'list'|'canvas'|'section', key?: '<name>', ...item-specific fields }\n\nLeaf item shapes (no x/y!):\n note: { kind:'item', type:'note', noteId:'NOTE-3', key?:'a' }\n richtext: { kind:'item', type:'richtext', content:'# Markdown OK', size?:'small'|'medium'|'large', colorHex?:'<hex>' } // the Text element: card-sized framing only; a heading is just content '# Title' with no colorHex; plain markdown, NO [NOTE-X](relationship:...) mention syntax (corrupts the card); knowledge worth keeping = a note\n list: { kind:'item', type:'list', description:'One-line frame — first paragraph becomes the title', noteIds?:['NOTE-1','NOTE-2'], viewMode?:'list'|'grid' } // description is REQUIRED and is a frame, never the content: N distinct things = N notes in noteIds\n canvas: { kind:'item', type:'canvas', linkedCanvasId:'<id>' }\n\nEdges reference endpoints by, in priority order: `@<key>` (any item with a `key` placed in the same call), the original noteId/displayId of a note placed in this call (e.g. 'NOTE-7'), or the displayId / convex id of a node already on the canvas.\n\nExample (a SWOT-like quadrant):\n {\n root: {\n kind:'stack', axis:'vertical', gap:'spacious',\n items:[\n { kind:'stack', axis:'horizontal', gap:'spacious', items:[\n { kind:'grid', columns:2, items:[\n { kind:'item', type:'note', noteId:'STR-1' },\n { kind:'item', type:'note', noteId:'STR-2' },\n ]},\n { kind:'grid', columns:2, items:[\n { kind:'item', type:'note', noteId:'WEAK-1' },\n ]},\n ]},\n { kind:'stack', axis:'horizontal', gap:'spacious', items:[ /* opportunities + threats */ ]},\n ],\n },\n }", {
|
|
517
509
|
canvasId: z.string().describe("Canvas ID"),
|
|
518
510
|
doc: z
|
|
519
511
|
.object({
|
|
520
512
|
root: z
|
|
521
513
|
.unknown()
|
|
522
|
-
.describe("Root LayoutNode. kind is one of: 'stack' (items flow along one axis, like CSS flexbox: {kind:'stack', axis:'vertical'|'horizontal', gap?, align?:'start'|'center'|'end', items:[LayoutNode...]}), 'grid' (N columns, items wrap to new rows: {kind:'grid', columns:<n>, gap?, items:[...]}), 'anchor' (place a sub-tree relative to an EXISTING canvas node: {kind:'anchor', to:'<displayId or node id>', direction:'right'|'left'|'above'|'below' — exactly these four, NOT top/bottom/up/down, gap?, child:LayoutNode}), 'section' (a named frame that sizes itself around its content: {kind:'section', name:'<title>', key?, child:LayoutNode}), or 'item' (a leaf — one per visible thing, NO x/y: {kind:'item', type:'note'|'
|
|
514
|
+
.describe("Root LayoutNode. kind is one of: 'stack' (items flow along one axis, like CSS flexbox: {kind:'stack', axis:'vertical'|'horizontal', gap?, align?:'start'|'center'|'end', items:[LayoutNode...]}), 'grid' (N columns, items wrap to new rows: {kind:'grid', columns:<n>, gap?, items:[...]}), 'anchor' (place a sub-tree relative to an EXISTING canvas node: {kind:'anchor', to:'<displayId or node id>', direction:'right'|'left'|'above'|'below' — exactly these four, NOT top/bottom/up/down, gap?, child:LayoutNode}), 'section' (a named frame that sizes itself around its content: {kind:'section', name:'<title>', key?, child:LayoutNode}), or 'item' (a leaf — one per visible thing, NO x/y: {kind:'item', type:'note'|'richtext'|'list'|'canvas'|'section', key?, ...type-specific fields}). gap accepts a preset 'tight'|'medium'|'spacious' or a raw pixel number (default 'medium')."),
|
|
523
515
|
edges: z
|
|
524
516
|
.array(z.unknown())
|
|
525
517
|
.optional()
|
|
@@ -543,7 +535,7 @@ server.tool("cnotes_canvas_bulk_move", "Move multiple nodes to new positions in
|
|
|
543
535
|
canvasId: z.string().describe("Canvas ID"),
|
|
544
536
|
moves: z.array(z.object({
|
|
545
537
|
nodeId: z.string().describe("Canvas node ID"),
|
|
546
|
-
nodeType: z.enum(["note", "text", "list", "canvas", "richtext", "section"]).optional().default("note").describe("Node type"),
|
|
538
|
+
nodeType: z.enum(["note", "text", "list", "canvas", "richtext", "section"]).optional().default("note").describe("Node type. 'text' is a LEGACY kind (old heading nodes) — still movable/deletable, but no longer creatable."),
|
|
547
539
|
x: z.number().describe("New X position"),
|
|
548
540
|
y: z.number().describe("New Y position"),
|
|
549
541
|
})).describe("Array of node moves"),
|
|
@@ -616,10 +608,44 @@ server.tool("cnotes_canvas_update_edge", "Update an edge: change its label, togg
|
|
|
616
608
|
body.reverse = reverse;
|
|
617
609
|
return api.post(`/api/canvas/${canvasId}`, body);
|
|
618
610
|
}));
|
|
611
|
+
server.tool("cnotes_canvas_update_section", "Resize, rename, move, or recolor an existing section frame IN PLACE, keeping its SECTION-<n> id. Use this to grow a frame around new content — never delete + re-add a section, which mints a NEW id and breaks every [[SECTION-<n>]] mention pointing at the old one. Only the fields you pass are changed.", {
|
|
612
|
+
canvasId: z.string().describe("Canvas ID"),
|
|
613
|
+
sectionId: z
|
|
614
|
+
.string()
|
|
615
|
+
.describe("Section to update — SECTION-<n> display ID or a raw node ID"),
|
|
616
|
+
name: z.string().optional().describe("New frame title"),
|
|
617
|
+
x: z.number().optional().describe("New X position (top-left)"),
|
|
618
|
+
y: z.number().optional().describe("New Y position (top-left)"),
|
|
619
|
+
width: z.number().optional().describe("New frame width in px"),
|
|
620
|
+
height: z.number().optional().describe("New frame height in px"),
|
|
621
|
+
colorHex: z
|
|
622
|
+
.string()
|
|
623
|
+
.optional()
|
|
624
|
+
.describe("New frame tint hex, or '' to reset to the default"),
|
|
625
|
+
}, async ({ canvasId, sectionId, name, x, y, width, height, colorHex }) => withErrorHandling(() => {
|
|
626
|
+
const body = {
|
|
627
|
+
action: "updateSectionNode",
|
|
628
|
+
nodeId: sectionId,
|
|
629
|
+
};
|
|
630
|
+
if (name !== undefined)
|
|
631
|
+
body.name = name;
|
|
632
|
+
if (x !== undefined)
|
|
633
|
+
body.positionX = x;
|
|
634
|
+
if (y !== undefined)
|
|
635
|
+
body.positionY = y;
|
|
636
|
+
if (width !== undefined)
|
|
637
|
+
body.width = width;
|
|
638
|
+
if (height !== undefined)
|
|
639
|
+
body.height = height;
|
|
640
|
+
if (colorHex !== undefined)
|
|
641
|
+
body.colorHex = colorHex;
|
|
642
|
+
// workspaceId lets the server resolve a CANVAS-<n> handle, not just a raw id.
|
|
643
|
+
return api.post(`/api/canvas/${encodeURIComponent(canvasId)}?workspaceId=${encodeURIComponent(workspaceId)}`, body);
|
|
644
|
+
}));
|
|
619
645
|
server.tool("cnotes_canvas_move_node", "Move a node to a new position on a canvas.", {
|
|
620
646
|
canvasId: z.string().describe("Canvas ID"),
|
|
621
647
|
nodeId: z.string().describe("Canvas node ID"),
|
|
622
|
-
nodeType: z.enum(["note", "text", "list", "canvas", "richtext", "section"]).optional().default("note").describe("Node type"),
|
|
648
|
+
nodeType: z.enum(["note", "text", "list", "canvas", "richtext", "section"]).optional().default("note").describe("Node type. 'text' is a LEGACY kind (old heading nodes) — still movable/deletable, but no longer creatable."),
|
|
623
649
|
x: z.number().describe("New X position"),
|
|
624
650
|
y: z.number().describe("New Y position"),
|
|
625
651
|
}, async ({ canvasId, nodeId, nodeType, x, y }) => withErrorHandling(() => api.post(`/api/canvas/${canvasId}`, {
|
|
@@ -739,7 +765,7 @@ server.tool("cnotes_types_create", "Create a new note type (supertag).", {
|
|
|
739
765
|
displayName: z.string().optional().describe("Display name (can have spaces)"),
|
|
740
766
|
prefix: z.string().optional().describe("ID prefix, uppercase (e.g. PAINPOINT, USERSTORY)"),
|
|
741
767
|
description: z.string().optional().describe("Description"),
|
|
742
|
-
color: z.string().optional().describe("Color hex code (e.g. #
|
|
768
|
+
color: z.string().optional().describe("Color hex code (6-digit, e.g. #RRGGBB)"),
|
|
743
769
|
}, async ({ name, displayName, prefix, description, color }) => withErrorHandling(() => api.post("/api/supertags", {
|
|
744
770
|
workspaceId,
|
|
745
771
|
name,
|
|
@@ -776,33 +802,6 @@ server.tool("cnotes_relationships_list", "List note relationships in the workspa
|
|
|
776
802
|
displayId: noteDisplayId,
|
|
777
803
|
})));
|
|
778
804
|
// ---------------------------------------------------------------------------
|
|
779
|
-
// Memory (Zep)
|
|
780
|
-
// ---------------------------------------------------------------------------
|
|
781
|
-
server.tool("cnotes_memory_query", "Search facts and entities in the knowledge graph by relevance.", {
|
|
782
|
-
query: z.string().describe("Search query"),
|
|
783
|
-
limit: z.number().optional().default(10).describe("Max results per category"),
|
|
784
|
-
}, async ({ query, limit }) => withErrorHandling(() => api.post("/api/zep/query", {
|
|
785
|
-
workspaceId,
|
|
786
|
-
query,
|
|
787
|
-
limit: limit ?? 10,
|
|
788
|
-
})));
|
|
789
|
-
server.tool("cnotes_memory_facts", "List all workspace facts from the knowledge graph.", {}, async () => withErrorHandling(async () => {
|
|
790
|
-
const data = await api.post("/api/zep/query", {
|
|
791
|
-
workspaceId,
|
|
792
|
-
query: "all facts",
|
|
793
|
-
limit: 1,
|
|
794
|
-
});
|
|
795
|
-
return data.allFacts;
|
|
796
|
-
}));
|
|
797
|
-
server.tool("cnotes_memory_entities", "List all workspace entities (people, topics, orgs) from the knowledge graph.", {}, async () => withErrorHandling(async () => {
|
|
798
|
-
const data = await api.post("/api/zep/query", {
|
|
799
|
-
workspaceId,
|
|
800
|
-
query: "all entities",
|
|
801
|
-
limit: 1,
|
|
802
|
-
});
|
|
803
|
-
return data.allEntities;
|
|
804
|
-
}));
|
|
805
|
-
// ---------------------------------------------------------------------------
|
|
806
805
|
// Versions
|
|
807
806
|
// ---------------------------------------------------------------------------
|
|
808
807
|
server.tool("cnotes_versions_list", "List versions of a note.", {
|
|
@@ -848,6 +847,7 @@ server.tool("cnotes_files_upload", "Upload an image file to the workspace. Retur
|
|
|
848
847
|
filePath: z.string().describe("Absolute path to the image file on disk"),
|
|
849
848
|
}, async ({ filePath }) => withErrorHandling(async () => {
|
|
850
849
|
const absPath = path.resolve(filePath);
|
|
850
|
+
assertMcpLocalFileReadable(absPath);
|
|
851
851
|
let stat;
|
|
852
852
|
try {
|
|
853
853
|
stat = statSync(absPath);
|
|
@@ -888,6 +888,10 @@ server.tool("cnotes_schema", "Describe this workspace in one call: valid note ty
|
|
|
888
888
|
async function main() {
|
|
889
889
|
const transport = new StdioServerTransport();
|
|
890
890
|
await server.connect(transport);
|
|
891
|
+
const localReadScope = process.env.CNOTES_MCP_ALLOW_ANY_LOCAL_FILE === "1"
|
|
892
|
+
? "unrestricted (CNOTES_MCP_ALLOW_ANY_LOCAL_FILE=1)"
|
|
893
|
+
: getMcpLocalFileRoots().join(path.delimiter) || "none (set CNOTES_MCP_ALLOWED_DIRS)";
|
|
894
|
+
process.stderr.write(`cnotes-mcp local file scope: ${localReadScope}\n`);
|
|
891
895
|
process.stderr.write("cnotes-mcp server running on stdio\n");
|
|
892
896
|
}
|
|
893
897
|
main().catch((e) => {
|