agent-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.
- package/LICENSE +21 -0
- package/README.md +140 -0
- package/dist/api/index.d.ts +27 -0
- package/dist/api/index.js +213 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/middleware/security.d.ts +6 -0
- package/dist/api/middleware/security.js +28 -0
- package/dist/api/middleware/security.js.map +1 -0
- package/dist/api/routes/chat.d.ts +2 -0
- package/dist/api/routes/chat.js +61 -0
- package/dist/api/routes/chat.js.map +1 -0
- package/dist/api/routes/config.d.ts +2 -0
- package/dist/api/routes/config.js +81 -0
- package/dist/api/routes/config.js.map +1 -0
- package/dist/api/routes/providers.d.ts +2 -0
- package/dist/api/routes/providers.js +225 -0
- package/dist/api/routes/providers.js.map +1 -0
- package/dist/api/standalone-server.d.ts +12 -0
- package/dist/api/standalone-server.js +91 -0
- package/dist/api/standalone-server.js.map +1 -0
- package/dist/config/defaults.d.ts +17 -0
- package/dist/config/defaults.js +30 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/encryption.d.ts +12 -0
- package/dist/config/encryption.js +85 -0
- package/dist/config/encryption.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/manager.d.ts +62 -0
- package/dist/config/manager.js +186 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/config/prompts.d.ts +10 -0
- package/dist/config/prompts.js +140 -0
- package/dist/config/prompts.js.map +1 -0
- package/dist/config/schema.d.ts +141 -0
- package/dist/config/schema.js +54 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +224 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/base.d.ts +44 -0
- package/dist/providers/base.js +84 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/deepseek.d.ts +30 -0
- package/dist/providers/deepseek.js +148 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/index.d.ts +5 -0
- package/dist/providers/index.js +8 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +30 -0
- package/dist/providers/openai.js +123 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/registry.d.ts +37 -0
- package/dist/providers/registry.js +65 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +71 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/server/conversation.d.ts +101 -0
- package/dist/server/conversation.js +275 -0
- package/dist/server/conversation.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.js +3 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/tools/consult.d.ts +15 -0
- package/dist/server/tools/consult.js +164 -0
- package/dist/server/tools/consult.js.map +1 -0
- package/dist/server/tools/index.d.ts +1 -0
- package/dist/server/tools/index.js +2 -0
- package/dist/server/tools/index.js.map +1 -0
- package/dist/types/config.d.ts +20 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/messages.d.ts +48 -0
- package/dist/types/messages.js +2 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/models.d.ts +39 -0
- package/dist/types/models.js +66 -0
- package/dist/types/models.js.map +1 -0
- package/dist/ui/index.html +1044 -0
- package/dist/utils/errors.d.ts +32 -0
- package/dist/utils/errors.js +53 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.js +73 -0
- package/dist/utils/logger.js.map +1 -0
- 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 @@
|
|
|
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": "agent-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
|
+
"agent-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/agent-consultation-mcp"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://github.com/menesekinci/agent-consultation-mcp#readme",
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/menesekinci/agent-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
|
+
}
|