fathom-mcp 0.3.1 → 0.4.1

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/CHANGELOG.md CHANGED
@@ -1,11 +1,12 @@
1
1
  # Changelog
2
2
 
3
- ## 0.3.1 (2026-02-26)
3
+ ## 0.4.0 (2026-02-26)
4
4
 
5
- - **Agent type registration** init wizard sends primary agent type when registering workspace with server
6
- - **Terminal bypass_permissions** respects per-workspace session settings instead of always forcing bypass
5
+ - **Breaking:** removed `architecture` field everywhere `agents` array is the only field
6
+ - Cleaned up all backward compatibility shims across config, server, API, and frontend
7
+ - Renamed `_get_architecture` → `_get_agent` in persistent session manager
7
8
 
8
- ## 0.2.0 (2026-02-26)
9
+ ## 0.3.0 (2026-02-26)
9
10
 
10
11
  Multi-agent support.
11
12
 
@@ -14,9 +15,10 @@ Multi-agent support.
14
15
  - **Per-agent config writers** — `.mcp.json`, `.codex/config.toml`, `.gemini/settings.json`, `opencode.json`
15
16
  - **Agent instructions boilerplate** — `fathom-agents.md` template for memory discipline, vault conventions, cross-workspace communication
16
17
  - **Conditional hooks** — hook setup only for Claude Code (other agents don't support hooks)
17
- - **`agents` array** replaces legacy `architecture` string in `.fathom.json` — backward compatible
18
+ - **`agents` array** in `.fathom.json` — workspace config stores which agents are configured
18
19
  - **Server-side agent dispatch** — persistent sessions launch the correct agent CLI per workspace
19
- - **Status command** — now shows configured agents per workspace
20
+ - **Agent type registration** — init wizard sends primary agent type when registering workspace
21
+ - **Status command** — shows configured agents per workspace
20
22
 
21
23
  ## 0.1.0 (2026-02-25)
22
24
 
package/README.md CHANGED
@@ -100,10 +100,6 @@ npx fathom-mcp status # Check server connection + workspace status
100
100
  2. `.fathom.json` (walked up from cwd to filesystem root)
101
101
  3. Built-in defaults
102
102
 
103
- ### Backward compatibility
104
-
105
- The `agents` array replaces the legacy `architecture` string field. Old configs with `architecture: "claude-code"` are automatically migrated to `agents: ["claude-code"]` at read time.
106
-
107
103
  ## Hooks (Claude Code only)
108
104
 
109
105
  Hooks are only available in Claude Code and are configured in `.claude/settings.local.json`.
package/fathom-agents.md CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fathom-mcp",
3
- "version": "0.3.1",
3
+ "version": "0.4.1",
4
4
  "description": "MCP server for Fathom — vault operations, search, rooms, and cross-workspace communication",
5
5
  "type": "module",
6
6
  "bin": {
package/src/cli.js CHANGED
@@ -14,7 +14,7 @@ import path from "path";
14
14
  import readline from "readline";
15
15
  import { fileURLToPath } from "url";
16
16
 
17
- import { resolveConfig, writeConfig, findConfigFile } from "./config.js";
17
+ import { resolveConfig, writeConfig } from "./config.js";
18
18
  import { createClient } from "./server-client.js";
19
19
 
20
20
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
@@ -253,7 +253,8 @@ async function runInit() {
253
253
  const agent = AGENTS[key];
254
254
  const isDetected = detected.includes(key);
255
255
  const mark = isDetected ? "✓" : " ";
256
- const hint = isDetected ? ` (${key === "windsurf" ? "~/.codeium/windsurf/ found" : `.${key === "claude-code" ? "claude" : key === "vscode" ? "vscode" : key}/ found`})` : "";
256
+ const markers = { "claude-code": ".claude/", "codex": ".codex/", "gemini": ".gemini/", "opencode": "opencode.json" };
257
+ const hint = isDetected ? ` (${markers[key] || key} found)` : "";
257
258
  console.log(` ${mark} ${agent.name}${hint}`);
258
259
  }
259
260
 
@@ -472,7 +473,7 @@ async function runStatus() {
472
473
  } else {
473
474
  const agentLabel = profile.agents?.length > 0
474
475
  ? ` [${profile.agents.join(", ")}]`
475
- : profile.architecture ? ` [${profile.architecture}]` : "";
476
+ : "";
476
477
  const runStatus = profile.running ? "running" : "stopped";
477
478
  console.log(` ${name}: ${runStatus}${agentLabel}`);
478
479
  }
package/src/config.js CHANGED
@@ -68,11 +68,8 @@ export function resolveConfig(startDir = process.cwd()) {
68
68
  if (config.server) result.server = config.server;
69
69
  if (config.apiKey) result.apiKey = config.apiKey;
70
70
  if (config.description) result.description = config.description;
71
- // Backward compat: migrate legacy `architecture` string to `agents` array
72
71
  if (config.agents && Array.isArray(config.agents)) {
73
72
  result.agents = config.agents;
74
- } else if (config.architecture) {
75
- result.agents = [config.architecture];
76
73
  }
77
74
  if (config.hooks) {
78
75
  result.hooks = { ...result.hooks, ...config.hooks };
package/src/index.js CHANGED
@@ -270,7 +270,7 @@ const tools = [
270
270
  {
271
271
  name: "fathom_send",
272
272
  description:
273
- "Send a message to another workspace's Claude instance — for cross-workspace coordination, " +
273
+ "Send a message to another workspace's agent instance — for cross-workspace coordination, " +
274
274
  "sharing findings, or requesting action. Use fathom_workspaces first to discover valid " +
275
275
  "targets. The target agent sees: 'Message from workspace ({from}): {message}'",
276
276
  inputSchema: {
@@ -424,14 +424,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
424
424
  result = await client.listWorkspaces();
425
425
  break;
426
426
  case "fathom_send":
427
- // Send is implemented server-side (it manages tmux sessions)
428
- result = await client.request?.("POST", `/api/room/${encodeURIComponent("__dm__")}`, {
429
- body: { message: `Message from workspace (${config.workspace}): ${args.message}`, sender: config.workspace },
430
- });
431
- // For now, fall back to error until server implements /api/send
432
- if (!result || result.error) {
433
- result = { error: "fathom_send requires a running fathom-server with session management. This feature is being migrated." };
434
- }
427
+ result = await client.sendToWorkspace(args.workspace, args.message, config.workspace);
435
428
  break;
436
429
  default:
437
430
  result = { error: `Unknown tool: ${name}` };
@@ -456,7 +449,7 @@ async function main() {
456
449
  client.registerWorkspace(config.workspace, config._projectDir, {
457
450
  vault: config._rawVault,
458
451
  description: config.description,
459
- architecture: config.architecture,
452
+ agents: config.agents,
460
453
  }).catch(() => {});
461
454
  }
462
455
 
@@ -98,20 +98,26 @@ export function createClient(config) {
98
98
  });
99
99
  }
100
100
 
101
+ // --- Direct messaging -------------------------------------------------------
102
+
103
+ async function sendToWorkspace(target, message, from) {
104
+ return request("POST", `/api/send/${encodeURIComponent(target)}`, {
105
+ body: { message, from: from || workspace },
106
+ });
107
+ }
108
+
101
109
  // --- Workspaces ------------------------------------------------------------
102
110
 
103
111
  async function listWorkspaces() {
104
112
  return request("GET", "/api/workspaces/profiles");
105
113
  }
106
114
 
107
- async function registerWorkspace(name, projectPath, { vault, description, agents, architecture, type } = {}) {
115
+ async function registerWorkspace(name, projectPath, { vault, description, agents, type } = {}) {
108
116
  const body = { name, path: projectPath };
109
117
  if (vault) body.vault = vault;
110
118
  if (description) body.description = description;
111
119
  if (agents && agents.length > 0) body.agents = agents;
112
120
  if (type) body.type = type;
113
- // Legacy fallback
114
- if (architecture && !agents?.length) body.architecture = architecture;
115
121
  return request("POST", "/api/workspaces", { body });
116
122
  }
117
123
 
@@ -164,6 +170,7 @@ export function createClient(config) {
164
170
  roomRead,
165
171
  roomList,
166
172
  roomDescribe,
173
+ sendToWorkspace,
167
174
  listWorkspaces,
168
175
  registerWorkspace,
169
176
  notifyAccess,