caedora-mcp 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +71 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +100 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/lib/conventions.d.ts +3 -0
  7. package/dist/lib/conventions.d.ts.map +1 -0
  8. package/dist/lib/conventions.js +12 -0
  9. package/dist/lib/conventions.js.map +1 -0
  10. package/dist/lib/frontmatter.d.ts +23 -0
  11. package/dist/lib/frontmatter.d.ts.map +1 -0
  12. package/dist/lib/frontmatter.js +139 -0
  13. package/dist/lib/frontmatter.js.map +1 -0
  14. package/dist/lib/okf.d.ts +55 -0
  15. package/dist/lib/okf.d.ts.map +1 -0
  16. package/dist/lib/okf.js +276 -0
  17. package/dist/lib/okf.js.map +1 -0
  18. package/dist/providers/github.d.ts +26 -0
  19. package/dist/providers/github.d.ts.map +1 -0
  20. package/dist/providers/github.js +144 -0
  21. package/dist/providers/github.js.map +1 -0
  22. package/dist/providers/local-node.d.ts +25 -0
  23. package/dist/providers/local-node.d.ts.map +1 -0
  24. package/dist/providers/local-node.js +112 -0
  25. package/dist/providers/local-node.js.map +1 -0
  26. package/dist/providers/types.d.ts +25 -0
  27. package/dist/providers/types.d.ts.map +1 -0
  28. package/dist/providers/types.js +21 -0
  29. package/dist/providers/types.js.map +1 -0
  30. package/dist/server.d.ts +13 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +43 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/tools/operations.d.ts +60 -0
  35. package/dist/tools/operations.d.ts.map +1 -0
  36. package/dist/tools/operations.js +48 -0
  37. package/dist/tools/operations.js.map +1 -0
  38. package/dist/tools/read.d.ts +49 -0
  39. package/dist/tools/read.d.ts.map +1 -0
  40. package/dist/tools/read.js +74 -0
  41. package/dist/tools/read.js.map +1 -0
  42. package/dist/tools/search.d.ts +77 -0
  43. package/dist/tools/search.d.ts.map +1 -0
  44. package/dist/tools/search.js +107 -0
  45. package/dist/tools/search.js.map +1 -0
  46. package/dist/tools/write.d.ts +89 -0
  47. package/dist/tools/write.d.ts.map +1 -0
  48. package/dist/tools/write.js +114 -0
  49. package/dist/tools/write.js.map +1 -0
  50. package/package.json +59 -0
@@ -0,0 +1,89 @@
1
+ import { z } from 'zod';
2
+ import { type Frontmatter } from '../lib/frontmatter.js';
3
+ import type { VaultProvider } from '../providers/types.js';
4
+ export declare const createConceptSchema: {
5
+ path: z.ZodString;
6
+ type: z.ZodString;
7
+ title: z.ZodOptional<z.ZodString>;
8
+ description: z.ZodOptional<z.ZodString>;
9
+ resource: z.ZodOptional<z.ZodString>;
10
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
11
+ timestamp: z.ZodOptional<z.ZodString>;
12
+ body: z.ZodString;
13
+ };
14
+ export declare function createConcept(provider: VaultProvider, args: {
15
+ path: string;
16
+ type: string;
17
+ title?: string;
18
+ description?: string;
19
+ resource?: string;
20
+ tags?: string[];
21
+ timestamp?: string;
22
+ body: string;
23
+ }): Promise<{
24
+ id: string;
25
+ path: string;
26
+ created: boolean;
27
+ metadata: Frontmatter;
28
+ }>;
29
+ export declare const updateConceptSchema: {
30
+ path: z.ZodString;
31
+ body: z.ZodOptional<z.ZodString>;
32
+ metadata: z.ZodOptional<z.ZodObject<{
33
+ type: z.ZodOptional<z.ZodString>;
34
+ title: z.ZodOptional<z.ZodString>;
35
+ description: z.ZodOptional<z.ZodString>;
36
+ resource: z.ZodOptional<z.ZodString>;
37
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
38
+ timestamp: z.ZodOptional<z.ZodString>;
39
+ }, "strip", z.ZodTypeAny, {
40
+ type?: string | undefined;
41
+ title?: string | undefined;
42
+ description?: string | undefined;
43
+ resource?: string | undefined;
44
+ tags?: string[] | undefined;
45
+ timestamp?: string | undefined;
46
+ }, {
47
+ type?: string | undefined;
48
+ title?: string | undefined;
49
+ description?: string | undefined;
50
+ resource?: string | undefined;
51
+ tags?: string[] | undefined;
52
+ timestamp?: string | undefined;
53
+ }>>;
54
+ extra: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
55
+ mergeTags: z.ZodOptional<z.ZodBoolean>;
56
+ };
57
+ export declare function updateConcept(provider: VaultProvider, { path, body, metadata, extra, mergeTags, }: {
58
+ path: string;
59
+ body?: string;
60
+ metadata?: Partial<Omit<Frontmatter, 'extra'>>;
61
+ extra?: Record<string, unknown>;
62
+ mergeTags?: boolean;
63
+ }): Promise<{
64
+ path: string;
65
+ updated: boolean;
66
+ metadata: Frontmatter;
67
+ }>;
68
+ export declare const renameConceptSchema: {
69
+ from: z.ZodString;
70
+ to: z.ZodString;
71
+ };
72
+ export declare function renameConcept(provider: VaultProvider, { from, to }: {
73
+ from: string;
74
+ to: string;
75
+ }): Promise<{
76
+ from: string;
77
+ to: string;
78
+ renamed: boolean;
79
+ }>;
80
+ export declare const deleteConceptSchema: {
81
+ path: z.ZodString;
82
+ };
83
+ export declare function deleteConcept(provider: VaultProvider, { path }: {
84
+ path: string;
85
+ }): Promise<{
86
+ path: string;
87
+ deleted: boolean;
88
+ }>;
89
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAA;AAQ9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAW1D,eAAO,MAAM,mBAAmB;;;;;;;;;CAS/B,CAAA;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb;;;;;GAiBF;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM/B,CAAA;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,aAAa,EACvB,EACE,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,SAAiB,GAClB,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;;;;GAuBF;AAED,eAAO,MAAM,mBAAmB;;;CAG/B,CAAA;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,aAAa,EACvB,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;;;;GAQ3C;AAED,eAAO,MAAM,mBAAmB;;CAE/B,CAAA;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;;;GAOtF"}
@@ -0,0 +1,114 @@
1
+ import { z } from 'zod';
2
+ import { combine, createConceptFrontmatter, parseFrontmatter, uniqueTags, } from '../lib/frontmatter.js';
3
+ import { appendLog, isConceptPath, isReservedPath, rebuildIndexes, } from '../lib/okf.js';
4
+ import { titleFromPath } from '../lib/conventions.js';
5
+ const metadataShape = {
6
+ type: z.string().min(1).optional(),
7
+ title: z.string().optional(),
8
+ description: z.string().optional(),
9
+ resource: z.string().optional(),
10
+ tags: z.array(z.string()).optional(),
11
+ timestamp: z.string().optional(),
12
+ };
13
+ export const createConceptSchema = {
14
+ path: z.string().describe('New concept path ending in .md. The path is the concept ID.'),
15
+ type: z.string().min(1).describe('Required descriptive concept type.'),
16
+ title: z.string().optional().describe('Display title. Derived from the path when omitted.'),
17
+ description: z.string().optional().describe('One-sentence summary for indexes and retrieval.'),
18
+ resource: z.string().optional().describe('Canonical URI for the described asset or source.'),
19
+ tags: z.array(z.string()).optional(),
20
+ timestamp: z.string().optional(),
21
+ body: z.string().describe('Standard Markdown body.'),
22
+ };
23
+ export async function createConcept(provider, args) {
24
+ if (!isConceptPath(args.path))
25
+ throw new Error('Path must be a non-reserved .md concept path.');
26
+ if (!args.type.trim())
27
+ throw new Error('Concept type cannot be empty.');
28
+ await assertMissing(provider, args.path);
29
+ const title = args.title?.trim() || titleFromPath(args.path);
30
+ const metadata = createConceptFrontmatter(title, args.type, {
31
+ description: args.description ?? '',
32
+ resource: args.resource ?? '',
33
+ tags: args.tags ?? [],
34
+ timestamp: args.timestamp ?? new Date().toISOString(),
35
+ });
36
+ await provider.writeFile(args.path, combine(metadata, args.body));
37
+ if (!provider.writesAreCommits)
38
+ await provider.commit(`Create ${args.path}`, [args.path]);
39
+ await appendLog(provider, 'Creation', `Created [${title}](/${args.path}).`);
40
+ await rebuildIndexes(provider);
41
+ return { id: args.path.replace(/\.md$/i, ''), path: args.path, created: true, metadata };
42
+ }
43
+ export const updateConceptSchema = {
44
+ path: z.string().describe('Concept path to update.'),
45
+ body: z.string().optional().describe('Replacement Markdown body.'),
46
+ metadata: z.object(metadataShape).optional().describe('Standard OKF fields to merge.'),
47
+ extra: z.record(z.unknown()).optional().describe('Producer-defined YAML fields to merge.'),
48
+ mergeTags: z.boolean().optional().describe('Merge metadata.tags rather than replacing them.'),
49
+ };
50
+ export async function updateConcept(provider, { path, body, metadata, extra, mergeTags = false, }) {
51
+ if (!isConceptPath(path))
52
+ throw new Error('Only concept documents can be updated with this tool.');
53
+ const raw = await provider.readFile(path);
54
+ const parsed = parseFrontmatter(raw);
55
+ if (!parsed.hasFrontmatter || parsed.error)
56
+ throw new Error(`Cannot update invalid OKF frontmatter: ${parsed.error ?? 'missing frontmatter'}`);
57
+ const next = {
58
+ ...parsed.frontmatter,
59
+ ...metadata,
60
+ tags: metadata?.tags
61
+ ? mergeTags
62
+ ? uniqueTags([...parsed.frontmatter.tags, ...metadata.tags])
63
+ : uniqueTags(metadata.tags)
64
+ : parsed.frontmatter.tags,
65
+ timestamp: metadata?.timestamp ?? new Date().toISOString(),
66
+ extra: { ...parsed.frontmatter.extra, ...extra },
67
+ };
68
+ if (!next.type.trim())
69
+ throw new Error('Concept type cannot be empty.');
70
+ await provider.writeFile(path, combine(next, body ?? parsed.body));
71
+ if (!provider.writesAreCommits)
72
+ await provider.commit(`Update ${path}`, [path]);
73
+ await appendLog(provider, 'Update', `Updated [${next.title || titleFromPath(path)}](/${path}).`);
74
+ await rebuildIndexes(provider);
75
+ return { path, updated: true, metadata: next };
76
+ }
77
+ export const renameConceptSchema = {
78
+ from: z.string().describe('Current concept path.'),
79
+ to: z.string().describe('New non-reserved .md concept path.'),
80
+ };
81
+ export async function renameConcept(provider, { from, to }) {
82
+ if (!isConceptPath(from) || !isConceptPath(to))
83
+ throw new Error('Both paths must be concept paths.');
84
+ await provider.renamePath(from, to);
85
+ if (!provider.writesAreCommits)
86
+ await provider.commit(`Move ${from} to ${to}`, [to]);
87
+ await appendLog(provider, 'Move', `Moved \`${from}\` to [${titleFromPath(to)}](/${to}).`);
88
+ await rebuildIndexes(provider);
89
+ return { from, to, renamed: true };
90
+ }
91
+ export const deleteConceptSchema = {
92
+ path: z.string().describe('Concept path or concept directory to delete.'),
93
+ };
94
+ export async function deleteConcept(provider, { path }) {
95
+ if (isReservedPath(path))
96
+ throw new Error('Reserved OKF documents cannot be deleted.');
97
+ await provider.deletePath(path);
98
+ if (!provider.writesAreCommits)
99
+ await provider.commit(`Delete ${path}`, []);
100
+ await appendLog(provider, 'Deletion', `Deleted \`${path}\`.`);
101
+ await rebuildIndexes(provider);
102
+ return { path, deleted: true };
103
+ }
104
+ async function assertMissing(provider, path) {
105
+ try {
106
+ await provider.readFile(path);
107
+ throw new Error(`Concept already exists at ${path}.`);
108
+ }
109
+ catch (error) {
110
+ if (error instanceof Error && error.message.startsWith('Concept already exists'))
111
+ throw error;
112
+ }
113
+ }
114
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "caedora-mcp",
3
+ "version": "0.2.0",
4
+ "description": "Model Context Protocol server for reading and maintaining Open Knowledge Format bundles.",
5
+ "license": "MPL-2.0",
6
+ "homepage": "https://caedora.app",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/WilliamFClarke/caedora.git",
10
+ "directory": "packages/caedora-mcp"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/WilliamFClarke/caedora/issues"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "type": "module",
19
+ "bin": {
20
+ "caedora-mcp": "dist/cli.js"
21
+ },
22
+ "main": "./dist/server.js",
23
+ "types": "./dist/server.d.ts",
24
+ "files": [
25
+ "dist",
26
+ "README.md"
27
+ ],
28
+ "scripts": {
29
+ "build": "tsc",
30
+ "dev": "tsc --watch",
31
+ "prepublishOnly": "npm run build",
32
+ "test": "tsc -p tsconfig.test.json && node --test dist-test/tools/write.test.js",
33
+ "typecheck": "tsc --noEmit"
34
+ },
35
+ "dependencies": {
36
+ "@modelcontextprotocol/sdk": "^1.0.0",
37
+ "remark-parse": "^11.0.0",
38
+ "unified": "^11.0.5",
39
+ "yaml": "^2.9.0",
40
+ "zod": "^3.23.8"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^20"
44
+ },
45
+ "keywords": [
46
+ "mcp",
47
+ "model-context-protocol",
48
+ "claude",
49
+ "caedora",
50
+ "markdown",
51
+ "concepts",
52
+ "knowledge-bundle",
53
+ "open-knowledge-format",
54
+ "okf"
55
+ ],
56
+ "engines": {
57
+ "node": ">=20"
58
+ }
59
+ }