@contextstream/mcp-server 0.3.41 → 0.3.42

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 (3) hide show
  1. package/README.md +80 -7
  2. package/dist/index.js +288 -6
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -91,6 +91,8 @@ These clients use the `mcpServers` JSON schema:
91
91
 
92
92
  Many other MCP JSON clients also use this same `mcpServers` shape (including Claude Code project scope via `.mcp.json`).
93
93
 
94
+ **Core toolset (default, ~17 tools):**
95
+
94
96
  ```json
95
97
  {
96
98
  "mcpServers": {
@@ -106,10 +108,30 @@ Many other MCP JSON clients also use this same `mcpServers` shape (including Cla
106
108
  }
107
109
  ```
108
110
 
111
+ **Full toolset (~86 tools):**
112
+
113
+ ```json
114
+ {
115
+ "mcpServers": {
116
+ "contextstream": {
117
+ "command": "npx",
118
+ "args": ["-y", "@contextstream/mcp-server"],
119
+ "env": {
120
+ "CONTEXTSTREAM_API_URL": "https://api.contextstream.io",
121
+ "CONTEXTSTREAM_API_KEY": "your_api_key",
122
+ "CONTEXTSTREAM_TOOLSET": "full"
123
+ }
124
+ }
125
+ }
126
+ }
127
+ ```
128
+
109
129
  ### VS Code (`.vscode/mcp.json`)
110
130
 
111
131
  VS Code uses a different schema with a top-level `servers` map:
112
132
 
133
+ **Core toolset (default):**
134
+
113
135
  ```json
114
136
  {
115
137
  "servers": {
@@ -126,6 +148,25 @@ VS Code uses a different schema with a top-level `servers` map:
126
148
  }
127
149
  ```
128
150
 
151
+ **Full toolset (~86 tools):**
152
+
153
+ ```json
154
+ {
155
+ "servers": {
156
+ "contextstream": {
157
+ "type": "stdio",
158
+ "command": "npx",
159
+ "args": ["-y", "@contextstream/mcp-server"],
160
+ "env": {
161
+ "CONTEXTSTREAM_API_URL": "https://api.contextstream.io",
162
+ "CONTEXTSTREAM_API_KEY": "your_api_key",
163
+ "CONTEXTSTREAM_TOOLSET": "full"
164
+ }
165
+ }
166
+ }
167
+ }
168
+ ```
169
+
129
170
  Strong recommendation: VS Code supports `inputs` so you don’t have to hardcode secrets in a committed file:
130
171
 
131
172
  ```json
@@ -156,28 +197,59 @@ Strong recommendation: VS Code supports `inputs` so you don’t have to hardcode
156
197
 
157
198
  User scope (all projects):
158
199
 
200
+ **Core toolset (recommended for Claude Code):**
201
+
202
+ ```bash
203
+ claude mcp add --transport stdio contextstream --scope user \
204
+ --env CONTEXTSTREAM_API_URL=https://api.contextstream.io \
205
+ --env CONTEXTSTREAM_API_KEY=YOUR_KEY \
206
+ -- npx -y @contextstream/mcp-server
207
+ ```
208
+
209
+ **Full toolset (~86 tools):**
210
+
159
211
  ```bash
160
212
  claude mcp add --transport stdio contextstream --scope user \
161
213
  --env CONTEXTSTREAM_API_URL=https://api.contextstream.io \
162
214
  --env CONTEXTSTREAM_API_KEY=YOUR_KEY \
163
- --env CONTEXTSTREAM_TOOLSET=core -- \
164
- npx -y @contextstream/mcp-server
215
+ --env CONTEXTSTREAM_TOOLSET=full \
216
+ -- npx -y @contextstream/mcp-server
165
217
  ```
166
218
 
167
- Tip: Claude Code warns on large tool contexts. The default toolset is `core`.
168
- Set `CONTEXTSTREAM_TOOLSET=full` to expose everything.
219
+ Note: Claude Code may warn about large tool contexts when using `full`. The default is `core` (~17 tools).
220
+
221
+ Windows caveat (native Windows, not WSL): if `npx` isn't found, use `cmd /c npx -y @contextstream/mcp-server` after `--`.
169
222
 
170
- Windows caveat (native Windows, not WSL): if `npx` isn’t found, use `cmd /c npx -y @contextstream/mcp-server` after `--`.
223
+ **Alternative (JSON form):**
171
224
 
172
- Alternative (JSON form):
225
+ Core:
226
+ ```bash
227
+ claude mcp add-json contextstream \
228
+ '{"type":"stdio","command":"npx","args":["-y","@contextstream/mcp-server"],"env":{"CONTEXTSTREAM_API_URL":"https://api.contextstream.io","CONTEXTSTREAM_API_KEY":"your_api_key"}}'
229
+ ```
173
230
 
231
+ Full:
174
232
  ```bash
175
233
  claude mcp add-json contextstream \
176
- '{"type":"stdio","command":"npx","args":["-y","@contextstream/mcp-server"],"env":{"CONTEXTSTREAM_API_URL":"https://api.contextstream.io","CONTEXTSTREAM_API_KEY":"your_api_key","CONTEXTSTREAM_TOOLSET":"core"}}'
234
+ '{"type":"stdio","command":"npx","args":["-y","@contextstream/mcp-server"],"env":{"CONTEXTSTREAM_API_URL":"https://api.contextstream.io","CONTEXTSTREAM_API_KEY":"your_api_key","CONTEXTSTREAM_TOOLSET":"full"}}'
177
235
  ```
178
236
 
179
237
  ### Codex CLI (`~/.codex/config.toml`)
180
238
 
239
+ **Core toolset (default):**
240
+
241
+ ```toml
242
+ [mcp_servers.contextstream]
243
+ command = "npx"
244
+ args = ["-y", "@contextstream/mcp-server"]
245
+
246
+ [mcp_servers.contextstream.env]
247
+ CONTEXTSTREAM_API_URL = "https://api.contextstream.io"
248
+ CONTEXTSTREAM_API_KEY = "your_api_key"
249
+ ```
250
+
251
+ **Full toolset (~86 tools):**
252
+
181
253
  ```toml
182
254
  [mcp_servers.contextstream]
183
255
  command = "npx"
@@ -186,6 +258,7 @@ args = ["-y", "@contextstream/mcp-server"]
186
258
  [mcp_servers.contextstream.env]
187
259
  CONTEXTSTREAM_API_URL = "https://api.contextstream.io"
188
260
  CONTEXTSTREAM_API_KEY = "your_api_key"
261
+ CONTEXTSTREAM_TOOLSET = "full"
189
262
  ```
190
263
 
191
264
  After editing, restart your MCP client so it reloads the server configuration.
package/dist/index.js CHANGED
@@ -6923,6 +6923,80 @@ W:${wsHint}
6923
6923
  }
6924
6924
  return request(this.config, `/workspaces/${withDefaults.workspace_id}/integrations/status`, { method: "GET" });
6925
6925
  }
6926
+ /**
6927
+ * Get GitHub summary for a workspace
6928
+ */
6929
+ async githubSummary(params) {
6930
+ const withDefaults = this.withDefaults(params || {});
6931
+ if (!withDefaults.workspace_id) {
6932
+ throw new Error("workspace_id is required for GitHub summary");
6933
+ }
6934
+ const query = new URLSearchParams();
6935
+ if (params?.days) query.set("days", String(params.days));
6936
+ if (params?.repo) query.set("repo", params.repo);
6937
+ const suffix = query.toString() ? `?${query.toString()}` : "";
6938
+ return request(this.config, `/github/summary${suffix}`, { method: "GET" });
6939
+ }
6940
+ /**
6941
+ * Get Slack summary for a workspace
6942
+ */
6943
+ async slackSummary(params) {
6944
+ const withDefaults = this.withDefaults(params || {});
6945
+ if (!withDefaults.workspace_id) {
6946
+ throw new Error("workspace_id is required for Slack summary");
6947
+ }
6948
+ const query = new URLSearchParams();
6949
+ if (params?.days) query.set("days", String(params.days));
6950
+ if (params?.channel) query.set("channel", params.channel);
6951
+ const suffix = query.toString() ? `?${query.toString()}` : "";
6952
+ return request(this.config, `/slack/summary${suffix}`, { method: "GET" });
6953
+ }
6954
+ /**
6955
+ * Cross-source search across all integrations
6956
+ */
6957
+ async integrationsSearch(params) {
6958
+ const withDefaults = this.withDefaults(params || {});
6959
+ if (!withDefaults.workspace_id) {
6960
+ throw new Error("workspace_id is required for integrations search");
6961
+ }
6962
+ const urlParams = new URLSearchParams();
6963
+ urlParams.set("q", params.query);
6964
+ urlParams.set("workspace_id", withDefaults.workspace_id);
6965
+ if (params?.limit) urlParams.set("limit", String(params.limit));
6966
+ if (params?.sources) urlParams.set("sources", params.sources.join(","));
6967
+ if (params?.days) urlParams.set("days", String(params.days));
6968
+ if (params?.sort_by) urlParams.set("sort_by", params.sort_by);
6969
+ return request(this.config, `/integrations/search?${urlParams.toString()}`, { method: "GET" });
6970
+ }
6971
+ /**
6972
+ * Cross-source summary across all integrations
6973
+ */
6974
+ async integrationsSummary(params) {
6975
+ const withDefaults = this.withDefaults(params || {});
6976
+ if (!withDefaults.workspace_id) {
6977
+ throw new Error("workspace_id is required for integrations summary");
6978
+ }
6979
+ const query = new URLSearchParams();
6980
+ query.set("workspace_id", withDefaults.workspace_id);
6981
+ if (params?.days) query.set("days", String(params.days));
6982
+ return request(this.config, `/integrations/summary?${query.toString()}`, { method: "GET" });
6983
+ }
6984
+ /**
6985
+ * Cross-source knowledge from all integrations
6986
+ */
6987
+ async integrationsKnowledge(params) {
6988
+ const withDefaults = this.withDefaults(params || {});
6989
+ if (!withDefaults.workspace_id) {
6990
+ throw new Error("workspace_id is required for integrations knowledge");
6991
+ }
6992
+ const urlParams = new URLSearchParams();
6993
+ urlParams.set("workspace_id", withDefaults.workspace_id);
6994
+ if (params?.knowledge_type) urlParams.set("knowledge_type", params.knowledge_type);
6995
+ if (params?.query) urlParams.set("query", params.query);
6996
+ if (params?.sources) urlParams.set("sources", params.sources.join(","));
6997
+ if (params?.limit) urlParams.set("limit", String(params.limit));
6998
+ return request(this.config, `/integrations/knowledge?${urlParams.toString()}`, { method: "GET" });
6999
+ }
6926
7000
  };
6927
7001
 
6928
7002
  // src/tools.ts
@@ -7026,6 +7100,16 @@ var CONTEXTSTREAM_TOOL_NAMES = [
7026
7100
  "slack_discussions",
7027
7101
  "slack_search",
7028
7102
  "slack_sync_users",
7103
+ "slack_knowledge",
7104
+ "slack_summary",
7105
+ // GitHub additional
7106
+ "github_knowledge",
7107
+ "github_summary",
7108
+ // Cross-source integrations
7109
+ "integrations_status",
7110
+ "integrations_search",
7111
+ "integrations_summary",
7112
+ "integrations_knowledge",
7029
7113
  // Auth/Meta
7030
7114
  "auth_me",
7031
7115
  "mcp_server_version"
@@ -7194,7 +7278,18 @@ session_recall(query="what did we decide about caching?")
7194
7278
 
7195
7279
  ### Full Tool Catalog
7196
7280
 
7197
- The following tools are available when \`CONTEXTSTREAM_TOOLSET=full\` (default is \`core\`, which includes only the essential session/context tools above):
7281
+ To expose all tools below, set \`CONTEXTSTREAM_TOOLSET=full\` in your MCP config. The default (\`core\`) includes only the essential session/context tools above.
7282
+
7283
+ **To enable full toolset in your MCP config:**
7284
+ \`\`\`json
7285
+ {
7286
+ "env": {
7287
+ "CONTEXTSTREAM_TOOLSET": "full"
7288
+ }
7289
+ }
7290
+ \`\`\`
7291
+
7292
+ **Available tool categories (when \`CONTEXTSTREAM_TOOLSET=full\`):**
7198
7293
 
7199
7294
  **Session/Context** (included in core):
7200
7295
  \`session_init\`, \`context_smart\`, \`session_summary\`, \`session_capture\`, \`session_capture_lesson\`, \`session_get_lessons\`, \`session_recall\`, \`session_remember\`, \`session_get_user_context\`, \`session_smart_search\`, \`session_compress\`, \`session_delta\`, \`generate_editor_rules\`, \`workspace_associate\`, \`workspace_bootstrap\`
@@ -7218,10 +7313,13 @@ The following tools are available when \`CONTEXTSTREAM_TOOLSET=full\` (default i
7218
7313
  \`ai_context\`, \`ai_enhanced_context\`, \`ai_context_budget\`, \`ai_embeddings\`, \`ai_plan\`, \`ai_tasks\`
7219
7314
 
7220
7315
  **GitHub Integration** (PRO):
7221
- \`github_stats\`, \`github_repos\`, \`github_contributors\`, \`github_activity\`, \`github_issues\`, \`github_search\`
7316
+ \`github_stats\`, \`github_repos\`, \`github_contributors\`, \`github_activity\`, \`github_issues\`, \`github_search\`, \`github_knowledge\`, \`github_summary\`
7222
7317
 
7223
7318
  **Slack Integration** (PRO):
7224
- \`slack_stats\`, \`slack_channels\`, \`slack_contributors\`, \`slack_activity\`, \`slack_discussions\`, \`slack_search\`, \`slack_sync_users\`
7319
+ \`slack_stats\`, \`slack_channels\`, \`slack_contributors\`, \`slack_activity\`, \`slack_discussions\`, \`slack_search\`, \`slack_sync_users\`, \`slack_knowledge\`, \`slack_summary\`
7320
+
7321
+ **Cross-Source Integrations** (PRO):
7322
+ \`integrations_status\`, \`integrations_search\`, \`integrations_summary\`, \`integrations_knowledge\`
7225
7323
 
7226
7324
  See full documentation: https://contextstream.io/docs/mcp/tools
7227
7325
  `.trim();
@@ -7235,7 +7333,20 @@ var CONTEXTSTREAM_RULES_MINIMAL = `
7235
7333
  - For code/file discovery, use \`session_smart_search\` before raw repo scans (\`rg\`, \`ls\`, \`find\`); fall back only if needed.
7236
7334
  - After meaningful work/decisions/preferences: \`session_capture(event_type=decision|preference|task|insight, title="\u2026", content="\u2026")\`.
7237
7335
  - On frustration/corrections/tool mistakes: \`session_capture_lesson(...)\`.
7238
- - Full tool catalog (workspaces, projects, search, memory, graph, AI, integrations): see https://contextstream.io/docs/mcp/tools
7336
+
7337
+ ### Tool Catalog
7338
+
7339
+ By default, the MCP server exposes **core** tools (~17 essential session/context tools). To expose the **full** catalog (~86 tools including workspaces, projects, search, memory, graph, AI, and integrations), set \`CONTEXTSTREAM_TOOLSET=full\` in your MCP config:
7340
+
7341
+ \`\`\`json
7342
+ {
7343
+ "env": {
7344
+ "CONTEXTSTREAM_TOOLSET": "full"
7345
+ }
7346
+ }
7347
+ \`\`\`
7348
+
7349
+ Full tool reference: https://contextstream.io/docs/mcp/tools
7239
7350
  `.trim();
7240
7351
  var TEMPLATES = {
7241
7352
  codex: {
@@ -9884,6 +9995,169 @@ Example queries:
9884
9995
  return { content: [{ type: "text", text: formatContent(result) }], structuredContent: toStructured(result) };
9885
9996
  }
9886
9997
  );
9998
+ registerTool(
9999
+ "github_summary",
10000
+ {
10001
+ title: "GitHub activity summary",
10002
+ description: `Get a high-level summary of GitHub activity for a workspace.
10003
+ Returns: overview of issues, PRs, commits, releases, and highlights for the specified period.
10004
+ Use this for weekly/monthly reports or to get a quick overview of repository activity.
10005
+
10006
+ Example prompts:
10007
+ - "Give me a weekly GitHub summary"
10008
+ - "What happened in GitHub last month?"
10009
+ - "Show me the GitHub summary for repo X"`,
10010
+ inputSchema: external_exports.object({
10011
+ workspace_id: external_exports.string().uuid().optional(),
10012
+ days: external_exports.number().optional().describe("Number of days to summarize (default: 7)"),
10013
+ repo: external_exports.string().optional().describe("Filter by repository name")
10014
+ })
10015
+ },
10016
+ async (input) => {
10017
+ const workspaceId = resolveWorkspaceId(input.workspace_id);
10018
+ if (!workspaceId) {
10019
+ return errorResult("Error: workspace_id is required. Please call session_init first or provide workspace_id explicitly.");
10020
+ }
10021
+ const result = await client.githubSummary({
10022
+ workspace_id: workspaceId,
10023
+ days: input.days,
10024
+ repo: input.repo
10025
+ });
10026
+ return { content: [{ type: "text", text: formatContent(result) }], structuredContent: toStructured(result) };
10027
+ }
10028
+ );
10029
+ registerTool(
10030
+ "slack_summary",
10031
+ {
10032
+ title: "Slack activity summary",
10033
+ description: `Get a high-level summary of Slack activity for a workspace.
10034
+ Returns: overview of messages, threads, top channels, and highlights for the specified period.
10035
+ Use this for weekly/monthly reports or to get a quick overview of team discussions.
10036
+
10037
+ Example prompts:
10038
+ - "Give me a weekly Slack summary"
10039
+ - "What was discussed in Slack last month?"
10040
+ - "Show me the Slack summary for #engineering"`,
10041
+ inputSchema: external_exports.object({
10042
+ workspace_id: external_exports.string().uuid().optional(),
10043
+ days: external_exports.number().optional().describe("Number of days to summarize (default: 7)"),
10044
+ channel: external_exports.string().optional().describe("Filter by channel name")
10045
+ })
10046
+ },
10047
+ async (input) => {
10048
+ const workspaceId = resolveWorkspaceId(input.workspace_id);
10049
+ if (!workspaceId) {
10050
+ return errorResult("Error: workspace_id is required. Please call session_init first or provide workspace_id explicitly.");
10051
+ }
10052
+ const result = await client.slackSummary({
10053
+ workspace_id: workspaceId,
10054
+ days: input.days,
10055
+ channel: input.channel
10056
+ });
10057
+ return { content: [{ type: "text", text: formatContent(result) }], structuredContent: toStructured(result) };
10058
+ }
10059
+ );
10060
+ registerTool(
10061
+ "integrations_search",
10062
+ {
10063
+ title: "Cross-source search",
10064
+ description: `Search across all connected integrations (GitHub, Slack, etc.) with a single query.
10065
+ Returns: unified results from all sources, ranked by relevance or recency.
10066
+ Use this to find related discussions, issues, and content across all your tools.
10067
+
10068
+ Example prompts:
10069
+ - "Search all integrations for database migration discussions"
10070
+ - "Find mentions of authentication across GitHub and Slack"
10071
+ - "Search for API changes in the last 30 days"`,
10072
+ inputSchema: external_exports.object({
10073
+ workspace_id: external_exports.string().uuid().optional(),
10074
+ query: external_exports.string().describe("Search query"),
10075
+ limit: external_exports.number().optional().describe("Maximum results (default: 20)"),
10076
+ sources: external_exports.array(external_exports.string()).optional().describe("Filter by source: github, slack"),
10077
+ days: external_exports.number().optional().describe("Filter to results within N days"),
10078
+ sort_by: external_exports.enum(["relevance", "recent", "engagement"]).optional().describe("Sort by: relevance, recent, or engagement")
10079
+ })
10080
+ },
10081
+ async (input) => {
10082
+ const workspaceId = resolveWorkspaceId(input.workspace_id);
10083
+ if (!workspaceId) {
10084
+ return errorResult("Error: workspace_id is required. Please call session_init first or provide workspace_id explicitly.");
10085
+ }
10086
+ const result = await client.integrationsSearch({
10087
+ workspace_id: workspaceId,
10088
+ query: input.query,
10089
+ limit: input.limit,
10090
+ sources: input.sources,
10091
+ days: input.days,
10092
+ sort_by: input.sort_by
10093
+ });
10094
+ return { content: [{ type: "text", text: formatContent(result) }], structuredContent: toStructured(result) };
10095
+ }
10096
+ );
10097
+ registerTool(
10098
+ "integrations_summary",
10099
+ {
10100
+ title: "Cross-source activity summary",
10101
+ description: `Get a unified summary of activity across all connected integrations.
10102
+ Returns: combined overview of GitHub and Slack activity, key highlights, and trends.
10103
+ Use this for weekly team summaries or to understand overall activity across all tools.
10104
+
10105
+ Example prompts:
10106
+ - "Give me a weekly team summary across all sources"
10107
+ - "What happened across GitHub and Slack last week?"
10108
+ - "Show me a unified activity overview"`,
10109
+ inputSchema: external_exports.object({
10110
+ workspace_id: external_exports.string().uuid().optional(),
10111
+ days: external_exports.number().optional().describe("Number of days to summarize (default: 7)")
10112
+ })
10113
+ },
10114
+ async (input) => {
10115
+ const workspaceId = resolveWorkspaceId(input.workspace_id);
10116
+ if (!workspaceId) {
10117
+ return errorResult("Error: workspace_id is required. Please call session_init first or provide workspace_id explicitly.");
10118
+ }
10119
+ const result = await client.integrationsSummary({
10120
+ workspace_id: workspaceId,
10121
+ days: input.days
10122
+ });
10123
+ return { content: [{ type: "text", text: formatContent(result) }], structuredContent: toStructured(result) };
10124
+ }
10125
+ );
10126
+ registerTool(
10127
+ "integrations_knowledge",
10128
+ {
10129
+ title: "Cross-source knowledge",
10130
+ description: `Get knowledge extracted from all connected integrations (GitHub, Slack, etc.).
10131
+ Returns: decisions, lessons, and insights distilled from all sources.
10132
+ Use this to find key decisions and learnings from across your team's conversations.
10133
+
10134
+ Example prompts:
10135
+ - "What decisions were made across all sources about authentication?"
10136
+ - "Show me lessons learned from all integrations"
10137
+ - "What insights have we gathered from GitHub and Slack?"`,
10138
+ inputSchema: external_exports.object({
10139
+ workspace_id: external_exports.string().uuid().optional(),
10140
+ knowledge_type: external_exports.enum(["decision", "lesson", "fact", "insight"]).optional().describe("Filter by knowledge type"),
10141
+ query: external_exports.string().optional().describe("Optional search query to filter knowledge"),
10142
+ sources: external_exports.array(external_exports.string()).optional().describe("Filter by source: github, slack"),
10143
+ limit: external_exports.number().optional().describe("Maximum items to return (default: 20)")
10144
+ })
10145
+ },
10146
+ async (input) => {
10147
+ const workspaceId = resolveWorkspaceId(input.workspace_id);
10148
+ if (!workspaceId) {
10149
+ return errorResult("Error: workspace_id is required. Please call session_init first or provide workspace_id explicitly.");
10150
+ }
10151
+ const result = await client.integrationsKnowledge({
10152
+ workspace_id: workspaceId,
10153
+ knowledge_type: input.knowledge_type,
10154
+ query: input.query,
10155
+ sources: input.sources,
10156
+ limit: input.limit
10157
+ });
10158
+ return { content: [{ type: "text", text: formatContent(result) }], structuredContent: toStructured(result) };
10159
+ }
10160
+ );
9887
10161
  registerTool(
9888
10162
  "integrations_status",
9889
10163
  {
@@ -10501,6 +10775,8 @@ async function upsertCodexTomlConfig(filePath, params) {
10501
10775
  const existing = exists ? await fs5.readFile(filePath, "utf8").catch(() => "") : "";
10502
10776
  const marker = "[mcp_servers.contextstream]";
10503
10777
  const envMarker = "[mcp_servers.contextstream.env]";
10778
+ const toolsetLine = params.toolset ? `CONTEXTSTREAM_TOOLSET = "${params.toolset}"
10779
+ ` : "";
10504
10780
  const block = `
10505
10781
 
10506
10782
  # ContextStream MCP server
@@ -10511,7 +10787,7 @@ args = ["-y", "@contextstream/mcp-server"]
10511
10787
  [mcp_servers.contextstream.env]
10512
10788
  CONTEXTSTREAM_API_URL = "${params.apiUrl}"
10513
10789
  CONTEXTSTREAM_API_KEY = "${params.apiKey}"
10514
- `;
10790
+ ` + toolsetLine;
10515
10791
  if (!exists) {
10516
10792
  await fs5.writeFile(filePath, block.trimStart(), "utf8");
10517
10793
  return "created";
@@ -10782,8 +11058,13 @@ Created API key: ${maskApiKey(apiKey)}
10782
11058
  const mode = modeChoice === "2" ? "full" : "minimal";
10783
11059
  console.log("\nMCP toolset (which tools to expose to the AI):");
10784
11060
  console.log(" 1) Core (recommended) \u2014 essential session/context tools (~17 tools, lower token overhead)");
11061
+ console.log(" Best for: most users, Claude Code, Claude Desktop (avoids large-context warnings)");
10785
11062
  console.log(" 2) Full \u2014 all tools including workspaces, projects, search, memory, graph, AI, integrations (~86 tools)");
11063
+ console.log(" Best for: power users needing direct access to all workspace/project/graph/AI tools");
10786
11064
  console.log(" Note: Claude Code/Desktop may warn about large tool lists when using full toolset.");
11065
+ console.log("");
11066
+ console.log(" Tip: You can switch toolsets later by editing the MCP config and setting CONTEXTSTREAM_TOOLSET=full");
11067
+ console.log(" See https://contextstream.io/docs/mcp/tools for the full tool catalog.");
10787
11068
  const toolsetChoice = normalizeInput(await rl.question("Choose [1/2] (default 1): ")) || "1";
10788
11069
  const toolset = toolsetChoice === "2" ? "full" : "core";
10789
11070
  const editors = ["codex", "claude", "cursor", "windsurf", "cline", "kilo", "roo", "aider"];
@@ -10832,7 +11113,8 @@ Created API key: ${maskApiKey(apiKey)}
10832
11113
  console.log(`- ${EDITOR_LABELS[editor]}: would update ${filePath}`);
10833
11114
  continue;
10834
11115
  }
10835
- const status = await upsertCodexTomlConfig(filePath, { apiUrl, apiKey });
11116
+ const codexParams = toolset === "full" ? { apiUrl, apiKey, toolset: "full" } : { apiUrl, apiKey };
11117
+ const status = await upsertCodexTomlConfig(filePath, codexParams);
10836
11118
  writeActions.push({ kind: "mcp-config", target: filePath, status });
10837
11119
  console.log(`- ${EDITOR_LABELS[editor]}: ${status} ${filePath}`);
10838
11120
  continue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contextstream/mcp-server",
3
- "version": "0.3.41",
3
+ "version": "0.3.42",
4
4
  "description": "MCP server exposing ContextStream public API - code context, memory, search, and AI tools for developers",
5
5
  "type": "module",
6
6
  "license": "MIT",