@heuresis/mcp 1.0.0-rc.10 → 1.0.0-rc.12

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 CHANGED
@@ -1,159 +1,159 @@
1
- # @heuresis/mcp
2
-
3
- A Model Context Protocol (MCP) server that exposes a Heuresis workspace
4
- to any MCP-capable client (Claude Desktop, Claude Code, Cursor,
5
- Windsurf, custom agents). The server logs into the user's Heuresis
6
- account, talks to the same Supabase project the webapp talks to, and
7
- respects the same RLS. Webapp and MCP are two front-ends to one cloud
8
- workspace.
9
-
10
- Current version: `1.0.0-rc.10`.
11
-
12
- ## Install
13
-
14
- ```bash
15
- npm install -g @heuresis/mcp
16
- # or on demand without installing:
17
- npx -y @heuresis/mcp
18
- ```
19
-
20
- > **Package name vs. command name.** The npm package is `@heuresis/mcp`; the
21
- > command it installs is `heuresis-mcp`. A bare `npx -y @heuresis/mcp` (no
22
- > subcommand) starts the MCP server fine, but `npx @heuresis/mcp login` can
23
- > fail with `heuresis-mcp: not found` because npx derives the command name
24
- > from the scope-stripped package name (`mcp`), which doesn't match. To run a
25
- > subcommand reliably on every npm/OS, name the binary explicitly with `-p`:
26
- >
27
- > ```bash
28
- > npx -y -p @heuresis/mcp heuresis-mcp login
29
- > ```
30
-
31
- ## Quickstart
32
-
33
- ### 1. Link this machine to your Heuresis account
34
-
35
- ```bash
36
- npx -y -p @heuresis/mcp heuresis-mcp login
37
- ```
38
-
39
- The CLI prints a device code and a one-click URL of the form
40
- `https://heuresis.app/device?code=XXXX-XXXX`. Open it in your browser,
41
- sign in if you aren't already, and confirm the device. The CLI polls
42
- in the background and writes credentials to
43
- `~/.heuresis/credentials.json` (chmod 600 on POSIX) the moment you
44
- confirm. Subsequent runs of the MCP are silent.
45
-
46
- The login flow rides three Supabase Edge Functions:
47
- `mcp-device-init`, `mcp-device-grant`, and `mcp-device-poll`.
48
-
49
- To unlink a machine: `npx -y -p @heuresis/mcp heuresis-mcp logout`, or open
50
- Settings ▸ Connected devices in the webapp to revoke remotely.
51
-
52
- `npx -y -p @heuresis/mcp heuresis-mcp whoami` confirms which account a machine
53
- is currently linked to.
54
-
55
- ### 2. Point your MCP client at it
56
-
57
- **Claude Desktop.** Edit
58
- `~/Library/Application Support/Claude/claude_desktop_config.json` on
59
- macOS, or `%APPDATA%/Claude/claude_desktop_config.json` on Windows:
60
-
61
- ```json
62
- {
63
- "mcpServers": {
64
- "heuresis": { "command": "npx", "args": ["-y", "@heuresis/mcp"] }
65
- }
66
- }
67
- ```
68
-
69
- **Claude Code / Cursor / Windsurf.** Drop a `.mcp.json` in the
70
- workspace root:
71
-
72
- ```json
73
- {
74
- "mcpServers": {
75
- "heuresis": { "command": "npx", "args": ["-y", "@heuresis/mcp"] }
76
- }
77
- }
78
- ```
79
-
80
- Restart the client. The Heuresis tools appear in the tool menu.
81
-
82
- ### 3. CLI subcommands
83
-
84
- ```bash
85
- npx -y -p @heuresis/mcp heuresis-mcp whoami # show the linked account + device
86
- npx -y -p @heuresis/mcp heuresis-mcp logout # delete the credentials file
87
- npx -y -p @heuresis/mcp heuresis-mcp --help # all options
88
- npx -y @heuresis/mcp --no-realtime # boot the server with live sync off (persisted)
89
- npx -y @heuresis/mcp --realtime # re-enable live sync
90
- ```
91
-
92
- ## Live sync
93
-
94
- When the MCP boots in cloud mode it subscribes to the workspace over
95
- Supabase Realtime and notifies the client whenever a `nodes`, `edges`,
96
- `projects`, or `ideas` row changes. Edits made in the webapp show up
97
- in the agent's view without a manual refresh, and writes from one
98
- MCP-connected client reach any other connected client the same way.
99
- Pass `--no-realtime` to disable the subscription (useful if the
100
- chatter is noisy or the client logs every notification). The
101
- preference is saved to `~/.heuresis/config.json` so the flag only
102
- needs to be passed once.
103
-
104
- ## Tools
105
-
106
- 34 tools total: 31 data tools against the cloud workspace, plus 3
107
- operator tools that drive the same ideation operators the webapp uses.
108
-
109
- **Reads (10).** `get_workspace_summary`, `list_projects`,
110
- `get_project_graph`, `list_concepts`, `list_edges`, `get_subtree`,
111
- `get_concept`, `search_concepts`, `find_concepts`,
112
- `list_recent_decisions`. Most agent sessions start with
113
- `get_workspace_summary` or `list_projects`.
114
-
115
- **Writes (21).** Concepts: `add_concept`, `update_concept`,
116
- `bulk_add_concepts`, `set_parent`, `validate_concept`, `set_standing`,
117
- `archive_concept`, `unarchive_concept`, `star_concept`,
118
- `remove_concept`. Edges: `link_concepts`, `add_kref`. Ideas:
119
- `create_idea`, `rename_idea`, `recolor_idea`, `set_idea_members`,
120
- `add_to_idea`, `delete_idea`. Projects: `create_project`,
121
- `update_project`, `delete_project`. Every write stamps a row in
122
- `public.provenance` with `origin='mcp'` so the webapp's session log
123
- shows which surface made the change.
124
-
125
- **Operator runs (3).** `run_operator` (generate candidates with
126
- Branch / Matrix / ASIT / TRIZ / Combine / Free / Contradiction),
127
- `run_operator_and_commit` (same, plus commit the result in one
128
- round-trip), and `expand_concept` (recursive Branch, capped at depth ×
129
- breadth ≤ 60).
130
-
131
- Tool input shapes mirror their counterparts in the webapp's
132
- `src/agent/tools.ts`, so an agent that uses both surfaces sees a
133
- uniform contract.
134
-
135
- Wave-shipping: `find_in_files` (in-browser embedding search) is in the
136
- webapp but not yet on the MCP.
137
-
138
- ## Legacy snapshot mode (deprecated)
139
-
140
- The original read-only snapshot reader still works as a fallback while
141
- users migrate to cloud auth. With no `~/.heuresis/credentials.json`
142
- and the `HEURESIS_SNAPSHOT` env var set, the server reads a JSON
143
- export from disk and exposes the original read-only tool set
144
- (`get_workspace_summary`, `list_projects`, `search_concepts`,
145
- `get_concept`, `get_subtree`, `get_project_graph`,
146
- `list_recent_decisions`).
147
-
148
- ```bash
149
- export HEURESIS_SNAPSHOT="/absolute/path/to/your-export.json"
150
- npx @heuresis/mcp
151
- ```
152
-
153
- This path is deprecated and will be removed in a later release. It is
154
- here so existing setups keep working through the migration to cloud
155
- auth.
156
-
157
- ## License
158
-
159
- AGPL-3.0-or-later.
1
+ # @heuresis/mcp
2
+
3
+ A Model Context Protocol (MCP) server that exposes a Heuresis workspace
4
+ to any MCP-capable client (Claude Desktop, Claude Code, Cursor,
5
+ Windsurf, custom agents). The server logs into the user's Heuresis
6
+ account, talks to the same Supabase project the webapp talks to, and
7
+ respects the same RLS. Webapp and MCP are two front-ends to one cloud
8
+ workspace.
9
+
10
+ Current version: `1.0.0-rc.12`.
11
+
12
+ ## Install
13
+
14
+ ```bash
15
+ npm install -g @heuresis/mcp
16
+ # or on demand without installing:
17
+ npx -y @heuresis/mcp
18
+ ```
19
+
20
+ > **Package name vs. command name.** The npm package is `@heuresis/mcp`; the
21
+ > command it installs is `heuresis-mcp`. A bare `npx -y @heuresis/mcp` (no
22
+ > subcommand) starts the MCP server fine, but `npx @heuresis/mcp login` can
23
+ > fail with `heuresis-mcp: not found` because npx derives the command name
24
+ > from the scope-stripped package name (`mcp`), which doesn't match. To run a
25
+ > subcommand reliably on every npm/OS, name the binary explicitly with `-p`:
26
+ >
27
+ > ```bash
28
+ > npx -y -p @heuresis/mcp heuresis-mcp login
29
+ > ```
30
+
31
+ ## Quickstart
32
+
33
+ ### 1. Link this machine to your Heuresis account
34
+
35
+ ```bash
36
+ npx -y -p @heuresis/mcp heuresis-mcp login
37
+ ```
38
+
39
+ The CLI prints a device code and a one-click URL of the form
40
+ `https://heuresis.app/device?code=XXXX-XXXX`. Open it in your browser,
41
+ sign in if you aren't already, and confirm the device. The CLI polls
42
+ in the background and writes credentials to
43
+ `~/.heuresis/credentials.json` (chmod 600 on POSIX) the moment you
44
+ confirm. Subsequent runs of the MCP are silent.
45
+
46
+ The login flow rides three Supabase Edge Functions:
47
+ `mcp-device-init`, `mcp-device-grant`, and `mcp-device-poll`.
48
+
49
+ To unlink a machine: `npx -y -p @heuresis/mcp heuresis-mcp logout`, or open
50
+ Settings ▸ Connected devices in the webapp to revoke remotely.
51
+
52
+ `npx -y -p @heuresis/mcp heuresis-mcp whoami` confirms which account a machine
53
+ is currently linked to.
54
+
55
+ ### 2. Point your MCP client at it
56
+
57
+ **Claude Desktop.** Edit
58
+ `~/Library/Application Support/Claude/claude_desktop_config.json` on
59
+ macOS, or `%APPDATA%/Claude/claude_desktop_config.json` on Windows:
60
+
61
+ ```json
62
+ {
63
+ "mcpServers": {
64
+ "heuresis": { "command": "npx", "args": ["-y", "@heuresis/mcp"] }
65
+ }
66
+ }
67
+ ```
68
+
69
+ **Claude Code / Cursor / Windsurf.** Drop a `.mcp.json` in the
70
+ workspace root:
71
+
72
+ ```json
73
+ {
74
+ "mcpServers": {
75
+ "heuresis": { "command": "npx", "args": ["-y", "@heuresis/mcp"] }
76
+ }
77
+ }
78
+ ```
79
+
80
+ Restart the client. The Heuresis tools appear in the tool menu.
81
+
82
+ ### 3. CLI subcommands
83
+
84
+ ```bash
85
+ npx -y -p @heuresis/mcp heuresis-mcp whoami # show the linked account + device
86
+ npx -y -p @heuresis/mcp heuresis-mcp logout # delete the credentials file
87
+ npx -y -p @heuresis/mcp heuresis-mcp --help # all options
88
+ npx -y @heuresis/mcp --no-realtime # boot the server with live sync off (persisted)
89
+ npx -y @heuresis/mcp --realtime # re-enable live sync
90
+ ```
91
+
92
+ ## Live sync
93
+
94
+ When the MCP boots in cloud mode it subscribes to the workspace over
95
+ Supabase Realtime and notifies the client whenever a `nodes`, `edges`,
96
+ `projects`, or `ideas` row changes. Edits made in the webapp show up
97
+ in the agent's view without a manual refresh, and writes from one
98
+ MCP-connected client reach any other connected client the same way.
99
+ Pass `--no-realtime` to disable the subscription (useful if the
100
+ chatter is noisy or the client logs every notification). The
101
+ preference is saved to `~/.heuresis/config.json` so the flag only
102
+ needs to be passed once.
103
+
104
+ ## Tools
105
+
106
+ 34 tools total: 31 data tools against the cloud workspace, plus 3
107
+ operator tools that drive the same ideation operators the webapp uses.
108
+
109
+ **Reads (10).** `get_workspace_summary`, `list_projects`,
110
+ `get_project_graph`, `list_concepts`, `list_edges`, `get_subtree`,
111
+ `get_concept`, `search_concepts`, `find_concepts`,
112
+ `list_recent_decisions`. Most agent sessions start with
113
+ `get_workspace_summary` or `list_projects`.
114
+
115
+ **Writes (21).** Concepts: `add_concept`, `update_concept`,
116
+ `bulk_add_concepts`, `set_parent`, `validate_concept`, `set_standing`,
117
+ `archive_concept`, `unarchive_concept`, `star_concept`,
118
+ `remove_concept`. Edges: `link_concepts`, `add_kref`. Ideas:
119
+ `create_idea`, `rename_idea`, `recolor_idea`, `set_idea_members`,
120
+ `add_to_idea`, `delete_idea`. Projects: `create_project`,
121
+ `update_project`, `delete_project`. Every write stamps a row in
122
+ `public.provenance` with `origin='mcp'` so the webapp's session log
123
+ shows which surface made the change.
124
+
125
+ **Operator runs (3).** `run_operator` (generate candidates with
126
+ Branch / Matrix / ASIT / TRIZ / Combine / Free / Contradiction),
127
+ `run_operator_and_commit` (same, plus commit the result in one
128
+ round-trip), and `expand_concept` (recursive Branch, capped at depth ×
129
+ breadth ≤ 60).
130
+
131
+ Tool input shapes mirror their counterparts in the webapp's
132
+ `src/agent/tools.ts`, so an agent that uses both surfaces sees a
133
+ uniform contract.
134
+
135
+ Wave-shipping: `find_in_files` (in-browser embedding search) is in the
136
+ webapp but not yet on the MCP.
137
+
138
+ ## Legacy snapshot mode (deprecated)
139
+
140
+ The original read-only snapshot reader still works as a fallback while
141
+ users migrate to cloud auth. With no `~/.heuresis/credentials.json`
142
+ and the `HEURESIS_SNAPSHOT` env var set, the server reads a JSON
143
+ export from disk and exposes the original read-only tool set
144
+ (`get_workspace_summary`, `list_projects`, `search_concepts`,
145
+ `get_concept`, `get_subtree`, `get_project_graph`,
146
+ `list_recent_decisions`).
147
+
148
+ ```bash
149
+ export HEURESIS_SNAPSHOT="/absolute/path/to/your-export.json"
150
+ npx @heuresis/mcp
151
+ ```
152
+
153
+ This path is deprecated and will be removed in a later release. It is
154
+ here so existing setups keep working through the migration to cloud
155
+ auth.
156
+
157
+ ## License
158
+
159
+ AGPL-3.0-or-later.
package/dist/cli.js CHANGED
@@ -23,10 +23,13 @@
23
23
  //
24
24
  // The webapp `/device` page calls a third Edge Function `mcp-device-grant`
25
25
  // to attach the user's identity to the pending grant row.
26
+ // Polyfill global WebSocket on Node < 22 before any Supabase client is built.
27
+ import './wsPolyfill.js';
26
28
  import { createInterface } from 'node:readline/promises';
27
29
  import { stdin as input, stdout as output } from 'node:process';
28
30
  import { credentialsPath, defaultDeviceName, deleteCredentials, readCredentials, writeCredentials, } from './credentials.js';
29
31
  import { exchangeRefreshToken, RefreshTokenError } from './gotrue.js';
32
+ import { ensureProxyAgent } from './proxy.js';
30
33
  // Where the device pairing UI lives. Production default; can be overridden
31
34
  // for staging / self-hosted deploys via HEURESIS_DEVICE_BASE_URL. We also
32
35
  // allow HEURESIS_SUPABASE_URL to override which Supabase project the CLI
@@ -98,34 +101,8 @@ function parseLoginFlags(argv) {
98
101
  function sleep(ms) {
99
102
  return new Promise((resolve) => setTimeout(resolve, ms));
100
103
  }
101
- // Wire HTTPS_PROXY / HTTP_PROXY env vars into Node's global fetch dispatcher.
102
- // Node 18-22's undici does NOT auto-honor these vars (Node 24+ does). Without
103
- // this, the CLI fails with "fetch failed" on corporate networks. Idempotent
104
- // and a no-op when no proxy var is set.
105
- let proxyAgentInstalled = false;
106
- async function ensureProxyAgent() {
107
- if (proxyAgentInstalled)
108
- return;
109
- proxyAgentInstalled = true;
110
- const proxyUrl = process.env.HTTPS_PROXY ||
111
- process.env.https_proxy ||
112
- process.env.HTTP_PROXY ||
113
- process.env.http_proxy;
114
- if (!proxyUrl)
115
- return;
116
- try {
117
- // Dynamic import keeps undici out of the cold-start path when no proxy
118
- // is in play. Node ships undici as part of the runtime so this resolves.
119
- const { ProxyAgent, setGlobalDispatcher } = await import('undici');
120
- setGlobalDispatcher(new ProxyAgent(proxyUrl));
121
- log(`(routing through proxy ${proxyUrl})`);
122
- }
123
- catch (err) {
124
- log(`(could not configure proxy ${proxyUrl}: ${err instanceof Error ? err.message : String(err)})`);
125
- }
126
- }
127
104
  async function postJson(url, body) {
128
- await ensureProxyAgent();
105
+ await ensureProxyAgent(log);
129
106
  const res = await fetch(url, {
130
107
  method: 'POST',
131
108
  headers: { 'Content-Type': 'application/json' },
@@ -16,6 +16,8 @@
16
16
  // process runs. We don't have to do anything per-tool-call.
17
17
  // 3. If the refresh fails (revoked, expired), the bootstrap throws — the
18
18
  // wrapper surfaces a "re-run login" message.
19
+ // Polyfill global WebSocket on Node < 22 before any Supabase client is built.
20
+ import './wsPolyfill.js';
19
21
  import { createClient } from '@supabase/supabase-js';
20
22
  import { exchangeRefreshToken } from './gotrue.js';
21
23
  let cached = null;
package/dist/index.js CHANGED
@@ -24,6 +24,7 @@ import { getConcept as legacyGetConcept, getConceptInput as legacyGetConceptInpu
24
24
  import { CLOUD_TOOLS } from './cloudTools.js';
25
25
  import { readCredentials } from './credentials.js';
26
26
  import { CloudAuthError, getCloudClient } from './cloudClient.js';
27
+ import { ensureProxyAgent } from './proxy.js';
27
28
  import { helpCommand, loginCommand, logoutCommand, whoamiCommand, } from './cli.js';
28
29
  import { readRealtimeFlag, resolveSubscriptionWorkspaceId, startRealtimeSubscription, stripRealtimeFlags, } from './realtime.js';
29
30
  const VERSION = '0.2.0-alpha';
@@ -93,6 +94,9 @@ function makeLegacySnapshotTools(store) {
93
94
  ];
94
95
  }
95
96
  async function runServer() {
97
+ // Route outbound fetch (GoTrue refresh + PostgREST queries) through
98
+ // HTTPS_PROXY / HTTP_PROXY before any cloud call. No-op when unset.
99
+ await ensureProxyAgent(console.error);
96
100
  const creds = await readCredentials();
97
101
  const snapshotEnv = process.env.HEURESIS_SNAPSHOT;
98
102
  let tools;
package/dist/proxy.js ADDED
@@ -0,0 +1,43 @@
1
+ // Heuresis MCP — proxy wiring for Node's global fetch dispatcher.
2
+ //
3
+ // Node 18-22's undici does NOT auto-honor HTTPS_PROXY / HTTP_PROXY (Node 24+
4
+ // does). Without this, every outbound fetch fails with "fetch failed" on
5
+ // networks that require an egress proxy — both the device-pairing + GoTrue
6
+ // refresh calls in the CLI and the SupabaseClient's PostgREST queries in the
7
+ // running MCP server. We install an undici ProxyAgent as the global
8
+ // dispatcher once, at process start.
9
+ //
10
+ // Idempotent across the whole process (module-level flag) and a no-op when no
11
+ // proxy var is set, so it is safe to call from every entry point.
12
+ //
13
+ // NOTE: this only covers `fetch` (PostgREST + auth). The Realtime websocket
14
+ // uses a separate transport that the global dispatcher does not touch; live
15
+ // sync behind a strict proxy is a known follow-up, but it is best-effort and
16
+ // fire-and-forget, so it never blocks tool calls.
17
+ let proxyAgentInstalled = false;
18
+ /**
19
+ * Route Node's global `fetch` through HTTPS_PROXY / HTTP_PROXY when set.
20
+ * Pass a logger to surface the routing decision (the CLI logs to stderr; the
21
+ * server passes console.error). Resolves once the dispatcher is in place.
22
+ */
23
+ export async function ensureProxyAgent(log = () => { }) {
24
+ if (proxyAgentInstalled)
25
+ return;
26
+ proxyAgentInstalled = true;
27
+ const proxyUrl = process.env.HTTPS_PROXY ||
28
+ process.env.https_proxy ||
29
+ process.env.HTTP_PROXY ||
30
+ process.env.http_proxy;
31
+ if (!proxyUrl)
32
+ return;
33
+ try {
34
+ // Dynamic import keeps undici off the cold-start path when no proxy is in
35
+ // play. It's a direct dependency, so this resolves.
36
+ const { ProxyAgent, setGlobalDispatcher } = await import('undici');
37
+ setGlobalDispatcher(new ProxyAgent(proxyUrl));
38
+ log(`(routing through proxy ${proxyUrl})`);
39
+ }
40
+ catch (err) {
41
+ log(`(could not configure proxy ${proxyUrl}: ${err instanceof Error ? err.message : String(err)})`);
42
+ }
43
+ }
@@ -0,0 +1,12 @@
1
+ // Node < 22 ships no global `WebSocket`, but @supabase/realtime-js requires
2
+ // one: a Supabase client builds a RealtimeClient in its constructor (even when
3
+ // realtime is never used), which throws "Node.js 20 detected without native
4
+ // WebSocket support" when no global WebSocket exists. Install the `ws`
5
+ // implementation as the global so createClient works on Node 18/20. No-op on
6
+ // Node 22+, where WebSocket is native. Imported for its side effect by every
7
+ // module that builds a Supabase client, before the first createClient call.
8
+ import WebSocket from 'ws';
9
+ const g = globalThis;
10
+ if (typeof g.WebSocket === 'undefined') {
11
+ g.WebSocket = WebSocket;
12
+ }
package/package.json CHANGED
@@ -1,56 +1,58 @@
1
- {
2
- "name": "@heuresis/mcp",
3
- "version": "1.0.0-rc.10",
4
- "mcpName": "io.github.ToremLabs/heuresis",
5
- "description": "Cloud-authenticated Model Context Protocol server for a Heuresis workspace. Logs into the user's Heuresis account and lets any MCP client (Claude Desktop, Claude Code, Cursor, custom agents) read and write the same workspace the webapp uses. 31 data tools, 3 operator tools (Branch/Matrix/C-K/ASIT/TRIZ/Free/Combine/Explore), and live Realtime change subscriptions.",
6
- "type": "module",
7
- "bin": {
8
- "heuresis-mcp": "dist/index.js"
9
- },
10
- "files": [
11
- "dist",
12
- "README.md"
13
- ],
14
- "scripts": {
15
- "build": "tsc",
16
- "start": "node dist/index.js",
17
- "dev": "tsc --watch",
18
- "prepublishOnly": "npm run build"
19
- },
20
- "publishConfig": {
21
- "access": "public"
22
- },
23
- "homepage": "https://heuresis.app/mcp",
24
- "repository": {
25
- "type": "git",
26
- "url": "git+https://github.com/ToremLabs/Heuresis.git",
27
- "directory": "mcp-server"
28
- },
29
- "keywords": [
30
- "mcp",
31
- "model-context-protocol",
32
- "heuresis",
33
- "ideation",
34
- "knowledge-graph",
35
- "claude-code",
36
- "claude-desktop",
37
- "cursor"
38
- ],
39
- "dependencies": {
40
- "@anthropic-ai/sdk": "^0.40.0",
41
- "@google/generative-ai": "^0.21.0",
42
- "@modelcontextprotocol/sdk": "^1.0.0",
43
- "@supabase/supabase-js": "^2.45.0",
44
- "openai": "^4.71.0",
45
- "undici": "^6.25.0",
46
- "zod": "^3.23.0"
47
- },
48
- "devDependencies": {
49
- "@types/node": "^22.0.0",
50
- "typescript": "^5.6.0"
51
- },
52
- "engines": {
53
- "node": ">=18"
54
- },
55
- "license": "AGPL-3.0-or-later"
56
- }
1
+ {
2
+ "name": "@heuresis/mcp",
3
+ "version": "1.0.0-rc.12",
4
+ "mcpName": "io.github.ToremLabs/heuresis",
5
+ "description": "Cloud-authenticated Model Context Protocol server for a Heuresis workspace. Logs into the user's Heuresis account and lets any MCP client (Claude Desktop, Claude Code, Cursor, custom agents) read and write the same workspace the webapp uses. 31 data tools, 3 operator tools (Branch/Matrix/C-K/ASIT/TRIZ/Free/Combine/Explore), and live Realtime change subscriptions.",
6
+ "type": "module",
7
+ "bin": {
8
+ "heuresis-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "start": "node dist/index.js",
17
+ "dev": "tsc --watch",
18
+ "prepublishOnly": "npm run build"
19
+ },
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "homepage": "https://heuresis.app/mcp",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/ToremLabs/Heuresis.git",
27
+ "directory": "mcp-server"
28
+ },
29
+ "keywords": [
30
+ "mcp",
31
+ "model-context-protocol",
32
+ "heuresis",
33
+ "ideation",
34
+ "knowledge-graph",
35
+ "claude-code",
36
+ "claude-desktop",
37
+ "cursor"
38
+ ],
39
+ "dependencies": {
40
+ "@anthropic-ai/sdk": "^0.40.0",
41
+ "@google/generative-ai": "^0.21.0",
42
+ "@modelcontextprotocol/sdk": "^1.0.0",
43
+ "@supabase/supabase-js": "^2.45.0",
44
+ "openai": "^4.71.0",
45
+ "undici": "^6.25.0",
46
+ "ws": "^8.18.0",
47
+ "zod": "^3.23.0"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^22.0.0",
51
+ "@types/ws": "^8.5.13",
52
+ "typescript": "^5.6.0"
53
+ },
54
+ "engines": {
55
+ "node": ">=18"
56
+ },
57
+ "license": "AGPL-3.0-or-later"
58
+ }