@hypnosis/docker-mcp-server 1.0.1 → 1.0.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.
Files changed (53) hide show
  1. package/dist/adapters/adapter-registry.d.ts +5 -5
  2. package/dist/adapters/adapter-registry.js +5 -5
  3. package/dist/adapters/database-adapter.d.ts +8 -8
  4. package/dist/adapters/database-adapter.js +1 -1
  5. package/dist/adapters/postgresql.d.ts +8 -8
  6. package/dist/adapters/postgresql.js +26 -26
  7. package/dist/adapters/postgresql.js.map +1 -1
  8. package/dist/adapters/redis.d.ts +9 -9
  9. package/dist/adapters/redis.js +23 -23
  10. package/dist/adapters/redis.js.map +1 -1
  11. package/dist/adapters/sqlite.d.ts +6 -6
  12. package/dist/adapters/sqlite.js +14 -14
  13. package/dist/adapters/sqlite.js.map +1 -1
  14. package/dist/adapters/types.d.ts +6 -6
  15. package/dist/adapters/types.js +1 -1
  16. package/dist/discovery/project-discovery.d.ts.map +1 -1
  17. package/dist/discovery/project-discovery.js +17 -3
  18. package/dist/discovery/project-discovery.js.map +1 -1
  19. package/dist/index.js +55 -17
  20. package/dist/index.js.map +1 -1
  21. package/dist/managers/compose-manager.d.ts.map +1 -1
  22. package/dist/managers/compose-manager.js +33 -4
  23. package/dist/managers/compose-manager.js.map +1 -1
  24. package/dist/managers/container-manager.d.ts +13 -13
  25. package/dist/managers/container-manager.js +28 -28
  26. package/dist/managers/container-manager.js.map +1 -1
  27. package/dist/tools/container-tools.d.ts +4 -4
  28. package/dist/tools/container-tools.js +8 -8
  29. package/dist/tools/container-tools.js.map +1 -1
  30. package/dist/tools/database-tools.d.ts +3 -3
  31. package/dist/tools/database-tools.js +4 -4
  32. package/dist/tools/database-tools.js.map +1 -1
  33. package/dist/tools/env-tools.d.ts +4 -4
  34. package/dist/tools/env-tools.js +9 -9
  35. package/dist/tools/env-tools.js.map +1 -1
  36. package/dist/tools/executor-tool.d.ts +3 -3
  37. package/dist/tools/executor-tool.js +6 -6
  38. package/dist/tools/executor-tool.js.map +1 -1
  39. package/dist/tools/mcp-health-tool.d.ts +4 -4
  40. package/dist/tools/mcp-health-tool.js +5 -5
  41. package/dist/tools/mcp-health-tool.js.map +1 -1
  42. package/dist/utils/compose-exec.d.ts.map +1 -1
  43. package/dist/utils/compose-exec.js +16 -1
  44. package/dist/utils/compose-exec.js.map +1 -1
  45. package/dist/utils/port-utils.d.ts +24 -0
  46. package/dist/utils/port-utils.d.ts.map +1 -0
  47. package/dist/utils/port-utils.js +89 -0
  48. package/dist/utils/port-utils.js.map +1 -0
  49. package/dist/utils/workspace.d.ts +34 -0
  50. package/dist/utils/workspace.d.ts.map +1 -0
  51. package/dist/utils/workspace.js +52 -0
  52. package/dist/utils/workspace.js.map +1 -0
  53. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Universal Executor Tool
3
- * Выполнение любых команд в контейнере через docker exec
3
+ * Execute any commands in container via docker exec
4
4
  */
5
5
  import { ContainerManager } from '../managers/container-manager.js';
6
6
  import { ProjectDiscovery } from '../discovery/project-discovery.js';
@@ -52,7 +52,7 @@ export class ExecutorTool {
52
52
  throw new Error('service and command parameters are required');
53
53
  }
54
54
  const project = await this.projectDiscovery.findProject();
55
- // Парсим command string в array
55
+ // Parse command string to array
56
56
  const commandParts = this.parseCommand(args.command);
57
57
  logger.info(`Executing in ${args.service}: ${args.command}`);
58
58
  const output = await this.containerManager.exec(args.service, project.name, commandParts, {
@@ -83,12 +83,12 @@ export class ExecutorTool {
83
83
  }
84
84
  }
85
85
  /**
86
- * Простой парсинг command string → array
87
- * TODO: улучшить для quoted strings в будущем
86
+ * Simple parsing of command string → array
87
+ * TODO: improve for quoted strings in the future
88
88
  */
89
89
  parseCommand(command) {
90
- // Простой split по пробелам
91
- // В будущем можно добавить поддержку quoted strings
90
+ // Simple split by spaces
91
+ // In the future, can add support for quoted strings
92
92
  return command.split(' ').filter((s) => s.length > 0);
93
93
  }
94
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"executor-tool.js","sourceRoot":"","sources":["../../src/tools/executor-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor-tool.js","sourceRoot":"","sources":["../../src/tools/executor-tool.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  /**
2
2
  * MCP Health Tool
3
- * Самодиагностика MCP сервера
3
+ * MCP server self-diagnostics
4
4
  */
5
5
  import { CallToolRequest, Tool } from '@modelcontextprotocol/sdk/types.js';
6
6
  export declare class MCPHealthTool {
7
7
  /**
8
- * Регистрация health tool
8
+ * Register health tool
9
9
  */
10
10
  getTool(): Tool;
11
11
  /**
12
- * Обработка вызова tool
12
+ * Handle tool call
13
13
  */
14
14
  handleCall(request: CallToolRequest): Promise<{
15
15
  content: {
@@ -25,7 +25,7 @@ export declare class MCPHealthTool {
25
25
  isError: boolean;
26
26
  }>;
27
27
  /**
28
- * Выполнить проверки здоровья
28
+ * Perform health checks
29
29
  */
30
30
  check(): Promise<{
31
31
  status: 'healthy' | 'degraded' | 'unhealthy';
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * MCP Health Tool
3
- * Самодиагностика MCP сервера
3
+ * MCP server self-diagnostics
4
4
  */
5
5
  import { getDockerClient } from '../utils/docker-client.js';
6
6
  import { ProjectDiscovery } from '../discovery/project-discovery.js';
@@ -9,7 +9,7 @@ import { projectConfigCache } from '../utils/cache.js';
9
9
  import { logger } from '../utils/logger.js';
10
10
  export class MCPHealthTool {
11
11
  /**
12
- * Регистрация health tool
12
+ * Register health tool
13
13
  */
14
14
  getTool() {
15
15
  return {
@@ -22,7 +22,7 @@ export class MCPHealthTool {
22
22
  };
23
23
  }
24
24
  /**
25
- * Обработка вызова tool
25
+ * Handle tool call
26
26
  */
27
27
  async handleCall(request) {
28
28
  try {
@@ -50,7 +50,7 @@ export class MCPHealthTool {
50
50
  }
51
51
  }
52
52
  /**
53
- * Выполнить проверки здоровья
53
+ * Perform health checks
54
54
  */
55
55
  async check() {
56
56
  const checks = {};
@@ -99,7 +99,7 @@ export class MCPHealthTool {
99
99
  checks.cache = {
100
100
  status: 'ok',
101
101
  size: projectConfigCache.size(),
102
- ttl: 60, // seconds (hardcoded, так как в Cache не экспортирован)
102
+ ttl: 60, // seconds (hardcoded, as not exported in Cache)
103
103
  };
104
104
  // 5. Memory Usage
105
105
  const mem = process.memoryUsage();
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-health-tool.js","sourceRoot":"","sources":["../../src/tools/mcp-health-tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,OAAO,aAAa;IACxB;;OAEG;IACH,OAAO;QACL,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,0DAA0D;YACvE,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,OAAwB;QACvC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAExC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC5C;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YAChD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE;qBAChC;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QAkCT,MAAM,MAAM,GAAQ,EAAE,CAAC;QAEvB,uBAAuB;QACvB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;YACjC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAEnC,MAAM,CAAC,MAAM,GAAG;gBACd,MAAM,EAAE,IAAa;gBACrB,OAAO;aACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,GAAG;gBACd,MAAM,EAAE,QAAiB;gBACzB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,0BAA0B;aACrD,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,CAAC;YAErD,MAAM,CAAC,SAAS,GAAG;gBACjB,MAAM,EAAE,IAAa;gBACrB,YAAY,EAAE,IAAI;gBAClB,WAAW,EAAE,OAAO,CAAC,IAAI;aAC1B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,SAAS,GAAG;gBACjB,MAAM,EAAE,QAAiB;gBACzB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,0BAA0B;gBACpD,YAAY,EAAE,KAAK;aACpB,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,MAAM,eAAe,GAAG,eAAe,CAAC,kBAAkB,EAAE,CAAC;QAC7D,MAAM,CAAC,QAAQ,GAAG;YAChB,MAAM,EAAE,IAAa;YACrB,UAAU,EAAE,eAAe;YAC3B,KAAK,EAAE,eAAe,CAAC,MAAM;SAC9B,CAAC;QAEF,kBAAkB;QAClB,MAAM,CAAC,KAAK,GAAG;YACb,MAAM,EAAE,IAAa;YACrB,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE;YAC/B,GAAG,EAAE,EAAE,EAAE,wDAAwD;SAClE,CAAC;QAEF,kBAAkB;QAClB,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,GAAG;YACd,MAAM,EAAE,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,SAAkB,CAAC,CAAC,CAAC,IAAa;YAC7D,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,WAAW;YACtB,GAAG,EAAE,KAAK;SACX,CAAC;QAEF,iBAAiB;QACjB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAC5C,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAC1C,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAC5C,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAC3C,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YACxE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU;YAChD,MAAM;SACP,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"mcp-health-tool.js","sourceRoot":"","sources":["../../src/tools/mcp-health-tool.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"compose-exec.d.ts","sourceRoot":"","sources":["../../src/utils/compose-exec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,GAAG,CACR,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAO,GAC7B,MAAM;CAuBV"}
1
+ {"version":3,"file":"compose-exec.d.ts","sourceRoot":"","sources":["../../src/utils/compose-exec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,GAAG,CACR,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAO,GAC7B,MAAM;CA0CV"}
@@ -25,7 +25,22 @@ export class ComposeExec {
25
25
  }
26
26
  catch (error) {
27
27
  logger.error('docker-compose command failed:', error);
28
- const errorMessage = error.message || String(error);
28
+ // Извлекаем полное сообщение об ошибке (включая stderr)
29
+ let errorMessage = error.message || String(error);
30
+ // Если есть stderr, добавляем его к сообщению
31
+ if (error.stderr) {
32
+ const stderr = error.stderr.toString ? error.stderr.toString() : String(error.stderr);
33
+ if (stderr && !errorMessage.includes(stderr)) {
34
+ errorMessage = `${errorMessage}\n${stderr}`;
35
+ }
36
+ }
37
+ // Если есть stdout (может содержать полезную информацию)
38
+ if (error.stdout) {
39
+ const stdout = error.stdout.toString ? error.stdout.toString() : String(error.stdout);
40
+ if (stdout && stdout.trim()) {
41
+ errorMessage = `${errorMessage}\n${stdout}`;
42
+ }
43
+ }
29
44
  throw new Error(`docker-compose failed: ${errorMessage}`);
30
45
  }
31
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compose-exec.js","sourceRoot":"","sources":["../../src/utils/compose-exec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,GAAG,CACR,WAAmB,EACnB,IAAc,EACd,UAA4B,EAAE;QAE9B,kDAAkD;QAClD,MAAM,GAAG,GAAG,qBAAqB,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAEjE,MAAM,CAAC,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QACjD,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;gBAC3B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACtD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"compose-exec.js","sourceRoot":"","sources":["../../src/utils/compose-exec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,GAAG,CACR,WAAmB,EACnB,IAAc,EACd,UAA4B,EAAE;QAE9B,kDAAkD;QAClD,MAAM,GAAG,GAAG,qBAAqB,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAEjE,MAAM,CAAC,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QACjD,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;gBAC3B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YAEtD,wDAAwD;YACxD,IAAI,YAAY,GAAG,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YAElD,8CAA8C;YAC9C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtF,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC7C,YAAY,GAAG,GAAG,YAAY,KAAK,MAAM,EAAE,CAAC;gBAC9C,CAAC;YACH,CAAC;YAED,yDAAyD;YACzD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtF,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC5B,YAAY,GAAG,GAAG,YAAY,KAAK,MAAM,EAAE,CAAC;gBAC9C,CAAC;YACH,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Port Utilities
3
+ * Утилиты для работы с портами Docker контейнеров
4
+ */
5
+ export interface PortConflict {
6
+ port: number;
7
+ containerId: string;
8
+ containerName: string;
9
+ status: string;
10
+ }
11
+ /**
12
+ * Находит контейнер, который занимает указанный порт
13
+ */
14
+ export declare function findContainerByPort(port: number): Promise<PortConflict | null>;
15
+ /**
16
+ * Извлекает номер порта из ошибки Docker
17
+ * Пример: "Bind for 0.0.0.0:5432 failed: port is already allocated" -> 5432
18
+ */
19
+ export declare function extractPortFromError(errorMessage: string): number | null;
20
+ /**
21
+ * Останавливает контейнер по ID
22
+ */
23
+ export declare function stopContainerById(containerId: string): Promise<void>;
24
+ //# sourceMappingURL=port-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port-utils.d.ts","sourceRoot":"","sources":["../../src/utils/port-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAmCpF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsBxE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB1E"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Port Utilities
3
+ * Утилиты для работы с портами Docker контейнеров
4
+ */
5
+ import { getDockerClient } from './docker-client.js';
6
+ import { logger } from './logger.js';
7
+ /**
8
+ * Находит контейнер, который занимает указанный порт
9
+ */
10
+ export async function findContainerByPort(port) {
11
+ const docker = getDockerClient().getClient();
12
+ try {
13
+ // Получаем все контейнеры (включая остановленные)
14
+ const containers = await docker.listContainers({ all: true });
15
+ for (const containerInfo of containers) {
16
+ // Проверяем порты контейнера
17
+ if (containerInfo.Ports) {
18
+ for (const portInfo of containerInfo.Ports) {
19
+ // Проверяем published порт (0.0.0.0:5432 -> 5432/tcp)
20
+ if (portInfo.PublicPort === port) {
21
+ const containerId = containerInfo.Id;
22
+ const containerName = containerInfo.Names[0]?.replace(/^\//, '') || containerId.substring(0, 12);
23
+ const status = containerInfo.Status || 'unknown';
24
+ logger.info(`Found container using port ${port}: ${containerName} (${containerId.substring(0, 12)})`);
25
+ return {
26
+ port,
27
+ containerId,
28
+ containerName,
29
+ status,
30
+ };
31
+ }
32
+ }
33
+ }
34
+ }
35
+ return null;
36
+ }
37
+ catch (error) {
38
+ logger.error(`Failed to find container by port ${port}:`, error);
39
+ return null;
40
+ }
41
+ }
42
+ /**
43
+ * Извлекает номер порта из ошибки Docker
44
+ * Пример: "Bind for 0.0.0.0:5432 failed: port is already allocated" -> 5432
45
+ */
46
+ export function extractPortFromError(errorMessage) {
47
+ // Паттерн: "Bind for 0.0.0.0:5432 failed" или "port 5432 is already allocated"
48
+ const patterns = [
49
+ /Bind for [\d.]+:(\d+)/i, // "Bind for 0.0.0.0:5432"
50
+ /port (\d+) is already allocated/i, // "port 5432 is already allocated"
51
+ /port (\d+) is already in use/i, // "port 5432 is already in use"
52
+ /:(\d+) failed/i, // ":5432 failed" (fallback)
53
+ ];
54
+ for (const pattern of patterns) {
55
+ const match = errorMessage.match(pattern);
56
+ if (match && match[1]) {
57
+ const port = parseInt(match[1], 10);
58
+ if (!isNaN(port) && port > 0 && port < 65536) {
59
+ logger.debug(`Extracted port ${port} using pattern: ${pattern}`);
60
+ return port;
61
+ }
62
+ }
63
+ }
64
+ logger.debug('No port found in error message');
65
+ return null;
66
+ }
67
+ /**
68
+ * Останавливает контейнер по ID
69
+ */
70
+ export async function stopContainerById(containerId) {
71
+ const docker = getDockerClient().getClient();
72
+ try {
73
+ const container = docker.getContainer(containerId);
74
+ const info = await container.inspect();
75
+ if (info.State.Running) {
76
+ logger.info(`Stopping container ${containerId.substring(0, 12)}...`);
77
+ await container.stop();
78
+ logger.info(`Container ${containerId.substring(0, 12)} stopped successfully`);
79
+ }
80
+ else {
81
+ logger.debug(`Container ${containerId.substring(0, 12)} is not running`);
82
+ }
83
+ }
84
+ catch (error) {
85
+ logger.error(`Failed to stop container ${containerId}:`, error);
86
+ throw new Error(`Failed to stop container: ${error.message}`);
87
+ }
88
+ }
89
+ //# sourceMappingURL=port-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port-utils.js","sourceRoot":"","sources":["../../src/utils/port-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Workspace Root Management
3
+ * Хранит workspace root полученный от MCP клиента
4
+ */
5
+ /**
6
+ * Глобальное хранилище workspace root
7
+ * Устанавливается при инициализации MCP сервера через listRoots()
8
+ */
9
+ declare class WorkspaceManager {
10
+ private workspaceRoot;
11
+ /**
12
+ * Устанавливает workspace root из MCP client roots
13
+ */
14
+ setWorkspaceRoot(uri: string): void;
15
+ /**
16
+ * Возвращает workspace root или null если не установлен
17
+ */
18
+ getWorkspaceRoot(): string | null;
19
+ /**
20
+ * Проверяет, установлен ли workspace root
21
+ */
22
+ hasWorkspaceRoot(): boolean;
23
+ /**
24
+ * Парсит file:// URI в обычный путь
25
+ */
26
+ private parseFileUri;
27
+ /**
28
+ * Очищает workspace root (для тестов)
29
+ */
30
+ clear(): void;
31
+ }
32
+ export declare const workspaceManager: WorkspaceManager;
33
+ export {};
34
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/utils/workspace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,cAAM,gBAAgB;IACpB,OAAO,CAAC,aAAa,CAAuB;IAE5C;;OAEG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAOnC;;OAEG;IACH,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Workspace Root Management
3
+ * Хранит workspace root полученный от MCP клиента
4
+ */
5
+ import { logger } from './logger.js';
6
+ /**
7
+ * Глобальное хранилище workspace root
8
+ * Устанавливается при инициализации MCP сервера через listRoots()
9
+ */
10
+ class WorkspaceManager {
11
+ workspaceRoot = null;
12
+ /**
13
+ * Устанавливает workspace root из MCP client roots
14
+ */
15
+ setWorkspaceRoot(uri) {
16
+ // URI в формате file:///path/to/workspace
17
+ const path = this.parseFileUri(uri);
18
+ this.workspaceRoot = path;
19
+ logger.info(`Workspace root set: ${path}`);
20
+ }
21
+ /**
22
+ * Возвращает workspace root или null если не установлен
23
+ */
24
+ getWorkspaceRoot() {
25
+ return this.workspaceRoot;
26
+ }
27
+ /**
28
+ * Проверяет, установлен ли workspace root
29
+ */
30
+ hasWorkspaceRoot() {
31
+ return this.workspaceRoot !== null;
32
+ }
33
+ /**
34
+ * Парсит file:// URI в обычный путь
35
+ */
36
+ parseFileUri(uri) {
37
+ if (uri.startsWith('file://')) {
38
+ // file:///path/to/workspace -> /path/to/workspace
39
+ return decodeURIComponent(uri.slice(7));
40
+ }
41
+ return uri;
42
+ }
43
+ /**
44
+ * Очищает workspace root (для тестов)
45
+ */
46
+ clear() {
47
+ this.workspaceRoot = null;
48
+ }
49
+ }
50
+ // Singleton instance
51
+ export const workspaceManager = new WorkspaceManager();
52
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/utils/workspace.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;GAGG;AACH,MAAM,gBAAgB;IACZ,aAAa,GAAkB,IAAI,CAAC;IAE5C;;OAEG;IACH,gBAAgB,CAAC,GAAW;QAC1B,0CAA0C;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC;IACrC,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,GAAW;QAC9B,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,kDAAkD;YAClD,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;CACF;AAED,qBAAqB;AACrB,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hypnosis/docker-mcp-server",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Universal Docker MCP server for AI assistants (Cursor, Claude Desktop)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",