@posthog/wizard 1.20.0 → 1.21.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.
Files changed (20) hide show
  1. package/dist/src/steps/add-mcp-server-to-clients/MCPClient.d.ts +2 -7
  2. package/dist/src/steps/add-mcp-server-to-clients/MCPClient.js.map +1 -1
  3. package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.d.ts +33 -7
  4. package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.js +2 -47
  5. package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.js.map +1 -1
  6. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +33 -6
  7. package/dist/src/steps/add-mcp-server-to-clients/clients/codex.d.ts +33 -6
  8. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.d.ts +35 -7
  9. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +4 -1
  10. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js.map +1 -1
  11. package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.d.ts +47 -7
  12. package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.js +25 -5
  13. package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.js.map +1 -1
  14. package/dist/src/steps/add-mcp-server-to-clients/clients/zed.d.ts +47 -16
  15. package/dist/src/steps/add-mcp-server-to-clients/clients/zed.js +22 -11
  16. package/dist/src/steps/add-mcp-server-to-clients/clients/zed.js.map +1 -1
  17. package/dist/src/steps/add-mcp-server-to-clients/defaults.d.ts +40 -6
  18. package/dist/src/steps/add-mcp-server-to-clients/defaults.js +29 -8
  19. package/dist/src/steps/add-mcp-server-to-clients/defaults.js.map +1 -1
  20. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ export type MCPServerConfig = Record<string, unknown>;
1
2
  export declare abstract class MCPClient {
2
3
  name: string;
3
4
  abstract getConfigPath(): Promise<string>;
@@ -15,13 +16,7 @@ export declare abstract class DefaultMCPClient extends MCPClient {
15
16
  name: string;
16
17
  constructor();
17
18
  getServerPropertyName(): string;
18
- getServerConfig(apiKey: string, type: 'sse' | 'streamable-http', selectedFeatures?: string[], local?: boolean): {
19
- command: string;
20
- args: string[];
21
- env: {
22
- POSTHOG_AUTH_HEADER: string;
23
- };
24
- };
19
+ getServerConfig(apiKey: string, type: 'sse' | 'streamable-http', selectedFeatures?: string[], local?: boolean): MCPServerConfig;
25
20
  isServerInstalled(local?: boolean): Promise<boolean>;
26
21
  addServer(apiKey: string, selectedFeatures?: string[], local?: boolean): Promise<{
27
22
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"MCPClient.js","sourceRoot":"","sources":["../../../../src/steps/add-mcp-server-to-clients/MCPClient.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\nimport * as jsonc from 'jsonc-parser';\nimport { getDefaultServerConfig } from './defaults';\n\nexport abstract class MCPClient {\n name: string;\n abstract getConfigPath(): Promise<string>;\n abstract getServerPropertyName(): string;\n abstract isServerInstalled(local?: boolean): Promise<boolean>;\n abstract addServer(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }>;\n abstract removeServer(local?: boolean): Promise<{ success: boolean }>;\n abstract isClientSupported(): Promise<boolean>;\n}\n\nexport abstract class DefaultMCPClient extends MCPClient {\n name = 'Default';\n\n constructor() {\n super();\n }\n\n getServerPropertyName(): string {\n return 'mcpServers';\n }\n\n getServerConfig(\n apiKey: string,\n type: 'sse' | 'streamable-http',\n selectedFeatures?: string[],\n local?: boolean,\n ) {\n return getDefaultServerConfig(apiKey, type, selectedFeatures, local);\n }\n\n async isServerInstalled(local?: boolean): Promise<boolean> {\n try {\n const configPath = await this.getConfigPath();\n\n if (!fs.existsSync(configPath)) {\n return false;\n }\n\n const configContent = await fs.promises.readFile(configPath, 'utf8');\n const config = jsonc.parse(configContent) as Record<string, any>;\n const serverPropertyName = this.getServerPropertyName();\n const serverName = local ? 'posthog-local' : 'posthog';\n\n return (\n serverPropertyName in config && serverName in config[serverPropertyName]\n );\n } catch {\n return false;\n }\n }\n\n async addServer(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n return this._addServerType(apiKey, 'sse', selectedFeatures, local);\n }\n\n async _addServerType(\n apiKey: string,\n type: 'sse' | 'streamable-http',\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n try {\n const configPath = await this.getConfigPath();\n const configDir = path.dirname(configPath);\n\n await fs.promises.mkdir(configDir, { recursive: true });\n\n const serverPropertyName = this.getServerPropertyName();\n let configContent = '';\n let existingConfig = {};\n\n if (fs.existsSync(configPath)) {\n configContent = await fs.promises.readFile(configPath, 'utf8');\n existingConfig = jsonc.parse(configContent) || {};\n }\n\n const newServerConfig = this.getServerConfig(\n apiKey,\n type,\n selectedFeatures,\n local,\n );\n const typedConfig = existingConfig as Record<string, any>;\n if (!typedConfig[serverPropertyName]) {\n typedConfig[serverPropertyName] = {};\n }\n const serverName = local ? 'posthog-local' : 'posthog';\n typedConfig[serverPropertyName][serverName] = newServerConfig;\n\n const edits = jsonc.modify(\n configContent,\n [serverPropertyName, serverName],\n newServerConfig,\n {\n formattingOptions: {\n tabSize: 2,\n insertSpaces: true,\n },\n },\n );\n\n const modifiedContent = jsonc.applyEdits(configContent, edits);\n\n await fs.promises.writeFile(configPath, modifiedContent, 'utf8');\n\n return { success: true };\n } catch {\n return { success: false };\n }\n }\n\n async removeServer(local?: boolean): Promise<{ success: boolean }> {\n try {\n const configPath = await this.getConfigPath();\n\n if (!fs.existsSync(configPath)) {\n return { success: false };\n }\n\n const configContent = await fs.promises.readFile(configPath, 'utf8');\n const config = jsonc.parse(configContent) as Record<string, any>;\n const serverPropertyName = this.getServerPropertyName();\n\n const serverName = local ? 'posthog-local' : 'posthog';\n\n if (\n serverPropertyName in config &&\n serverName in config[serverPropertyName]\n ) {\n const edits = jsonc.modify(\n configContent,\n [serverPropertyName, serverName],\n undefined,\n {\n formattingOptions: {\n tabSize: 2,\n insertSpaces: true,\n },\n },\n );\n\n const modifiedContent = jsonc.applyEdits(configContent, edits);\n\n await fs.promises.writeFile(configPath, modifiedContent, 'utf8');\n\n return { success: true };\n }\n } catch {\n //\n }\n\n return { success: false };\n }\n}\n"]}
1
+ {"version":3,"file":"MCPClient.js","sourceRoot":"","sources":["../../../../src/steps/add-mcp-server-to-clients/MCPClient.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\nimport * as jsonc from 'jsonc-parser';\nimport { getDefaultServerConfig } from './defaults';\n\nexport type MCPServerConfig = Record<string, unknown>;\n\nexport abstract class MCPClient {\n name: string;\n abstract getConfigPath(): Promise<string>;\n abstract getServerPropertyName(): string;\n abstract isServerInstalled(local?: boolean): Promise<boolean>;\n abstract addServer(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }>;\n abstract removeServer(local?: boolean): Promise<{ success: boolean }>;\n abstract isClientSupported(): Promise<boolean>;\n}\n\nexport abstract class DefaultMCPClient extends MCPClient {\n name = 'Default';\n\n constructor() {\n super();\n }\n\n getServerPropertyName(): string {\n return 'mcpServers';\n }\n\n getServerConfig(\n apiKey: string,\n type: 'sse' | 'streamable-http',\n selectedFeatures?: string[],\n local?: boolean,\n ): MCPServerConfig {\n return getDefaultServerConfig(apiKey, type, selectedFeatures, local);\n }\n\n async isServerInstalled(local?: boolean): Promise<boolean> {\n try {\n const configPath = await this.getConfigPath();\n\n if (!fs.existsSync(configPath)) {\n return false;\n }\n\n const configContent = await fs.promises.readFile(configPath, 'utf8');\n const config = jsonc.parse(configContent) as Record<string, any>;\n const serverPropertyName = this.getServerPropertyName();\n const serverName = local ? 'posthog-local' : 'posthog';\n\n return (\n serverPropertyName in config && serverName in config[serverPropertyName]\n );\n } catch {\n return false;\n }\n }\n\n async addServer(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n return this._addServerType(apiKey, 'sse', selectedFeatures, local);\n }\n\n async _addServerType(\n apiKey: string,\n type: 'sse' | 'streamable-http',\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n try {\n const configPath = await this.getConfigPath();\n const configDir = path.dirname(configPath);\n\n await fs.promises.mkdir(configDir, { recursive: true });\n\n const serverPropertyName = this.getServerPropertyName();\n let configContent = '';\n let existingConfig = {};\n\n if (fs.existsSync(configPath)) {\n configContent = await fs.promises.readFile(configPath, 'utf8');\n existingConfig = jsonc.parse(configContent) || {};\n }\n\n const newServerConfig = this.getServerConfig(\n apiKey,\n type,\n selectedFeatures,\n local,\n );\n const typedConfig = existingConfig as Record<string, any>;\n if (!typedConfig[serverPropertyName]) {\n typedConfig[serverPropertyName] = {};\n }\n const serverName = local ? 'posthog-local' : 'posthog';\n typedConfig[serverPropertyName][serverName] = newServerConfig;\n\n const edits = jsonc.modify(\n configContent,\n [serverPropertyName, serverName],\n newServerConfig,\n {\n formattingOptions: {\n tabSize: 2,\n insertSpaces: true,\n },\n },\n );\n\n const modifiedContent = jsonc.applyEdits(configContent, edits);\n\n await fs.promises.writeFile(configPath, modifiedContent, 'utf8');\n\n return { success: true };\n } catch {\n return { success: false };\n }\n }\n\n async removeServer(local?: boolean): Promise<{ success: boolean }> {\n try {\n const configPath = await this.getConfigPath();\n\n if (!fs.existsSync(configPath)) {\n return { success: false };\n }\n\n const configContent = await fs.promises.readFile(configPath, 'utf8');\n const config = jsonc.parse(configContent) as Record<string, any>;\n const serverPropertyName = this.getServerPropertyName();\n\n const serverName = local ? 'posthog-local' : 'posthog';\n\n if (\n serverPropertyName in config &&\n serverName in config[serverPropertyName]\n ) {\n const edits = jsonc.modify(\n configContent,\n [serverPropertyName, serverName],\n undefined,\n {\n formattingOptions: {\n tabSize: 2,\n insertSpaces: true,\n },\n },\n );\n\n const modifiedContent = jsonc.applyEdits(configContent, edits);\n\n await fs.promises.writeFile(configPath, modifiedContent, 'utf8');\n\n return { success: true };\n }\n } catch {\n //\n }\n\n return { success: false };\n }\n}\n"]}
@@ -2,7 +2,7 @@ import { DefaultMCPClient } from '../MCPClient';
2
2
  import { DefaultMCPClientConfig } from '../defaults';
3
3
  import { z } from 'zod';
4
4
  export declare const ClaudeCodeMCPConfig: z.ZodObject<{
5
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
5
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
6
6
  command: z.ZodOptional<z.ZodString>;
7
7
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
8
8
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -14,9 +14,18 @@ export declare const ClaudeCodeMCPConfig: z.ZodObject<{
14
14
  command?: string | undefined;
15
15
  args?: string[] | undefined;
16
16
  env?: Record<string, string> | undefined;
17
- }>>;
17
+ }>, z.ZodObject<{
18
+ url: z.ZodString;
19
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ url: string;
22
+ headers?: Record<string, string> | undefined;
23
+ }, {
24
+ url: string;
25
+ headers?: Record<string, string> | undefined;
26
+ }>]>>;
18
27
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
19
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
28
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
20
29
  command: z.ZodOptional<z.ZodString>;
21
30
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
22
31
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -28,9 +37,18 @@ export declare const ClaudeCodeMCPConfig: z.ZodObject<{
28
37
  command?: string | undefined;
29
38
  args?: string[] | undefined;
30
39
  env?: Record<string, string> | undefined;
31
- }>>;
40
+ }>, z.ZodObject<{
41
+ url: z.ZodString;
42
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ url: string;
45
+ headers?: Record<string, string> | undefined;
46
+ }, {
47
+ url: string;
48
+ headers?: Record<string, string> | undefined;
49
+ }>]>>;
32
50
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
33
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
51
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
34
52
  command: z.ZodOptional<z.ZodString>;
35
53
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
36
54
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -42,7 +60,16 @@ export declare const ClaudeCodeMCPConfig: z.ZodObject<{
42
60
  command?: string | undefined;
43
61
  args?: string[] | undefined;
44
62
  env?: Record<string, string> | undefined;
45
- }>>;
63
+ }>, z.ZodObject<{
64
+ url: z.ZodString;
65
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
66
+ }, "strip", z.ZodTypeAny, {
67
+ url: string;
68
+ headers?: Record<string, string> | undefined;
69
+ }, {
70
+ url: string;
71
+ headers?: Record<string, string> | undefined;
72
+ }>]>>;
46
73
  }, z.ZodTypeAny, "passthrough">>;
47
74
  export type ClaudeCodeMCPConfig = z.infer<typeof DefaultMCPClientConfig>;
48
75
  export declare class ClaudeCodeMCPClient extends DefaultMCPClient {
@@ -56,7 +83,6 @@ export declare class ClaudeCodeMCPClient extends DefaultMCPClient {
56
83
  addServer(apiKey: string, selectedFeatures?: string[], local?: boolean): Promise<{
57
84
  success: boolean;
58
85
  }>;
59
- private buildClaudeCodeConfig;
60
86
  removeServer(local?: boolean): Promise<{
61
87
  success: boolean;
62
88
  }>;
@@ -129,11 +129,9 @@ class ClaudeCodeMCPClient extends MCPClient_1.DefaultMCPClient {
129
129
  if (!claudeBinary) {
130
130
  return Promise.resolve({ success: false });
131
131
  }
132
- // Build Claude Code-specific config
133
- // Based on getDefaultServerConfig() but with fixes for Claude Code bugs
134
- const config = this.buildClaudeCodeConfig(apiKey, selectedFeatures, local);
135
132
  const serverName = local ? 'posthog-local' : 'posthog';
136
- const command = `${claudeBinary} mcp add-json ${serverName} -s user '${JSON.stringify(config)}'`;
133
+ const url = (0, defaults_1.buildMCPUrl)('streamable-http', selectedFeatures, local);
134
+ const command = `${claudeBinary} mcp add --transport http ${serverName} ${url} --header "Authorization: Bearer ${apiKey}" -s user`;
137
135
  try {
138
136
  (0, child_process_1.execSync)(command);
139
137
  }
@@ -143,49 +141,6 @@ class ClaudeCodeMCPClient extends MCPClient_1.DefaultMCPClient {
143
141
  }
144
142
  return Promise.resolve({ success: true });
145
143
  }
146
- buildClaudeCodeConfig(apiKey, selectedFeatures, local) {
147
- // Replicate getDefaultServerConfig() logic but with Claude Code fixes:
148
- // 1. Add https:// protocol (mcp-remote requires valid URLs)
149
- // 2. Embed token directly in Authorization header (env var expansion broken)
150
- //
151
- // Claude Code bugs:
152
- // - https://github.com/anthropics/claude-code/issues/6204
153
- // - https://github.com/anthropics/claude-code/issues/9427
154
- // - https://github.com/anthropics/claude-code/issues/10955
155
- const protocol = local ? 'http://' : 'https://';
156
- const host = local ? 'localhost:8787' : 'mcp.posthog.com';
157
- const baseUrl = `${protocol}${host}/sse`;
158
- const ALL_FEATURE_VALUES = [
159
- 'dashboards',
160
- 'insights',
161
- 'experiments',
162
- 'llm-analytics',
163
- 'error-tracking',
164
- 'flags',
165
- 'workspace',
166
- 'docs',
167
- ];
168
- const isAllFeaturesSelected = selectedFeatures &&
169
- selectedFeatures.length === ALL_FEATURE_VALUES.length &&
170
- ALL_FEATURE_VALUES.every((feature) => selectedFeatures.includes(feature));
171
- const urlWithFeatures = selectedFeatures && selectedFeatures.length > 0 && !isAllFeaturesSelected
172
- ? `${baseUrl}?features=${selectedFeatures.join(',')}`
173
- : baseUrl;
174
- return {
175
- command: 'npx',
176
- args: [
177
- '-y',
178
- 'mcp-remote@latest',
179
- urlWithFeatures,
180
- '--header',
181
- `Authorization:Bearer ${apiKey}`, // Embed token directly (not ${VAR})
182
- ],
183
- // Keep env block for backward compatibility if bugs get fixed
184
- env: {
185
- POSTHOG_AUTH_HEADER: `Bearer ${apiKey}`,
186
- },
187
- };
188
- }
189
144
  removeServer(local) {
190
145
  const claudeBinary = this.findClaudeBinary();
191
146
  if (!claudeBinary) {
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../../../src/steps/add-mcp-server-to-clients/clients/claude-code.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultMCPClient } from '../MCPClient';\nimport { DefaultMCPClientConfig } from '../defaults';\nimport { z } from 'zod';\nimport { execSync } from 'child_process';\nimport { analytics } from '../../../utils/analytics';\nimport { debug } from '../../../utils/debug';\nimport * as os from 'os';\nimport * as path from 'path';\nimport * as fs from 'fs';\n\nexport const ClaudeCodeMCPConfig = DefaultMCPClientConfig;\n\nexport type ClaudeCodeMCPConfig = z.infer<typeof DefaultMCPClientConfig>;\n\nexport class ClaudeCodeMCPClient extends DefaultMCPClient {\n name = 'Claude Code';\n private claudeBinaryPath: string | null = null;\n\n constructor() {\n super();\n }\n\n private findClaudeBinary(): string | null {\n if (this.claudeBinaryPath) {\n return this.claudeBinaryPath;\n }\n\n // Common installation paths for Claude Code CLI\n const possiblePaths = [\n path.join(os.homedir(), '.claude', 'local', 'claude'),\n '/usr/local/bin/claude',\n '/opt/homebrew/bin/claude',\n ];\n\n for (const claudePath of possiblePaths) {\n if (fs.existsSync(claudePath)) {\n debug(` Found claude binary at: ${claudePath}`);\n this.claudeBinaryPath = claudePath;\n return claudePath;\n }\n }\n\n // Try PATH as fallback\n try {\n execSync('command -v claude', { stdio: 'pipe' });\n debug(' Found claude in PATH');\n this.claudeBinaryPath = 'claude';\n return 'claude';\n } catch {\n // Not in PATH\n }\n\n return null;\n }\n\n isClientSupported(): Promise<boolean> {\n try {\n debug(' Checking for Claude Code...');\n const claudeBinary = this.findClaudeBinary();\n\n if (!claudeBinary) {\n debug(' Claude Code not found. Installation paths checked:');\n debug(` - ${path.join(os.homedir(), '.claude', 'local', 'claude')}`);\n debug(` - /usr/local/bin/claude`);\n debug(` - /opt/homebrew/bin/claude`);\n debug(` - PATH`);\n return Promise.resolve(false);\n }\n\n const output = execSync(`${claudeBinary} --version`, { stdio: 'pipe' });\n const version = output.toString().trim();\n debug(` Claude Code detected: ${version}`);\n return Promise.resolve(true);\n } catch (error) {\n debug(\n ` Claude Code check failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n return Promise.resolve(false);\n }\n }\n\n isServerInstalled(local?: boolean): Promise<boolean> {\n try {\n const claudeBinary = this.findClaudeBinary();\n if (!claudeBinary) {\n return Promise.resolve(false);\n }\n\n // check if specific server name exists in output\n const output = execSync(`${claudeBinary} mcp list`, {\n stdio: 'pipe',\n });\n\n const outputStr = output.toString();\n const serverName = local ? 'posthog-local' : 'posthog';\n\n if (outputStr.includes(serverName)) {\n return Promise.resolve(true);\n }\n } catch {\n //\n }\n\n return Promise.resolve(false);\n }\n\n getConfigPath(): Promise<string> {\n throw new Error('Not implemented');\n }\n\n addServer(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n const claudeBinary = this.findClaudeBinary();\n if (!claudeBinary) {\n return Promise.resolve({ success: false });\n }\n\n // Build Claude Code-specific config\n // Based on getDefaultServerConfig() but with fixes for Claude Code bugs\n const config = this.buildClaudeCodeConfig(apiKey, selectedFeatures, local);\n const serverName = local ? 'posthog-local' : 'posthog';\n\n const command = `${claudeBinary} mcp add-json ${serverName} -s user '${JSON.stringify(\n config,\n )}'`;\n\n try {\n execSync(command);\n } catch (error) {\n analytics.captureException(\n new Error(\n `Failed to add server to Claude Code: ${\n error instanceof Error ? error.message : String(error)\n }`,\n ),\n );\n return Promise.resolve({ success: false });\n }\n\n return Promise.resolve({ success: true });\n }\n\n private buildClaudeCodeConfig(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n ) {\n // Replicate getDefaultServerConfig() logic but with Claude Code fixes:\n // 1. Add https:// protocol (mcp-remote requires valid URLs)\n // 2. Embed token directly in Authorization header (env var expansion broken)\n //\n // Claude Code bugs:\n // - https://github.com/anthropics/claude-code/issues/6204\n // - https://github.com/anthropics/claude-code/issues/9427\n // - https://github.com/anthropics/claude-code/issues/10955\n\n const protocol = local ? 'http://' : 'https://';\n const host = local ? 'localhost:8787' : 'mcp.posthog.com';\n const baseUrl = `${protocol}${host}/sse`;\n\n const ALL_FEATURE_VALUES = [\n 'dashboards',\n 'insights',\n 'experiments',\n 'llm-analytics',\n 'error-tracking',\n 'flags',\n 'workspace',\n 'docs',\n ];\n\n const isAllFeaturesSelected =\n selectedFeatures &&\n selectedFeatures.length === ALL_FEATURE_VALUES.length &&\n ALL_FEATURE_VALUES.every((feature) => selectedFeatures.includes(feature));\n\n const urlWithFeatures =\n selectedFeatures && selectedFeatures.length > 0 && !isAllFeaturesSelected\n ? `${baseUrl}?features=${selectedFeatures.join(',')}`\n : baseUrl;\n\n return {\n command: 'npx',\n args: [\n '-y',\n 'mcp-remote@latest',\n urlWithFeatures,\n '--header',\n `Authorization:Bearer ${apiKey}`, // Embed token directly (not ${VAR})\n ],\n // Keep env block for backward compatibility if bugs get fixed\n env: {\n POSTHOG_AUTH_HEADER: `Bearer ${apiKey}`,\n },\n };\n }\n\n removeServer(local?: boolean): Promise<{ success: boolean }> {\n const claudeBinary = this.findClaudeBinary();\n if (!claudeBinary) {\n return Promise.resolve({ success: false });\n }\n\n const serverName = local ? 'posthog-local' : 'posthog';\n const command = `${claudeBinary} mcp remove --scope user ${serverName}`;\n\n try {\n execSync(command);\n } catch (error) {\n analytics.captureException(\n new Error(\n `Failed to remove server from Claude Code: ${\n error instanceof Error ? error.message : String(error)\n }`,\n ),\n );\n return Promise.resolve({ success: false });\n }\n\n return Promise.resolve({ success: true });\n }\n}\n"]}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../../../src/steps/add-mcp-server-to-clients/clients/claude-code.ts"],"names":[],"mappings":"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","sourcesContent":["import { DefaultMCPClient } from '../MCPClient';\nimport { buildMCPUrl, DefaultMCPClientConfig } from '../defaults';\nimport { z } from 'zod';\nimport { execSync } from 'child_process';\nimport { analytics } from '../../../utils/analytics';\nimport { debug } from '../../../utils/debug';\nimport * as os from 'os';\nimport * as path from 'path';\nimport * as fs from 'fs';\n\nexport const ClaudeCodeMCPConfig = DefaultMCPClientConfig;\n\nexport type ClaudeCodeMCPConfig = z.infer<typeof DefaultMCPClientConfig>;\n\nexport class ClaudeCodeMCPClient extends DefaultMCPClient {\n name = 'Claude Code';\n private claudeBinaryPath: string | null = null;\n\n constructor() {\n super();\n }\n\n private findClaudeBinary(): string | null {\n if (this.claudeBinaryPath) {\n return this.claudeBinaryPath;\n }\n\n // Common installation paths for Claude Code CLI\n const possiblePaths = [\n path.join(os.homedir(), '.claude', 'local', 'claude'),\n '/usr/local/bin/claude',\n '/opt/homebrew/bin/claude',\n ];\n\n for (const claudePath of possiblePaths) {\n if (fs.existsSync(claudePath)) {\n debug(` Found claude binary at: ${claudePath}`);\n this.claudeBinaryPath = claudePath;\n return claudePath;\n }\n }\n\n // Try PATH as fallback\n try {\n execSync('command -v claude', { stdio: 'pipe' });\n debug(' Found claude in PATH');\n this.claudeBinaryPath = 'claude';\n return 'claude';\n } catch {\n // Not in PATH\n }\n\n return null;\n }\n\n isClientSupported(): Promise<boolean> {\n try {\n debug(' Checking for Claude Code...');\n const claudeBinary = this.findClaudeBinary();\n\n if (!claudeBinary) {\n debug(' Claude Code not found. Installation paths checked:');\n debug(` - ${path.join(os.homedir(), '.claude', 'local', 'claude')}`);\n debug(` - /usr/local/bin/claude`);\n debug(` - /opt/homebrew/bin/claude`);\n debug(` - PATH`);\n return Promise.resolve(false);\n }\n\n const output = execSync(`${claudeBinary} --version`, { stdio: 'pipe' });\n const version = output.toString().trim();\n debug(` Claude Code detected: ${version}`);\n return Promise.resolve(true);\n } catch (error) {\n debug(\n ` Claude Code check failed: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n return Promise.resolve(false);\n }\n }\n\n isServerInstalled(local?: boolean): Promise<boolean> {\n try {\n const claudeBinary = this.findClaudeBinary();\n if (!claudeBinary) {\n return Promise.resolve(false);\n }\n\n // check if specific server name exists in output\n const output = execSync(`${claudeBinary} mcp list`, {\n stdio: 'pipe',\n });\n\n const outputStr = output.toString();\n const serverName = local ? 'posthog-local' : 'posthog';\n\n if (outputStr.includes(serverName)) {\n return Promise.resolve(true);\n }\n } catch {\n //\n }\n\n return Promise.resolve(false);\n }\n\n getConfigPath(): Promise<string> {\n throw new Error('Not implemented');\n }\n\n addServer(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n const claudeBinary = this.findClaudeBinary();\n if (!claudeBinary) {\n return Promise.resolve({ success: false });\n }\n\n const serverName = local ? 'posthog-local' : 'posthog';\n const url = buildMCPUrl('streamable-http', selectedFeatures, local);\n\n const command = `${claudeBinary} mcp add --transport http ${serverName} ${url} --header \"Authorization: Bearer ${apiKey}\" -s user`;\n\n try {\n execSync(command);\n } catch (error) {\n analytics.captureException(\n new Error(\n `Failed to add server to Claude Code: ${\n error instanceof Error ? error.message : String(error)\n }`,\n ),\n );\n return Promise.resolve({ success: false });\n }\n\n return Promise.resolve({ success: true });\n }\n\n removeServer(local?: boolean): Promise<{ success: boolean }> {\n const claudeBinary = this.findClaudeBinary();\n if (!claudeBinary) {\n return Promise.resolve({ success: false });\n }\n\n const serverName = local ? 'posthog-local' : 'posthog';\n const command = `${claudeBinary} mcp remove --scope user ${serverName}`;\n\n try {\n execSync(command);\n } catch (error) {\n analytics.captureException(\n new Error(\n `Failed to remove server from Claude Code: ${\n error instanceof Error ? error.message : String(error)\n }`,\n ),\n );\n return Promise.resolve({ success: false });\n }\n\n return Promise.resolve({ success: true });\n }\n}\n"]}
@@ -2,7 +2,7 @@ import { DefaultMCPClient } from '../MCPClient';
2
2
  import { DefaultMCPClientConfig } from '../defaults';
3
3
  import { z } from 'zod';
4
4
  export declare const ClaudeMCPConfig: z.ZodObject<{
5
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
5
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
6
6
  command: z.ZodOptional<z.ZodString>;
7
7
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
8
8
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -14,9 +14,18 @@ export declare const ClaudeMCPConfig: z.ZodObject<{
14
14
  command?: string | undefined;
15
15
  args?: string[] | undefined;
16
16
  env?: Record<string, string> | undefined;
17
- }>>;
17
+ }>, z.ZodObject<{
18
+ url: z.ZodString;
19
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ url: string;
22
+ headers?: Record<string, string> | undefined;
23
+ }, {
24
+ url: string;
25
+ headers?: Record<string, string> | undefined;
26
+ }>]>>;
18
27
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
19
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
28
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
20
29
  command: z.ZodOptional<z.ZodString>;
21
30
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
22
31
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -28,9 +37,18 @@ export declare const ClaudeMCPConfig: z.ZodObject<{
28
37
  command?: string | undefined;
29
38
  args?: string[] | undefined;
30
39
  env?: Record<string, string> | undefined;
31
- }>>;
40
+ }>, z.ZodObject<{
41
+ url: z.ZodString;
42
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ url: string;
45
+ headers?: Record<string, string> | undefined;
46
+ }, {
47
+ url: string;
48
+ headers?: Record<string, string> | undefined;
49
+ }>]>>;
32
50
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
33
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
51
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
34
52
  command: z.ZodOptional<z.ZodString>;
35
53
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
36
54
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -42,7 +60,16 @@ export declare const ClaudeMCPConfig: z.ZodObject<{
42
60
  command?: string | undefined;
43
61
  args?: string[] | undefined;
44
62
  env?: Record<string, string> | undefined;
45
- }>>;
63
+ }>, z.ZodObject<{
64
+ url: z.ZodString;
65
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
66
+ }, "strip", z.ZodTypeAny, {
67
+ url: string;
68
+ headers?: Record<string, string> | undefined;
69
+ }, {
70
+ url: string;
71
+ headers?: Record<string, string> | undefined;
72
+ }>]>>;
46
73
  }, z.ZodTypeAny, "passthrough">>;
47
74
  export type ClaudeMCPConfig = z.infer<typeof DefaultMCPClientConfig>;
48
75
  export declare class ClaudeMCPClient extends DefaultMCPClient {
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  import { DefaultMCPClient } from '../MCPClient';
3
3
  import { DefaultMCPClientConfig } from '../defaults';
4
4
  export declare const CodexMCPConfig: z.ZodObject<{
5
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
5
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
6
6
  command: z.ZodOptional<z.ZodString>;
7
7
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
8
8
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -14,9 +14,18 @@ export declare const CodexMCPConfig: z.ZodObject<{
14
14
  command?: string | undefined;
15
15
  args?: string[] | undefined;
16
16
  env?: Record<string, string> | undefined;
17
- }>>;
17
+ }>, z.ZodObject<{
18
+ url: z.ZodString;
19
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ url: string;
22
+ headers?: Record<string, string> | undefined;
23
+ }, {
24
+ url: string;
25
+ headers?: Record<string, string> | undefined;
26
+ }>]>>;
18
27
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
19
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
28
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
20
29
  command: z.ZodOptional<z.ZodString>;
21
30
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
22
31
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -28,9 +37,18 @@ export declare const CodexMCPConfig: z.ZodObject<{
28
37
  command?: string | undefined;
29
38
  args?: string[] | undefined;
30
39
  env?: Record<string, string> | undefined;
31
- }>>;
40
+ }>, z.ZodObject<{
41
+ url: z.ZodString;
42
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ url: string;
45
+ headers?: Record<string, string> | undefined;
46
+ }, {
47
+ url: string;
48
+ headers?: Record<string, string> | undefined;
49
+ }>]>>;
32
50
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
33
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
51
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
34
52
  command: z.ZodOptional<z.ZodString>;
35
53
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
36
54
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -42,7 +60,16 @@ export declare const CodexMCPConfig: z.ZodObject<{
42
60
  command?: string | undefined;
43
61
  args?: string[] | undefined;
44
62
  env?: Record<string, string> | undefined;
45
- }>>;
63
+ }>, z.ZodObject<{
64
+ url: z.ZodString;
65
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
66
+ }, "strip", z.ZodTypeAny, {
67
+ url: string;
68
+ headers?: Record<string, string> | undefined;
69
+ }, {
70
+ url: string;
71
+ headers?: Record<string, string> | undefined;
72
+ }>]>>;
46
73
  }, z.ZodTypeAny, "passthrough">>;
47
74
  export type CodexMCPConfig = z.infer<typeof DefaultMCPClientConfig>;
48
75
  export declare class CodexMCPClient extends DefaultMCPClient {
@@ -1,8 +1,8 @@
1
- import { DefaultMCPClient } from '../MCPClient';
1
+ import { DefaultMCPClient, MCPServerConfig } from '../MCPClient';
2
2
  import { DefaultMCPClientConfig } from '../defaults';
3
3
  import { z } from 'zod';
4
4
  export declare const CursorMCPConfig: z.ZodObject<{
5
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
5
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
6
6
  command: z.ZodOptional<z.ZodString>;
7
7
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
8
8
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -14,9 +14,18 @@ export declare const CursorMCPConfig: z.ZodObject<{
14
14
  command?: string | undefined;
15
15
  args?: string[] | undefined;
16
16
  env?: Record<string, string> | undefined;
17
- }>>;
17
+ }>, z.ZodObject<{
18
+ url: z.ZodString;
19
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ url: string;
22
+ headers?: Record<string, string> | undefined;
23
+ }, {
24
+ url: string;
25
+ headers?: Record<string, string> | undefined;
26
+ }>]>>;
18
27
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
19
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
28
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
20
29
  command: z.ZodOptional<z.ZodString>;
21
30
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
22
31
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -28,9 +37,18 @@ export declare const CursorMCPConfig: z.ZodObject<{
28
37
  command?: string | undefined;
29
38
  args?: string[] | undefined;
30
39
  env?: Record<string, string> | undefined;
31
- }>>;
40
+ }>, z.ZodObject<{
41
+ url: z.ZodString;
42
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ url: string;
45
+ headers?: Record<string, string> | undefined;
46
+ }, {
47
+ url: string;
48
+ headers?: Record<string, string> | undefined;
49
+ }>]>>;
32
50
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
33
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
51
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
34
52
  command: z.ZodOptional<z.ZodString>;
35
53
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
36
54
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -42,7 +60,16 @@ export declare const CursorMCPConfig: z.ZodObject<{
42
60
  command?: string | undefined;
43
61
  args?: string[] | undefined;
44
62
  env?: Record<string, string> | undefined;
45
- }>>;
63
+ }>, z.ZodObject<{
64
+ url: z.ZodString;
65
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
66
+ }, "strip", z.ZodTypeAny, {
67
+ url: string;
68
+ headers?: Record<string, string> | undefined;
69
+ }, {
70
+ url: string;
71
+ headers?: Record<string, string> | undefined;
72
+ }>]>>;
46
73
  }, z.ZodTypeAny, "passthrough">>;
47
74
  export type CursorMCPConfig = z.infer<typeof DefaultMCPClientConfig>;
48
75
  export declare class CursorMCPClient extends DefaultMCPClient {
@@ -50,6 +77,7 @@ export declare class CursorMCPClient extends DefaultMCPClient {
50
77
  constructor();
51
78
  isClientSupported(): Promise<boolean>;
52
79
  getConfigPath(): Promise<string>;
80
+ getServerConfig(apiKey: string, type: 'sse' | 'streamable-http', selectedFeatures?: string[], local?: boolean): MCPServerConfig;
53
81
  addServer(apiKey: string, selectedFeatures?: string[], local?: boolean): Promise<{
54
82
  success: boolean;
55
83
  }>;
@@ -50,8 +50,11 @@ class CursorMCPClient extends MCPClient_1.DefaultMCPClient {
50
50
  async getConfigPath() {
51
51
  return Promise.resolve(path.join(os.homedir(), '.cursor', 'mcp.json'));
52
52
  }
53
+ getServerConfig(apiKey, type, selectedFeatures, local) {
54
+ return (0, defaults_1.getNativeHTTPServerConfig)(apiKey, type, selectedFeatures, local);
55
+ }
53
56
  async addServer(apiKey, selectedFeatures, local) {
54
- return this._addServerType(apiKey, 'sse', selectedFeatures, local);
57
+ return this._addServerType(apiKey, 'streamable-http', selectedFeatures, local);
55
58
  }
56
59
  }
57
60
  exports.CursorMCPClient = CursorMCPClient;
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../../../src/steps/add-mcp-server-to-clients/clients/cursor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAgD;AAChD,2CAA6B;AAC7B,uCAAyB;AACzB,0CAAqD;AAGxC,QAAA,eAAe,GAAG,iCAAsB,CAAC;AAItD,MAAa,eAAgB,SAAQ,4BAAgB;IACnD,IAAI,GAAG,QAAQ,CAAC;IAEhB;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,OAAO,OAAO,CAAC,OAAO,CACpB,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAC9D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,SAAS,CACb,MAAc,EACd,gBAA2B,EAC3B,KAAe;QAEf,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;CACF;AAxBD,0CAwBC","sourcesContent":["import { DefaultMCPClient } from '../MCPClient';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { DefaultMCPClientConfig } from '../defaults';\nimport { z } from 'zod';\n\nexport const CursorMCPConfig = DefaultMCPClientConfig;\n\nexport type CursorMCPConfig = z.infer<typeof DefaultMCPClientConfig>;\n\nexport class CursorMCPClient extends DefaultMCPClient {\n name = 'Cursor';\n\n constructor() {\n super();\n }\n\n async isClientSupported(): Promise<boolean> {\n return Promise.resolve(\n process.platform === 'darwin' || process.platform === 'win32',\n );\n }\n\n async getConfigPath(): Promise<string> {\n return Promise.resolve(path.join(os.homedir(), '.cursor', 'mcp.json'));\n }\n\n async addServer(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n return this._addServerType(apiKey, 'sse', selectedFeatures, local);\n }\n}\n"]}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../../../src/steps/add-mcp-server-to-clients/clients/cursor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAiE;AACjE,2CAA6B;AAC7B,uCAAyB;AACzB,0CAAgF;AAGnE,QAAA,eAAe,GAAG,iCAAsB,CAAC;AAItD,MAAa,eAAgB,SAAQ,4BAAgB;IACnD,IAAI,GAAG,QAAQ,CAAC;IAEhB;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,OAAO,OAAO,CAAC,OAAO,CACpB,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAC9D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,eAAe,CACb,MAAc,EACd,IAA+B,EAC/B,gBAA2B,EAC3B,KAAe;QAEf,OAAO,IAAA,oCAAyB,EAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,SAAS,CACb,MAAc,EACd,gBAA2B,EAC3B,KAAe;QAEf,OAAO,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,CACN,CAAC;IACJ,CAAC;CACF;AAtCD,0CAsCC","sourcesContent":["import { DefaultMCPClient, MCPServerConfig } from '../MCPClient';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { DefaultMCPClientConfig, getNativeHTTPServerConfig } from '../defaults';\nimport { z } from 'zod';\n\nexport const CursorMCPConfig = DefaultMCPClientConfig;\n\nexport type CursorMCPConfig = z.infer<typeof DefaultMCPClientConfig>;\n\nexport class CursorMCPClient extends DefaultMCPClient {\n name = 'Cursor';\n\n constructor() {\n super();\n }\n\n async isClientSupported(): Promise<boolean> {\n return Promise.resolve(\n process.platform === 'darwin' || process.platform === 'win32',\n );\n }\n\n async getConfigPath(): Promise<string> {\n return Promise.resolve(path.join(os.homedir(), '.cursor', 'mcp.json'));\n }\n\n getServerConfig(\n apiKey: string,\n type: 'sse' | 'streamable-http',\n selectedFeatures?: string[],\n local?: boolean,\n ): MCPServerConfig {\n return getNativeHTTPServerConfig(apiKey, type, selectedFeatures, local);\n }\n\n async addServer(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n return this._addServerType(\n apiKey,\n 'streamable-http',\n selectedFeatures,\n local,\n );\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import z from 'zod';
2
- import { DefaultMCPClient } from '../MCPClient';
2
+ import { DefaultMCPClient, MCPServerConfig } from '../MCPClient';
3
3
  export declare const VisualStudioCodeMCPConfig: z.ZodObject<{
4
- servers: z.ZodRecord<z.ZodString, z.ZodObject<{
4
+ servers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
5
5
  command: z.ZodOptional<z.ZodString>;
6
6
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
7
7
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -13,9 +13,21 @@ export declare const VisualStudioCodeMCPConfig: z.ZodObject<{
13
13
  command?: string | undefined;
14
14
  args?: string[] | undefined;
15
15
  env?: Record<string, string> | undefined;
16
- }>>;
16
+ }>, z.ZodObject<{
17
+ type: z.ZodEnum<["http", "sse"]>;
18
+ url: z.ZodString;
19
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ type: "http" | "sse";
22
+ url: string;
23
+ headers?: Record<string, string> | undefined;
24
+ }, {
25
+ type: "http" | "sse";
26
+ url: string;
27
+ headers?: Record<string, string> | undefined;
28
+ }>]>>;
17
29
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
18
- servers: z.ZodRecord<z.ZodString, z.ZodObject<{
30
+ servers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
19
31
  command: z.ZodOptional<z.ZodString>;
20
32
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
21
33
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -27,9 +39,21 @@ export declare const VisualStudioCodeMCPConfig: z.ZodObject<{
27
39
  command?: string | undefined;
28
40
  args?: string[] | undefined;
29
41
  env?: Record<string, string> | undefined;
30
- }>>;
42
+ }>, z.ZodObject<{
43
+ type: z.ZodEnum<["http", "sse"]>;
44
+ url: z.ZodString;
45
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
46
+ }, "strip", z.ZodTypeAny, {
47
+ type: "http" | "sse";
48
+ url: string;
49
+ headers?: Record<string, string> | undefined;
50
+ }, {
51
+ type: "http" | "sse";
52
+ url: string;
53
+ headers?: Record<string, string> | undefined;
54
+ }>]>>;
31
55
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
32
- servers: z.ZodRecord<z.ZodString, z.ZodObject<{
56
+ servers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
33
57
  command: z.ZodOptional<z.ZodString>;
34
58
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
35
59
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -41,7 +65,19 @@ export declare const VisualStudioCodeMCPConfig: z.ZodObject<{
41
65
  command?: string | undefined;
42
66
  args?: string[] | undefined;
43
67
  env?: Record<string, string> | undefined;
44
- }>>;
68
+ }>, z.ZodObject<{
69
+ type: z.ZodEnum<["http", "sse"]>;
70
+ url: z.ZodString;
71
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
72
+ }, "strip", z.ZodTypeAny, {
73
+ type: "http" | "sse";
74
+ url: string;
75
+ headers?: Record<string, string> | undefined;
76
+ }, {
77
+ type: "http" | "sse";
78
+ url: string;
79
+ headers?: Record<string, string> | undefined;
80
+ }>]>>;
45
81
  }, z.ZodTypeAny, "passthrough">>;
46
82
  export type VisualStudioCodeMCPConfig = z.infer<typeof VisualStudioCodeMCPConfig>;
47
83
  export declare class VisualStudioCodeClient extends DefaultMCPClient {
@@ -49,4 +85,8 @@ export declare class VisualStudioCodeClient extends DefaultMCPClient {
49
85
  getServerPropertyName(): string;
50
86
  isClientSupported(): Promise<boolean>;
51
87
  getConfigPath(): Promise<string>;
88
+ getServerConfig(apiKey: string, type: 'sse' | 'streamable-http', selectedFeatures?: string[], local?: boolean): MCPServerConfig;
89
+ addServer(apiKey: string, selectedFeatures?: string[], local?: boolean): Promise<{
90
+ success: boolean;
91
+ }>;
52
92
  }
@@ -41,13 +41,21 @@ const zod_1 = __importDefault(require("zod"));
41
41
  const path = __importStar(require("path"));
42
42
  const os = __importStar(require("os"));
43
43
  const MCPClient_1 = require("../MCPClient");
44
+ const defaults_1 = require("../defaults");
44
45
  exports.VisualStudioCodeMCPConfig = zod_1.default
45
46
  .object({
46
- servers: zod_1.default.record(zod_1.default.string(), zod_1.default.object({
47
- command: zod_1.default.string().optional(),
48
- args: zod_1.default.array(zod_1.default.string()).optional(),
49
- env: zod_1.default.record(zod_1.default.string(), zod_1.default.string()).optional(),
50
- })),
47
+ servers: zod_1.default.record(zod_1.default.string(), zod_1.default.union([
48
+ zod_1.default.object({
49
+ command: zod_1.default.string().optional(),
50
+ args: zod_1.default.array(zod_1.default.string()).optional(),
51
+ env: zod_1.default.record(zod_1.default.string(), zod_1.default.string()).optional(),
52
+ }),
53
+ zod_1.default.object({
54
+ type: zod_1.default.enum(['http', 'sse']),
55
+ url: zod_1.default.string(),
56
+ headers: zod_1.default.record(zod_1.default.string(), zod_1.default.string()).optional(),
57
+ }),
58
+ ])),
51
59
  })
52
60
  .passthrough();
53
61
  class VisualStudioCodeClient extends MCPClient_1.DefaultMCPClient {
@@ -76,6 +84,18 @@ class VisualStudioCodeClient extends MCPClient_1.DefaultMCPClient {
76
84
  }
77
85
  throw new Error(`Unsupported platform: ${process.platform}`);
78
86
  }
87
+ getServerConfig(apiKey, type, selectedFeatures, local) {
88
+ return {
89
+ type: 'http',
90
+ url: (0, defaults_1.buildMCPUrl)(type, selectedFeatures, local),
91
+ headers: {
92
+ Authorization: `Bearer ${apiKey}`,
93
+ },
94
+ };
95
+ }
96
+ async addServer(apiKey, selectedFeatures, local) {
97
+ return this._addServerType(apiKey, 'streamable-http', selectedFeatures, local);
98
+ }
79
99
  }
80
100
  exports.VisualStudioCodeClient = VisualStudioCodeClient;
81
101
  //# sourceMappingURL=visual-studio-code.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"visual-studio-code.js","sourceRoot":"","sources":["../../../../../src/steps/add-mcp-server-to-clients/clients/visual-studio-code.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAoB;AACpB,2CAA6B;AAC7B,uCAAyB;AACzB,4CAAgD;AAEnC,QAAA,yBAAyB,GAAG,aAAC;KACvC,MAAM,CAAC;IACN,OAAO,EAAE,aAAC,CAAC,MAAM,CACf,aAAC,CAAC,MAAM,EAAE,EACV,aAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,IAAI,EAAE,aAAC,CAAC,KAAK,CAAC,aAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACpC,GAAG,EAAE,aAAC,CAAC,MAAM,CAAC,aAAC,CAAC,MAAM,EAAE,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACjD,CAAC,CACH;CACF,CAAC;KACD,WAAW,EAAE,CAAC;AAMjB,MAAa,sBAAuB,SAAQ,4BAAgB;IAC1D,IAAI,GAAG,oBAAoB,CAAC;IAE5B,qBAAqB;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,OAAO,OAAO,CAAC,OAAO,CACpB,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC3B,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,OAAO,CAAC,QAAQ,KAAK,OAAO,CAC/B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;QAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;QAE7C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,IAAI,CACP,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,MAAM,EACN,MAAM,EACN,UAAU,CACX,CACF,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CACjE,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAC1D,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/D,CAAC;CACF;AAhDD,wDAgDC","sourcesContent":["import z from 'zod';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { DefaultMCPClient } from '../MCPClient';\n\nexport const VisualStudioCodeMCPConfig = z\n .object({\n servers: z.record(\n z.string(),\n z.object({\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n }),\n ),\n })\n .passthrough();\n\nexport type VisualStudioCodeMCPConfig = z.infer<\n typeof VisualStudioCodeMCPConfig\n>;\n\nexport class VisualStudioCodeClient extends DefaultMCPClient {\n name = 'Visual Studio Code';\n\n getServerPropertyName(): string {\n return 'servers';\n }\n\n async isClientSupported(): Promise<boolean> {\n return Promise.resolve(\n process.platform === 'darwin' ||\n process.platform === 'win32' ||\n process.platform === 'linux',\n );\n }\n\n async getConfigPath(): Promise<string> {\n const homeDir = os.homedir();\n const isWindows = process.platform === 'win32';\n const isMac = process.platform === 'darwin';\n const isLinux = process.platform === 'linux';\n\n if (isMac) {\n return Promise.resolve(\n path.join(\n homeDir,\n 'Library',\n 'Application Support',\n 'Code',\n 'User',\n 'mcp.json',\n ),\n );\n }\n\n if (isWindows) {\n return Promise.resolve(\n path.join(process.env.APPDATA || '', 'Code', 'User', 'mcp.json'),\n );\n }\n\n if (isLinux) {\n return Promise.resolve(\n path.join(homeDir, '.config', 'Code', 'User', 'mcp.json'),\n );\n }\n\n throw new Error(`Unsupported platform: ${process.platform}`);\n }\n}\n"]}
1
+ {"version":3,"file":"visual-studio-code.js","sourceRoot":"","sources":["../../../../../src/steps/add-mcp-server-to-clients/clients/visual-studio-code.ts"],"names":[],"mappings":"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","sourcesContent":["import z from 'zod';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { DefaultMCPClient, MCPServerConfig } from '../MCPClient';\nimport { buildMCPUrl } from '../defaults';\n\nexport const VisualStudioCodeMCPConfig = z\n .object({\n servers: z.record(\n z.string(),\n z.union([\n z.object({\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n }),\n z.object({\n type: z.enum(['http', 'sse']),\n url: z.string(),\n headers: z.record(z.string(), z.string()).optional(),\n }),\n ]),\n ),\n })\n .passthrough();\n\nexport type VisualStudioCodeMCPConfig = z.infer<\n typeof VisualStudioCodeMCPConfig\n>;\n\nexport class VisualStudioCodeClient extends DefaultMCPClient {\n name = 'Visual Studio Code';\n\n getServerPropertyName(): string {\n return 'servers';\n }\n\n async isClientSupported(): Promise<boolean> {\n return Promise.resolve(\n process.platform === 'darwin' ||\n process.platform === 'win32' ||\n process.platform === 'linux',\n );\n }\n\n async getConfigPath(): Promise<string> {\n const homeDir = os.homedir();\n const isWindows = process.platform === 'win32';\n const isMac = process.platform === 'darwin';\n const isLinux = process.platform === 'linux';\n\n if (isMac) {\n return Promise.resolve(\n path.join(\n homeDir,\n 'Library',\n 'Application Support',\n 'Code',\n 'User',\n 'mcp.json',\n ),\n );\n }\n\n if (isWindows) {\n return Promise.resolve(\n path.join(process.env.APPDATA || '', 'Code', 'User', 'mcp.json'),\n );\n }\n\n if (isLinux) {\n return Promise.resolve(\n path.join(homeDir, '.config', 'Code', 'User', 'mcp.json'),\n );\n }\n\n throw new Error(`Unsupported platform: ${process.platform}`);\n }\n\n getServerConfig(\n apiKey: string,\n type: 'sse' | 'streamable-http',\n selectedFeatures?: string[],\n local?: boolean,\n ): MCPServerConfig {\n return {\n type: 'http',\n url: buildMCPUrl(type, selectedFeatures, local),\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n };\n }\n\n async addServer(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n return this._addServerType(\n apiKey,\n 'streamable-http',\n selectedFeatures,\n local,\n );\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import z from 'zod';
2
- import { DefaultMCPClient } from '../MCPClient';
2
+ import { DefaultMCPClient, MCPServerConfig } from '../MCPClient';
3
3
  export declare const ZedMCPConfig: z.ZodObject<{
4
- context_servers: z.ZodRecord<z.ZodString, z.ZodObject<{
4
+ context_servers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
5
5
  enabled: z.ZodOptional<z.ZodBoolean>;
6
6
  source: z.ZodOptional<z.ZodString>;
7
7
  command: z.ZodOptional<z.ZodString>;
@@ -19,9 +19,21 @@ export declare const ZedMCPConfig: z.ZodObject<{
19
19
  env?: Record<string, string> | undefined;
20
20
  enabled?: boolean | undefined;
21
21
  source?: string | undefined;
22
- }>>;
22
+ }>, z.ZodObject<{
23
+ enabled: z.ZodOptional<z.ZodBoolean>;
24
+ url: z.ZodString;
25
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
26
+ }, "strip", z.ZodTypeAny, {
27
+ url: string;
28
+ headers?: Record<string, string> | undefined;
29
+ enabled?: boolean | undefined;
30
+ }, {
31
+ url: string;
32
+ headers?: Record<string, string> | undefined;
33
+ enabled?: boolean | undefined;
34
+ }>]>>;
23
35
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
24
- context_servers: z.ZodRecord<z.ZodString, z.ZodObject<{
36
+ context_servers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
25
37
  enabled: z.ZodOptional<z.ZodBoolean>;
26
38
  source: z.ZodOptional<z.ZodString>;
27
39
  command: z.ZodOptional<z.ZodString>;
@@ -39,9 +51,21 @@ export declare const ZedMCPConfig: z.ZodObject<{
39
51
  env?: Record<string, string> | undefined;
40
52
  enabled?: boolean | undefined;
41
53
  source?: string | undefined;
42
- }>>;
54
+ }>, z.ZodObject<{
55
+ enabled: z.ZodOptional<z.ZodBoolean>;
56
+ url: z.ZodString;
57
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
58
+ }, "strip", z.ZodTypeAny, {
59
+ url: string;
60
+ headers?: Record<string, string> | undefined;
61
+ enabled?: boolean | undefined;
62
+ }, {
63
+ url: string;
64
+ headers?: Record<string, string> | undefined;
65
+ enabled?: boolean | undefined;
66
+ }>]>>;
43
67
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
44
- context_servers: z.ZodRecord<z.ZodString, z.ZodObject<{
68
+ context_servers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
45
69
  enabled: z.ZodOptional<z.ZodBoolean>;
46
70
  source: z.ZodOptional<z.ZodString>;
47
71
  command: z.ZodOptional<z.ZodString>;
@@ -59,7 +83,19 @@ export declare const ZedMCPConfig: z.ZodObject<{
59
83
  env?: Record<string, string> | undefined;
60
84
  enabled?: boolean | undefined;
61
85
  source?: string | undefined;
62
- }>>;
86
+ }>, z.ZodObject<{
87
+ enabled: z.ZodOptional<z.ZodBoolean>;
88
+ url: z.ZodString;
89
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
90
+ }, "strip", z.ZodTypeAny, {
91
+ url: string;
92
+ headers?: Record<string, string> | undefined;
93
+ enabled?: boolean | undefined;
94
+ }, {
95
+ url: string;
96
+ headers?: Record<string, string> | undefined;
97
+ enabled?: boolean | undefined;
98
+ }>]>>;
63
99
  }, z.ZodTypeAny, "passthrough">>;
64
100
  export type ZedMCPConfig = z.infer<typeof ZedMCPConfig>;
65
101
  export declare class ZedClient extends DefaultMCPClient {
@@ -67,13 +103,8 @@ export declare class ZedClient extends DefaultMCPClient {
67
103
  getServerPropertyName(): string;
68
104
  isClientSupported(): Promise<boolean>;
69
105
  getConfigPath(): Promise<string>;
70
- getServerConfig(apiKey: string, type: 'sse' | 'streamable-http', selectedFeatures?: string[]): {
71
- command: string;
72
- args: string[];
73
- env: {
74
- POSTHOG_AUTH_HEADER: string;
75
- };
76
- enabled: boolean;
77
- source: string;
78
- };
106
+ getServerConfig(apiKey: string, type: 'sse' | 'streamable-http', selectedFeatures?: string[], local?: boolean): MCPServerConfig;
107
+ addServer(apiKey: string, selectedFeatures?: string[], local?: boolean): Promise<{
108
+ success: boolean;
109
+ }>;
79
110
  }
@@ -44,13 +44,20 @@ const MCPClient_1 = require("../MCPClient");
44
44
  const defaults_1 = require("../defaults");
45
45
  exports.ZedMCPConfig = zod_1.default
46
46
  .object({
47
- context_servers: zod_1.default.record(zod_1.default.string(), zod_1.default.object({
48
- enabled: zod_1.default.boolean().optional(),
49
- source: zod_1.default.string().optional(),
50
- command: zod_1.default.string().optional(),
51
- args: zod_1.default.array(zod_1.default.string()).optional(),
52
- env: zod_1.default.record(zod_1.default.string(), zod_1.default.string()).optional(),
53
- })),
47
+ context_servers: zod_1.default.record(zod_1.default.string(), zod_1.default.union([
48
+ zod_1.default.object({
49
+ enabled: zod_1.default.boolean().optional(),
50
+ source: zod_1.default.string().optional(),
51
+ command: zod_1.default.string().optional(),
52
+ args: zod_1.default.array(zod_1.default.string()).optional(),
53
+ env: zod_1.default.record(zod_1.default.string(), zod_1.default.string()).optional(),
54
+ }),
55
+ zod_1.default.object({
56
+ enabled: zod_1.default.boolean().optional(),
57
+ url: zod_1.default.string(),
58
+ headers: zod_1.default.record(zod_1.default.string(), zod_1.default.string()).optional(),
59
+ }),
60
+ ])),
54
61
  })
55
62
  .passthrough();
56
63
  class ZedClient extends MCPClient_1.DefaultMCPClient {
@@ -78,14 +85,18 @@ class ZedClient extends MCPClient_1.DefaultMCPClient {
78
85
  }
79
86
  throw new Error(`Unsupported platform: ${process.platform}`);
80
87
  }
81
- getServerConfig(apiKey, type, selectedFeatures) {
82
- const baseConfig = (0, defaults_1.getDefaultServerConfig)(apiKey, type, selectedFeatures);
88
+ getServerConfig(apiKey, type, selectedFeatures, local) {
83
89
  return {
84
90
  enabled: true,
85
- source: 'custom',
86
- ...baseConfig,
91
+ url: (0, defaults_1.buildMCPUrl)(type, selectedFeatures, local),
92
+ headers: {
93
+ Authorization: `Bearer ${apiKey}`,
94
+ },
87
95
  };
88
96
  }
97
+ async addServer(apiKey, selectedFeatures, local) {
98
+ return this._addServerType(apiKey, 'streamable-http', selectedFeatures, local);
99
+ }
89
100
  }
90
101
  exports.ZedClient = ZedClient;
91
102
  //# sourceMappingURL=zed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zed.js","sourceRoot":"","sources":["../../../../../src/steps/add-mcp-server-to-clients/clients/zed.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAoB;AACpB,2CAA6B;AAC7B,uCAAyB;AACzB,4CAAgD;AAChD,0CAAqD;AAExC,QAAA,YAAY,GAAG,aAAC;KAC1B,MAAM,CAAC;IACN,eAAe,EAAE,aAAC,CAAC,MAAM,CACvB,aAAC,CAAC,MAAM,EAAE,EACV,aAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,aAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAC/B,MAAM,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,OAAO,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,IAAI,EAAE,aAAC,CAAC,KAAK,CAAC,aAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACpC,GAAG,EAAE,aAAC,CAAC,MAAM,CAAC,aAAC,CAAC,MAAM,EAAE,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACjD,CAAC,CACH;CACF,CAAC;KACD,WAAW,EAAE,CAAC;AAIjB,MAAa,SAAU,SAAQ,4BAAgB;IAC7C,IAAI,GAAG,KAAK,CAAC;IAEb,qBAAqB;QACnB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,OAAO,OAAO,CAAC,OAAO,CACpB,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAC9D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;QAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;QAE7C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,CACtD,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,sDAAsD;YACtD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YAClD,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,CACjD,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,CACtD,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,eAAe,CACb,MAAc,EACd,IAA+B,EAC/B,gBAA2B;QAE3B,MAAM,UAAU,GAAG,IAAA,iCAAsB,EAAC,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAC1E,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,QAAQ;YAChB,GAAG,UAAU;SACd,CAAC;IACJ,CAAC;CACF;AApDD,8BAoDC","sourcesContent":["import z from 'zod';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { DefaultMCPClient } from '../MCPClient';\nimport { getDefaultServerConfig } from '../defaults';\n\nexport const ZedMCPConfig = z\n .object({\n context_servers: z.record(\n z.string(),\n z.object({\n enabled: z.boolean().optional(),\n source: z.string().optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n }),\n ),\n })\n .passthrough();\n\nexport type ZedMCPConfig = z.infer<typeof ZedMCPConfig>;\n\nexport class ZedClient extends DefaultMCPClient {\n name = 'Zed';\n\n getServerPropertyName(): string {\n return 'context_servers';\n }\n\n async isClientSupported(): Promise<boolean> {\n return Promise.resolve(\n process.platform === 'darwin' || process.platform === 'linux',\n );\n }\n\n async getConfigPath(): Promise<string> {\n const homeDir = os.homedir();\n const isMac = process.platform === 'darwin';\n const isLinux = process.platform === 'linux';\n\n if (isMac) {\n return Promise.resolve(\n path.join(homeDir, '.config', 'zed', 'settings.json'),\n );\n }\n\n if (isLinux) {\n // https://zed.dev/docs/configuring-zed#settings-files\n const xdgConfigHome = process.env.XDG_CONFIG_HOME;\n if (xdgConfigHome) {\n return Promise.resolve(\n path.join(xdgConfigHome, 'zed', 'settings.json'),\n );\n }\n return Promise.resolve(\n path.join(homeDir, '.config', 'zed', 'settings.json'),\n );\n }\n\n throw new Error(`Unsupported platform: ${process.platform}`);\n }\n\n getServerConfig(\n apiKey: string,\n type: 'sse' | 'streamable-http',\n selectedFeatures?: string[],\n ) {\n const baseConfig = getDefaultServerConfig(apiKey, type, selectedFeatures);\n return {\n enabled: true,\n source: 'custom',\n ...baseConfig,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"zed.js","sourceRoot":"","sources":["../../../../../src/steps/add-mcp-server-to-clients/clients/zed.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAoB;AACpB,2CAA6B;AAC7B,uCAAyB;AACzB,4CAAiE;AACjE,0CAA0C;AAE7B,QAAA,YAAY,GAAG,aAAC;KAC1B,MAAM,CAAC;IACN,eAAe,EAAE,aAAC,CAAC,MAAM,CACvB,aAAC,CAAC,MAAM,EAAE,EACV,aAAC,CAAC,KAAK,CAAC;QACN,aAAC,CAAC,MAAM,CAAC;YACP,OAAO,EAAE,aAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAC/B,MAAM,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC7B,OAAO,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,IAAI,EAAE,aAAC,CAAC,KAAK,CAAC,aAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACpC,GAAG,EAAE,aAAC,CAAC,MAAM,CAAC,aAAC,CAAC,MAAM,EAAE,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;SACjD,CAAC;QACF,aAAC,CAAC,MAAM,CAAC;YACP,OAAO,EAAE,aAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAC/B,GAAG,EAAE,aAAC,CAAC,MAAM,EAAE;YACf,OAAO,EAAE,aAAC,CAAC,MAAM,CAAC,aAAC,CAAC,MAAM,EAAE,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;SACrD,CAAC;KACH,CAAC,CACH;CACF,CAAC;KACD,WAAW,EAAE,CAAC;AAIjB,MAAa,SAAU,SAAQ,4BAAgB;IAC7C,IAAI,GAAG,KAAK,CAAC;IAEb,qBAAqB;QACnB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,OAAO,OAAO,CAAC,OAAO,CACpB,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAC9D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;QAC5C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;QAE7C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,CACtD,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,sDAAsD;YACtD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YAClD,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,CACjD,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,CACtD,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,eAAe,CACb,MAAc,EACd,IAA+B,EAC/B,gBAA2B,EAC3B,KAAe;QAEf,OAAO;YACL,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,IAAA,sBAAW,EAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC;YAC/C,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,MAAc,EACd,gBAA2B,EAC3B,KAAe;QAEf,OAAO,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,CACN,CAAC;IACJ,CAAC;CACF;AAnED,8BAmEC","sourcesContent":["import z from 'zod';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { DefaultMCPClient, MCPServerConfig } from '../MCPClient';\nimport { buildMCPUrl } from '../defaults';\n\nexport const ZedMCPConfig = z\n .object({\n context_servers: z.record(\n z.string(),\n z.union([\n z.object({\n enabled: z.boolean().optional(),\n source: z.string().optional(),\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n }),\n z.object({\n enabled: z.boolean().optional(),\n url: z.string(),\n headers: z.record(z.string(), z.string()).optional(),\n }),\n ]),\n ),\n })\n .passthrough();\n\nexport type ZedMCPConfig = z.infer<typeof ZedMCPConfig>;\n\nexport class ZedClient extends DefaultMCPClient {\n name = 'Zed';\n\n getServerPropertyName(): string {\n return 'context_servers';\n }\n\n async isClientSupported(): Promise<boolean> {\n return Promise.resolve(\n process.platform === 'darwin' || process.platform === 'linux',\n );\n }\n\n async getConfigPath(): Promise<string> {\n const homeDir = os.homedir();\n const isMac = process.platform === 'darwin';\n const isLinux = process.platform === 'linux';\n\n if (isMac) {\n return Promise.resolve(\n path.join(homeDir, '.config', 'zed', 'settings.json'),\n );\n }\n\n if (isLinux) {\n // https://zed.dev/docs/configuring-zed#settings-files\n const xdgConfigHome = process.env.XDG_CONFIG_HOME;\n if (xdgConfigHome) {\n return Promise.resolve(\n path.join(xdgConfigHome, 'zed', 'settings.json'),\n );\n }\n return Promise.resolve(\n path.join(homeDir, '.config', 'zed', 'settings.json'),\n );\n }\n\n throw new Error(`Unsupported platform: ${process.platform}`);\n }\n\n getServerConfig(\n apiKey: string,\n type: 'sse' | 'streamable-http',\n selectedFeatures?: string[],\n local?: boolean,\n ): MCPServerConfig {\n return {\n enabled: true,\n url: buildMCPUrl(type, selectedFeatures, local),\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n };\n }\n\n async addServer(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n ): Promise<{ success: boolean }> {\n return this._addServerType(\n apiKey,\n 'streamable-http',\n selectedFeatures,\n local,\n );\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import z from 'zod';
2
2
  export declare const DefaultMCPClientConfig: z.ZodObject<{
3
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
3
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
4
4
  command: z.ZodOptional<z.ZodString>;
5
5
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
6
6
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -12,9 +12,18 @@ export declare const DefaultMCPClientConfig: z.ZodObject<{
12
12
  command?: string | undefined;
13
13
  args?: string[] | undefined;
14
14
  env?: Record<string, string> | undefined;
15
- }>>;
15
+ }>, z.ZodObject<{
16
+ url: z.ZodString;
17
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ url: string;
20
+ headers?: Record<string, string> | undefined;
21
+ }, {
22
+ url: string;
23
+ headers?: Record<string, string> | undefined;
24
+ }>]>>;
16
25
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
17
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
26
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
18
27
  command: z.ZodOptional<z.ZodString>;
19
28
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
20
29
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -26,9 +35,18 @@ export declare const DefaultMCPClientConfig: z.ZodObject<{
26
35
  command?: string | undefined;
27
36
  args?: string[] | undefined;
28
37
  env?: Record<string, string> | undefined;
29
- }>>;
38
+ }>, z.ZodObject<{
39
+ url: z.ZodString;
40
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ url: string;
43
+ headers?: Record<string, string> | undefined;
44
+ }, {
45
+ url: string;
46
+ headers?: Record<string, string> | undefined;
47
+ }>]>>;
30
48
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
31
- mcpServers: z.ZodRecord<z.ZodString, z.ZodObject<{
49
+ mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
32
50
  command: z.ZodOptional<z.ZodString>;
33
51
  args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
34
52
  env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -40,7 +58,16 @@ export declare const DefaultMCPClientConfig: z.ZodObject<{
40
58
  command?: string | undefined;
41
59
  args?: string[] | undefined;
42
60
  env?: Record<string, string> | undefined;
43
- }>>;
61
+ }>, z.ZodObject<{
62
+ url: z.ZodString;
63
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
64
+ }, "strip", z.ZodTypeAny, {
65
+ url: string;
66
+ headers?: Record<string, string> | undefined;
67
+ }, {
68
+ url: string;
69
+ headers?: Record<string, string> | undefined;
70
+ }>]>>;
44
71
  }, z.ZodTypeAny, "passthrough">>;
45
72
  export declare const AVAILABLE_FEATURES: {
46
73
  'Data & Analytics': {
@@ -61,6 +88,13 @@ export declare const AVAILABLE_FEATURES: {
61
88
  };
62
89
  export declare const ALL_FEATURE_VALUES: string[];
63
90
  type MCPServerType = 'sse' | 'streamable-http';
91
+ export declare const buildMCPUrl: (type: MCPServerType, selectedFeatures?: string[], local?: boolean) => string;
92
+ export declare const getNativeHTTPServerConfig: (apiKey: string, type: MCPServerType, selectedFeatures?: string[], local?: boolean) => {
93
+ url: string;
94
+ headers: {
95
+ Authorization: string;
96
+ };
97
+ };
64
98
  export declare const getDefaultServerConfig: (apiKey: string, type: MCPServerType, selectedFeatures?: string[], local?: boolean) => {
65
99
  command: string;
66
100
  args: string[];
@@ -3,15 +3,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getDefaultServerConfig = exports.ALL_FEATURE_VALUES = exports.AVAILABLE_FEATURES = exports.DefaultMCPClientConfig = void 0;
6
+ exports.getDefaultServerConfig = exports.getNativeHTTPServerConfig = exports.buildMCPUrl = exports.ALL_FEATURE_VALUES = exports.AVAILABLE_FEATURES = exports.DefaultMCPClientConfig = void 0;
7
7
  const zod_1 = __importDefault(require("zod"));
8
8
  exports.DefaultMCPClientConfig = zod_1.default
9
9
  .object({
10
- mcpServers: zod_1.default.record(zod_1.default.string(), zod_1.default.object({
11
- command: zod_1.default.string().optional(),
12
- args: zod_1.default.array(zod_1.default.string()).optional(),
13
- env: zod_1.default.record(zod_1.default.string(), zod_1.default.string()).optional(),
14
- })),
10
+ mcpServers: zod_1.default.record(zod_1.default.string(), zod_1.default.union([
11
+ zod_1.default.object({
12
+ command: zod_1.default.string().optional(),
13
+ args: zod_1.default.array(zod_1.default.string()).optional(),
14
+ env: zod_1.default.record(zod_1.default.string(), zod_1.default.string()).optional(),
15
+ }),
16
+ zod_1.default.object({
17
+ url: zod_1.default.string(),
18
+ headers: zod_1.default.record(zod_1.default.string(), zod_1.default.string()).optional(),
19
+ }),
20
+ ])),
15
21
  })
16
22
  .passthrough();
17
23
  exports.AVAILABLE_FEATURES = {
@@ -61,15 +67,30 @@ exports.AVAILABLE_FEATURES = {
61
67
  exports.ALL_FEATURE_VALUES = Object.values(exports.AVAILABLE_FEATURES)
62
68
  .flat()
63
69
  .map((feature) => feature.value);
64
- const getDefaultServerConfig = (apiKey, type, selectedFeatures, local) => {
70
+ const buildMCPUrl = (type, selectedFeatures, local) => {
65
71
  const host = local ? 'http://localhost:8787' : 'https://mcp.posthog.com';
66
72
  const baseUrl = `${host}/${type === 'sse' ? 'sse' : 'mcp'}`;
67
73
  const isAllFeaturesSelected = selectedFeatures &&
68
74
  selectedFeatures.length === exports.ALL_FEATURE_VALUES.length &&
69
75
  exports.ALL_FEATURE_VALUES.every((feature) => selectedFeatures.includes(feature));
70
- const urlWithFeatures = selectedFeatures && selectedFeatures.length > 0 && !isAllFeaturesSelected
76
+ return selectedFeatures &&
77
+ selectedFeatures.length > 0 &&
78
+ !isAllFeaturesSelected
71
79
  ? `${baseUrl}?features=${selectedFeatures.join(',')}`
72
80
  : baseUrl;
81
+ };
82
+ exports.buildMCPUrl = buildMCPUrl;
83
+ const getNativeHTTPServerConfig = (apiKey, type, selectedFeatures, local) => {
84
+ return {
85
+ url: (0, exports.buildMCPUrl)(type, selectedFeatures, local),
86
+ headers: {
87
+ Authorization: `Bearer ${apiKey}`,
88
+ },
89
+ };
90
+ };
91
+ exports.getNativeHTTPServerConfig = getNativeHTTPServerConfig;
92
+ const getDefaultServerConfig = (apiKey, type, selectedFeatures, local) => {
93
+ const urlWithFeatures = (0, exports.buildMCPUrl)(type, selectedFeatures, local);
73
94
  return {
74
95
  command: 'npx',
75
96
  args: [
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../../src/steps/add-mcp-server-to-clients/defaults.ts"],"names":[],"mappings":"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","sourcesContent":["import z from 'zod';\n\nexport const DefaultMCPClientConfig = z\n .object({\n mcpServers: z.record(\n z.string(),\n z.object({\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n }),\n ),\n })\n .passthrough();\n\nexport const AVAILABLE_FEATURES = {\n 'Data & Analytics': [\n {\n value: 'dashboards',\n label: 'Dashboards',\n hint: 'Dashboard creation and management',\n },\n {\n value: 'insights',\n label: 'Insights',\n hint: 'Analytics insights and SQL queries',\n },\n {\n value: 'experiments',\n label: 'Experiments',\n hint: 'A/B testing experiments',\n },\n {\n value: 'llm-analytics',\n label: 'LLM Analytics',\n hint: 'LLM usage and cost tracking',\n },\n ],\n 'Development Tools': [\n {\n value: 'error-tracking',\n label: 'Error Tracking',\n hint: 'Error monitoring and debugging',\n },\n { value: 'flags', label: 'Feature Flags', hint: 'Feature flag management' },\n ],\n 'Platform & Management': [\n {\n value: 'workspace',\n label: 'Workspace',\n hint: 'Organization and project management',\n },\n {\n value: 'docs',\n label: 'Documentation',\n hint: 'PostHog documentation search',\n },\n ],\n};\n\nexport const ALL_FEATURE_VALUES = Object.values(AVAILABLE_FEATURES)\n .flat()\n .map((feature) => feature.value);\n\ntype MCPServerType = 'sse' | 'streamable-http';\n\nexport const getDefaultServerConfig = (\n apiKey: string,\n type: MCPServerType,\n selectedFeatures?: string[],\n local?: boolean,\n) => {\n const host = local ? 'http://localhost:8787' : 'https://mcp.posthog.com';\n const baseUrl = `${host}/${type === 'sse' ? 'sse' : 'mcp'}`;\n\n const isAllFeaturesSelected =\n selectedFeatures &&\n selectedFeatures.length === ALL_FEATURE_VALUES.length &&\n ALL_FEATURE_VALUES.every((feature) => selectedFeatures.includes(feature));\n\n const urlWithFeatures =\n selectedFeatures && selectedFeatures.length > 0 && !isAllFeaturesSelected\n ? `${baseUrl}?features=${selectedFeatures.join(',')}`\n : baseUrl;\n\n return {\n command: 'npx',\n args: [\n '-y',\n 'mcp-remote@latest',\n urlWithFeatures,\n '--header',\n `Authorization:\\${POSTHOG_AUTH_HEADER}`,\n ],\n env: {\n POSTHOG_AUTH_HEADER: `Bearer ${apiKey}`,\n },\n };\n};\n"]}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../../src/steps/add-mcp-server-to-clients/defaults.ts"],"names":[],"mappings":"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","sourcesContent":["import z from 'zod';\n\nexport const DefaultMCPClientConfig = z\n .object({\n mcpServers: z.record(\n z.string(),\n z.union([\n z.object({\n command: z.string().optional(),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n }),\n z.object({\n url: z.string(),\n headers: z.record(z.string(), z.string()).optional(),\n }),\n ]),\n ),\n })\n .passthrough();\n\nexport const AVAILABLE_FEATURES = {\n 'Data & Analytics': [\n {\n value: 'dashboards',\n label: 'Dashboards',\n hint: 'Dashboard creation and management',\n },\n {\n value: 'insights',\n label: 'Insights',\n hint: 'Analytics insights and SQL queries',\n },\n {\n value: 'experiments',\n label: 'Experiments',\n hint: 'A/B testing experiments',\n },\n {\n value: 'llm-analytics',\n label: 'LLM Analytics',\n hint: 'LLM usage and cost tracking',\n },\n ],\n 'Development Tools': [\n {\n value: 'error-tracking',\n label: 'Error Tracking',\n hint: 'Error monitoring and debugging',\n },\n { value: 'flags', label: 'Feature Flags', hint: 'Feature flag management' },\n ],\n 'Platform & Management': [\n {\n value: 'workspace',\n label: 'Workspace',\n hint: 'Organization and project management',\n },\n {\n value: 'docs',\n label: 'Documentation',\n hint: 'PostHog documentation search',\n },\n ],\n};\n\nexport const ALL_FEATURE_VALUES = Object.values(AVAILABLE_FEATURES)\n .flat()\n .map((feature) => feature.value);\n\ntype MCPServerType = 'sse' | 'streamable-http';\n\nexport const buildMCPUrl = (\n type: MCPServerType,\n selectedFeatures?: string[],\n local?: boolean,\n) => {\n const host = local ? 'http://localhost:8787' : 'https://mcp.posthog.com';\n const baseUrl = `${host}/${type === 'sse' ? 'sse' : 'mcp'}`;\n\n const isAllFeaturesSelected =\n selectedFeatures &&\n selectedFeatures.length === ALL_FEATURE_VALUES.length &&\n ALL_FEATURE_VALUES.every((feature) => selectedFeatures.includes(feature));\n\n return selectedFeatures &&\n selectedFeatures.length > 0 &&\n !isAllFeaturesSelected\n ? `${baseUrl}?features=${selectedFeatures.join(',')}`\n : baseUrl;\n};\n\nexport const getNativeHTTPServerConfig = (\n apiKey: string,\n type: MCPServerType,\n selectedFeatures?: string[],\n local?: boolean,\n) => {\n return {\n url: buildMCPUrl(type, selectedFeatures, local),\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n };\n};\n\nexport const getDefaultServerConfig = (\n apiKey: string,\n type: MCPServerType,\n selectedFeatures?: string[],\n local?: boolean,\n) => {\n const urlWithFeatures = buildMCPUrl(type, selectedFeatures, local);\n\n return {\n command: 'npx',\n args: [\n '-y',\n 'mcp-remote@latest',\n urlWithFeatures,\n '--header',\n `Authorization:\\${POSTHOG_AUTH_HEADER}`,\n ],\n env: {\n POSTHOG_AUTH_HEADER: `Bearer ${apiKey}`,\n },\n };\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@posthog/wizard",
3
- "version": "1.20.0",
3
+ "version": "1.21.0",
4
4
  "homepage": "https://github.com/PostHog/wizard",
5
5
  "repository": "https://github.com/PostHog/wizard",
6
6
  "description": "The PostHog wizard helps you to configure your project",