@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.
- package/LICENSE +21 -0
- package/README.md +105 -0
- package/dist/base.d.ts +26 -0
- package/dist/base.d.ts.map +1 -0
- package/dist/base.js +81 -0
- package/dist/base.js.map +1 -0
- package/dist/claude-code.d.ts +20 -0
- package/dist/claude-code.d.ts.map +1 -0
- package/dist/claude-code.js +52 -0
- package/dist/claude-code.js.map +1 -0
- package/dist/claude-desktop.d.ts +16 -0
- package/dist/claude-desktop.d.ts.map +1 -0
- package/dist/claude-desktop.js +43 -0
- package/dist/claude-desktop.js.map +1 -0
- package/dist/cline.d.ts +17 -0
- package/dist/cline.d.ts.map +1 -0
- package/dist/cline.js +55 -0
- package/dist/cline.js.map +1 -0
- package/dist/cursor.d.ts +16 -0
- package/dist/cursor.d.ts.map +1 -0
- package/dist/cursor.js +43 -0
- package/dist/cursor.js.map +1 -0
- package/dist/goose.d.ts +34 -0
- package/dist/goose.d.ts.map +1 -0
- package/dist/goose.js +138 -0
- package/dist/goose.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/opencode.d.ts +34 -0
- package/dist/opencode.d.ts.map +1 -0
- package/dist/opencode.js +93 -0
- package/dist/opencode.js.map +1 -0
- package/dist/roo-code.d.ts +20 -0
- package/dist/roo-code.d.ts.map +1 -0
- package/dist/roo-code.js +60 -0
- package/dist/roo-code.js.map +1 -0
- package/dist/vscode.d.ts +19 -0
- package/dist/vscode.d.ts.map +1 -0
- package/dist/vscode.js +56 -0
- package/dist/vscode.js.map +1 -0
- package/dist/windsurf.d.ts +19 -0
- package/dist/windsurf.d.ts.map +1 -0
- package/dist/windsurf.js +52 -0
- package/dist/windsurf.js.map +1 -0
- package/dist/zed.d.ts +28 -0
- package/dist/zed.d.ts.map +1 -0
- package/dist/zed.js +60 -0
- package/dist/zed.js.map +1 -0
- 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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|
package/dist/opencode.js
ADDED
|
@@ -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"}
|
package/dist/roo-code.js
ADDED
|
@@ -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"}
|
package/dist/vscode.d.ts
ADDED
|
@@ -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"}
|