fathom-mcp 0.2.1 → 0.2.3

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.
@@ -0,0 +1,68 @@
1
+ # {{WORKSPACE_NAME}}
2
+
3
+ {{DESCRIPTION}}
4
+
5
+ ## Memory — Memento Protocol
6
+
7
+ Working memory is managed by Memento (workspace: `{{WORKSPACE_NAME}}`).
8
+
9
+ **On session start:**
10
+ 1. `memento_health` — verify connection
11
+ 2. `memento_item_list` — check active work items and their next actions
12
+ 3. `memento_recall` with current task context — find relevant past memories
13
+
14
+ **During work — actively manage your memories:**
15
+ - `memento_store` when you learn something, make a decision, or discover a pattern
16
+ - `memento_recall` before starting any subtask — someone may have already figured it out
17
+ - `memento_item_update` as you make progress — don't wait until the end
18
+ - `memento_item_create` when new work emerges
19
+ - `memento_skip_add` the moment you hit a dead end (with expiry)
20
+ - `memento_consolidate` when recall returns 3+ overlapping memories on the same topic
21
+ - Delete or archive items that are done or wrong — stale memory is worse than no memory
22
+
23
+ **Writing discipline — instructions, not logs:**
24
+ - Write: "API moved to /v2 — update all calls" not "checked API, got 404"
25
+ - Write: "Skip X until condition Y" not "checked X, it was quiet"
26
+ - Tag generously — tags power recall and consolidation
27
+ - Set expiration on time-sensitive facts
28
+ - The test: could a future you, with zero context, read this and know exactly what to do?
29
+
30
+ ## Vault
31
+
32
+ Local files live in `{{VAULT_DIR}}/`. Vault is for long-form content — things that need to breathe, not be queried. Decisions and next-actions go in Memento; reflections, research notes, and finished pieces go in the vault.
33
+
34
+ **Folder conventions:**
35
+ - `research/` — reading notes, paper annotations, deep dives
36
+ - `thinking/` — speculative connections, insights, one file per idea
37
+ - `daily/` — session heartbeats and progress logs
38
+
39
+ **Frontmatter required** on vault files:
40
+ ```yaml
41
+ ---
42
+ title: My Note # required (string)
43
+ date: 2026-02-26 # required (YYYY-MM-DD)
44
+ tags: [research, topic] # optional
45
+ status: draft # optional: draft | published | archived
46
+ ---
47
+ ```
48
+
49
+ ## Cross-Workspace Communication
50
+
51
+ This workspace is part of a multi-workspace system. Other workspaces exist — you can talk to them.
52
+
53
+ - **Peek at another workspace's memory:** `memento_recall query="..." workspace="other-ws"`
54
+ - **Peek at another workspace's vault:** `fathom_vault_read path="file.md" workspace="other-ws"`
55
+ - **Send a direct message:** `fathom_send workspace="other-ws" message="..."`
56
+ - **Post to a shared room:** `fathom_room_post room="general" message="..."`
57
+ - **Read room history:** `fathom_room_read room="general"`
58
+ - **Discover workspaces:** `fathom_workspaces`
59
+
60
+ Your sender identity is automatic — messages are tagged with `{{WORKSPACE_NAME}}`.
61
+
62
+ ## Workflow
63
+
64
+ 1. Research and reading notes → `vault/research/`
65
+ 2. Speculative connections and insights → `vault/thinking/`
66
+ 3. Key findings and decisions → `memento_store` with tags
67
+ 4. Session heartbeats → `vault/daily/`
68
+ 5. When done — update Memento items, write what you found and what questions remain
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fathom-mcp",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "MCP server for Fathom — vault operations, search, rooms, and cross-workspace communication",
5
5
  "type": "module",
6
6
  "bin": {
@@ -10,6 +10,7 @@
10
10
  "files": [
11
11
  "src/",
12
12
  "scripts/",
13
+ "fathom-agents.md",
13
14
  "README.md",
14
15
  "CHANGELOG.md",
15
16
  "LICENSE"
package/src/cli.js CHANGED
@@ -371,6 +371,20 @@ async function runInit() {
371
371
  console.log(` · ${vault}/ (already exists)`);
372
372
  }
373
373
 
374
+ // fathom-agents.md — boilerplate agent instructions
375
+ const agentMdSrc = path.join(__dirname, "..", "fathom-agents.md");
376
+ const agentMdDest = path.join(cwd, ".fathom", "fathom-agents.md");
377
+ try {
378
+ let template = fs.readFileSync(agentMdSrc, "utf-8");
379
+ template = template
380
+ .replace(/\{\{WORKSPACE_NAME\}\}/g, workspace)
381
+ .replace(/\{\{VAULT_DIR\}\}/g, vault)
382
+ .replace(/\{\{DESCRIPTION\}\}/g, description || `${workspace} workspace`);
383
+ fs.mkdirSync(path.dirname(agentMdDest), { recursive: true });
384
+ fs.writeFileSync(agentMdDest, template);
385
+ console.log(" ✓ .fathom/fathom-agents.md");
386
+ } catch { /* template not found — skip silently */ }
387
+
374
388
  // Per-agent config files
375
389
  for (const agentKey of selectedAgents) {
376
390
  const agent = AGENTS[agentKey];
@@ -450,7 +464,15 @@ async function runInit() {
450
464
  const agent = AGENTS[agentKey];
451
465
  console.log(` · ${agent.name}: ${agent.nextSteps}`);
452
466
  }
453
- console.log();
467
+ console.log(`
468
+ Agent instructions:
469
+ Some instructions are needed for your agent to use Fathom + Memento
470
+ effectively (memory discipline, vault conventions, cross-workspace
471
+ communication). Saved to: .fathom/fathom-agents.md
472
+
473
+ Paste it into your CLAUDE.md, AGENTS.md, or equivalent — or point
474
+ your agent at the file and ask it to integrate the instructions.
475
+ `);
454
476
  }
455
477
 
456
478
  // --- Status command ----------------------------------------------------------
package/src/index.js CHANGED
@@ -213,7 +213,6 @@ const tools = [
213
213
  properties: {
214
214
  room: { type: "string", description: "Room name, e.g. 'general', 'navier-stokes'. Created on first post." },
215
215
  message: { type: "string", description: "Message to post. Use @workspace to mention and notify specific workspaces (e.g. '@fathom check this'), or @all for everyone." },
216
- sender: { type: "string", description: `Who is posting (defaults to workspace name: "${config.workspace}")` },
217
216
  },
218
217
  required: ["room", "message"],
219
218
  },
@@ -278,8 +277,7 @@ const tools = [
278
277
  type: "object",
279
278
  properties: {
280
279
  workspace: { type: "string", description: "Target workspace name — run fathom_workspaces to see available options" },
281
- message: { type: "string", description: "Message to send to the target workspace's Claude instance" },
282
- from: { type: "string", description: `Your workspace name so the recipient knows who sent it (defaults to "${config.workspace}")` },
280
+ message: { type: "string", description: "Message to send to the target workspace's agent instance" },
283
281
  },
284
282
  required: ["workspace", "message"],
285
283
  },
@@ -411,7 +409,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
411
409
  result = await client.hybridSearch(args.query, { limit: args.limit, ws: args.workspace });
412
410
  break;
413
411
  case "fathom_room_post":
414
- result = await client.roomPost(args.room, args.message, args.sender || config.workspace);
412
+ result = await client.roomPost(args.room, args.message, config.workspace);
415
413
  break;
416
414
  case "fathom_room_read":
417
415
  result = await client.roomRead(args.room, args.hours);
@@ -428,7 +426,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
428
426
  case "fathom_send":
429
427
  // Send is implemented server-side (it manages tmux sessions)
430
428
  result = await client.request?.("POST", `/api/room/${encodeURIComponent("__dm__")}`, {
431
- body: { message: `Message from workspace (${args.from || config.workspace}): ${args.message}`, sender: args.from || config.workspace },
429
+ body: { message: `Message from workspace (${config.workspace}): ${args.message}`, sender: config.workspace },
432
430
  });
433
431
  // For now, fall back to error until server implements /api/send
434
432
  if (!result || result.error) {