@fractalizer/mcp-cli 0.3.18 → 1.0.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/README.md +158 -266
- package/dist/commands/connect.command.d.ts +18 -15
- package/dist/commands/connect.command.d.ts.map +1 -1
- package/dist/commands/connect.command.js +66 -40
- package/dist/commands/connect.command.js.map +1 -1
- package/dist/commands/disconnect.command.d.ts +5 -17
- package/dist/commands/disconnect.command.d.ts.map +1 -1
- package/dist/commands/disconnect.command.js +4 -15
- package/dist/commands/disconnect.command.js.map +1 -1
- package/dist/commands/doctor.command.d.ts +34 -0
- package/dist/commands/doctor.command.d.ts.map +1 -0
- package/dist/commands/doctor.command.js +321 -0
- package/dist/commands/doctor.command.js.map +1 -0
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/list.command.d.ts +4 -9
- package/dist/commands/list.command.d.ts.map +1 -1
- package/dist/commands/list.command.js +1 -5
- package/dist/commands/list.command.js.map +1 -1
- package/dist/commands/status.command.d.ts +6 -13
- package/dist/commands/status.command.d.ts.map +1 -1
- package/dist/commands/status.command.js +15 -12
- package/dist/commands/status.command.js.map +1 -1
- package/dist/commands/validate.command.d.ts +6 -11
- package/dist/commands/validate.command.d.ts.map +1 -1
- package/dist/commands/validate.command.js +15 -19
- package/dist/commands/validate.command.js.map +1 -1
- package/dist/connectors/base/base-connector.d.ts +31 -55
- package/dist/connectors/base/base-connector.d.ts.map +1 -1
- package/dist/connectors/base/base-connector.js +71 -57
- package/dist/connectors/base/base-connector.js.map +1 -1
- package/dist/connectors/base/configurable-connector.d.ts +89 -24
- package/dist/connectors/base/configurable-connector.d.ts.map +1 -1
- package/dist/connectors/base/configurable-connector.js +266 -23
- package/dist/connectors/base/configurable-connector.js.map +1 -1
- package/dist/connectors/base/connector.interface.d.ts +29 -20
- package/dist/connectors/base/connector.interface.d.ts.map +1 -1
- package/dist/connectors/base/index.d.ts +0 -1
- package/dist/connectors/base/index.d.ts.map +1 -1
- package/dist/connectors/base/index.js +0 -1
- package/dist/connectors/base/index.js.map +1 -1
- package/dist/connectors/claude-code/claude-code.connector.d.ts +100 -21
- package/dist/connectors/claude-code/claude-code.connector.d.ts.map +1 -1
- package/dist/connectors/claude-code/claude-code.connector.js +221 -40
- package/dist/connectors/claude-code/claude-code.connector.js.map +1 -1
- package/dist/connectors/connector-factory.d.ts +15 -15
- package/dist/connectors/connector-factory.d.ts.map +1 -1
- package/dist/connectors/connector-factory.js +61 -18
- package/dist/connectors/connector-factory.js.map +1 -1
- package/dist/connectors/index.d.ts +0 -4
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +2 -8
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/registry.d.ts +20 -27
- package/dist/connectors/registry.d.ts.map +1 -1
- package/dist/connectors/registry.js +34 -34
- package/dist/connectors/registry.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/{base.types.d.ts → client.types.d.ts} +30 -30
- package/dist/types/client.types.d.ts.map +1 -0
- package/dist/types/client.types.js +6 -0
- package/dist/types/client.types.js.map +1 -0
- package/dist/types/doctor.types.d.ts +91 -0
- package/dist/types/doctor.types.d.ts.map +1 -0
- package/dist/types/doctor.types.js +12 -0
- package/dist/types/doctor.types.js.map +1 -0
- package/dist/types/launch.types.d.ts +59 -0
- package/dist/types/launch.types.d.ts.map +1 -0
- package/dist/types/launch.types.js +6 -0
- package/dist/types/launch.types.js.map +1 -0
- package/dist/types.d.ts +23 -14
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +9 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/command-executor.d.ts +39 -3
- package/dist/utils/command-executor.d.ts.map +1 -1
- package/dist/utils/command-executor.js +95 -8
- package/dist/utils/command-executor.js.map +1 -1
- package/dist/utils/config-manager.d.ts +25 -42
- package/dist/utils/config-manager.d.ts.map +1 -1
- package/dist/utils/config-manager.js +21 -49
- package/dist/utils/config-manager.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/interactive-prompter.d.ts +16 -64
- package/dist/utils/interactive-prompter.d.ts.map +1 -1
- package/dist/utils/interactive-prompter.js +12 -65
- package/dist/utils/interactive-prompter.js.map +1 -1
- package/dist/utils/launch-spec-helpers.d.ts +38 -0
- package/dist/utils/launch-spec-helpers.d.ts.map +1 -0
- package/dist/utils/launch-spec-helpers.js +131 -0
- package/dist/utils/launch-spec-helpers.js.map +1 -0
- package/package.json +2 -2
- package/dist/connectors/base/file-based-connector.d.ts +0 -97
- package/dist/connectors/base/file-based-connector.d.ts.map +0 -1
- package/dist/connectors/base/file-based-connector.js +0 -185
- package/dist/connectors/base/file-based-connector.js.map +0 -1
- package/dist/connectors/claude-desktop/claude-desktop.connector.d.ts +0 -38
- package/dist/connectors/claude-desktop/claude-desktop.connector.d.ts.map +0 -1
- package/dist/connectors/claude-desktop/claude-desktop.connector.js +0 -68
- package/dist/connectors/claude-desktop/claude-desktop.connector.js.map +0 -1
- package/dist/connectors/codex/codex.connector.d.ts +0 -51
- package/dist/connectors/codex/codex.connector.d.ts.map +0 -1
- package/dist/connectors/codex/codex.connector.js +0 -76
- package/dist/connectors/codex/codex.connector.js.map +0 -1
- package/dist/connectors/gemini/gemini.connector.d.ts +0 -41
- package/dist/connectors/gemini/gemini.connector.d.ts.map +0 -1
- package/dist/connectors/gemini/gemini.connector.js +0 -61
- package/dist/connectors/gemini/gemini.connector.js.map +0 -1
- package/dist/connectors/qwen/qwen.connector.d.ts +0 -41
- package/dist/connectors/qwen/qwen.connector.d.ts.map +0 -1
- package/dist/connectors/qwen/qwen.connector.js +0 -61
- package/dist/connectors/qwen/qwen.connector.js.map +0 -1
- package/dist/types/base.types.d.ts.map +0 -1
- package/dist/types/base.types.js +0 -6
- package/dist/types/base.types.js.map +0 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Утилиты для работы со спецификациями запуска MCP серверов.
|
|
3
|
+
*
|
|
4
|
+
* Извлечены из {@link BaseConnector.validateLaunchSpec} и
|
|
5
|
+
* {@link ConfigurableConnector.commandExistsOnDisk} для переиспользования
|
|
6
|
+
* в команде `doctor` без дублирования логики.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import * as path from 'node:path';
|
|
11
|
+
/**
|
|
12
|
+
* Список Node-флагов, требующих value (один следующий arg — это значение).
|
|
13
|
+
*
|
|
14
|
+
* Используется парсером argv для команды `node`: после такого флага следующий
|
|
15
|
+
* positional аргумент НЕ является скриптом. Источник — `node --help` / docs.
|
|
16
|
+
*
|
|
17
|
+
* Поддерживаются обе формы: `--flag value` и `--flag=value`. Для `--flag=value`
|
|
18
|
+
* значение зашито в сам arg и следующий arg не пропускается.
|
|
19
|
+
*/
|
|
20
|
+
const NODE_FLAGS_WITH_VALUE = new Set([
|
|
21
|
+
'--import',
|
|
22
|
+
'--require',
|
|
23
|
+
'-r',
|
|
24
|
+
'--experimental-loader',
|
|
25
|
+
'--loader',
|
|
26
|
+
'--experimental-policy',
|
|
27
|
+
'--inspect-publish-uid',
|
|
28
|
+
'--cpu-prof-dir',
|
|
29
|
+
'--cpu-prof-name',
|
|
30
|
+
'--cpu-prof-interval',
|
|
31
|
+
'--heap-prof-dir',
|
|
32
|
+
'--heap-prof-name',
|
|
33
|
+
'--heap-prof-interval',
|
|
34
|
+
'--diagnostic-dir',
|
|
35
|
+
'--redirect-warnings',
|
|
36
|
+
'--report-dir',
|
|
37
|
+
'--report-directory',
|
|
38
|
+
'--report-filename',
|
|
39
|
+
'--report-signal',
|
|
40
|
+
'--tls-cipher-list',
|
|
41
|
+
'--tls-keylog',
|
|
42
|
+
'--use-openssl-ca',
|
|
43
|
+
'--use-bundled-ca',
|
|
44
|
+
'--max-http-header-size',
|
|
45
|
+
'--max-old-space-size',
|
|
46
|
+
'--max-semi-space-size',
|
|
47
|
+
'--openssl-config',
|
|
48
|
+
'--title',
|
|
49
|
+
'--unhandled-rejections',
|
|
50
|
+
'--v8-pool-size',
|
|
51
|
+
]);
|
|
52
|
+
/**
|
|
53
|
+
* Проверить, является ли аргумент Node-флагом «без значения».
|
|
54
|
+
*
|
|
55
|
+
* Эвристика: всё, что начинается с `-` или `--` и не из {@link NODE_FLAGS_WITH_VALUE},
|
|
56
|
+
* считается флагом-without-value. Это покрывает `--no-warnings`,
|
|
57
|
+
* `--enable-source-maps`, `--inspect`, `--inspect-brk`, `--use-strict`,
|
|
58
|
+
* `--zero-fill-buffers` и т.п.
|
|
59
|
+
*
|
|
60
|
+
* Edge case: формы `--flag=value` (с `=`) всегда возвращают `true` — значение
|
|
61
|
+
* зашито в сам arg, следующий arg не пропускается.
|
|
62
|
+
*/
|
|
63
|
+
function isNodeFlag(arg) {
|
|
64
|
+
return arg.startsWith('-');
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Определить путь к исполняемому файлу, который реально нужно проверить на диске,
|
|
68
|
+
* из спецификации запуска.
|
|
69
|
+
*
|
|
70
|
+
* Логика выровнена с {@link BaseConnector.validateLaunchSpec}:
|
|
71
|
+
* - Если `spec.command` — абсолютный путь → возвращаем его.
|
|
72
|
+
* - Если `spec.command === 'node'` → парсим `args` как Node argv:
|
|
73
|
+
* пропускаем флаги-without-value (любые `-*`/`--*` без `=` не из whitelist)
|
|
74
|
+
* и пары `flag value` для флагов из {@link NODE_FLAGS_WITH_VALUE}.
|
|
75
|
+
* Первый positional аргумент после options — это путь к скрипту.
|
|
76
|
+
* Возвращаем его, только если он абсолютный (иначе `null`).
|
|
77
|
+
* - Во всех остальных случаях (`npx`, `pipx`, относительная команда из PATH) →
|
|
78
|
+
* возвращаем `null` (проверка на диске не применима).
|
|
79
|
+
*
|
|
80
|
+
* @param spec - Спецификация запуска
|
|
81
|
+
* @returns Абсолютный путь к проверяемому файлу или `null`
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* // node /abs/server.cjs → '/abs/server.cjs'
|
|
86
|
+
* // node --no-warnings /abs/server.cjs → '/abs/server.cjs'
|
|
87
|
+
* // node --import /abs/preload.mjs /abs/server.cjs → '/abs/server.cjs'
|
|
88
|
+
* // node --import=/abs/preload.mjs /abs/server.cjs → '/abs/server.cjs'
|
|
89
|
+
* // node --version → null (нет positional абсолютного пути)
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export function resolveExecutablePath(spec) {
|
|
93
|
+
if (path.isAbsolute(spec.command)) {
|
|
94
|
+
return spec.command;
|
|
95
|
+
}
|
|
96
|
+
if (spec.command === 'node') {
|
|
97
|
+
return resolveNodeScriptPath(spec.args);
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Найти путь к скрипту в Node argv.
|
|
103
|
+
*
|
|
104
|
+
* Алгоритм:
|
|
105
|
+
* 1. Идём по args слева направо.
|
|
106
|
+
* 2. Если arg вида `--flag=value` или `-f` (но не из {@link NODE_FLAGS_WITH_VALUE}) —
|
|
107
|
+
* это флаг-without-value, переходим к следующему.
|
|
108
|
+
* 3. Если arg ровно из {@link NODE_FLAGS_WITH_VALUE} — пропускаем следующий arg как value.
|
|
109
|
+
* 4. Первый non-flag positional argument — это путь к скрипту.
|
|
110
|
+
* 5. Возвращаем его, если абсолютный; иначе `null`.
|
|
111
|
+
*/
|
|
112
|
+
function resolveNodeScriptPath(args) {
|
|
113
|
+
for (let i = 0; i < args.length; i++) {
|
|
114
|
+
const arg = args[i] ?? '';
|
|
115
|
+
if (!isNodeFlag(arg)) {
|
|
116
|
+
// Первый positional — это скрипт
|
|
117
|
+
return path.isAbsolute(arg) ? arg : null;
|
|
118
|
+
}
|
|
119
|
+
// Это флаг. Если форма '--flag=value' — value зашит, следующий arg не value.
|
|
120
|
+
if (arg.includes('=')) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
// Если флаг из known-with-value — пропускаем следующий аргумент как value.
|
|
124
|
+
if (NODE_FLAGS_WITH_VALUE.has(arg)) {
|
|
125
|
+
i++; // skip value
|
|
126
|
+
}
|
|
127
|
+
// Иначе — флаг-without-value (например, --no-warnings), просто продолжаем.
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=launch-spec-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-spec-helpers.js","sourceRoot":"","sources":["../../src/utils/launch-spec-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC;;;;;;;;GAQG;AACH,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IACzD,UAAU;IACV,WAAW;IACX,IAAI;IACJ,uBAAuB;IACvB,UAAU;IACV,uBAAuB;IACvB,uBAAuB;IACvB,gBAAgB;IAChB,iBAAiB;IACjB,qBAAqB;IACrB,iBAAiB;IACjB,kBAAkB;IAClB,sBAAsB;IACtB,kBAAkB;IAClB,qBAAqB;IACrB,cAAc;IACd,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,mBAAmB;IACnB,cAAc;IACd,kBAAkB;IAClB,kBAAkB;IAClB,wBAAwB;IACxB,sBAAsB;IACtB,uBAAuB;IACvB,kBAAkB;IAClB,SAAS;IACT,wBAAwB;IACxB,gBAAgB;CACjB,CAAC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAsB;IAC1D,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,qBAAqB,CAAC,IAAuB;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,iCAAiC;YACjC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3C,CAAC;QACD,6EAA6E;QAC7E,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QACD,2EAA2E;QAC3E,IAAI,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,CAAC,EAAE,CAAC,CAAC,aAAa;QACpB,CAAC;QACD,2EAA2E;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fractalizer/mcp-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Generic CLI for MCP server connection management",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"validate:quiet": "npm run lint:quiet && npm run typecheck && npm run test:quiet && npm run cpd:quiet && npm run depcruise && npm run validate:docs"
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@fractalizer/mcp-infrastructure": "^0.
|
|
76
|
+
"@fractalizer/mcp-infrastructure": "^1.0.0",
|
|
77
77
|
"@iarna/toml": "^2.2.5",
|
|
78
78
|
"chalk": "^5.6.2",
|
|
79
79
|
"commander": "^14.0.3",
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Базовый класс для file-based MCP коннекторов (JSON/TOML конфигурации)
|
|
3
|
-
*/
|
|
4
|
-
import { BaseConnector } from './base-connector.js';
|
|
5
|
-
import type { BaseMCPServerConfig, ConnectionStatus } from '../../types.js';
|
|
6
|
-
/**
|
|
7
|
-
* Формат конфигурационного файла
|
|
8
|
-
*/
|
|
9
|
-
export type ConfigFormat = 'json' | 'toml';
|
|
10
|
-
/**
|
|
11
|
-
* Базовый класс для connectors, работающих с файлами конфигурации
|
|
12
|
-
*
|
|
13
|
-
* @template TConfig - Тип конфигурации MCP сервера
|
|
14
|
-
* @template TKey - Ключ для серверов в конфиге ('mcpServers', 'mcp_servers' и т.д.)
|
|
15
|
-
* @template TFormat - Формат файла ('json' или 'toml')
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```typescript
|
|
19
|
-
* // JSON connector с ключом mcpServers
|
|
20
|
-
* class MyConnector extends FileBasedConnector<MyServerConfig, 'mcpServers', 'json'> {
|
|
21
|
-
* protected getConfigPath(): string {
|
|
22
|
-
* return path.join(os.homedir(), '.my-client/config.json');
|
|
23
|
-
* }
|
|
24
|
-
* }
|
|
25
|
-
*
|
|
26
|
-
* // TOML connector с ключом mcp_servers
|
|
27
|
-
* class MyTOMLConnector extends FileBasedConnector<MyServerConfig, 'mcp_servers', 'toml'> {
|
|
28
|
-
* protected getConfigPath(): string {
|
|
29
|
-
* return path.join(os.homedir(), '.my-client/config.toml');
|
|
30
|
-
* }
|
|
31
|
-
* }
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
export declare abstract class FileBasedConnector<TConfig extends BaseMCPServerConfig = BaseMCPServerConfig, TKey extends string = 'mcpServers', TFormat extends ConfigFormat = 'json'> extends BaseConnector<TConfig> {
|
|
35
|
-
/**
|
|
36
|
-
* Получить путь к конфигурационному файлу
|
|
37
|
-
* Должен быть реализован в подклассе
|
|
38
|
-
*/
|
|
39
|
-
protected abstract getConfigPath(): string;
|
|
40
|
-
/**
|
|
41
|
-
* Получить имя MCP сервера для записи в конфигурацию
|
|
42
|
-
* Должен быть реализован в подклассе
|
|
43
|
-
*/
|
|
44
|
-
protected abstract getServerName(): string;
|
|
45
|
-
/**
|
|
46
|
-
* Получить относительный путь к точке входа сервера от projectPath
|
|
47
|
-
* Должен быть реализован в подклассе
|
|
48
|
-
*/
|
|
49
|
-
protected abstract getEntryPoint(): string;
|
|
50
|
-
/**
|
|
51
|
-
* Получить команду для запуска сервера
|
|
52
|
-
* По умолчанию 'node', можно переопределить
|
|
53
|
-
*/
|
|
54
|
-
protected getCommand(): string;
|
|
55
|
-
/**
|
|
56
|
-
* Получить ключ для серверов в конфиге
|
|
57
|
-
* По умолчанию 'mcpServers', можно переопределить
|
|
58
|
-
*/
|
|
59
|
-
protected getServerKey(): TKey;
|
|
60
|
-
/**
|
|
61
|
-
* Получить формат файла
|
|
62
|
-
* По умолчанию 'json', можно переопределить
|
|
63
|
-
*/
|
|
64
|
-
protected getConfigFormat(): TFormat;
|
|
65
|
-
/**
|
|
66
|
-
* Проверить, установлен ли клиент
|
|
67
|
-
* По умолчанию проверяет наличие директории конфига
|
|
68
|
-
*/
|
|
69
|
-
isInstalled(): Promise<boolean>;
|
|
70
|
-
/**
|
|
71
|
-
* Получить статус подключения
|
|
72
|
-
*/
|
|
73
|
-
getStatus(): Promise<ConnectionStatus>;
|
|
74
|
-
/**
|
|
75
|
-
* Подключить MCP сервер
|
|
76
|
-
*
|
|
77
|
-
* @param serverConfig - Конфигурация сервера (должна содержать env с переменными окружения)
|
|
78
|
-
*/
|
|
79
|
-
connect(serverConfig: TConfig): Promise<void>;
|
|
80
|
-
/**
|
|
81
|
-
* Отключить MCP сервер
|
|
82
|
-
*/
|
|
83
|
-
disconnect(): Promise<void>;
|
|
84
|
-
/**
|
|
85
|
-
* Прочитать конфигурацию из файла
|
|
86
|
-
*/
|
|
87
|
-
private readConfig;
|
|
88
|
-
/**
|
|
89
|
-
* Записать конфигурацию в файл
|
|
90
|
-
*/
|
|
91
|
-
private writeConfig;
|
|
92
|
-
/**
|
|
93
|
-
* Создать дефолтную конфигурацию
|
|
94
|
-
*/
|
|
95
|
-
private createDefaultConfig;
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=file-based-connector.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-based-connector.d.ts","sourceRoot":"","sources":["../../../src/connectors/base/file-based-connector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAGjB,MAAM,gBAAgB,CAAC;AAGxB;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAS3C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,8BAAsB,kBAAkB,CACtC,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,EACzD,IAAI,SAAS,MAAM,GAAG,YAAY,EAClC,OAAO,SAAS,YAAY,GAAG,MAAM,CACrC,SAAQ,aAAa,CAAC,OAAO,CAAC;IAC9B;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,MAAM;IAE1C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,MAAM;IAE1C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,MAAM;IAE1C;;;OAGG;IACH,SAAS,CAAC,UAAU,IAAI,MAAM;IAI9B;;;OAGG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAI9B;;;OAGG;IACH,SAAS,CAAC,eAAe,IAAI,OAAO;IAIpC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAiC5C;;;;OAIG;IACG,OAAO,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCnD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC;;OAEG;YACW,UAAU;IAWxB;;OAEG;YACW,WAAW;IAWzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAI5B"}
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Базовый класс для file-based MCP коннекторов (JSON/TOML конфигурации)
|
|
3
|
-
*/
|
|
4
|
-
import * as path from 'node:path';
|
|
5
|
-
import { BaseConnector } from './base-connector.js';
|
|
6
|
-
import { FileManager } from '../../utils/file-manager.js';
|
|
7
|
-
/**
|
|
8
|
-
* Type guard для проверки Error
|
|
9
|
-
*/
|
|
10
|
-
function isError(error) {
|
|
11
|
-
return error instanceof Error;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Базовый класс для connectors, работающих с файлами конфигурации
|
|
15
|
-
*
|
|
16
|
-
* @template TConfig - Тип конфигурации MCP сервера
|
|
17
|
-
* @template TKey - Ключ для серверов в конфиге ('mcpServers', 'mcp_servers' и т.д.)
|
|
18
|
-
* @template TFormat - Формат файла ('json' или 'toml')
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* // JSON connector с ключом mcpServers
|
|
23
|
-
* class MyConnector extends FileBasedConnector<MyServerConfig, 'mcpServers', 'json'> {
|
|
24
|
-
* protected getConfigPath(): string {
|
|
25
|
-
* return path.join(os.homedir(), '.my-client/config.json');
|
|
26
|
-
* }
|
|
27
|
-
* }
|
|
28
|
-
*
|
|
29
|
-
* // TOML connector с ключом mcp_servers
|
|
30
|
-
* class MyTOMLConnector extends FileBasedConnector<MyServerConfig, 'mcp_servers', 'toml'> {
|
|
31
|
-
* protected getConfigPath(): string {
|
|
32
|
-
* return path.join(os.homedir(), '.my-client/config.toml');
|
|
33
|
-
* }
|
|
34
|
-
* }
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
export class FileBasedConnector extends BaseConnector {
|
|
38
|
-
/**
|
|
39
|
-
* Получить команду для запуска сервера
|
|
40
|
-
* По умолчанию 'node', можно переопределить
|
|
41
|
-
*/
|
|
42
|
-
getCommand() {
|
|
43
|
-
return 'node';
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Получить ключ для серверов в конфиге
|
|
47
|
-
* По умолчанию 'mcpServers', можно переопределить
|
|
48
|
-
*/
|
|
49
|
-
getServerKey() {
|
|
50
|
-
return 'mcpServers';
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Получить формат файла
|
|
54
|
-
* По умолчанию 'json', можно переопределить
|
|
55
|
-
*/
|
|
56
|
-
getConfigFormat() {
|
|
57
|
-
return 'json';
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Проверить, установлен ли клиент
|
|
61
|
-
* По умолчанию проверяет наличие директории конфига
|
|
62
|
-
*/
|
|
63
|
-
async isInstalled() {
|
|
64
|
-
const configDir = path.dirname(this.getConfigPath());
|
|
65
|
-
return FileManager.exists(configDir);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Получить статус подключения
|
|
69
|
-
*/
|
|
70
|
-
async getStatus() {
|
|
71
|
-
try {
|
|
72
|
-
const configPath = this.getConfigPath();
|
|
73
|
-
if (!(await FileManager.exists(configPath))) {
|
|
74
|
-
return { connected: false, error: 'Конфигурационный файл не найден' };
|
|
75
|
-
}
|
|
76
|
-
const config = await this.readConfig();
|
|
77
|
-
const serverKey = this.getServerKey();
|
|
78
|
-
const servers = config[serverKey];
|
|
79
|
-
const serverName = this.getServerName();
|
|
80
|
-
if (servers?.[serverName]) {
|
|
81
|
-
return {
|
|
82
|
-
connected: true,
|
|
83
|
-
details: {
|
|
84
|
-
configPath,
|
|
85
|
-
metadata: { serverConfig: servers[serverName] },
|
|
86
|
-
},
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
return { connected: false };
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
const errorMessage = isError(error) ? error.message : String(error);
|
|
93
|
-
return {
|
|
94
|
-
connected: false,
|
|
95
|
-
error: `Ошибка чтения конфига: ${errorMessage}`,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Подключить MCP сервер
|
|
101
|
-
*
|
|
102
|
-
* @param serverConfig - Конфигурация сервера (должна содержать env с переменными окружения)
|
|
103
|
-
*/
|
|
104
|
-
async connect(serverConfig) {
|
|
105
|
-
const configPath = this.getConfigPath();
|
|
106
|
-
const configDir = path.dirname(configPath);
|
|
107
|
-
// Создать директорию если не существует
|
|
108
|
-
await FileManager.ensureDir(configDir);
|
|
109
|
-
// Прочитать существующую конфигурацию или создать новую
|
|
110
|
-
let config;
|
|
111
|
-
if (await FileManager.exists(configPath)) {
|
|
112
|
-
config = await this.readConfig();
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
config = this.createDefaultConfig();
|
|
116
|
-
}
|
|
117
|
-
// Добавить/обновить MCP сервер
|
|
118
|
-
const serverKey = this.getServerKey();
|
|
119
|
-
config[serverKey] ??= {};
|
|
120
|
-
// Type assertion needed for generic type modification
|
|
121
|
-
const servers = config[serverKey];
|
|
122
|
-
const serverName = this.getServerName();
|
|
123
|
-
const entryPoint = this.getEntryPoint();
|
|
124
|
-
const command = this.getCommand();
|
|
125
|
-
servers[serverName] = {
|
|
126
|
-
command,
|
|
127
|
-
args: [path.join(serverConfig.projectPath, entryPoint)],
|
|
128
|
-
env: serverConfig.env ?? {},
|
|
129
|
-
};
|
|
130
|
-
// Записать конфигурацию
|
|
131
|
-
await this.writeConfig(config);
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Отключить MCP сервер
|
|
135
|
-
*/
|
|
136
|
-
async disconnect() {
|
|
137
|
-
const configPath = this.getConfigPath();
|
|
138
|
-
if (!(await FileManager.exists(configPath))) {
|
|
139
|
-
return; // Ничего не делаем, если файла нет
|
|
140
|
-
}
|
|
141
|
-
const config = await this.readConfig();
|
|
142
|
-
const serverKey = this.getServerKey();
|
|
143
|
-
const servers = config[serverKey];
|
|
144
|
-
const serverName = this.getServerName();
|
|
145
|
-
if (servers?.[serverName]) {
|
|
146
|
-
// Type assertion needed for generic type modification
|
|
147
|
-
delete servers[serverName];
|
|
148
|
-
await this.writeConfig(config);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Прочитать конфигурацию из файла
|
|
153
|
-
*/
|
|
154
|
-
async readConfig() {
|
|
155
|
-
const configPath = this.getConfigPath();
|
|
156
|
-
const format = this.getConfigFormat();
|
|
157
|
-
if (format === 'json') {
|
|
158
|
-
return FileManager.readJSON(configPath);
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
return FileManager.readTOML(configPath);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Записать конфигурацию в файл
|
|
166
|
-
*/
|
|
167
|
-
async writeConfig(config) {
|
|
168
|
-
const configPath = this.getConfigPath();
|
|
169
|
-
const format = this.getConfigFormat();
|
|
170
|
-
if (format === 'json') {
|
|
171
|
-
await FileManager.writeJSON(configPath, config);
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
await FileManager.writeTOML(configPath, config);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Создать дефолтную конфигурацию
|
|
179
|
-
*/
|
|
180
|
-
createDefaultConfig() {
|
|
181
|
-
const serverKey = this.getServerKey();
|
|
182
|
-
return { [serverKey]: {} };
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
//# sourceMappingURL=file-based-connector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-based-connector.js","sourceRoot":"","sources":["../../../src/connectors/base/file-based-connector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Коннектор для Claude Desktop
|
|
3
|
-
*/
|
|
4
|
-
import { FileBasedConnector } from '../base/file-based-connector.js';
|
|
5
|
-
import type { BaseMCPServerConfig, MCPClientInfo } from '../../types.js';
|
|
6
|
-
/**
|
|
7
|
-
* Коннектор для Claude Desktop приложения
|
|
8
|
-
* Поддерживает macOS, Linux и Windows
|
|
9
|
-
*
|
|
10
|
-
* @template TConfig - Тип конфигурации MCP сервера
|
|
11
|
-
*/
|
|
12
|
-
export declare class ClaudeDesktopConnector<TConfig extends BaseMCPServerConfig = BaseMCPServerConfig> extends FileBasedConnector<TConfig, 'mcpServers', 'json'> {
|
|
13
|
-
private readonly configPath;
|
|
14
|
-
private readonly serverName;
|
|
15
|
-
private readonly entryPoint;
|
|
16
|
-
/**
|
|
17
|
-
* @param serverName - Имя MCP сервера для записи в конфигурацию
|
|
18
|
-
* @param entryPoint - Относительный путь к точке входа сервера от projectPath
|
|
19
|
-
*/
|
|
20
|
-
constructor(serverName: string, entryPoint: string);
|
|
21
|
-
/**
|
|
22
|
-
* Получить информацию о клиенте
|
|
23
|
-
*/
|
|
24
|
-
getClientInfo(): MCPClientInfo;
|
|
25
|
-
/**
|
|
26
|
-
* Получить путь к конфигурационному файлу
|
|
27
|
-
*/
|
|
28
|
-
protected getConfigPath(): string;
|
|
29
|
-
/**
|
|
30
|
-
* Получить имя MCP сервера
|
|
31
|
-
*/
|
|
32
|
-
protected getServerName(): string;
|
|
33
|
-
/**
|
|
34
|
-
* Получить точку входа сервера
|
|
35
|
-
*/
|
|
36
|
-
protected getEntryPoint(): string;
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=claude-desktop.connector.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-desktop.connector.d.ts","sourceRoot":"","sources":["../../../src/connectors/claude-desktop/claude-desktop.connector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEzE;;;;;GAKG;AACH,qBAAa,sBAAsB,CACjC,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,CACzD,SAAQ,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC;;;OAGG;gBACS,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAsBlD;;OAEG;IACH,aAAa,IAAI,aAAa;IAU9B;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,MAAM;IAIjC;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,MAAM;IAIjC;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,MAAM;CAGlC"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Коннектор для Claude Desktop
|
|
3
|
-
*/
|
|
4
|
-
import * as os from 'node:os';
|
|
5
|
-
import * as path from 'node:path';
|
|
6
|
-
import { FileBasedConnector } from '../base/file-based-connector.js';
|
|
7
|
-
/**
|
|
8
|
-
* Коннектор для Claude Desktop приложения
|
|
9
|
-
* Поддерживает macOS, Linux и Windows
|
|
10
|
-
*
|
|
11
|
-
* @template TConfig - Тип конфигурации MCP сервера
|
|
12
|
-
*/
|
|
13
|
-
export class ClaudeDesktopConnector extends FileBasedConnector {
|
|
14
|
-
configPath;
|
|
15
|
-
serverName;
|
|
16
|
-
entryPoint;
|
|
17
|
-
/**
|
|
18
|
-
* @param serverName - Имя MCP сервера для записи в конфигурацию
|
|
19
|
-
* @param entryPoint - Относительный путь к точке входа сервера от projectPath
|
|
20
|
-
*/
|
|
21
|
-
constructor(serverName, entryPoint) {
|
|
22
|
-
super();
|
|
23
|
-
this.serverName = serverName;
|
|
24
|
-
this.entryPoint = entryPoint;
|
|
25
|
-
const platform = os.platform();
|
|
26
|
-
if (platform === 'darwin') {
|
|
27
|
-
this.configPath = path.join(os.homedir(), 'Library/Application Support/Claude/claude_desktop_config.json');
|
|
28
|
-
}
|
|
29
|
-
else if (platform === 'linux') {
|
|
30
|
-
this.configPath = path.join(os.homedir(), '.config/claude/claude_desktop_config.json');
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
// Windows
|
|
34
|
-
this.configPath = path.join(process.env['APPDATA'] ?? '', 'Claude/claude_desktop_config.json');
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Получить информацию о клиенте
|
|
39
|
-
*/
|
|
40
|
-
getClientInfo() {
|
|
41
|
-
return {
|
|
42
|
-
name: 'claude-desktop',
|
|
43
|
-
displayName: 'Claude Desktop',
|
|
44
|
-
description: 'Официальное десктопное приложение Claude от Anthropic',
|
|
45
|
-
configPath: this.configPath,
|
|
46
|
-
platforms: ['darwin', 'linux', 'win32'],
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Получить путь к конфигурационному файлу
|
|
51
|
-
*/
|
|
52
|
-
getConfigPath() {
|
|
53
|
-
return this.configPath;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Получить имя MCP сервера
|
|
57
|
-
*/
|
|
58
|
-
getServerName() {
|
|
59
|
-
return this.serverName;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Получить точку входа сервера
|
|
63
|
-
*/
|
|
64
|
-
getEntryPoint() {
|
|
65
|
-
return this.entryPoint;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=claude-desktop.connector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-desktop.connector.js","sourceRoot":"","sources":["../../../src/connectors/claude-desktop/claude-desktop.connector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGrE;;;;;GAKG;AACH,MAAM,OAAO,sBAEX,SAAQ,kBAAiD;IACxC,UAAU,CAAS;IACnB,UAAU,CAAS;IACnB,UAAU,CAAS;IAEpC;;;OAGG;IACH,YAAY,UAAkB,EAAE,UAAkB;QAChD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CACzB,EAAE,CAAC,OAAO,EAAE,EACZ,+DAA+D,CAChE,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,2CAA2C,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,UAAU;YACV,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CACzB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAC5B,mCAAmC,CACpC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,uDAAuD;YACpE,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;SACxC,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,aAAa;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACO,aAAa;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACO,aAAa;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Коннектор для Codex
|
|
3
|
-
*
|
|
4
|
-
* @deprecated Используйте `createConnector('codex', serverName, entryPoint)` из connector-factory.ts
|
|
5
|
-
*/
|
|
6
|
-
import { FileBasedConnector } from '../base/file-based-connector.js';
|
|
7
|
-
import type { BaseMCPServerConfig, MCPClientInfo } from '../../types.js';
|
|
8
|
-
/**
|
|
9
|
-
* Коннектор для Codex CLI от OpenAI
|
|
10
|
-
* Codex использует TOML конфигурацию в ~/.codex/config.toml
|
|
11
|
-
*
|
|
12
|
-
* @deprecated Используйте `createConnector('codex', serverName, entryPoint)` из connector-factory.ts
|
|
13
|
-
* @template TConfig - Тип конфигурации MCP сервера
|
|
14
|
-
*/
|
|
15
|
-
export declare class CodexConnector<TConfig extends BaseMCPServerConfig = BaseMCPServerConfig> extends FileBasedConnector<TConfig, 'mcp_servers', 'toml'> {
|
|
16
|
-
private readonly configPath;
|
|
17
|
-
private readonly serverName;
|
|
18
|
-
private readonly entryPoint;
|
|
19
|
-
/**
|
|
20
|
-
* @param serverName - Имя MCP сервера для записи в конфигурацию
|
|
21
|
-
* @param entryPoint - Относительный путь к точке входа сервера от projectPath
|
|
22
|
-
*/
|
|
23
|
-
constructor(serverName: string, entryPoint: string);
|
|
24
|
-
/**
|
|
25
|
-
* Получить информацию о клиенте
|
|
26
|
-
*/
|
|
27
|
-
getClientInfo(): MCPClientInfo;
|
|
28
|
-
/**
|
|
29
|
-
* Получить путь к конфигурационному файлу
|
|
30
|
-
*/
|
|
31
|
-
protected getConfigPath(): string;
|
|
32
|
-
/**
|
|
33
|
-
* Получить имя MCP сервера
|
|
34
|
-
*/
|
|
35
|
-
protected getServerName(): string;
|
|
36
|
-
/**
|
|
37
|
-
* Получить точку входа сервера
|
|
38
|
-
*/
|
|
39
|
-
protected getEntryPoint(): string;
|
|
40
|
-
/**
|
|
41
|
-
* Получить ключ для серверов в конфиге
|
|
42
|
-
* Codex использует 'mcp_servers' вместо 'mcpServers'
|
|
43
|
-
*/
|
|
44
|
-
protected getServerKey(): 'mcp_servers';
|
|
45
|
-
/**
|
|
46
|
-
* Получить формат файла
|
|
47
|
-
* Codex использует TOML формат
|
|
48
|
-
*/
|
|
49
|
-
protected getConfigFormat(): 'toml';
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=codex.connector.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex.connector.d.ts","sourceRoot":"","sources":["../../../src/connectors/codex/codex.connector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEzE;;;;;;GAMG;AACH,qBAAa,cAAc,CACzB,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,CACzD,SAAQ,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC;;;OAGG;gBACS,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAOlD;;OAEG;IACH,aAAa,IAAI,aAAa;IAW9B;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,MAAM;IAIjC;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,MAAM;IAIjC;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,MAAM;IAIjC;;;OAGG;cACgB,YAAY,IAAI,aAAa;IAIhD;;;OAGG;cACgB,eAAe,IAAI,MAAM;CAG7C"}
|