@agent-wiki/mcp-server 0.3.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/dist/server.js ADDED
@@ -0,0 +1,474 @@
1
+ /**
2
+ * MCP Server — Exposes Agent Wiki as tools to any MCP-compatible agent.
3
+ *
4
+ * Architecture (Karpathy LLM Wiki, upgraded):
5
+ *
6
+ * raw/ → Immutable source layer (raw_add, raw_list, raw_read, raw_verify)
7
+ * wiki/ → Mutable knowledge layer (read, write, delete, search, lint, synthesize)
8
+ *
9
+ * The agent IS the LLM. This server is pure data operations.
10
+ */
11
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
12
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
13
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
14
+ import { readFileSync } from "node:fs";
15
+ import { join } from "node:path";
16
+ import { Wiki } from "./wiki.js";
17
+ export function createServer(wikiPath, workspace) {
18
+ const wiki = new Wiki(wikiPath, workspace);
19
+ const server = new Server({ name: "agent-wiki", version: "0.3.0" }, { capabilities: { tools: {} } });
20
+ // ── List Tools ──────────────────────────────────────────────
21
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
22
+ tools: [
23
+ // ═══════════════════════════════════════════════════════
24
+ // RAW LAYER — Immutable source documents
25
+ // ═══════════════════════════════════════════════════════
26
+ {
27
+ name: "raw_add",
28
+ description: "Add a raw source document to the knowledge base. Raw files are IMMUTABLE — once added, they cannot be modified or overwritten. Each file gets a .meta.yaml sidecar with provenance (source URL, download time, SHA-256 hash). Use this for downloaded articles, papers, web pages, data files. Supports both content string and local file path (physical copy).",
29
+ inputSchema: {
30
+ type: "object",
31
+ properties: {
32
+ filename: {
33
+ type: "string",
34
+ description: "Filename in raw/ (e.g. 'paper-attention.pdf', 'article-yolo.md')",
35
+ },
36
+ content: {
37
+ type: "string",
38
+ description: "File content as string (for text files). Either content or source_path is required.",
39
+ },
40
+ source_path: {
41
+ type: "string",
42
+ description: "Absolute path to a local file to physically copy into raw/. The original file is NOT modified — a full copy is made. Either content or source_path is required.",
43
+ },
44
+ source_url: {
45
+ type: "string",
46
+ description: "Original URL where the document was downloaded from",
47
+ },
48
+ description: {
49
+ type: "string",
50
+ description: "Brief description of what this source contains",
51
+ },
52
+ tags: {
53
+ type: "array",
54
+ items: { type: "string" },
55
+ description: "Tags for categorization",
56
+ },
57
+ },
58
+ required: ["filename"],
59
+ },
60
+ },
61
+ {
62
+ name: "raw_list",
63
+ description: "List all raw source documents with metadata (path, source URL, download time, hash, size).",
64
+ inputSchema: {
65
+ type: "object",
66
+ properties: {},
67
+ },
68
+ },
69
+ {
70
+ name: "raw_read",
71
+ description: "Read a raw source document's content and metadata. Raw files are immutable — this is read-only.",
72
+ inputSchema: {
73
+ type: "object",
74
+ properties: {
75
+ filename: {
76
+ type: "string",
77
+ description: "Filename relative to raw/ (e.g. 'article-yolo.md')",
78
+ },
79
+ },
80
+ required: ["filename"],
81
+ },
82
+ },
83
+ {
84
+ name: "raw_verify",
85
+ description: "Verify integrity of all raw files by checking SHA-256 hashes against stored metadata. Detects corruption or tampering.",
86
+ inputSchema: {
87
+ type: "object",
88
+ properties: {},
89
+ },
90
+ },
91
+ {
92
+ name: "raw_fetch",
93
+ description: "Download a file from a URL and save it to raw/ as an immutable source document. Automatically generates .meta.yaml sidecar with provenance (source URL, download time, SHA-256 hash). Smart URL handling: arXiv abstract URLs (arxiv.org/abs/XXXX) are auto-converted to PDF download links. Supports any downloadable file: PDFs, HTML pages, images, data files, etc.",
94
+ inputSchema: {
95
+ type: "object",
96
+ properties: {
97
+ url: {
98
+ type: "string",
99
+ description: "URL to download from. arXiv abs URLs are auto-converted to PDF links (e.g. https://arxiv.org/abs/2304.00501 → PDF download)",
100
+ },
101
+ filename: {
102
+ type: "string",
103
+ description: "Optional filename in raw/. If omitted, auto-inferred from URL (arXiv papers get clean names like 'arxiv-2304-00501.pdf')",
104
+ },
105
+ description: {
106
+ type: "string",
107
+ description: "Brief description of what this source document contains",
108
+ },
109
+ tags: {
110
+ type: "array",
111
+ items: { type: "string" },
112
+ description: "Tags for categorization",
113
+ },
114
+ },
115
+ required: ["url"],
116
+ },
117
+ },
118
+ // ═══════════════════════════════════════════════════════
119
+ // WIKI LAYER — Mutable compiled knowledge
120
+ // ═══════════════════════════════════════════════════════
121
+ {
122
+ name: "wiki_read",
123
+ description: "Read a wiki page by path. Returns frontmatter + Markdown content.",
124
+ inputSchema: {
125
+ type: "object",
126
+ properties: {
127
+ page: {
128
+ type: "string",
129
+ description: "Page path relative to wiki/ (e.g. 'concept-gil.md')",
130
+ },
131
+ },
132
+ required: ["page"],
133
+ },
134
+ },
135
+ {
136
+ name: "wiki_write",
137
+ description: "Create or update a wiki page. Content should include YAML frontmatter (title, type, tags, sources) and Markdown body. Timestamps (created/updated) are auto-managed. Wiki pages are MUTABLE — they represent compiled knowledge that improves over time.",
138
+ inputSchema: {
139
+ type: "object",
140
+ properties: {
141
+ page: {
142
+ type: "string",
143
+ description: "Page path relative to wiki/",
144
+ },
145
+ content: {
146
+ type: "string",
147
+ description: "Full page content including YAML frontmatter and Markdown body",
148
+ },
149
+ source: {
150
+ type: "string",
151
+ description: "Provenance — why this write is happening",
152
+ },
153
+ },
154
+ required: ["page", "content"],
155
+ },
156
+ },
157
+ {
158
+ name: "wiki_delete",
159
+ description: "Delete a wiki page. Cannot delete system pages (index.md, log.md, timeline.md).",
160
+ inputSchema: {
161
+ type: "object",
162
+ properties: {
163
+ page: {
164
+ type: "string",
165
+ description: "Page path relative to wiki/",
166
+ },
167
+ },
168
+ required: ["page"],
169
+ },
170
+ },
171
+ {
172
+ name: "wiki_list",
173
+ description: "List all wiki pages, optionally filtered by entity type or tag.",
174
+ inputSchema: {
175
+ type: "object",
176
+ properties: {
177
+ type: {
178
+ type: "string",
179
+ description: "Filter by entity type (person, concept, event, artifact, comparison, summary, how-to, note, synthesis)",
180
+ },
181
+ tag: {
182
+ type: "string",
183
+ description: "Filter by tag",
184
+ },
185
+ },
186
+ },
187
+ },
188
+ {
189
+ name: "wiki_search",
190
+ description: "Full-text keyword search across all wiki pages. Returns paths, scores, and snippets sorted by relevance.",
191
+ inputSchema: {
192
+ type: "object",
193
+ properties: {
194
+ query: {
195
+ type: "string",
196
+ description: "Search query (keywords)",
197
+ },
198
+ limit: {
199
+ type: "number",
200
+ description: "Max results (default: 10)",
201
+ },
202
+ },
203
+ required: ["query"],
204
+ },
205
+ },
206
+ {
207
+ name: "wiki_lint",
208
+ description: "Run comprehensive health checks. Detects: contradictions between pages, orphan pages, broken [[links]], missing sources, stale content, raw file integrity (SHA-256 verification), synthesis page integrity. Returns categorized issues with fix suggestions.",
209
+ inputSchema: {
210
+ type: "object",
211
+ properties: {},
212
+ },
213
+ },
214
+ {
215
+ name: "wiki_log",
216
+ description: "View the operation history log with timestamps, operations, affected pages, and summaries.",
217
+ inputSchema: {
218
+ type: "object",
219
+ properties: {
220
+ limit: {
221
+ type: "number",
222
+ description: "Max entries (default: 20)",
223
+ },
224
+ },
225
+ },
226
+ },
227
+ {
228
+ name: "wiki_init",
229
+ description: "Initialize a new knowledge base. Creates wiki/, raw/, schemas/ directories and default templates. Optionally use a separate workspace directory for all data files.",
230
+ inputSchema: {
231
+ type: "object",
232
+ properties: {
233
+ path: {
234
+ type: "string",
235
+ description: "Config root — where .agent-wiki.yaml is created (default: current directory)",
236
+ },
237
+ workspace: {
238
+ type: "string",
239
+ description: "Separate workspace directory for all data (wiki/, raw/, schemas/). If omitted, data goes in path.",
240
+ },
241
+ },
242
+ },
243
+ },
244
+ {
245
+ name: "wiki_config",
246
+ description: "Show the current workspace configuration: config root, workspace directory, data directories (wiki/, raw/, schemas/), and lint settings.",
247
+ inputSchema: {
248
+ type: "object",
249
+ properties: {},
250
+ },
251
+ },
252
+ {
253
+ name: "wiki_schemas",
254
+ description: "List available entity type templates (person, concept, event, artifact, comparison, summary, how-to, note, synthesis). Use these to structure wiki pages consistently.",
255
+ inputSchema: {
256
+ type: "object",
257
+ properties: {},
258
+ },
259
+ },
260
+ {
261
+ name: "wiki_rebuild_index",
262
+ description: "Rebuild the index.md from all wiki pages. Organizes pages by type with counts and dates.",
263
+ inputSchema: {
264
+ type: "object",
265
+ properties: {},
266
+ },
267
+ },
268
+ {
269
+ name: "wiki_rebuild_timeline",
270
+ description: "Rebuild timeline.md — a chronological view of all knowledge entries, grouped by date.",
271
+ inputSchema: {
272
+ type: "object",
273
+ properties: {},
274
+ },
275
+ },
276
+ {
277
+ name: "wiki_classify",
278
+ description: "Auto-classify content into entity type (person, concept, event, artifact, comparison, summary, how-to, synthesis, note) and suggest tags. Pure heuristic — zero LLM dependency. Useful for previewing classification before writing, or for enriching existing pages. Returns type, tags, and confidence score.",
279
+ inputSchema: {
280
+ type: "object",
281
+ properties: {
282
+ content: {
283
+ type: "string",
284
+ description: "The full page content (with or without frontmatter) to classify",
285
+ },
286
+ },
287
+ required: ["content"],
288
+ },
289
+ },
290
+ {
291
+ name: "wiki_synthesize",
292
+ description: "Prepare context for knowledge synthesis — reads multiple wiki pages and returns their content so the agent can distill them into a new synthesis page. Synthesis pages represent higher-order knowledge derived from combining multiple sources.",
293
+ inputSchema: {
294
+ type: "object",
295
+ properties: {
296
+ pages: {
297
+ type: "array",
298
+ items: { type: "string" },
299
+ description: "List of page paths to synthesize from (e.g. ['concept-yolo.md', 'comparison-detectors.md'])",
300
+ },
301
+ },
302
+ required: ["pages"],
303
+ },
304
+ },
305
+ ],
306
+ }));
307
+ // ── Call Tool ───────────────────────────────────────────────
308
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
309
+ const { name, arguments: args = {} } = request.params;
310
+ try {
311
+ const result = await handleTool(wiki, name, args);
312
+ return { content: [{ type: "text", text: result }] };
313
+ }
314
+ catch (err) {
315
+ const msg = err instanceof Error ? err.message : String(err);
316
+ return {
317
+ content: [{ type: "text", text: `Error: ${msg}` }],
318
+ isError: true,
319
+ };
320
+ }
321
+ });
322
+ return server;
323
+ }
324
+ async function handleTool(wiki, name, args) {
325
+ switch (name) {
326
+ // ═══ RAW LAYER ═══
327
+ case "raw_add": {
328
+ const doc = wiki.rawAdd(args.filename, {
329
+ content: args.content,
330
+ sourcePath: args.source_path,
331
+ sourceUrl: args.source_url,
332
+ description: args.description,
333
+ tags: args.tags,
334
+ });
335
+ return JSON.stringify({ ok: true, document: doc }, null, 2);
336
+ }
337
+ case "raw_list": {
338
+ const docs = wiki.rawList();
339
+ return JSON.stringify({ documents: docs, count: docs.length }, null, 2);
340
+ }
341
+ case "raw_read": {
342
+ const result = wiki.rawRead(args.filename);
343
+ if (!result)
344
+ return `Raw file not found: ${args.filename}`;
345
+ return JSON.stringify({
346
+ meta: result.meta,
347
+ content: result.content.length > 10000
348
+ ? result.content.slice(0, 10000) + "\n\n... (truncated, " + result.content.length + " chars total)"
349
+ : result.content,
350
+ }, null, 2);
351
+ }
352
+ case "raw_verify": {
353
+ const results = wiki.rawVerify();
354
+ const corrupted = results.filter((r) => r.status === "corrupted");
355
+ const missingMeta = results.filter((r) => r.status === "missing-meta");
356
+ return JSON.stringify({
357
+ total: results.length,
358
+ ok: results.filter((r) => r.status === "ok").length,
359
+ corrupted: corrupted.length,
360
+ missingMeta: missingMeta.length,
361
+ details: results,
362
+ }, null, 2);
363
+ }
364
+ case "raw_fetch": {
365
+ const doc = await wiki.rawFetch(args.url, {
366
+ filename: args.filename,
367
+ description: args.description,
368
+ tags: args.tags,
369
+ });
370
+ return JSON.stringify({ ok: true, document: doc }, null, 2);
371
+ }
372
+ // ═══ WIKI LAYER ═══
373
+ case "wiki_read": {
374
+ const page = wiki.read(args.page);
375
+ if (!page)
376
+ return `Page not found: ${args.page}`;
377
+ try {
378
+ return readFileSync(join(wiki.config.wikiDir, args.page), "utf-8");
379
+ }
380
+ catch {
381
+ return `Page not found: ${args.page}`;
382
+ }
383
+ }
384
+ case "wiki_write": {
385
+ // Auto-classify if type/tags are missing
386
+ const enrichedContent = wiki.autoClassifyContent(args.content);
387
+ wiki.write(args.page, enrichedContent, args.source);
388
+ const classification = wiki.classify(enrichedContent);
389
+ return JSON.stringify({
390
+ ok: true,
391
+ page: args.page,
392
+ autoClassified: { type: classification.type, tags: classification.tags, confidence: classification.confidence },
393
+ });
394
+ }
395
+ case "wiki_delete": {
396
+ const existed = wiki.delete(args.page);
397
+ return JSON.stringify({ ok: existed, page: args.page });
398
+ }
399
+ case "wiki_list": {
400
+ const pages = wiki.list(args.type, args.tag);
401
+ return JSON.stringify({ pages, count: pages.length }, null, 2);
402
+ }
403
+ case "wiki_search": {
404
+ const results = wiki.search(args.query, args.limit ?? 10);
405
+ return JSON.stringify({ results, count: results.length }, null, 2);
406
+ }
407
+ case "wiki_lint": {
408
+ const report = wiki.lint();
409
+ return JSON.stringify(report, null, 2);
410
+ }
411
+ case "wiki_log": {
412
+ const entries = wiki.getLog(args.limit ?? 20);
413
+ return JSON.stringify({ entries }, null, 2);
414
+ }
415
+ case "wiki_init": {
416
+ const path = args.path ?? ".";
417
+ const ws = args.workspace;
418
+ Wiki.init(path, ws);
419
+ return JSON.stringify({
420
+ ok: true,
421
+ configRoot: path,
422
+ workspace: ws ?? path,
423
+ message: ws
424
+ ? `Knowledge base initialized. Config at ${path}, data at ${ws}`
425
+ : `Knowledge base initialized at ${path} with wiki/, raw/, schemas/`,
426
+ });
427
+ }
428
+ case "wiki_config": {
429
+ const cfg = wiki.config;
430
+ return JSON.stringify({
431
+ configRoot: cfg.configRoot,
432
+ workspace: cfg.workspace,
433
+ wikiDir: cfg.wikiDir,
434
+ rawDir: cfg.rawDir,
435
+ schemasDir: cfg.schemasDir,
436
+ lint: cfg.lint,
437
+ separateWorkspace: cfg.configRoot !== cfg.workspace,
438
+ }, null, 2);
439
+ }
440
+ case "wiki_schemas": {
441
+ const schemas = wiki.schemas();
442
+ return JSON.stringify({ schemas }, null, 2);
443
+ }
444
+ case "wiki_rebuild_index": {
445
+ wiki.rebuildIndex();
446
+ return JSON.stringify({ ok: true, message: "Index rebuilt" });
447
+ }
448
+ case "wiki_rebuild_timeline": {
449
+ wiki.rebuildTimeline();
450
+ return JSON.stringify({ ok: true, message: "Timeline rebuilt" });
451
+ }
452
+ case "wiki_classify": {
453
+ const classification = wiki.classify(args.content);
454
+ return JSON.stringify(classification, null, 2);
455
+ }
456
+ case "wiki_synthesize": {
457
+ const pagePaths = args.pages;
458
+ if (!pagePaths || pagePaths.length === 0) {
459
+ return JSON.stringify({ error: "Provide at least one page path to synthesize from" });
460
+ }
461
+ const ctx = wiki.synthesizeContext(pagePaths);
462
+ return JSON.stringify(ctx, null, 2);
463
+ }
464
+ default:
465
+ return `Unknown tool: ${name}`;
466
+ }
467
+ }
468
+ // ── Entry point for stdio transport ───────────────────────────
469
+ export async function runServer(wikiPath, workspace) {
470
+ const server = createServer(wikiPath, workspace);
471
+ const transport = new StdioServerTransport();
472
+ await server.connect(transport);
473
+ }
474
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}