ai-consultation-mcp 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.
Files changed (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +193 -0
  3. package/dist/api/index.d.ts +27 -0
  4. package/dist/api/index.js +213 -0
  5. package/dist/api/index.js.map +1 -0
  6. package/dist/api/middleware/security.d.ts +6 -0
  7. package/dist/api/middleware/security.js +28 -0
  8. package/dist/api/middleware/security.js.map +1 -0
  9. package/dist/api/routes/chat.d.ts +2 -0
  10. package/dist/api/routes/chat.js +78 -0
  11. package/dist/api/routes/chat.js.map +1 -0
  12. package/dist/api/routes/config.d.ts +2 -0
  13. package/dist/api/routes/config.js +81 -0
  14. package/dist/api/routes/config.js.map +1 -0
  15. package/dist/api/routes/providers.d.ts +2 -0
  16. package/dist/api/routes/providers.js +225 -0
  17. package/dist/api/routes/providers.js.map +1 -0
  18. package/dist/api/standalone-server.d.ts +12 -0
  19. package/dist/api/standalone-server.js +117 -0
  20. package/dist/api/standalone-server.js.map +1 -0
  21. package/dist/config/defaults.d.ts +17 -0
  22. package/dist/config/defaults.js +30 -0
  23. package/dist/config/defaults.js.map +1 -0
  24. package/dist/config/encryption.d.ts +12 -0
  25. package/dist/config/encryption.js +85 -0
  26. package/dist/config/encryption.js.map +1 -0
  27. package/dist/config/index.d.ts +5 -0
  28. package/dist/config/index.js +6 -0
  29. package/dist/config/index.js.map +1 -0
  30. package/dist/config/manager.d.ts +62 -0
  31. package/dist/config/manager.js +210 -0
  32. package/dist/config/manager.js.map +1 -0
  33. package/dist/config/prompts.d.ts +10 -0
  34. package/dist/config/prompts.js +168 -0
  35. package/dist/config/prompts.js.map +1 -0
  36. package/dist/config/schema.d.ts +141 -0
  37. package/dist/config/schema.js +54 -0
  38. package/dist/config/schema.js.map +1 -0
  39. package/dist/index.d.ts +2 -0
  40. package/dist/index.js +260 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/installer/detector.d.ts +48 -0
  43. package/dist/installer/detector.js +164 -0
  44. package/dist/installer/detector.js.map +1 -0
  45. package/dist/installer/index.d.ts +7 -0
  46. package/dist/installer/index.js +10 -0
  47. package/dist/installer/index.js.map +1 -0
  48. package/dist/installer/installer.d.ts +16 -0
  49. package/dist/installer/installer.js +262 -0
  50. package/dist/installer/installer.js.map +1 -0
  51. package/dist/installer/tools.d.ts +16 -0
  52. package/dist/installer/tools.js +327 -0
  53. package/dist/installer/tools.js.map +1 -0
  54. package/dist/installer/types.d.ts +68 -0
  55. package/dist/installer/types.js +5 -0
  56. package/dist/installer/types.js.map +1 -0
  57. package/dist/providers/base.d.ts +44 -0
  58. package/dist/providers/base.js +84 -0
  59. package/dist/providers/base.js.map +1 -0
  60. package/dist/providers/deepseek.d.ts +30 -0
  61. package/dist/providers/deepseek.js +148 -0
  62. package/dist/providers/deepseek.js.map +1 -0
  63. package/dist/providers/index.d.ts +5 -0
  64. package/dist/providers/index.js +8 -0
  65. package/dist/providers/index.js.map +1 -0
  66. package/dist/providers/openai.d.ts +30 -0
  67. package/dist/providers/openai.js +123 -0
  68. package/dist/providers/openai.js.map +1 -0
  69. package/dist/providers/registry.d.ts +37 -0
  70. package/dist/providers/registry.js +65 -0
  71. package/dist/providers/registry.js.map +1 -0
  72. package/dist/providers/types.d.ts +71 -0
  73. package/dist/providers/types.js +2 -0
  74. package/dist/providers/types.js.map +1 -0
  75. package/dist/server/conversation.d.ts +105 -0
  76. package/dist/server/conversation.js +279 -0
  77. package/dist/server/conversation.js.map +1 -0
  78. package/dist/server/index.d.ts +2 -0
  79. package/dist/server/index.js +3 -0
  80. package/dist/server/index.js.map +1 -0
  81. package/dist/server/tools/consult.d.ts +15 -0
  82. package/dist/server/tools/consult.js +164 -0
  83. package/dist/server/tools/consult.js.map +1 -0
  84. package/dist/server/tools/index.d.ts +1 -0
  85. package/dist/server/tools/index.js +2 -0
  86. package/dist/server/tools/index.js.map +1 -0
  87. package/dist/types/config.d.ts +20 -0
  88. package/dist/types/config.js +2 -0
  89. package/dist/types/config.js.map +1 -0
  90. package/dist/types/index.d.ts +3 -0
  91. package/dist/types/index.js +4 -0
  92. package/dist/types/index.js.map +1 -0
  93. package/dist/types/messages.d.ts +48 -0
  94. package/dist/types/messages.js +2 -0
  95. package/dist/types/messages.js.map +1 -0
  96. package/dist/types/models.d.ts +39 -0
  97. package/dist/types/models.js +66 -0
  98. package/dist/types/models.js.map +1 -0
  99. package/dist/ui/index.html +1244 -0
  100. package/dist/utils/errors.d.ts +32 -0
  101. package/dist/utils/errors.js +53 -0
  102. package/dist/utils/errors.js.map +1 -0
  103. package/dist/utils/index.d.ts +2 -0
  104. package/dist/utils/index.js +3 -0
  105. package/dist/utils/index.js.map +1 -0
  106. package/dist/utils/logger.d.ts +13 -0
  107. package/dist/utils/logger.js +73 -0
  108. package/dist/utils/logger.js.map +1 -0
  109. package/package.json +65 -0
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Base error class for MCP errors
3
+ */
4
+ export declare class MCPError extends Error {
5
+ code: string;
6
+ details?: Record<string, unknown> | undefined;
7
+ constructor(message: string, code: string, details?: Record<string, unknown> | undefined);
8
+ }
9
+ /**
10
+ * Error thrown by AI providers
11
+ */
12
+ export declare class ProviderError extends MCPError {
13
+ constructor(provider: string, message: string, details?: Record<string, unknown>);
14
+ }
15
+ /**
16
+ * Error in conversation management
17
+ */
18
+ export declare class ConversationError extends MCPError {
19
+ constructor(message: string, conversationId?: string);
20
+ }
21
+ /**
22
+ * Error in configuration
23
+ */
24
+ export declare class ConfigError extends MCPError {
25
+ constructor(message: string);
26
+ }
27
+ /**
28
+ * Error when provider is not configured
29
+ */
30
+ export declare class ProviderNotConfiguredError extends ProviderError {
31
+ constructor(provider: string);
32
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Base error class for MCP errors
3
+ */
4
+ export class MCPError extends Error {
5
+ code;
6
+ details;
7
+ constructor(message, code, details) {
8
+ super(message);
9
+ this.code = code;
10
+ this.details = details;
11
+ this.name = 'MCPError';
12
+ }
13
+ }
14
+ /**
15
+ * Error thrown by AI providers
16
+ */
17
+ export class ProviderError extends MCPError {
18
+ constructor(provider, message, details) {
19
+ super(`[${provider}] ${message}`, 'PROVIDER_ERROR', {
20
+ provider,
21
+ ...details,
22
+ });
23
+ this.name = 'ProviderError';
24
+ }
25
+ }
26
+ /**
27
+ * Error in conversation management
28
+ */
29
+ export class ConversationError extends MCPError {
30
+ constructor(message, conversationId) {
31
+ super(message, 'CONVERSATION_ERROR', { conversationId });
32
+ this.name = 'ConversationError';
33
+ }
34
+ }
35
+ /**
36
+ * Error in configuration
37
+ */
38
+ export class ConfigError extends MCPError {
39
+ constructor(message) {
40
+ super(message, 'CONFIG_ERROR');
41
+ this.name = 'ConfigError';
42
+ }
43
+ }
44
+ /**
45
+ * Error when provider is not configured
46
+ */
47
+ export class ProviderNotConfiguredError extends ProviderError {
48
+ constructor(provider) {
49
+ super(provider, `Provider ${provider} is not configured. Please add API key in settings.`);
50
+ this.name = 'ProviderNotConfiguredError';
51
+ }
52
+ }
53
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGxB;IACA;IAHT,YACE,OAAe,EACR,IAAY,EACZ,OAAiC;QAExC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAA0B;QAGxC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YACE,QAAgB,EAChB,OAAe,EACf,OAAiC;QAEjC,KAAK,CAAC,IAAI,QAAQ,KAAK,OAAO,EAAE,EAAE,gBAAgB,EAAE;YAClD,QAAQ;YACR,GAAG,OAAO;SACX,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAC7C,YAAY,OAAe,EAAE,cAAuB;QAClD,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,aAAa;IAC3D,YAAY,QAAgB;QAC1B,KAAK,CACH,QAAQ,EACR,YAAY,QAAQ,qDAAqD,CAC1E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export * from './errors.js';
2
+ export * from './logger.js';
@@ -0,0 +1,3 @@
1
+ export * from './errors.js';
2
+ export * from './logger.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,13 @@
1
+ type LogLevel = 'debug' | 'info' | 'warn' | 'error';
2
+ declare class Logger {
3
+ private level;
4
+ setLevel(level: LogLevel): void;
5
+ private shouldLog;
6
+ private log;
7
+ debug(message: string, meta?: Record<string, unknown>): void;
8
+ info(message: string, meta?: Record<string, unknown>): void;
9
+ warn(message: string, meta?: Record<string, unknown>): void;
10
+ error(message: string, meta?: Record<string, unknown>): void;
11
+ }
12
+ export declare const logger: Logger;
13
+ export {};
@@ -0,0 +1,73 @@
1
+ /**
2
+ * List of keys that should be redacted in logs
3
+ */
4
+ const SENSITIVE_KEYS = [
5
+ 'apikey',
6
+ 'api_key',
7
+ 'key',
8
+ 'secret',
9
+ 'password',
10
+ 'token',
11
+ 'authorization',
12
+ ];
13
+ /**
14
+ * Sanitize object by redacting sensitive keys
15
+ */
16
+ function sanitizeObject(obj) {
17
+ const sanitized = {};
18
+ for (const [key, value] of Object.entries(obj)) {
19
+ const lowerKey = key.toLowerCase();
20
+ if (SENSITIVE_KEYS.some((sk) => lowerKey.includes(sk))) {
21
+ sanitized[key] = '[REDACTED]';
22
+ }
23
+ else if (typeof value === 'object' && value !== null) {
24
+ sanitized[key] = sanitizeObject(value);
25
+ }
26
+ else {
27
+ sanitized[key] = value;
28
+ }
29
+ }
30
+ return sanitized;
31
+ }
32
+ const LOG_LEVELS = {
33
+ debug: 0,
34
+ info: 1,
35
+ warn: 2,
36
+ error: 3,
37
+ };
38
+ class Logger {
39
+ level = 'info';
40
+ setLevel(level) {
41
+ this.level = level;
42
+ }
43
+ shouldLog(level) {
44
+ return LOG_LEVELS[level] >= LOG_LEVELS[this.level];
45
+ }
46
+ log(level, message, meta) {
47
+ if (!this.shouldLog(level)) {
48
+ return;
49
+ }
50
+ const entry = {
51
+ timestamp: new Date().toISOString(),
52
+ level,
53
+ message,
54
+ meta: meta ? sanitizeObject(meta) : undefined,
55
+ };
56
+ // MCP uses stderr for logging (stdout is for protocol)
57
+ console.error(JSON.stringify(entry));
58
+ }
59
+ debug(message, meta) {
60
+ this.log('debug', message, meta);
61
+ }
62
+ info(message, meta) {
63
+ this.log('info', message, meta);
64
+ }
65
+ warn(message, meta) {
66
+ this.log('warn', message, meta);
67
+ }
68
+ error(message, meta) {
69
+ this.log('error', message, meta);
70
+ }
71
+ }
72
+ export const logger = new Logger();
73
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,cAAc,GAAG;IACrB,QAAQ;IACR,SAAS;IACT,KAAK;IACL,QAAQ;IACR,UAAU;IACV,OAAO;IACP,eAAe;CAChB,CAAC;AAEF;;GAEG;AACH,SAAS,cAAc,CACrB,GAA4B;IAE5B,MAAM,SAAS,GAA4B,EAAE,CAAC;IAE9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAEnC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACvD,SAAS,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAChC,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACvD,SAAS,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAgC,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,GAA6B;IAC3C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,MAAM,MAAM;IACF,KAAK,GAAa,MAAM,CAAC;IAEjC,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAEO,GAAG,CACT,KAAe,EACf,OAAe,EACf,IAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAa;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK;YACL,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC;QAEF,uDAAuD;QACvD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "ai-consultation-mcp",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "MCP server for consulting other AI models (DeepSeek, OpenAI) for alternative perspectives during coding sessions",
6
+ "main": "./dist/index.js",
7
+ "bin": {
8
+ "ai-consultation-mcp": "./dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "dev": "tsx watch src/index.ts",
12
+ "build": "tsc && cp -r src/ui dist/",
13
+ "build:ui": "cp -r src/ui dist/",
14
+ "start": "node dist/index.js",
15
+ "start:config": "node dist/index.js --config",
16
+ "typecheck": "tsc --noEmit",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "keywords": [
20
+ "mcp",
21
+ "model-context-protocol",
22
+ "ai",
23
+ "llm",
24
+ "openai",
25
+ "deepseek",
26
+ "claude-code",
27
+ "agent",
28
+ "consultation"
29
+ ],
30
+ "author": "Menes Ekinci",
31
+ "license": "MIT",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/menesekinci/ai-consultation-mcp"
35
+ },
36
+ "homepage": "https://github.com/menesekinci/ai-consultation-mcp#readme",
37
+ "bugs": {
38
+ "url": "https://github.com/menesekinci/ai-consultation-mcp/issues"
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "README.md",
43
+ "LICENSE"
44
+ ],
45
+ "dependencies": {
46
+ "@anthropic-ai/sdk": "^0.71.2",
47
+ "@google/genai": "^1.38.0",
48
+ "@modelcontextprotocol/sdk": "^1.25.3",
49
+ "express": "^5.2.1",
50
+ "open": "^11.0.0",
51
+ "openai": "^6.16.0",
52
+ "uuid": "^11.0.0",
53
+ "zod": "^3.24.0"
54
+ },
55
+ "devDependencies": {
56
+ "@types/express": "^5.0.6",
57
+ "@types/node": "^22.0.0",
58
+ "@types/uuid": "^10.0.0",
59
+ "tsx": "^4.19.0",
60
+ "typescript": "^5.7.0"
61
+ },
62
+ "engines": {
63
+ "node": ">=20.0.0"
64
+ }
65
+ }