@getmcp/generators 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +105 -0
  3. package/dist/base.d.ts +26 -0
  4. package/dist/base.d.ts.map +1 -0
  5. package/dist/base.js +81 -0
  6. package/dist/base.js.map +1 -0
  7. package/dist/claude-code.d.ts +20 -0
  8. package/dist/claude-code.d.ts.map +1 -0
  9. package/dist/claude-code.js +52 -0
  10. package/dist/claude-code.js.map +1 -0
  11. package/dist/claude-desktop.d.ts +16 -0
  12. package/dist/claude-desktop.d.ts.map +1 -0
  13. package/dist/claude-desktop.js +43 -0
  14. package/dist/claude-desktop.js.map +1 -0
  15. package/dist/cline.d.ts +17 -0
  16. package/dist/cline.d.ts.map +1 -0
  17. package/dist/cline.js +55 -0
  18. package/dist/cline.js.map +1 -0
  19. package/dist/cursor.d.ts +16 -0
  20. package/dist/cursor.d.ts.map +1 -0
  21. package/dist/cursor.js +43 -0
  22. package/dist/cursor.js.map +1 -0
  23. package/dist/goose.d.ts +34 -0
  24. package/dist/goose.d.ts.map +1 -0
  25. package/dist/goose.js +138 -0
  26. package/dist/goose.js.map +1 -0
  27. package/dist/index.d.ts +42 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +79 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/opencode.d.ts +34 -0
  32. package/dist/opencode.d.ts.map +1 -0
  33. package/dist/opencode.js +93 -0
  34. package/dist/opencode.js.map +1 -0
  35. package/dist/roo-code.d.ts +20 -0
  36. package/dist/roo-code.d.ts.map +1 -0
  37. package/dist/roo-code.js +60 -0
  38. package/dist/roo-code.js.map +1 -0
  39. package/dist/vscode.d.ts +19 -0
  40. package/dist/vscode.d.ts.map +1 -0
  41. package/dist/vscode.js +56 -0
  42. package/dist/vscode.js.map +1 -0
  43. package/dist/windsurf.d.ts +19 -0
  44. package/dist/windsurf.d.ts.map +1 -0
  45. package/dist/windsurf.js +52 -0
  46. package/dist/windsurf.js.map +1 -0
  47. package/dist/zed.d.ts +28 -0
  48. package/dist/zed.d.ts.map +1 -0
  49. package/dist/zed.js +60 -0
  50. package/dist/zed.js.map +1 -0
  51. package/package.json +55 -0
package/dist/goose.js ADDED
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Goose config generator.
3
+ *
4
+ * Config file: ~/.config/goose/config.yaml (YAML!)
5
+ * Format:
6
+ * extensions:
7
+ * name:
8
+ * name: Display Name
9
+ * cmd: npx
10
+ * args: [-y, @package/name]
11
+ * enabled: true
12
+ * envs: { "KEY": "value" }
13
+ * type: stdio
14
+ * timeout: 300
15
+ *
16
+ * Key differences from canonical:
17
+ * - YAML format (not JSON)
18
+ * - Root key: "extensions" (not "mcpServers")
19
+ * - "cmd" (not "command")
20
+ * - "envs" (not "env")
21
+ * - Extra fields: "enabled", "timeout" (in seconds), "name" (display name)
22
+ */
23
+ import { isStdioConfig, isRemoteConfig, inferTransport } from "@getmcp/core";
24
+ import { BaseGenerator } from "./base.js";
25
+ export class GooseGenerator extends BaseGenerator {
26
+ app = {
27
+ id: "goose",
28
+ name: "Goose",
29
+ description: "Block's autonomous AI coding agent",
30
+ configPaths: {
31
+ darwin: "~/.config/goose/config.yaml",
32
+ win32: "%AppData%\\goose\\config.yaml",
33
+ linux: "~/.config/goose/config.yaml",
34
+ },
35
+ configFormat: "yaml",
36
+ docsUrl: "https://block.github.io/goose/docs/getting-started/using-extensions",
37
+ };
38
+ generate(serverName, config) {
39
+ let extensionConfig;
40
+ if (isStdioConfig(config)) {
41
+ extensionConfig = {
42
+ name: serverName,
43
+ cmd: config.command,
44
+ ...(config.args && config.args.length > 0 ? { args: config.args } : {}),
45
+ enabled: true,
46
+ ...(config.env && Object.keys(config.env).length > 0
47
+ ? { envs: config.env }
48
+ : {}),
49
+ type: "stdio",
50
+ ...(config.timeout ? { timeout: Math.ceil(config.timeout / 1000) } : {}),
51
+ };
52
+ }
53
+ else if (isRemoteConfig(config)) {
54
+ const transport = inferTransport(config);
55
+ extensionConfig = {
56
+ name: serverName,
57
+ uri: config.url,
58
+ enabled: true,
59
+ ...(config.headers && Object.keys(config.headers).length > 0
60
+ ? { envs: config.headers }
61
+ : {}),
62
+ type: transport,
63
+ ...(config.timeout ? { timeout: Math.ceil(config.timeout / 1000) } : {}),
64
+ };
65
+ }
66
+ else {
67
+ throw new Error("Invalid config: must have either 'command' or 'url'");
68
+ }
69
+ return {
70
+ extensions: {
71
+ [serverName]: extensionConfig,
72
+ },
73
+ };
74
+ }
75
+ /**
76
+ * Serialize to YAML format.
77
+ * Uses a minimal YAML serializer to avoid heavy dependencies.
78
+ */
79
+ serialize(config) {
80
+ return toYaml(config, 0);
81
+ }
82
+ }
83
+ /**
84
+ * Minimal YAML serializer for Goose config.
85
+ * Handles the simple object/array/scalar structures we produce.
86
+ */
87
+ function toYaml(value, indent) {
88
+ const pad = " ".repeat(indent);
89
+ if (value === null || value === undefined) {
90
+ return "null";
91
+ }
92
+ if (typeof value === "boolean") {
93
+ return value ? "true" : "false";
94
+ }
95
+ if (typeof value === "number") {
96
+ return String(value);
97
+ }
98
+ if (typeof value === "string") {
99
+ // Quote strings that could be ambiguous
100
+ if (value === "" ||
101
+ value === "true" ||
102
+ value === "false" ||
103
+ value === "null" ||
104
+ /^[\d]/.test(value) ||
105
+ /[:{}\[\],&*?|>!%#@`]/.test(value) ||
106
+ value.includes("\n")) {
107
+ return JSON.stringify(value);
108
+ }
109
+ return value;
110
+ }
111
+ if (Array.isArray(value)) {
112
+ if (value.length === 0)
113
+ return "[]";
114
+ return value
115
+ .map((item) => `${pad}- ${toYaml(item, indent + 1).trimStart()}`)
116
+ .join("\n");
117
+ }
118
+ if (typeof value === "object") {
119
+ const obj = value;
120
+ const keys = Object.keys(obj);
121
+ if (keys.length === 0)
122
+ return "{}";
123
+ return keys
124
+ .map((key) => {
125
+ const val = obj[key];
126
+ if (typeof val === "object" && val !== null && !Array.isArray(val)) {
127
+ return `${pad}${key}:\n${toYaml(val, indent + 1)}`;
128
+ }
129
+ if (Array.isArray(val)) {
130
+ return `${pad}${key}:\n${toYaml(val, indent + 1)}`;
131
+ }
132
+ return `${pad}${key}: ${toYaml(val, indent)}`;
133
+ })
134
+ .join("\n");
135
+ }
136
+ return String(value);
137
+ }
138
+ //# sourceMappingURL=goose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goose.js","sourceRoot":"","sources":["../src/goose.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @getmcp/generators
3
+ *
4
+ * Config generators that transform canonical MCP server definitions
5
+ * into app-specific configuration formats for 10 AI applications.
6
+ */
7
+ export { ClaudeDesktopGenerator } from "./claude-desktop.js";
8
+ export { ClaudeCodeGenerator } from "./claude-code.js";
9
+ export { VSCodeGenerator } from "./vscode.js";
10
+ export { CursorGenerator } from "./cursor.js";
11
+ export { ClineGenerator } from "./cline.js";
12
+ export { RooCodeGenerator } from "./roo-code.js";
13
+ export { GooseGenerator } from "./goose.js";
14
+ export { WindsurfGenerator } from "./windsurf.js";
15
+ export { OpenCodeGenerator } from "./opencode.js";
16
+ export { ZedGenerator } from "./zed.js";
17
+ export { BaseGenerator, deepMerge, toStdioFields, toRemoteFields } from "./base.js";
18
+ export type { ConfigGenerator, AppMetadata, LooseServerConfigType } from "@getmcp/core";
19
+ export type { AppIdType } from "@getmcp/core";
20
+ import type { AppIdType, ConfigGenerator } from "@getmcp/core";
21
+ /**
22
+ * Map of all available generators, keyed by AppId.
23
+ */
24
+ export declare const generators: Record<AppIdType, ConfigGenerator>;
25
+ /**
26
+ * Get a generator by app ID.
27
+ */
28
+ export declare function getGenerator(appId: AppIdType): ConfigGenerator;
29
+ /**
30
+ * Get all available app IDs.
31
+ */
32
+ export declare function getAppIds(): AppIdType[];
33
+ /**
34
+ * Generate config for a specific app from a canonical server definition.
35
+ */
36
+ export declare function generateConfig(appId: AppIdType, serverName: string, config: import("@getmcp/core").LooseServerConfigType): Record<string, unknown>;
37
+ /**
38
+ * Generate configs for ALL apps from a canonical server definition.
39
+ * Returns a map of AppId -> serialized config string.
40
+ */
41
+ export declare function generateAllConfigs(serverName: string, config: import("@getmcp/core").LooseServerConfigType): Record<AppIdType, string>;
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGpF,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACxF,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAM9C,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAY/D;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,eAAe,CAWzD,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,eAAe,CAM9D;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,SAAS,EAAE,CAEvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,cAAc,EAAE,qBAAqB,GACnD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,cAAc,EAAE,qBAAqB,GACnD,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAO3B"}
package/dist/index.js ADDED
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @getmcp/generators
3
+ *
4
+ * Config generators that transform canonical MCP server definitions
5
+ * into app-specific configuration formats for 10 AI applications.
6
+ */
7
+ // Individual generators
8
+ export { ClaudeDesktopGenerator } from "./claude-desktop.js";
9
+ export { ClaudeCodeGenerator } from "./claude-code.js";
10
+ export { VSCodeGenerator } from "./vscode.js";
11
+ export { CursorGenerator } from "./cursor.js";
12
+ export { ClineGenerator } from "./cline.js";
13
+ export { RooCodeGenerator } from "./roo-code.js";
14
+ export { GooseGenerator } from "./goose.js";
15
+ export { WindsurfGenerator } from "./windsurf.js";
16
+ export { OpenCodeGenerator } from "./opencode.js";
17
+ export { ZedGenerator } from "./zed.js";
18
+ // Base class and utilities
19
+ export { BaseGenerator, deepMerge, toStdioFields, toRemoteFields } from "./base.js";
20
+ import { ClaudeDesktopGenerator } from "./claude-desktop.js";
21
+ import { ClaudeCodeGenerator } from "./claude-code.js";
22
+ import { VSCodeGenerator } from "./vscode.js";
23
+ import { CursorGenerator } from "./cursor.js";
24
+ import { ClineGenerator } from "./cline.js";
25
+ import { RooCodeGenerator } from "./roo-code.js";
26
+ import { GooseGenerator } from "./goose.js";
27
+ import { WindsurfGenerator } from "./windsurf.js";
28
+ import { OpenCodeGenerator } from "./opencode.js";
29
+ import { ZedGenerator } from "./zed.js";
30
+ /**
31
+ * Map of all available generators, keyed by AppId.
32
+ */
33
+ export const generators = {
34
+ "claude-desktop": new ClaudeDesktopGenerator(),
35
+ "claude-code": new ClaudeCodeGenerator(),
36
+ "vscode": new VSCodeGenerator(),
37
+ "cursor": new CursorGenerator(),
38
+ "cline": new ClineGenerator(),
39
+ "roo-code": new RooCodeGenerator(),
40
+ "goose": new GooseGenerator(),
41
+ "windsurf": new WindsurfGenerator(),
42
+ "opencode": new OpenCodeGenerator(),
43
+ "zed": new ZedGenerator(),
44
+ };
45
+ /**
46
+ * Get a generator by app ID.
47
+ */
48
+ export function getGenerator(appId) {
49
+ const gen = generators[appId];
50
+ if (!gen) {
51
+ throw new Error(`No generator found for app: ${appId}`);
52
+ }
53
+ return gen;
54
+ }
55
+ /**
56
+ * Get all available app IDs.
57
+ */
58
+ export function getAppIds() {
59
+ return Object.keys(generators);
60
+ }
61
+ /**
62
+ * Generate config for a specific app from a canonical server definition.
63
+ */
64
+ export function generateConfig(appId, serverName, config) {
65
+ return getGenerator(appId).generate(serverName, config);
66
+ }
67
+ /**
68
+ * Generate configs for ALL apps from a canonical server definition.
69
+ * Returns a map of AppId -> serialized config string.
70
+ */
71
+ export function generateAllConfigs(serverName, config) {
72
+ const result = {};
73
+ for (const [appId, generator] of Object.entries(generators)) {
74
+ const configObj = generator.generate(serverName, config);
75
+ result[appId] = generator.serialize(configObj);
76
+ }
77
+ return result;
78
+ }
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * OpenCode config generator.
3
+ *
4
+ * Config file: opencode.json / opencode.jsonc
5
+ * Format:
6
+ * {
7
+ * "$schema": "https://opencode.ai/config.json",
8
+ * "mcp": {
9
+ * "name": {
10
+ * "type": "local",
11
+ * "command": ["npx", "-y", "package"],
12
+ * "environment": { "KEY": "value" },
13
+ * "enabled": true,
14
+ * "timeout": 5000
15
+ * }
16
+ * }
17
+ * }
18
+ *
19
+ * Key differences from canonical:
20
+ * - Root key: "mcp" (not "mcpServers")
21
+ * - "command" is an ARRAY that merges command + args
22
+ * - "environment" (not "env")
23
+ * - Requires explicit "type": "local" | "remote"
24
+ * - Has "enabled" field
25
+ * - Env var syntax: {env:VAR} (no $ prefix)
26
+ */
27
+ import type { AppMetadata, LooseServerConfigType } from "@getmcp/core";
28
+ import { BaseGenerator } from "./base.js";
29
+ export declare class OpenCodeGenerator extends BaseGenerator {
30
+ app: AppMetadata;
31
+ generate(serverName: string, config: LooseServerConfigType): Record<string, unknown>;
32
+ generateAll(servers: Record<string, LooseServerConfigType>): Record<string, unknown>;
33
+ }
34
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../src/opencode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,GAAG,EAAE,WAAW,CAWd;IAEF,QAAQ,CACN,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,qBAAqB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAwCjB,WAAW,CAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAC7C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAY3B"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * OpenCode config generator.
3
+ *
4
+ * Config file: opencode.json / opencode.jsonc
5
+ * Format:
6
+ * {
7
+ * "$schema": "https://opencode.ai/config.json",
8
+ * "mcp": {
9
+ * "name": {
10
+ * "type": "local",
11
+ * "command": ["npx", "-y", "package"],
12
+ * "environment": { "KEY": "value" },
13
+ * "enabled": true,
14
+ * "timeout": 5000
15
+ * }
16
+ * }
17
+ * }
18
+ *
19
+ * Key differences from canonical:
20
+ * - Root key: "mcp" (not "mcpServers")
21
+ * - "command" is an ARRAY that merges command + args
22
+ * - "environment" (not "env")
23
+ * - Requires explicit "type": "local" | "remote"
24
+ * - Has "enabled" field
25
+ * - Env var syntax: {env:VAR} (no $ prefix)
26
+ */
27
+ import { isStdioConfig, isRemoteConfig } from "@getmcp/core";
28
+ import { BaseGenerator } from "./base.js";
29
+ export class OpenCodeGenerator extends BaseGenerator {
30
+ app = {
31
+ id: "opencode",
32
+ name: "OpenCode",
33
+ description: "Open-source AI coding agent by Anomaly",
34
+ configPaths: {
35
+ darwin: "opencode.json",
36
+ win32: "opencode.json",
37
+ linux: "opencode.json",
38
+ },
39
+ configFormat: "jsonc",
40
+ docsUrl: "https://opencode.ai/docs/mcp-servers/",
41
+ };
42
+ generate(serverName, config) {
43
+ let serverConfig;
44
+ if (isStdioConfig(config)) {
45
+ // OpenCode merges command + args into a single "command" array
46
+ const commandArray = [config.command];
47
+ if (config.args && config.args.length > 0) {
48
+ commandArray.push(...config.args);
49
+ }
50
+ serverConfig = {
51
+ type: "local",
52
+ command: commandArray,
53
+ enabled: true,
54
+ ...(config.env && Object.keys(config.env).length > 0
55
+ ? { environment: config.env }
56
+ : {}),
57
+ ...(config.timeout ? { timeout: config.timeout } : {}),
58
+ };
59
+ }
60
+ else if (isRemoteConfig(config)) {
61
+ serverConfig = {
62
+ type: "remote",
63
+ url: config.url,
64
+ enabled: true,
65
+ ...(config.headers && Object.keys(config.headers).length > 0
66
+ ? { headers: config.headers }
67
+ : {}),
68
+ ...(config.timeout ? { timeout: config.timeout } : {}),
69
+ };
70
+ }
71
+ else {
72
+ throw new Error("Invalid config: must have either 'command' or 'url'");
73
+ }
74
+ return {
75
+ mcp: {
76
+ [serverName]: serverConfig,
77
+ },
78
+ };
79
+ }
80
+ generateAll(servers) {
81
+ const mcp = {};
82
+ for (const [name, config] of Object.entries(servers)) {
83
+ const single = this.generate(name, config);
84
+ const mcpSection = single.mcp;
85
+ Object.assign(mcp, mcpSection);
86
+ }
87
+ return {
88
+ $schema: "https://opencode.ai/config.json",
89
+ mcp,
90
+ };
91
+ }
92
+ }
93
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../src/opencode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Roo Code config generator.
3
+ *
4
+ * Config file: mcp_settings.json (global) or .roo/mcp.json (project)
5
+ * Format: { "mcpServers": { "name": { "command", "args", "env", ... } } }
6
+ *
7
+ * Key differences from canonical:
8
+ * - Extra fields: "alwaysAllow", "disabled", "timeout", "watchPaths",
9
+ * "disabledTools", "cwd"
10
+ * - Remote servers need explicit "type": "streamable-http" or "type": "sse"
11
+ * - Supports ${env:VARIABLE_NAME} syntax in args
12
+ * - Windows requires "cmd /c npx" wrapper
13
+ */
14
+ import type { AppMetadata, LooseServerConfigType } from "@getmcp/core";
15
+ import { BaseGenerator } from "./base.js";
16
+ export declare class RooCodeGenerator extends BaseGenerator {
17
+ app: AppMetadata;
18
+ generate(serverName: string, config: LooseServerConfigType): Record<string, unknown>;
19
+ }
20
+ //# sourceMappingURL=roo-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roo-code.d.ts","sourceRoot":"","sources":["../src/roo-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAiB,MAAM,WAAW,CAAC;AAEzD,qBAAa,gBAAiB,SAAQ,aAAa;IACjD,GAAG,EAAE,WAAW,CAWd;IAEF,QAAQ,CACN,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,qBAAqB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CA8B3B"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Roo Code config generator.
3
+ *
4
+ * Config file: mcp_settings.json (global) or .roo/mcp.json (project)
5
+ * Format: { "mcpServers": { "name": { "command", "args", "env", ... } } }
6
+ *
7
+ * Key differences from canonical:
8
+ * - Extra fields: "alwaysAllow", "disabled", "timeout", "watchPaths",
9
+ * "disabledTools", "cwd"
10
+ * - Remote servers need explicit "type": "streamable-http" or "type": "sse"
11
+ * - Supports ${env:VARIABLE_NAME} syntax in args
12
+ * - Windows requires "cmd /c npx" wrapper
13
+ */
14
+ import { isStdioConfig, isRemoteConfig, inferTransport } from "@getmcp/core";
15
+ import { BaseGenerator, toStdioFields } from "./base.js";
16
+ export class RooCodeGenerator extends BaseGenerator {
17
+ app = {
18
+ id: "roo-code",
19
+ name: "Roo Code",
20
+ description: "AI coding assistant VS Code extension (formerly Roo Cline)",
21
+ configPaths: {
22
+ darwin: "~/Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json",
23
+ win32: "%AppData%\\Code\\User\\globalStorage\\rooveterinaryinc.roo-cline\\settings\\mcp_settings.json",
24
+ linux: "~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json",
25
+ },
26
+ configFormat: "json",
27
+ docsUrl: "https://docs.roocode.com/features/mcp/using-mcp-in-roo",
28
+ };
29
+ generate(serverName, config) {
30
+ let serverConfig;
31
+ if (isStdioConfig(config)) {
32
+ serverConfig = {
33
+ ...toStdioFields(config),
34
+ alwaysAllow: [],
35
+ disabled: false,
36
+ };
37
+ }
38
+ else if (isRemoteConfig(config)) {
39
+ const transport = inferTransport(config);
40
+ serverConfig = {
41
+ type: transport === "http" ? "streamable-http" : transport,
42
+ url: config.url,
43
+ ...(config.headers && Object.keys(config.headers).length > 0
44
+ ? { headers: config.headers }
45
+ : {}),
46
+ alwaysAllow: [],
47
+ disabled: false,
48
+ };
49
+ }
50
+ else {
51
+ throw new Error("Invalid config: must have either 'command' or 'url'");
52
+ }
53
+ return {
54
+ mcpServers: {
55
+ [serverName]: serverConfig,
56
+ },
57
+ };
58
+ }
59
+ }
60
+ //# sourceMappingURL=roo-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roo-code.js","sourceRoot":"","sources":["../src/roo-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEzD,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IACjD,GAAG,GAAgB;QACjB,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,4DAA4D;QACzE,WAAW,EAAE;YACX,MAAM,EAAE,6GAA6G;YACrH,KAAK,EAAE,+FAA+F;YACtG,KAAK,EAAE,yFAAyF;SACjG;QACD,YAAY,EAAE,MAAM;QACpB,OAAO,EAAE,wDAAwD;KAClE,CAAC;IAEF,QAAQ,CACN,UAAkB,EAClB,MAA6B;QAE7B,IAAI,YAAqC,CAAC;QAE1C,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,YAAY,GAAG;gBACb,GAAG,aAAa,CAAC,MAAM,CAAC;gBACxB,WAAW,EAAE,EAAE;gBACf,QAAQ,EAAE,KAAK;aAChB,CAAC;QACJ,CAAC;aAAM,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACzC,YAAY,GAAG;gBACb,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;gBAC1D,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;oBAC1D,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;oBAC7B,CAAC,CAAC,EAAE,CAAC;gBACP,WAAW,EAAE,EAAE;gBACf,QAAQ,EAAE,KAAK;aAChB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,OAAO;YACL,UAAU,EAAE;gBACV,CAAC,UAAU,CAAC,EAAE,YAAY;aAC3B;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * VS Code / GitHub Copilot config generator.
3
+ *
4
+ * Config file: .vscode/mcp.json (workspace) or user-level mcp.json
5
+ * Format: { "servers": { "name": { "type": "stdio", "command", "args", "env" } } }
6
+ *
7
+ * Key differences from canonical:
8
+ * - Root key: "servers" (NOT "mcpServers")
9
+ * - Requires explicit "type" field on every server ("stdio", "http", "sse")
10
+ * - Supports "inputs" array for sensitive data prompting
11
+ * - Supports "envFile" for .env loading
12
+ */
13
+ import type { AppMetadata, LooseServerConfigType } from "@getmcp/core";
14
+ import { BaseGenerator } from "./base.js";
15
+ export declare class VSCodeGenerator extends BaseGenerator {
16
+ app: AppMetadata;
17
+ generate(serverName: string, config: LooseServerConfigType): Record<string, unknown>;
18
+ }
19
+ //# sourceMappingURL=vscode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode.d.ts","sourceRoot":"","sources":["../src/vscode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAiC,MAAM,WAAW,CAAC;AAEzE,qBAAa,eAAgB,SAAQ,aAAa;IAChD,GAAG,EAAE,WAAW,CAWd;IAEF,QAAQ,CACN,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,qBAAqB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CA6B3B"}
package/dist/vscode.js ADDED
@@ -0,0 +1,56 @@
1
+ /**
2
+ * VS Code / GitHub Copilot config generator.
3
+ *
4
+ * Config file: .vscode/mcp.json (workspace) or user-level mcp.json
5
+ * Format: { "servers": { "name": { "type": "stdio", "command", "args", "env" } } }
6
+ *
7
+ * Key differences from canonical:
8
+ * - Root key: "servers" (NOT "mcpServers")
9
+ * - Requires explicit "type" field on every server ("stdio", "http", "sse")
10
+ * - Supports "inputs" array for sensitive data prompting
11
+ * - Supports "envFile" for .env loading
12
+ */
13
+ import { isStdioConfig, isRemoteConfig, inferTransport } from "@getmcp/core";
14
+ import { BaseGenerator, toStdioFields, toRemoteFields } from "./base.js";
15
+ export class VSCodeGenerator extends BaseGenerator {
16
+ app = {
17
+ id: "vscode",
18
+ name: "VS Code / GitHub Copilot",
19
+ description: "Visual Studio Code with GitHub Copilot MCP integration",
20
+ configPaths: {
21
+ darwin: ".vscode/mcp.json",
22
+ win32: ".vscode/mcp.json",
23
+ linux: ".vscode/mcp.json",
24
+ },
25
+ configFormat: "json",
26
+ docsUrl: "https://code.visualstudio.com/docs/copilot/chat/mcp-servers",
27
+ };
28
+ generate(serverName, config) {
29
+ let serverConfig;
30
+ if (isStdioConfig(config)) {
31
+ serverConfig = {
32
+ type: "stdio",
33
+ ...toStdioFields(config),
34
+ };
35
+ }
36
+ else if (isRemoteConfig(config)) {
37
+ const transport = inferTransport(config);
38
+ const fields = toRemoteFields(config);
39
+ // VS Code uses "type" not "transport"
40
+ delete fields.transport;
41
+ serverConfig = {
42
+ type: transport === "streamable-http" ? "http" : transport,
43
+ ...fields,
44
+ };
45
+ }
46
+ else {
47
+ throw new Error("Invalid config: must have either 'command' or 'url'");
48
+ }
49
+ return {
50
+ servers: {
51
+ [serverName]: serverConfig,
52
+ },
53
+ };
54
+ }
55
+ }
56
+ //# sourceMappingURL=vscode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../src/vscode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEzE,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAChD,GAAG,GAAgB;QACjB,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,wDAAwD;QACrE,WAAW,EAAE;YACX,MAAM,EAAE,kBAAkB;YAC1B,KAAK,EAAE,kBAAkB;YACzB,KAAK,EAAE,kBAAkB;SAC1B;QACD,YAAY,EAAE,MAAM;QACpB,OAAO,EAAE,6DAA6D;KACvE,CAAC;IAEF,QAAQ,CACN,UAAkB,EAClB,MAA6B;QAE7B,IAAI,YAAqC,CAAC;QAE1C,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,YAAY,GAAG;gBACb,IAAI,EAAE,OAAO;gBACb,GAAG,aAAa,CAAC,MAAM,CAAC;aACzB,CAAC;QACJ,CAAC;aAAM,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAEtC,sCAAsC;YACtC,OAAO,MAAM,CAAC,SAAS,CAAC;YAExB,YAAY,GAAG;gBACb,IAAI,EAAE,SAAS,KAAK,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC1D,GAAG,MAAM;aACV,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP,CAAC,UAAU,CAAC,EAAE,YAAY;aAC3B;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Windsurf config generator.
3
+ *
4
+ * Config file: ~/.codeium/windsurf/mcp_config.json
5
+ * Format: { "mcpServers": { "name": { "command", "args", "env" } } }
6
+ *
7
+ * Key differences from canonical:
8
+ * - Remote HTTP servers use "serverUrl" (not "url")
9
+ * - Supports ${env:VARIABLE_NAME} interpolation
10
+ * - Has MCP Marketplace and admin whitelist controls
11
+ * - Very similar to Claude Desktop for stdio
12
+ */
13
+ import type { AppMetadata, LooseServerConfigType } from "@getmcp/core";
14
+ import { BaseGenerator } from "./base.js";
15
+ export declare class WindsurfGenerator extends BaseGenerator {
16
+ app: AppMetadata;
17
+ generate(serverName: string, config: LooseServerConfigType): Record<string, unknown>;
18
+ }
19
+ //# sourceMappingURL=windsurf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../src/windsurf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAiB,MAAM,WAAW,CAAC;AAEzD,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,GAAG,EAAE,WAAW,CAWd;IAEF,QAAQ,CACN,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,qBAAqB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAuB3B"}