@getmcp/generators 0.1.1 → 0.1.3

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.
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Codex (OpenAI) config generator.
3
+ *
4
+ * Config file: ~/.codex/config.toml (TOML!)
5
+ * Format:
6
+ * [mcp_servers.server-name]
7
+ * command = "npx"
8
+ * args = ["-y", "@package/name"]
9
+ *
10
+ * [mcp_servers.server-name.env]
11
+ * API_KEY = "value"
12
+ *
13
+ * Remote (Streamable HTTP):
14
+ * [mcp_servers.remote-server]
15
+ * url = "https://mcp.example.com/mcp"
16
+ *
17
+ * [mcp_servers.remote-server.http_headers]
18
+ * Authorization = "Bearer token"
19
+ *
20
+ * Key differences from canonical:
21
+ * - TOML format (not JSON)
22
+ * - Root key: "mcp_servers" (not "mcpServers")
23
+ * - "headers" → "http_headers"
24
+ * - "timeout" → "startup_timeout_sec" (ms to seconds)
25
+ * - No explicit "transport" field (Codex auto-detects)
26
+ */
27
+ import type { AppMetadata, LooseServerConfigType } from "@getmcp/core";
28
+ import { BaseGenerator } from "./base.js";
29
+ export declare class CodexGenerator extends BaseGenerator {
30
+ app: AppMetadata;
31
+ generate(serverName: string, config: LooseServerConfigType): Record<string, unknown>;
32
+ /**
33
+ * Serialize to TOML format.
34
+ * Uses a minimal TOML serializer to avoid heavy dependencies.
35
+ */
36
+ serialize(config: Record<string, unknown>): string;
37
+ }
38
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../src/codex.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,cAAe,SAAQ,aAAa;IAC/C,GAAG,EAAE,WAAW,CAWd;IAEF,QAAQ,CACN,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,qBAAqB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAoC1B;;;OAGG;IACM,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;CAG5D"}
package/dist/codex.js ADDED
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Codex (OpenAI) config generator.
3
+ *
4
+ * Config file: ~/.codex/config.toml (TOML!)
5
+ * Format:
6
+ * [mcp_servers.server-name]
7
+ * command = "npx"
8
+ * args = ["-y", "@package/name"]
9
+ *
10
+ * [mcp_servers.server-name.env]
11
+ * API_KEY = "value"
12
+ *
13
+ * Remote (Streamable HTTP):
14
+ * [mcp_servers.remote-server]
15
+ * url = "https://mcp.example.com/mcp"
16
+ *
17
+ * [mcp_servers.remote-server.http_headers]
18
+ * Authorization = "Bearer token"
19
+ *
20
+ * Key differences from canonical:
21
+ * - TOML format (not JSON)
22
+ * - Root key: "mcp_servers" (not "mcpServers")
23
+ * - "headers" → "http_headers"
24
+ * - "timeout" → "startup_timeout_sec" (ms to seconds)
25
+ * - No explicit "transport" field (Codex auto-detects)
26
+ */
27
+ import { isStdioConfig, isRemoteConfig } from "@getmcp/core";
28
+ import { BaseGenerator } from "./base.js";
29
+ export class CodexGenerator extends BaseGenerator {
30
+ app = {
31
+ id: "codex",
32
+ name: "Codex",
33
+ description: "OpenAI's AI coding agent",
34
+ configPaths: {
35
+ darwin: "~/.codex/config.toml",
36
+ win32: "%UserProfile%\\.codex\\config.toml",
37
+ linux: "~/.codex/config.toml",
38
+ },
39
+ configFormat: "toml",
40
+ docsUrl: "https://developers.openai.com/codex/mcp/",
41
+ };
42
+ generate(serverName, config) {
43
+ let serverConfig;
44
+ if (isStdioConfig(config)) {
45
+ serverConfig = {
46
+ command: config.command,
47
+ ...(config.args && config.args.length > 0 ? { args: config.args } : {}),
48
+ ...(config.env && Object.keys(config.env).length > 0
49
+ ? { env: config.env }
50
+ : {}),
51
+ ...(config.cwd ? { cwd: config.cwd } : {}),
52
+ ...(config.timeout
53
+ ? { startup_timeout_sec: Math.ceil(config.timeout / 1000) }
54
+ : {}),
55
+ };
56
+ }
57
+ else if (isRemoteConfig(config)) {
58
+ serverConfig = {
59
+ url: config.url,
60
+ ...(config.headers && Object.keys(config.headers).length > 0
61
+ ? { http_headers: config.headers }
62
+ : {}),
63
+ ...(config.timeout
64
+ ? { startup_timeout_sec: Math.ceil(config.timeout / 1000) }
65
+ : {}),
66
+ };
67
+ }
68
+ else {
69
+ throw new Error("Invalid config: must have either 'command' or 'url'");
70
+ }
71
+ return {
72
+ mcp_servers: {
73
+ [serverName]: serverConfig,
74
+ },
75
+ };
76
+ }
77
+ /**
78
+ * Serialize to TOML format.
79
+ * Uses a minimal TOML serializer to avoid heavy dependencies.
80
+ */
81
+ serialize(config) {
82
+ return toToml(config);
83
+ }
84
+ }
85
+ /**
86
+ * Minimal TOML serializer for Codex config.
87
+ * Handles the table/key-value structures we produce.
88
+ *
89
+ * Outputs TOML tables like:
90
+ * [mcp_servers.name]
91
+ * command = "npx"
92
+ * args = ["-y", "@package/name"]
93
+ *
94
+ * [mcp_servers.name.env]
95
+ * KEY = "value"
96
+ */
97
+ function toToml(value, prefix = "") {
98
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
99
+ return "";
100
+ }
101
+ const obj = value;
102
+ const lines = [];
103
+ // Separate scalar/array keys from sub-table keys
104
+ const scalarKeys = [];
105
+ const tableKeys = [];
106
+ for (const key of Object.keys(obj)) {
107
+ const val = obj[key];
108
+ if (isTable(val)) {
109
+ tableKeys.push(key);
110
+ }
111
+ else {
112
+ scalarKeys.push(key);
113
+ }
114
+ }
115
+ // If this level has scalar keys and a prefix, emit the table header
116
+ if (prefix && scalarKeys.length > 0) {
117
+ lines.push(`[${prefix}]`);
118
+ }
119
+ // Emit scalar/array key-value pairs
120
+ for (const key of scalarKeys) {
121
+ lines.push(`${key} = ${toTomlValue(obj[key])}`);
122
+ }
123
+ // Recurse into sub-tables
124
+ for (const key of tableKeys) {
125
+ if (lines.length > 0) {
126
+ lines.push(""); // blank line before sub-table
127
+ }
128
+ const subPrefix = prefix ? `${prefix}.${key}` : key;
129
+ lines.push(toToml(obj[key], subPrefix));
130
+ }
131
+ return lines.join("\n");
132
+ }
133
+ /**
134
+ * Serialize a single TOML value (non-table).
135
+ */
136
+ function toTomlValue(value) {
137
+ if (value === null || value === undefined) {
138
+ return '""';
139
+ }
140
+ if (typeof value === "boolean") {
141
+ return value ? "true" : "false";
142
+ }
143
+ if (typeof value === "number") {
144
+ return String(value);
145
+ }
146
+ if (typeof value === "string") {
147
+ return JSON.stringify(value); // always double-quoted in TOML
148
+ }
149
+ if (Array.isArray(value)) {
150
+ if (value.length === 0)
151
+ return "[]";
152
+ const items = value.map((item) => toTomlValue(item));
153
+ return `[${items.join(", ")}]`;
154
+ }
155
+ // Inline table (shouldn't normally reach here — tables are handled by toToml)
156
+ if (typeof value === "object") {
157
+ const obj = value;
158
+ const pairs = Object.keys(obj).map((key) => `${key} = ${toTomlValue(obj[key])}`);
159
+ return `{ ${pairs.join(", ")} }`;
160
+ }
161
+ return JSON.stringify(String(value));
162
+ }
163
+ /**
164
+ * Check if a value should be rendered as a TOML table (not inline).
165
+ */
166
+ function isTable(value) {
167
+ return typeof value === "object" && value !== null && !Array.isArray(value);
168
+ }
169
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../src/codex.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * @getmcp/generators
3
3
  *
4
4
  * Config generators that transform canonical MCP server definitions
5
- * into app-specific configuration formats for 10 AI applications.
5
+ * into app-specific configuration formats for 12 AI applications.
6
6
  */
7
7
  export { ClaudeDesktopGenerator } from "./claude-desktop.js";
8
8
  export { ClaudeCodeGenerator } from "./claude-code.js";
@@ -14,6 +14,8 @@ export { GooseGenerator } from "./goose.js";
14
14
  export { WindsurfGenerator } from "./windsurf.js";
15
15
  export { OpenCodeGenerator } from "./opencode.js";
16
16
  export { ZedGenerator } from "./zed.js";
17
+ export { PyCharmGenerator } from "./pycharm.js";
18
+ export { CodexGenerator } from "./codex.js";
17
19
  export { BaseGenerator, deepMerge, toStdioFields, toRemoteFields } from "./base.js";
18
20
  export type { ConfigGenerator, AppMetadata, LooseServerConfigType } from "@getmcp/core";
19
21
  export type { AppIdType } from "@getmcp/core";
@@ -1 +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"}
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;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,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;AAc/D;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,eAAe,CAazD,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 CHANGED
@@ -2,7 +2,7 @@
2
2
  * @getmcp/generators
3
3
  *
4
4
  * Config generators that transform canonical MCP server definitions
5
- * into app-specific configuration formats for 10 AI applications.
5
+ * into app-specific configuration formats for 12 AI applications.
6
6
  */
7
7
  // Individual generators
8
8
  export { ClaudeDesktopGenerator } from "./claude-desktop.js";
@@ -15,6 +15,8 @@ export { GooseGenerator } from "./goose.js";
15
15
  export { WindsurfGenerator } from "./windsurf.js";
16
16
  export { OpenCodeGenerator } from "./opencode.js";
17
17
  export { ZedGenerator } from "./zed.js";
18
+ export { PyCharmGenerator } from "./pycharm.js";
19
+ export { CodexGenerator } from "./codex.js";
18
20
  // Base class and utilities
19
21
  export { BaseGenerator, deepMerge, toStdioFields, toRemoteFields } from "./base.js";
20
22
  import { ClaudeDesktopGenerator } from "./claude-desktop.js";
@@ -27,6 +29,8 @@ import { GooseGenerator } from "./goose.js";
27
29
  import { WindsurfGenerator } from "./windsurf.js";
28
30
  import { OpenCodeGenerator } from "./opencode.js";
29
31
  import { ZedGenerator } from "./zed.js";
32
+ import { PyCharmGenerator } from "./pycharm.js";
33
+ import { CodexGenerator } from "./codex.js";
30
34
  /**
31
35
  * Map of all available generators, keyed by AppId.
32
36
  */
@@ -41,6 +45,8 @@ export const generators = {
41
45
  "windsurf": new WindsurfGenerator(),
42
46
  "opencode": new OpenCodeGenerator(),
43
47
  "zed": new ZedGenerator(),
48
+ "pycharm": new PyCharmGenerator(),
49
+ "codex": new CodexGenerator(),
44
50
  };
45
51
  /**
46
52
  * Get a generator by app ID.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAwB;AACxB,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;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAWpF,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;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAuC;IAC5D,gBAAgB,EAAE,IAAI,sBAAsB,EAAE;IAC9C,aAAa,EAAE,IAAI,mBAAmB,EAAE;IACxC,QAAQ,EAAE,IAAI,eAAe,EAAE;IAC/B,QAAQ,EAAE,IAAI,eAAe,EAAE;IAC/B,OAAO,EAAE,IAAI,cAAc,EAAE;IAC7B,UAAU,EAAE,IAAI,gBAAgB,EAAE;IAClC,OAAO,EAAE,IAAI,cAAc,EAAE;IAC7B,UAAU,EAAE,IAAI,iBAAiB,EAAE;IACnC,UAAU,EAAE,IAAI,iBAAiB,EAAE;IACnC,KAAK,EAAE,IAAI,YAAY,EAAE;IACzB,SAAS,EAAE,IAAI,gBAAgB,EAAE;IACjC,OAAO,EAAE,IAAI,cAAc,EAAE;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC3C,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAgB,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAgB,EAChB,UAAkB,EAClB,MAAoD;IAEpD,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAkB,EAClB,MAAoD;IAEpD,MAAM,MAAM,GAAG,EAA+B,CAAC;IAC/C,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,CAAC,KAAkB,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * PyCharm config generator.
3
+ *
4
+ * Config: .ai/mcp/mcp.json (project-level) or IDE Settings → Tools → AI Assistant → MCP
5
+ * Format: { "mcpServers": { "name": { "command", "args", "env" } } }
6
+ *
7
+ * PyCharm's AI Assistant accepts MCP server configs in the same JSON format
8
+ * as Claude Desktop — essentially a passthrough. Supports stdio, streamable-http,
9
+ * and SSE transports.
10
+ *
11
+ * PyCharm supports project-level MCP configuration via .ai/mcp/mcp.json,
12
+ * similar to how VS Code uses .vscode/mcp.json. This file is shareable via
13
+ * version control and uses the canonical mcpServers format.
14
+ *
15
+ * Requires the JetBrains AI Assistant plugin:
16
+ * https://plugins.jetbrains.com/plugin/22282-jetbrains-ai-assistant
17
+ *
18
+ * Important: PyCharm must be closed and reopened for config changes to take effect.
19
+ */
20
+ import type { AppMetadata, LooseServerConfigType } from "@getmcp/core";
21
+ import { BaseGenerator } from "./base.js";
22
+ export declare class PyCharmGenerator extends BaseGenerator {
23
+ app: AppMetadata;
24
+ generate(serverName: string, config: LooseServerConfigType): Record<string, unknown>;
25
+ }
26
+ //# sourceMappingURL=pycharm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pycharm.d.ts","sourceRoot":"","sources":["../src/pycharm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAiC,MAAM,WAAW,CAAC;AAEzE,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;CAiB3B"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * PyCharm config generator.
3
+ *
4
+ * Config: .ai/mcp/mcp.json (project-level) or IDE Settings → Tools → AI Assistant → MCP
5
+ * Format: { "mcpServers": { "name": { "command", "args", "env" } } }
6
+ *
7
+ * PyCharm's AI Assistant accepts MCP server configs in the same JSON format
8
+ * as Claude Desktop — essentially a passthrough. Supports stdio, streamable-http,
9
+ * and SSE transports.
10
+ *
11
+ * PyCharm supports project-level MCP configuration via .ai/mcp/mcp.json,
12
+ * similar to how VS Code uses .vscode/mcp.json. This file is shareable via
13
+ * version control and uses the canonical mcpServers format.
14
+ *
15
+ * Requires the JetBrains AI Assistant plugin:
16
+ * https://plugins.jetbrains.com/plugin/22282-jetbrains-ai-assistant
17
+ *
18
+ * Important: PyCharm must be closed and reopened for config changes to take effect.
19
+ */
20
+ import { isStdioConfig, isRemoteConfig } from "@getmcp/core";
21
+ import { BaseGenerator, toStdioFields, toRemoteFields } from "./base.js";
22
+ export class PyCharmGenerator extends BaseGenerator {
23
+ app = {
24
+ id: "pycharm",
25
+ name: "PyCharm",
26
+ description: "JetBrains PyCharm IDE with AI Assistant MCP integration",
27
+ configPaths: {
28
+ darwin: ".ai/mcp/mcp.json",
29
+ win32: ".ai/mcp/mcp.json",
30
+ linux: ".ai/mcp/mcp.json",
31
+ },
32
+ configFormat: "json",
33
+ docsUrl: "https://www.jetbrains.com/help/ai-assistant/mcp.html",
34
+ };
35
+ generate(serverName, config) {
36
+ let serverConfig;
37
+ if (isStdioConfig(config)) {
38
+ serverConfig = toStdioFields(config);
39
+ }
40
+ else if (isRemoteConfig(config)) {
41
+ serverConfig = toRemoteFields(config);
42
+ }
43
+ else {
44
+ throw new Error("Invalid config: must have either 'command' or 'url'");
45
+ }
46
+ return {
47
+ mcpServers: {
48
+ [serverName]: serverConfig,
49
+ },
50
+ };
51
+ }
52
+ }
53
+ //# sourceMappingURL=pycharm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pycharm.js","sourceRoot":"","sources":["../src/pycharm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEzE,MAAM,OAAO,gBAAiB,SAAQ,aAAa;IACjD,GAAG,GAAgB;QACjB,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,yDAAyD;QACtE,WAAW,EAAE;YACX,MAAM,EAAE,kBAAkB;YAC1B,KAAK,EAAE,kBAAkB;YACzB,KAAK,EAAE,kBAAkB;SAC1B;QACD,YAAY,EAAE,MAAM;QACpB,OAAO,EAAE,sDAAsD;KAChE,CAAC;IAEF,QAAQ,CACN,UAAkB,EAClB,MAA6B;QAE7B,IAAI,YAAqC,CAAC;QAE1C,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACxC,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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getmcp/generators",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Config generators that transform canonical MCP server definitions to app-specific formats",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -18,7 +18,6 @@
18
18
  ],
19
19
  "scripts": {
20
20
  "build": "tsc",
21
- "test": "vitest run",
22
21
  "lint": "tsc --noEmit",
23
22
  "prepublishOnly": "npm run build"
24
23
  },