@posthog/wizard 1.25.0 → 1.26.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.
- package/dist/src/lib/agent-interface.d.ts +7 -1
- package/dist/src/lib/agent-interface.js +114 -20
- package/dist/src/lib/agent-interface.js.map +1 -1
- package/dist/src/lib/agent-runner.js +37 -10
- package/dist/src/lib/agent-runner.js.map +1 -1
- package/dist/src/mcp.d.ts +0 -3
- package/dist/src/mcp.js +2 -32
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/run.js +2 -1
- package/dist/src/run.js.map +1 -1
- package/dist/src/steps/add-mcp-server-to-clients/MCPClient.d.ts +5 -4
- package/dist/src/steps/add-mcp-server-to-clients/MCPClient.js +6 -6
- package/dist/src/steps/add-mcp-server-to-clients/MCPClient.js.map +1 -1
- package/dist/src/steps/add-mcp-server-to-clients/__tests__/defaults.test.d.ts +1 -0
- package/dist/src/steps/add-mcp-server-to-clients/__tests__/defaults.test.js +92 -0
- package/dist/src/steps/add-mcp-server-to-clients/__tests__/defaults.test.js.map +1 -0
- package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/claude.test.js +11 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/__tests__/claude.test.js.map +1 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.d.ts +2 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.js +5 -3
- package/dist/src/steps/add-mcp-server-to-clients/clients/claude-code.js.map +1 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/codex.d.ts +2 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/codex.js +2 -2
- package/dist/src/steps/add-mcp-server-to-clients/clients/codex.js.map +1 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.d.ts +3 -2
- package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +4 -4
- package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js.map +1 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.d.ts +3 -2
- package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.js +4 -4
- package/dist/src/steps/add-mcp-server-to-clients/clients/visual-studio-code.js.map +1 -1
- package/dist/src/steps/add-mcp-server-to-clients/clients/zed.d.ts +3 -2
- package/dist/src/steps/add-mcp-server-to-clients/clients/zed.js +4 -4
- package/dist/src/steps/add-mcp-server-to-clients/clients/zed.js.map +1 -1
- package/dist/src/steps/add-mcp-server-to-clients/defaults.d.ts +8 -8
- package/dist/src/steps/add-mcp-server-to-clients/defaults.js +34 -13
- package/dist/src/steps/add-mcp-server-to-clients/defaults.js.map +1 -1
- package/dist/src/steps/add-mcp-server-to-clients/index.d.ts +1 -1
- package/dist/src/steps/add-mcp-server-to-clients/index.js +4 -5
- package/dist/src/steps/add-mcp-server-to-clients/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DefaultMCPClient, MCPServerConfig } from '../MCPClient';
|
|
2
2
|
import { DefaultMCPClientConfig } from '../defaults';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
+
import type { CloudRegion } from '../../../utils/types';
|
|
4
5
|
export declare const CursorMCPConfig: z.ZodObject<{
|
|
5
6
|
mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
|
|
6
7
|
command: z.ZodOptional<z.ZodString>;
|
|
@@ -77,8 +78,8 @@ export declare class CursorMCPClient extends DefaultMCPClient {
|
|
|
77
78
|
constructor();
|
|
78
79
|
isClientSupported(): Promise<boolean>;
|
|
79
80
|
getConfigPath(): Promise<string>;
|
|
80
|
-
getServerConfig(apiKey: string, type: 'sse' | 'streamable-http', selectedFeatures?: string[], local?: boolean): MCPServerConfig;
|
|
81
|
-
addServer(apiKey
|
|
81
|
+
getServerConfig(apiKey: string | undefined, type: 'sse' | 'streamable-http', selectedFeatures?: string[], local?: boolean, region?: CloudRegion): MCPServerConfig;
|
|
82
|
+
addServer(apiKey?: string, selectedFeatures?: string[], local?: boolean, region?: CloudRegion): Promise<{
|
|
82
83
|
success: boolean;
|
|
83
84
|
}>;
|
|
84
85
|
}
|
|
@@ -50,11 +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);
|
|
53
|
+
getServerConfig(apiKey, type, selectedFeatures, local, region) {
|
|
54
|
+
return (0, defaults_1.getNativeHTTPServerConfig)(apiKey, type, selectedFeatures, local, region);
|
|
55
55
|
}
|
|
56
|
-
async addServer(apiKey, selectedFeatures, local) {
|
|
57
|
-
return this._addServerType(apiKey, 'streamable-http', selectedFeatures, local);
|
|
56
|
+
async addServer(apiKey, selectedFeatures, local, region) {
|
|
57
|
+
return this._addServerType(apiKey, 'streamable-http', selectedFeatures, local, region);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
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,4CAAiE;AACjE,2CAA6B;AAC7B,uCAAyB;AACzB,0CAAgF;
|
|
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;AAInE,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,MAA0B,EAC1B,IAA+B,EAC/B,gBAA2B,EAC3B,KAAe,EACf,MAAoB;QAEpB,OAAO,IAAA,oCAAyB,EAC9B,MAAM,EACN,IAAI,EACJ,gBAAgB,EAChB,KAAK,EACL,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CACb,MAAe,EACf,gBAA2B,EAC3B,KAAe,EACf,MAAoB;QAEpB,OAAO,IAAI,CAAC,cAAc,CACxB,MAAM,EACN,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,EACL,MAAM,CACP,CAAC;IACJ,CAAC;CACF;AA/CD,0CA+CC","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';\nimport type { CloudRegion } from '../../../utils/types';\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 | undefined,\n type: 'sse' | 'streamable-http',\n selectedFeatures?: string[],\n local?: boolean,\n region?: CloudRegion,\n ): MCPServerConfig {\n return getNativeHTTPServerConfig(\n apiKey,\n type,\n selectedFeatures,\n local,\n region,\n );\n }\n\n async addServer(\n apiKey?: string,\n selectedFeatures?: string[],\n local?: boolean,\n region?: CloudRegion,\n ): Promise<{ success: boolean }> {\n return this._addServerType(\n apiKey,\n 'streamable-http',\n selectedFeatures,\n local,\n region,\n );\n }\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
2
|
import { DefaultMCPClient, MCPServerConfig } from '../MCPClient';
|
|
3
|
+
import type { CloudRegion } from '../../../utils/types';
|
|
3
4
|
export declare const VisualStudioCodeMCPConfig: z.ZodObject<{
|
|
4
5
|
servers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
|
|
5
6
|
command: z.ZodOptional<z.ZodString>;
|
|
@@ -85,8 +86,8 @@ export declare class VisualStudioCodeClient extends DefaultMCPClient {
|
|
|
85
86
|
getServerPropertyName(): string;
|
|
86
87
|
isClientSupported(): Promise<boolean>;
|
|
87
88
|
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<{
|
|
89
|
+
getServerConfig(apiKey: string, type: 'sse' | 'streamable-http', selectedFeatures?: string[], local?: boolean, region?: CloudRegion): MCPServerConfig;
|
|
90
|
+
addServer(apiKey: string, selectedFeatures?: string[], local?: boolean, region?: CloudRegion): Promise<{
|
|
90
91
|
success: boolean;
|
|
91
92
|
}>;
|
|
92
93
|
}
|
|
@@ -84,17 +84,17 @@ class VisualStudioCodeClient extends MCPClient_1.DefaultMCPClient {
|
|
|
84
84
|
}
|
|
85
85
|
throw new Error(`Unsupported platform: ${process.platform}`);
|
|
86
86
|
}
|
|
87
|
-
getServerConfig(apiKey, type, selectedFeatures, local) {
|
|
87
|
+
getServerConfig(apiKey, type, selectedFeatures, local, region) {
|
|
88
88
|
return {
|
|
89
89
|
type: 'http',
|
|
90
|
-
url: (0, defaults_1.buildMCPUrl)(type, selectedFeatures, local),
|
|
90
|
+
url: (0, defaults_1.buildMCPUrl)(type, selectedFeatures, local, region),
|
|
91
91
|
headers: {
|
|
92
92
|
Authorization: `Bearer ${apiKey}`,
|
|
93
93
|
},
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
|
-
async addServer(apiKey, selectedFeatures, local) {
|
|
97
|
-
return this._addServerType(apiKey, 'streamable-http', selectedFeatures, local);
|
|
96
|
+
async addServer(apiKey, selectedFeatures, local, region) {
|
|
97
|
+
return this._addServerType(apiKey, 'streamable-http', selectedFeatures, local, region);
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
exports.VisualStudioCodeClient = VisualStudioCodeClient;
|
|
@@ -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,4CAAiE;AACjE,0CAA0C;
|
|
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';\nimport type { CloudRegion } from '../../../utils/types';\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 region?: CloudRegion,\n ): MCPServerConfig {\n return {\n type: 'http',\n url: buildMCPUrl(type, selectedFeatures, local, region),\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n };\n }\n\n async addServer(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n region?: CloudRegion,\n ): Promise<{ success: boolean }> {\n return this._addServerType(\n apiKey,\n 'streamable-http',\n selectedFeatures,\n local,\n region,\n );\n }\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
2
|
import { DefaultMCPClient, MCPServerConfig } from '../MCPClient';
|
|
3
|
+
import type { CloudRegion } from '../../../utils/types';
|
|
3
4
|
export declare const ZedMCPConfig: z.ZodObject<{
|
|
4
5
|
context_servers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
|
|
5
6
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -103,8 +104,8 @@ export declare class ZedClient extends DefaultMCPClient {
|
|
|
103
104
|
getServerPropertyName(): string;
|
|
104
105
|
isClientSupported(): Promise<boolean>;
|
|
105
106
|
getConfigPath(): Promise<string>;
|
|
106
|
-
getServerConfig(apiKey: string, type: 'sse' | 'streamable-http', selectedFeatures?: string[], local?: boolean): MCPServerConfig;
|
|
107
|
-
addServer(apiKey: string, selectedFeatures?: string[], local?: boolean): Promise<{
|
|
107
|
+
getServerConfig(apiKey: string, type: 'sse' | 'streamable-http', selectedFeatures?: string[], local?: boolean, region?: CloudRegion): MCPServerConfig;
|
|
108
|
+
addServer(apiKey: string, selectedFeatures?: string[], local?: boolean, region?: CloudRegion): Promise<{
|
|
108
109
|
success: boolean;
|
|
109
110
|
}>;
|
|
110
111
|
}
|
|
@@ -85,17 +85,17 @@ class ZedClient extends MCPClient_1.DefaultMCPClient {
|
|
|
85
85
|
}
|
|
86
86
|
throw new Error(`Unsupported platform: ${process.platform}`);
|
|
87
87
|
}
|
|
88
|
-
getServerConfig(apiKey, type, selectedFeatures, local) {
|
|
88
|
+
getServerConfig(apiKey, type, selectedFeatures, local, region) {
|
|
89
89
|
return {
|
|
90
90
|
enabled: true,
|
|
91
|
-
url: (0, defaults_1.buildMCPUrl)(type, selectedFeatures, local),
|
|
91
|
+
url: (0, defaults_1.buildMCPUrl)(type, selectedFeatures, local, region),
|
|
92
92
|
headers: {
|
|
93
93
|
Authorization: `Bearer ${apiKey}`,
|
|
94
94
|
},
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
|
-
async addServer(apiKey, selectedFeatures, local) {
|
|
98
|
-
return this._addServerType(apiKey, 'streamable-http', selectedFeatures, local);
|
|
97
|
+
async addServer(apiKey, selectedFeatures, local, region) {
|
|
98
|
+
return this._addServerType(apiKey, 'streamable-http', selectedFeatures, local, region);
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
exports.ZedClient = ZedClient;
|
|
@@ -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,4CAAiE;AACjE,0CAA0C;
|
|
1
|
+
{"version":3,"file":"zed.js","sourceRoot":"","sources":["../../../../../src/steps/add-mcp-server-to-clients/clients/zed.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';\nimport type { CloudRegion } from '../../../utils/types';\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 region?: CloudRegion,\n ): MCPServerConfig {\n return {\n enabled: true,\n url: buildMCPUrl(type, selectedFeatures, local, region),\n headers: {\n Authorization: `Bearer ${apiKey}`,\n },\n };\n }\n\n async addServer(\n apiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n region?: CloudRegion,\n ): Promise<{ success: boolean }> {\n return this._addServerType(\n apiKey,\n 'streamable-http',\n selectedFeatures,\n local,\n region,\n );\n }\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
|
+
import type { CloudRegion } from '../../utils/types';
|
|
2
3
|
export declare const DefaultMCPClientConfig: z.ZodObject<{
|
|
3
4
|
mcpServers: z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodObject<{
|
|
4
5
|
command: z.ZodOptional<z.ZodString>;
|
|
@@ -88,14 +89,13 @@ export declare const AVAILABLE_FEATURES: {
|
|
|
88
89
|
};
|
|
89
90
|
export declare const ALL_FEATURE_VALUES: string[];
|
|
90
91
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
export declare const getDefaultServerConfig: (apiKey: string, type: MCPServerType, selectedFeatures?: string[], local?: boolean) => {
|
|
92
|
+
export declare const buildMCPUrl: (type: MCPServerType, selectedFeatures?: string[], local?: boolean, region?: CloudRegion) => string;
|
|
93
|
+
export declare const getNativeHTTPServerConfig: (apiKey: string | undefined, type: MCPServerType, selectedFeatures?: string[], local?: boolean, region?: CloudRegion) => Record<string, unknown>;
|
|
94
|
+
export declare const getDefaultServerConfig: (apiKey: string | undefined, type: MCPServerType, selectedFeatures?: string[], local?: boolean, region?: CloudRegion) => {
|
|
95
|
+
command: string;
|
|
96
|
+
args: string[];
|
|
97
|
+
env?: undefined;
|
|
98
|
+
} | {
|
|
99
99
|
command: string;
|
|
100
100
|
args: string[];
|
|
101
101
|
env: {
|
|
@@ -67,30 +67,51 @@ exports.AVAILABLE_FEATURES = {
|
|
|
67
67
|
exports.ALL_FEATURE_VALUES = Object.values(exports.AVAILABLE_FEATURES)
|
|
68
68
|
.flat()
|
|
69
69
|
.map((feature) => feature.value);
|
|
70
|
-
const buildMCPUrl = (type, selectedFeatures, local) => {
|
|
70
|
+
const buildMCPUrl = (type, selectedFeatures, local, region) => {
|
|
71
71
|
const host = local ? 'http://localhost:8787' : 'https://mcp.posthog.com';
|
|
72
72
|
const baseUrl = `${host}/${type === 'sse' ? 'sse' : 'mcp'}`;
|
|
73
73
|
const isAllFeaturesSelected = selectedFeatures &&
|
|
74
74
|
selectedFeatures.length === exports.ALL_FEATURE_VALUES.length &&
|
|
75
75
|
exports.ALL_FEATURE_VALUES.every((feature) => selectedFeatures.includes(feature));
|
|
76
|
-
|
|
76
|
+
const params = [];
|
|
77
|
+
// Add features param if not all features selected
|
|
78
|
+
if (selectedFeatures &&
|
|
77
79
|
selectedFeatures.length > 0 &&
|
|
78
|
-
!isAllFeaturesSelected
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
!isAllFeaturesSelected) {
|
|
81
|
+
params.push(`features=${selectedFeatures.join(',')}`);
|
|
82
|
+
}
|
|
83
|
+
// Add region param for non-US regions to route OAuth to the correct authorization server.
|
|
84
|
+
// US is the default, so we only need to specify region for EU users.
|
|
85
|
+
// Not needed in local mode since local dev always uses the same auth server.
|
|
86
|
+
if (region && region !== 'us' && !local) {
|
|
87
|
+
params.push(`region=${region}`);
|
|
88
|
+
}
|
|
89
|
+
return params.length > 0 ? `${baseUrl}?${params.join('&')}` : baseUrl;
|
|
81
90
|
};
|
|
82
91
|
exports.buildMCPUrl = buildMCPUrl;
|
|
83
|
-
const getNativeHTTPServerConfig = (apiKey, type, selectedFeatures, local) => {
|
|
84
|
-
|
|
85
|
-
url: (0, exports.buildMCPUrl)(type, selectedFeatures, local),
|
|
86
|
-
headers: {
|
|
87
|
-
Authorization: `Bearer ${apiKey}`,
|
|
88
|
-
},
|
|
92
|
+
const getNativeHTTPServerConfig = (apiKey, type, selectedFeatures, local, region) => {
|
|
93
|
+
const config = {
|
|
94
|
+
url: (0, exports.buildMCPUrl)(type, selectedFeatures, local, region),
|
|
89
95
|
};
|
|
96
|
+
// Only add auth header if API key is provided (not OAuth mode)
|
|
97
|
+
if (apiKey) {
|
|
98
|
+
config.headers = {
|
|
99
|
+
Authorization: `Bearer ${apiKey}`,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return config;
|
|
90
103
|
};
|
|
91
104
|
exports.getNativeHTTPServerConfig = getNativeHTTPServerConfig;
|
|
92
|
-
const getDefaultServerConfig = (apiKey, type, selectedFeatures, local) => {
|
|
93
|
-
const urlWithFeatures = (0, exports.buildMCPUrl)(type, selectedFeatures, local);
|
|
105
|
+
const getDefaultServerConfig = (apiKey, type, selectedFeatures, local, region) => {
|
|
106
|
+
const urlWithFeatures = (0, exports.buildMCPUrl)(type, selectedFeatures, local, region);
|
|
107
|
+
// OAuth mode: no auth header, let MCP handle OAuth
|
|
108
|
+
if (!apiKey) {
|
|
109
|
+
return {
|
|
110
|
+
command: 'npx',
|
|
111
|
+
args: ['-y', 'mcp-remote@latest', urlWithFeatures],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// API key mode: include auth header
|
|
94
115
|
return {
|
|
95
116
|
command: 'npx',
|
|
96
117
|
args: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../../src/steps/add-mcp-server-to-clients/defaults.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAoB;
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../../../src/steps/add-mcp-server-to-clients/defaults.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAoB;AAGP,QAAA,sBAAsB,GAAG,aAAC;KACpC,MAAM,CAAC;IACN,UAAU,EAAE,aAAC,CAAC,MAAM,CAClB,aAAC,CAAC,MAAM,EAAE,EACV,aAAC,CAAC,KAAK,CAAC;QACN,aAAC,CAAC,MAAM,CAAC;YACP,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,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;AAEJ,QAAA,kBAAkB,GAAG;IAChC,kBAAkB,EAAE;QAClB;YACE,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,mCAAmC;SAC1C;QACD;YACE,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,oCAAoC;SAC3C;QACD;YACE,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,yBAAyB;SAChC;QACD;YACE,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,6BAA6B;SACpC;KACF;IACD,mBAAmB,EAAE;QACnB;YACE,KAAK,EAAE,gBAAgB;YACvB,KAAK,EAAE,gBAAgB;YACvB,IAAI,EAAE,gCAAgC;SACvC;QACD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,yBAAyB,EAAE;KAC5E;IACD,uBAAuB,EAAE;QACvB;YACE,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,qCAAqC;SAC5C;QACD;YACE,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,8BAA8B;SACrC;KACF;CACF,CAAC;AAEW,QAAA,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,0BAAkB,CAAC;KAChE,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAI5B,MAAM,WAAW,GAAG,CACzB,IAAmB,EACnB,gBAA2B,EAC3B,KAAe,EACf,MAAoB,EACpB,EAAE;IACF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,yBAAyB,CAAC;IACzE,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAE5D,MAAM,qBAAqB,GACzB,gBAAgB;QAChB,gBAAgB,CAAC,MAAM,KAAK,0BAAkB,CAAC,MAAM;QACrD,0BAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAE5E,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,kDAAkD;IAClD,IACE,gBAAgB;QAChB,gBAAgB,CAAC,MAAM,GAAG,CAAC;QAC3B,CAAC,qBAAqB,EACtB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,YAAY,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,0FAA0F;IAC1F,qEAAqE;IACrE,6EAA6E;IAC7E,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AACxE,CAAC,CAAC;AAjCW,QAAA,WAAW,eAiCtB;AAEK,MAAM,yBAAyB,GAAG,CACvC,MAA0B,EAC1B,IAAmB,EACnB,gBAA2B,EAC3B,KAAe,EACf,MAAoB,EACpB,EAAE;IACF,MAAM,MAAM,GAA4B;QACtC,GAAG,EAAE,IAAA,mBAAW,EAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,CAAC;KACxD,CAAC;IAEF,+DAA+D;IAC/D,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,OAAO,GAAG;YACf,aAAa,EAAE,UAAU,MAAM,EAAE;SAClC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAnBW,QAAA,yBAAyB,6BAmBpC;AAEK,MAAM,sBAAsB,GAAG,CACpC,MAA0B,EAC1B,IAAmB,EACnB,gBAA2B,EAC3B,KAAe,EACf,MAAoB,EACpB,EAAE;IACF,MAAM,eAAe,GAAG,IAAA,mBAAW,EAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAE3E,mDAAmD;IACnD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,mBAAmB,EAAE,eAAe,CAAC;SACnD,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE;YACJ,IAAI;YACJ,mBAAmB;YACnB,eAAe;YACf,UAAU;YACV,uCAAuC;SACxC;QACD,GAAG,EAAE;YACH,mBAAmB,EAAE,UAAU,MAAM,EAAE;SACxC;KACF,CAAC;AACJ,CAAC,CAAC;AA/BW,QAAA,sBAAsB,0BA+BjC","sourcesContent":["import z from 'zod';\nimport type { CloudRegion } from '../../utils/types';\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 region?: CloudRegion,\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 params: string[] = [];\n\n // Add features param if not all features selected\n if (\n selectedFeatures &&\n selectedFeatures.length > 0 &&\n !isAllFeaturesSelected\n ) {\n params.push(`features=${selectedFeatures.join(',')}`);\n }\n\n // Add region param for non-US regions to route OAuth to the correct authorization server.\n // US is the default, so we only need to specify region for EU users.\n // Not needed in local mode since local dev always uses the same auth server.\n if (region && region !== 'us' && !local) {\n params.push(`region=${region}`);\n }\n\n return params.length > 0 ? `${baseUrl}?${params.join('&')}` : baseUrl;\n};\n\nexport const getNativeHTTPServerConfig = (\n apiKey: string | undefined,\n type: MCPServerType,\n selectedFeatures?: string[],\n local?: boolean,\n region?: CloudRegion,\n) => {\n const config: Record<string, unknown> = {\n url: buildMCPUrl(type, selectedFeatures, local, region),\n };\n\n // Only add auth header if API key is provided (not OAuth mode)\n if (apiKey) {\n config.headers = {\n Authorization: `Bearer ${apiKey}`,\n };\n }\n\n return config;\n};\n\nexport const getDefaultServerConfig = (\n apiKey: string | undefined,\n type: MCPServerType,\n selectedFeatures?: string[],\n local?: boolean,\n region?: CloudRegion,\n) => {\n const urlWithFeatures = buildMCPUrl(type, selectedFeatures, local, region);\n\n // OAuth mode: no auth header, let MCP handle OAuth\n if (!apiKey) {\n return {\n command: 'npx',\n args: ['-y', 'mcp-remote@latest', urlWithFeatures],\n };\n }\n\n // API key mode: include auth header\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"]}
|
|
@@ -14,5 +14,5 @@ export declare const removeMCPServerFromClientsStep: ({ integration, local, }: {
|
|
|
14
14
|
local?: boolean;
|
|
15
15
|
}) => Promise<string[]>;
|
|
16
16
|
export declare const getInstalledClients: (local?: boolean) => Promise<MCPClient[]>;
|
|
17
|
-
export declare const addMCPServer: (clients: MCPClient[], personalApiKey
|
|
17
|
+
export declare const addMCPServer: (clients: MCPClient[], personalApiKey?: string, selectedFeatures?: string[], local?: boolean, region?: CloudRegion) => Promise<void>;
|
|
18
18
|
export declare const removeMCPServer: (clients: MCPClient[], local?: boolean) => Promise<void>;
|
|
@@ -11,7 +11,6 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
11
11
|
const clack_utils_1 = require("../../utils/clack-utils");
|
|
12
12
|
const cursor_1 = require("./clients/cursor");
|
|
13
13
|
const claude_1 = require("./clients/claude");
|
|
14
|
-
const mcp_1 = require("../../mcp");
|
|
15
14
|
const claude_code_1 = require("./clients/claude-code");
|
|
16
15
|
const visual_studio_code_1 = require("./clients/visual-studio-code");
|
|
17
16
|
const zed_1 = require("./clients/zed");
|
|
@@ -118,9 +117,9 @@ const addMCPServerToClientsStep = async ({ integration, cloudRegion, askPermissi
|
|
|
118
117
|
await (0, exports.removeMCPServer)(installedClients, local);
|
|
119
118
|
clack_1.default.log.info('Removed existing installation.');
|
|
120
119
|
}
|
|
121
|
-
const personalApiKey = await (0, mcp_1.getPersonalApiKey)({ cloudRegion: region });
|
|
122
120
|
await (0, telemetry_1.traceStep)('adding mcp servers', async () => {
|
|
123
|
-
await (0, exports.addMCPServer)(clients,
|
|
121
|
+
await (0, exports.addMCPServer)(clients, undefined, // OAuth mode - no API key needed
|
|
122
|
+
selectedFeatures, local, region);
|
|
124
123
|
});
|
|
125
124
|
clack_1.default.log.success(`Added the MCP server to:
|
|
126
125
|
${clients.map((c) => `- ${c.name}`).join('\n ')} `);
|
|
@@ -181,9 +180,9 @@ const getInstalledClients = async (local) => {
|
|
|
181
180
|
return installedClients;
|
|
182
181
|
};
|
|
183
182
|
exports.getInstalledClients = getInstalledClients;
|
|
184
|
-
const addMCPServer = async (clients, personalApiKey, selectedFeatures, local) => {
|
|
183
|
+
const addMCPServer = async (clients, personalApiKey, selectedFeatures, local, region) => {
|
|
185
184
|
for (const client of clients) {
|
|
186
|
-
await client.addServer(personalApiKey, selectedFeatures, local);
|
|
185
|
+
await client.addServer(personalApiKey, selectedFeatures, local, region);
|
|
187
186
|
}
|
|
188
187
|
};
|
|
189
188
|
exports.addMCPServer = addMCPServer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/steps/add-mcp-server-to-clients/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Integration } from '../../lib/constants';\nimport { traceStep } from '../../telemetry';\nimport { analytics } from '../../utils/analytics';\nimport clack from '../../utils/clack';\nimport chalk from 'chalk';\nimport { abortIfCancelled, askForCloudRegion } from '../../utils/clack-utils';\nimport { MCPClient } from './MCPClient';\nimport { CursorMCPClient } from './clients/cursor';\nimport { ClaudeMCPClient } from './clients/claude';\nimport { getPersonalApiKey } from '../../mcp';\nimport type { CloudRegion } from '../../utils/types';\nimport { ClaudeCodeMCPClient } from './clients/claude-code';\nimport { VisualStudioCodeClient } from './clients/visual-studio-code';\nimport { ZedClient } from './clients/zed';\nimport { CodexMCPClient } from './clients/codex';\nimport { AVAILABLE_FEATURES, ALL_FEATURE_VALUES } from './defaults';\nimport { debug } from '../../utils/debug';\n\nexport const getSupportedClients = async (): Promise<MCPClient[]> => {\n const allClients = [\n new CursorMCPClient(),\n new ClaudeMCPClient(),\n new ClaudeCodeMCPClient(),\n new VisualStudioCodeClient(),\n new ZedClient(),\n new CodexMCPClient(),\n ];\n const supportedClients: MCPClient[] = [];\n\n debug('Checking for supported MCP clients...');\n for (const client of allClients) {\n const isSupported = await client.isClientSupported();\n debug(`${client.name}: ${isSupported ? '✓ supported' : '✗ not supported'}`);\n if (isSupported) {\n supportedClients.push(client);\n }\n }\n debug(\n `Found ${supportedClients.length} supported client(s): ${supportedClients\n .map((c) => c.name)\n .join(', ')}`,\n );\n\n return supportedClients;\n};\n\nexport const addMCPServerToClientsStep = async ({\n integration,\n cloudRegion,\n askPermission = true,\n local = false,\n ci = false,\n}: {\n integration?: Integration;\n cloudRegion?: CloudRegion;\n askPermission?: boolean;\n local?: boolean;\n ci?: boolean;\n}): Promise<string[]> => {\n // CI mode: skip MCP installation entirely (default to No)\n if (ci) {\n clack.log.info('Skipping MCP installation (CI mode)');\n return [];\n }\n\n const region = cloudRegion ?? (await askForCloudRegion());\n\n const hasPermission = askPermission\n ? await abortIfCancelled(\n clack.select({\n message: local\n ? 'Would you like to install the local development MCP server?'\n : 'Would you like to install the MCP server to use PostHog in your editor?',\n options: [\n { value: true, label: 'Yes' },\n { value: false, label: 'No' },\n ],\n }),\n integration,\n )\n : true;\n\n if (!hasPermission) {\n return [];\n }\n\n const { groupMultiselect } = await import('@clack/prompts');\n const selectedFeatures = await abortIfCancelled(\n groupMultiselect({\n message: `Select which PostHog features to enable as tools: ${chalk.dim(\n '(Toggle: Space, Confirm: Enter, Toggle All: A, Cancel: CTRL + C)',\n )}`,\n options: AVAILABLE_FEATURES,\n initialValues: [...ALL_FEATURE_VALUES],\n required: false,\n }),\n integration,\n );\n\n const supportedClients = await getSupportedClients();\n\n const { multiselect } = await import('@clack/prompts');\n const selectedClientNames = await abortIfCancelled(\n multiselect({\n message: `Select which MCP clients to install the MCP server to: ${chalk.dim(\n '(Toggle: Space, Confirm: Enter, Toggle All: A, Cancel: CTRL + C)',\n )}`,\n options: supportedClients.map((client) => ({\n value: client.name,\n label: client.name,\n })),\n initialValues: supportedClients.map((client) => client.name),\n required: true,\n }),\n integration,\n );\n\n const clients = supportedClients.filter((client) =>\n selectedClientNames.includes(client.name),\n );\n\n // Only check for existing installations in the clients the user selected\n const installedClients = [];\n for (const client of clients) {\n if (await client.isServerInstalled(local)) {\n installedClients.push(client);\n }\n }\n\n if (installedClients.length > 0) {\n clack.log.warn(\n `The MCP server is already configured for:\n ${installedClients.map((c) => `- ${c.name}`).join('\\n ')}`,\n );\n\n const reinstall = await abortIfCancelled(\n clack.select({\n message: 'Would you like to reinstall it?',\n options: [\n {\n value: true,\n label: 'Yes',\n hint: 'Reinstall the MCP server',\n },\n {\n value: false,\n label: 'No',\n hint: 'Keep the existing installation',\n },\n ],\n }),\n integration,\n );\n\n if (!reinstall) {\n analytics.capture('wizard interaction', {\n action: 'declined to reinstall mcp servers',\n clients: installedClients.map((c) => c.name),\n integration,\n });\n\n return [];\n }\n\n await removeMCPServer(installedClients, local);\n clack.log.info('Removed existing installation.');\n }\n\n const personalApiKey = await getPersonalApiKey({ cloudRegion: region });\n\n await traceStep('adding mcp servers', async () => {\n await addMCPServer(clients, personalApiKey, selectedFeatures, local);\n });\n\n clack.log.success(\n `Added the MCP server to:\n ${clients.map((c) => `- ${c.name}`).join('\\n ')} `,\n );\n\n analytics.capture('wizard interaction', {\n action: 'added mcp servers',\n clients: clients.map((c) => c.name),\n integration,\n });\n\n return clients.map((c) => c.name);\n};\n\nexport const removeMCPServerFromClientsStep = async ({\n integration,\n local = false,\n}: {\n integration?: Integration;\n local?: boolean;\n}): Promise<string[]> => {\n const installedClients = await getInstalledClients(local);\n if (installedClients.length === 0) {\n analytics.capture('wizard interaction', {\n action: 'no mcp servers to remove',\n integration,\n });\n return [];\n }\n\n const { multiselect } = await import('@clack/prompts');\n const selectedClientNames = await abortIfCancelled(\n multiselect({\n message: `Select which clients to remove the MCP server from: ${chalk.dim(\n '(Toggle: Space, Confirm: Enter, Toggle All: A, Cancel: CTRL + C)',\n )}`,\n options: installedClients.map((client) => ({\n value: client.name,\n label: client.name,\n })),\n initialValues: installedClients.map((client) => client.name),\n }),\n integration,\n );\n\n const clientsToRemove = installedClients.filter((client) =>\n selectedClientNames.includes(client.name),\n );\n\n if (clientsToRemove.length === 0) {\n analytics.capture('wizard interaction', {\n action: 'no mcp servers selected for removal',\n integration,\n });\n return [];\n }\n\n const results = await traceStep('removing mcp servers', async () => {\n await removeMCPServer(clientsToRemove, local);\n return clientsToRemove.map((c) => c.name);\n });\n\n analytics.capture('wizard interaction', {\n action: 'removed mcp servers',\n clients: results,\n integration,\n });\n\n return results;\n};\n\nexport const getInstalledClients = async (\n local?: boolean,\n): Promise<MCPClient[]> => {\n const clients = await getSupportedClients();\n const installedClients: MCPClient[] = [];\n\n for (const client of clients) {\n if (await client.isServerInstalled(local)) {\n installedClients.push(client);\n }\n }\n\n return installedClients;\n};\n\nexport const addMCPServer = async (\n clients: MCPClient[],\n personalApiKey: string,\n selectedFeatures?: string[],\n local?: boolean,\n): Promise<void> => {\n for (const client of clients) {\n await client.addServer(personalApiKey, selectedFeatures, local);\n }\n};\n\nexport const removeMCPServer = async (\n clients: MCPClient[],\n local?: boolean,\n): Promise<void> => {\n for (const client of clients) {\n await client.removeServer(local);\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/steps/add-mcp-server-to-clients/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Integration } from '../../lib/constants';\nimport { traceStep } from '../../telemetry';\nimport { analytics } from '../../utils/analytics';\nimport clack from '../../utils/clack';\nimport chalk from 'chalk';\nimport { abortIfCancelled, askForCloudRegion } from '../../utils/clack-utils';\nimport { MCPClient } from './MCPClient';\nimport { CursorMCPClient } from './clients/cursor';\nimport { ClaudeMCPClient } from './clients/claude';\nimport type { CloudRegion } from '../../utils/types';\nimport { ClaudeCodeMCPClient } from './clients/claude-code';\nimport { VisualStudioCodeClient } from './clients/visual-studio-code';\nimport { ZedClient } from './clients/zed';\nimport { CodexMCPClient } from './clients/codex';\nimport { AVAILABLE_FEATURES, ALL_FEATURE_VALUES } from './defaults';\nimport { debug } from '../../utils/debug';\n\nexport const getSupportedClients = async (): Promise<MCPClient[]> => {\n const allClients = [\n new CursorMCPClient(),\n new ClaudeMCPClient(),\n new ClaudeCodeMCPClient(),\n new VisualStudioCodeClient(),\n new ZedClient(),\n new CodexMCPClient(),\n ];\n const supportedClients: MCPClient[] = [];\n\n debug('Checking for supported MCP clients...');\n for (const client of allClients) {\n const isSupported = await client.isClientSupported();\n debug(`${client.name}: ${isSupported ? '✓ supported' : '✗ not supported'}`);\n if (isSupported) {\n supportedClients.push(client);\n }\n }\n debug(\n `Found ${supportedClients.length} supported client(s): ${supportedClients\n .map((c) => c.name)\n .join(', ')}`,\n );\n\n return supportedClients;\n};\n\nexport const addMCPServerToClientsStep = async ({\n integration,\n cloudRegion,\n askPermission = true,\n local = false,\n ci = false,\n}: {\n integration?: Integration;\n cloudRegion?: CloudRegion;\n askPermission?: boolean;\n local?: boolean;\n ci?: boolean;\n}): Promise<string[]> => {\n // CI mode: skip MCP installation entirely (default to No)\n if (ci) {\n clack.log.info('Skipping MCP installation (CI mode)');\n return [];\n }\n\n const region = cloudRegion ?? (await askForCloudRegion());\n\n const hasPermission = askPermission\n ? await abortIfCancelled(\n clack.select({\n message: local\n ? 'Would you like to install the local development MCP server?'\n : 'Would you like to install the MCP server to use PostHog in your editor?',\n options: [\n { value: true, label: 'Yes' },\n { value: false, label: 'No' },\n ],\n }),\n integration,\n )\n : true;\n\n if (!hasPermission) {\n return [];\n }\n\n const { groupMultiselect } = await import('@clack/prompts');\n const selectedFeatures = await abortIfCancelled(\n groupMultiselect({\n message: `Select which PostHog features to enable as tools: ${chalk.dim(\n '(Toggle: Space, Confirm: Enter, Toggle All: A, Cancel: CTRL + C)',\n )}`,\n options: AVAILABLE_FEATURES,\n initialValues: [...ALL_FEATURE_VALUES],\n required: false,\n }),\n integration,\n );\n\n const supportedClients = await getSupportedClients();\n\n const { multiselect } = await import('@clack/prompts');\n const selectedClientNames = await abortIfCancelled(\n multiselect({\n message: `Select which MCP clients to install the MCP server to: ${chalk.dim(\n '(Toggle: Space, Confirm: Enter, Toggle All: A, Cancel: CTRL + C)',\n )}`,\n options: supportedClients.map((client) => ({\n value: client.name,\n label: client.name,\n })),\n initialValues: supportedClients.map((client) => client.name),\n required: true,\n }),\n integration,\n );\n\n const clients = supportedClients.filter((client) =>\n selectedClientNames.includes(client.name),\n );\n\n // Only check for existing installations in the clients the user selected\n const installedClients = [];\n for (const client of clients) {\n if (await client.isServerInstalled(local)) {\n installedClients.push(client);\n }\n }\n\n if (installedClients.length > 0) {\n clack.log.warn(\n `The MCP server is already configured for:\n ${installedClients.map((c) => `- ${c.name}`).join('\\n ')}`,\n );\n\n const reinstall = await abortIfCancelled(\n clack.select({\n message: 'Would you like to reinstall it?',\n options: [\n {\n value: true,\n label: 'Yes',\n hint: 'Reinstall the MCP server',\n },\n {\n value: false,\n label: 'No',\n hint: 'Keep the existing installation',\n },\n ],\n }),\n integration,\n );\n\n if (!reinstall) {\n analytics.capture('wizard interaction', {\n action: 'declined to reinstall mcp servers',\n clients: installedClients.map((c) => c.name),\n integration,\n });\n\n return [];\n }\n\n await removeMCPServer(installedClients, local);\n clack.log.info('Removed existing installation.');\n }\n\n await traceStep('adding mcp servers', async () => {\n await addMCPServer(\n clients,\n undefined, // OAuth mode - no API key needed\n selectedFeatures,\n local,\n region,\n );\n });\n\n clack.log.success(\n `Added the MCP server to:\n ${clients.map((c) => `- ${c.name}`).join('\\n ')} `,\n );\n\n analytics.capture('wizard interaction', {\n action: 'added mcp servers',\n clients: clients.map((c) => c.name),\n integration,\n });\n\n return clients.map((c) => c.name);\n};\n\nexport const removeMCPServerFromClientsStep = async ({\n integration,\n local = false,\n}: {\n integration?: Integration;\n local?: boolean;\n}): Promise<string[]> => {\n const installedClients = await getInstalledClients(local);\n if (installedClients.length === 0) {\n analytics.capture('wizard interaction', {\n action: 'no mcp servers to remove',\n integration,\n });\n return [];\n }\n\n const { multiselect } = await import('@clack/prompts');\n const selectedClientNames = await abortIfCancelled(\n multiselect({\n message: `Select which clients to remove the MCP server from: ${chalk.dim(\n '(Toggle: Space, Confirm: Enter, Toggle All: A, Cancel: CTRL + C)',\n )}`,\n options: installedClients.map((client) => ({\n value: client.name,\n label: client.name,\n })),\n initialValues: installedClients.map((client) => client.name),\n }),\n integration,\n );\n\n const clientsToRemove = installedClients.filter((client) =>\n selectedClientNames.includes(client.name),\n );\n\n if (clientsToRemove.length === 0) {\n analytics.capture('wizard interaction', {\n action: 'no mcp servers selected for removal',\n integration,\n });\n return [];\n }\n\n const results = await traceStep('removing mcp servers', async () => {\n await removeMCPServer(clientsToRemove, local);\n return clientsToRemove.map((c) => c.name);\n });\n\n analytics.capture('wizard interaction', {\n action: 'removed mcp servers',\n clients: results,\n integration,\n });\n\n return results;\n};\n\nexport const getInstalledClients = async (\n local?: boolean,\n): Promise<MCPClient[]> => {\n const clients = await getSupportedClients();\n const installedClients: MCPClient[] = [];\n\n for (const client of clients) {\n if (await client.isServerInstalled(local)) {\n installedClients.push(client);\n }\n }\n\n return installedClients;\n};\n\nexport const addMCPServer = async (\n clients: MCPClient[],\n personalApiKey?: string,\n selectedFeatures?: string[],\n local?: boolean,\n region?: CloudRegion,\n): Promise<void> => {\n for (const client of clients) {\n await client.addServer(personalApiKey, selectedFeatures, local, region);\n }\n};\n\nexport const removeMCPServer = async (\n clients: MCPClient[],\n local?: boolean,\n): Promise<void> => {\n for (const client of clients) {\n await client.removeServer(local);\n }\n};\n"]}
|
package/package.json
CHANGED