aurix-ai 2.9.0 → 2.9.5

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,104 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ const CACHE_DIR = path.join(os.homedir(), '.aurix', 'mcp');
5
+ const CACHE_FILE = path.join(CACHE_DIR, 'catalog-cache.json');
6
+ const CACHE_TTL = 24 * 60 * 60 * 1000;
7
+ function ensureDirs() {
8
+ if (!fs.existsSync(CACHE_DIR))
9
+ fs.mkdirSync(CACHE_DIR, { recursive: true });
10
+ }
11
+ export async function fetchCatalog() {
12
+ ensureDirs();
13
+ try {
14
+ if (fs.existsSync(CACHE_FILE)) {
15
+ const cache = JSON.parse(fs.readFileSync(CACHE_FILE, 'utf-8'));
16
+ if (Date.now() - cache.fetchedAt < CACHE_TTL)
17
+ return cache.entries;
18
+ }
19
+ }
20
+ catch { }
21
+ const entries = await fetchFromGithub();
22
+ if (entries.length > 0) {
23
+ const cache = { fetchedAt: Date.now(), entries };
24
+ fs.writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));
25
+ }
26
+ return entries.length > 0 ? entries : getBuiltinCatalog();
27
+ }
28
+ async function fetchFromGithub() {
29
+ try {
30
+ const controller = new AbortController();
31
+ const timer = setTimeout(() => controller.abort(), 10_000);
32
+ const res = await fetch('https://raw.githubusercontent.com/modelcontextprotocol/servers/main/README.md', { signal: controller.signal });
33
+ clearTimeout(timer);
34
+ if (!res.ok)
35
+ return [];
36
+ const text = await res.text();
37
+ return parseReadmeCatalog(text);
38
+ }
39
+ catch {
40
+ return [];
41
+ }
42
+ }
43
+ function parseReadmeCatalog(readme) {
44
+ const entries = [];
45
+ const lines = readme.split('\n');
46
+ let currentCategory = 'General';
47
+ for (let i = 0; i < lines.length; i++) {
48
+ const line = lines[i];
49
+ const headerMatch = line.match(/^###?\s+(.+)/);
50
+ if (headerMatch) {
51
+ currentCategory = headerMatch[1].trim().replace(/[#*]/g, '');
52
+ continue;
53
+ }
54
+ const linkMatch = line.match(/\[([^\]]+)\]\(([^)]+)\)\s*[-:]\s*(.+)/);
55
+ if (linkMatch) {
56
+ const [, name, url, desc] = linkMatch;
57
+ const npxName = extractNpxPackage(url, name);
58
+ if (npxName) {
59
+ entries.push({
60
+ name: name.toLowerCase().replace(/[^a-z0-9]+/g, '_'),
61
+ description: desc.trim().replace(/\s+/g, ' ').slice(0, 120),
62
+ command: 'npx',
63
+ args: ['-y', npxName],
64
+ category: currentCategory,
65
+ url,
66
+ });
67
+ }
68
+ }
69
+ }
70
+ return entries;
71
+ }
72
+ function extractNpxPackage(url, name) {
73
+ const ghMatch = url.match(/github\.com\/([^/]+\/[^/]+)/);
74
+ if (ghMatch) {
75
+ const repo = ghMatch[1].toLowerCase();
76
+ if (repo.includes('mcp'))
77
+ return `@modelcontextprotocol/server-${name.toLowerCase().replace(/[^a-z0-9]+/g, '-')}`;
78
+ }
79
+ if (url.includes('npmjs.com/package/')) {
80
+ const pkgMatch = url.match(/npmjs\.com\/package\/([^/]+)/);
81
+ if (pkgMatch)
82
+ return pkgMatch[1];
83
+ }
84
+ return null;
85
+ }
86
+ function getBuiltinCatalog() {
87
+ return [
88
+ { name: 'github', description: 'GitHub repos, PRs, issues, actions', command: 'npx', args: ['-y', '@modelcontextprotocol/server-github'], env: { GITHUB_PERSONAL_ACCESS_TOKEN: '' }, category: 'Development' },
89
+ { name: 'filesystem', description: 'Filesystem read/write/search', command: 'npx', args: ['-y', '@modelcontextprotocol/server-filesystem', os.homedir()], category: 'System' },
90
+ { name: 'postgres', description: 'PostgreSQL database queries', command: 'npx', args: ['-y', '@modelcontextprotocol/server-postgres'], env: { DATABASE_URL: '' }, category: 'Database' },
91
+ { name: 'sqlite', description: 'SQLite database queries', command: 'npx', args: ['-y', '@modelcontextprotocol/server-sqlite'], env: { SQLITE_DB_PATH: '' }, category: 'Database' },
92
+ { name: 'brave_search', description: 'Brave web search', command: 'npx', args: ['-y', '@anthropic/mcp-server-brave-search'], env: { BRAVE_API_KEY: '' }, category: 'Search' },
93
+ { name: 'puppeteer', description: 'Browser automation', command: 'npx', args: ['-y', '@anthropic/mcp-server-puppeteer'], category: 'Browser' },
94
+ { name: 'slack', description: 'Slack channels and messages', command: 'npx', args: ['-y', '@anthropic/mcp-server-slack'], env: { SLACK_BOT_TOKEN: '' }, category: 'Communication' },
95
+ { name: 'memory', description: 'Persistent knowledge graph', command: 'npx', args: ['-y', '@modelcontextprotocol/server-memory'], category: 'AI' },
96
+ { name: 'fetch', description: 'Fetch and parse web pages', command: 'npx', args: ['-y', '@modelcontextprotocol/server-fetch'], category: 'Web' },
97
+ { name: 'sequential_thinking', description: 'Step-by-step reasoning', command: 'npx', args: ['-y', '@modelcontextprotocol/server-sequential-thinking'], category: 'AI' },
98
+ ];
99
+ }
100
+ export function searchCatalog(entries, query) {
101
+ const q = query.toLowerCase();
102
+ return entries.filter(e => e.name.includes(q) || e.description.toLowerCase().includes(q) || e.category.toLowerCase().includes(q));
103
+ }
104
+ //# sourceMappingURL=McpCatalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpCatalog.js","sourceRoot":"","sources":["../../src/mcp/McpCatalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { EventEmitter } from 'events';
2
+ export interface McpToolSchema {
3
+ name: string;
4
+ description?: string;
5
+ inputSchema: {
6
+ type: 'object';
7
+ properties?: Record<string, unknown>;
8
+ required?: string[];
9
+ };
10
+ }
11
+ export interface McpResource {
12
+ uri: string;
13
+ name: string;
14
+ description?: string;
15
+ mimeType?: string;
16
+ }
17
+ export interface McpServerCapabilities {
18
+ tools?: {
19
+ listChanged?: boolean;
20
+ };
21
+ resources?: {
22
+ subscribe?: boolean;
23
+ listChanged?: boolean;
24
+ };
25
+ prompts?: {
26
+ listChanged?: boolean;
27
+ };
28
+ }
29
+ export declare class McpClient extends EventEmitter {
30
+ private name;
31
+ private command;
32
+ private args;
33
+ private env;
34
+ private proc;
35
+ private nextId;
36
+ private pending;
37
+ private buffer;
38
+ private _capabilities;
39
+ private _tools;
40
+ private _initialized;
41
+ constructor(name: string, command: string, args?: string[], env?: Record<string, string>);
42
+ get capabilities(): McpServerCapabilities;
43
+ get tools(): McpToolSchema[];
44
+ get initialized(): boolean;
45
+ get running(): boolean;
46
+ start(): Promise<void>;
47
+ stop(): Promise<void>;
48
+ listTools(): Promise<McpToolSchema[]>;
49
+ callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
50
+ listResources(): Promise<McpResource[]>;
51
+ readResource(uri: string): Promise<unknown>;
52
+ private initialize;
53
+ private send;
54
+ private processBuffer;
55
+ private rejectAll;
56
+ }
57
+ //# sourceMappingURL=McpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpClient.d.ts","sourceRoot":"","sources":["../../src/mcp/McpClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AA4BtC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAClC,SAAS,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC3D,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACrC;AAED,qBAAa,SAAU,SAAQ,YAAY;IAUvC,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,GAAG;IAZb,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAS;gBAGnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAK1C,IAAI,YAAY,IAAI,qBAAqB,CAA+B;IACxE,IAAI,KAAK,IAAI,aAAa,EAAE,CAAwB;IACpD,IAAI,WAAW,IAAI,OAAO,CAA8B;IACxD,IAAI,OAAO,IAAI,OAAO,CAA8D;IAE9E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAarB,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAMrC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvE,aAAa,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAKvC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAInC,UAAU;IAiBxB,OAAO,CAAC,IAAI;IAoCZ,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,SAAS;CAOlB"}
@@ -0,0 +1,164 @@
1
+ import { spawn } from 'child_process';
2
+ import { EventEmitter } from 'events';
3
+ export class McpClient extends EventEmitter {
4
+ name;
5
+ command;
6
+ args;
7
+ env;
8
+ proc = null;
9
+ nextId = 1;
10
+ pending = new Map();
11
+ buffer = '';
12
+ _capabilities = {};
13
+ _tools = [];
14
+ _initialized = false;
15
+ constructor(name, command, args = [], env = {}) {
16
+ super();
17
+ this.name = name;
18
+ this.command = command;
19
+ this.args = args;
20
+ this.env = env;
21
+ }
22
+ get capabilities() { return this._capabilities; }
23
+ get tools() { return this._tools; }
24
+ get initialized() { return this._initialized; }
25
+ get running() { return this.proc !== null && this.proc.exitCode === null; }
26
+ async start() {
27
+ if (this.running)
28
+ return;
29
+ this.proc = spawn(this.command, this.args, {
30
+ env: { ...process.env, ...this.env },
31
+ stdio: ['pipe', 'pipe', 'pipe'],
32
+ });
33
+ this.proc.stdout?.on('data', (chunk) => {
34
+ this.buffer += chunk.toString();
35
+ this.processBuffer();
36
+ });
37
+ this.proc.stderr?.on('data', (chunk) => {
38
+ this.emit('stderr', chunk.toString());
39
+ });
40
+ this.proc.on('error', (err) => {
41
+ this.rejectAll(err);
42
+ this.emit('error', err);
43
+ });
44
+ this.proc.on('close', (code) => {
45
+ this.rejectAll(new Error(`MCP server "${this.name}" exited with code ${code}`));
46
+ this.proc = null;
47
+ this._initialized = false;
48
+ this.emit('close', code);
49
+ });
50
+ await this.initialize();
51
+ }
52
+ async stop() {
53
+ if (!this.proc)
54
+ return;
55
+ const proc = this.proc;
56
+ return new Promise((resolve) => {
57
+ proc.once('close', () => resolve());
58
+ proc.kill('SIGTERM');
59
+ setTimeout(() => {
60
+ if (proc.exitCode === null)
61
+ proc.kill('SIGKILL');
62
+ resolve();
63
+ }, 5000);
64
+ });
65
+ }
66
+ async listTools() {
67
+ const result = await this.send('tools/list', {});
68
+ this._tools = result.tools || [];
69
+ return this._tools;
70
+ }
71
+ async callTool(name, args) {
72
+ return this.send('tools/call', { name, arguments: args });
73
+ }
74
+ async listResources() {
75
+ const result = await this.send('resources/list', {});
76
+ return result.resources || [];
77
+ }
78
+ async readResource(uri) {
79
+ return this.send('resources/read', { uri });
80
+ }
81
+ async initialize() {
82
+ const result = await this.send('initialize', {
83
+ protocolVersion: '2024-11-05',
84
+ capabilities: {},
85
+ clientInfo: { name: 'aurix-ai', version: '2.9.5' },
86
+ });
87
+ this._capabilities = result.capabilities || {};
88
+ await this.send('notifications/initialized', undefined, true);
89
+ this._initialized = true;
90
+ if (this._capabilities.tools) {
91
+ await this.listTools();
92
+ }
93
+ }
94
+ send(method, params, isNotification = false) {
95
+ return new Promise((resolve, reject) => {
96
+ if (!this.proc?.stdin?.writable) {
97
+ reject(new Error(`MCP server "${this.name}" is not running`));
98
+ return;
99
+ }
100
+ const id = this.nextId++;
101
+ const msg = isNotification
102
+ ? { jsonrpc: '2.0', method, params }
103
+ : { jsonrpc: '2.0', id, method, params };
104
+ const payload = JSON.stringify(msg) + '\n';
105
+ if (!isNotification) {
106
+ const timer = setTimeout(() => {
107
+ this.pending.delete(id);
108
+ reject(new Error(`MCP request "${method}" timed out after 30s`));
109
+ }, 30_000);
110
+ this.pending.set(id, { resolve, reject, timer });
111
+ }
112
+ this.proc.stdin.write(payload, (err) => {
113
+ if (err) {
114
+ if (!isNotification) {
115
+ const p = this.pending.get(id);
116
+ if (p) {
117
+ clearTimeout(p.timer);
118
+ this.pending.delete(id);
119
+ }
120
+ }
121
+ reject(err);
122
+ }
123
+ else if (isNotification) {
124
+ resolve(undefined);
125
+ }
126
+ });
127
+ });
128
+ }
129
+ processBuffer() {
130
+ const lines = this.buffer.split('\n');
131
+ this.buffer = lines.pop() || '';
132
+ for (const line of lines) {
133
+ const trimmed = line.trim();
134
+ if (!trimmed)
135
+ continue;
136
+ try {
137
+ const msg = JSON.parse(trimmed);
138
+ if (msg.id !== undefined && this.pending.has(msg.id)) {
139
+ const p = this.pending.get(msg.id);
140
+ this.pending.delete(msg.id);
141
+ clearTimeout(p.timer);
142
+ if (msg.error) {
143
+ p.reject(new Error(`MCP error ${msg.error.code}: ${msg.error.message}`));
144
+ }
145
+ else {
146
+ p.resolve(msg.result);
147
+ }
148
+ }
149
+ else if ('method' in msg) {
150
+ this.emit('notification', msg);
151
+ }
152
+ }
153
+ catch { }
154
+ }
155
+ }
156
+ rejectAll(error) {
157
+ for (const [id, p] of this.pending) {
158
+ clearTimeout(p.timer);
159
+ p.reject(error);
160
+ }
161
+ this.pending.clear();
162
+ }
163
+ }
164
+ //# sourceMappingURL=McpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpClient.js","sourceRoot":"","sources":["../../src/mcp/McpClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { McpClient } from './McpClient.js';
2
+ export interface McpServerConfig {
3
+ name: string;
4
+ command: string;
5
+ args?: string[];
6
+ env?: Record<string, string>;
7
+ enabled: boolean;
8
+ description?: string;
9
+ }
10
+ export interface McpConfig {
11
+ servers: McpServerConfig[];
12
+ }
13
+ export interface McpServerStatus {
14
+ name: string;
15
+ enabled: boolean;
16
+ running: boolean;
17
+ toolCount: number;
18
+ description?: string;
19
+ error?: string;
20
+ }
21
+ export declare function loadMcpConfig(): McpConfig;
22
+ export declare function saveMcpConfig(config: McpConfig): void;
23
+ export declare function addMcpServer(server: McpServerConfig): void;
24
+ export declare function removeMcpServer(name: string): void;
25
+ export declare function toggleMcpServer(name: string): boolean | null;
26
+ export declare const PRESET_SERVERS: Record<string, Omit<McpServerConfig, 'name' | 'enabled'>>;
27
+ export declare class McpServerManager {
28
+ private clients;
29
+ private errors;
30
+ startAll(): Promise<void>;
31
+ stopAll(): Promise<void>;
32
+ startServer(config: McpServerConfig): Promise<boolean>;
33
+ stopServer(name: string): Promise<void>;
34
+ restartServer(name: string): Promise<boolean>;
35
+ getClient(name: string): McpClient | undefined;
36
+ getAllClients(): Map<string, McpClient>;
37
+ getStatus(): McpServerStatus[];
38
+ getToolCount(): number;
39
+ }
40
+ export declare const mcpManager: McpServerManager;
41
+ //# sourceMappingURL=McpRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpRegistry.d.ts","sourceRoot":"","sources":["../../src/mcp/McpRegistry.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK3C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,aAAa,IAAI,SAAS,CAQzC;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAGrD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAM1D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAO5D;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC,CAwDpF,CAAC;AAEF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,MAAM,CAA6B;IAErC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAMzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxB,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAetD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOnD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI9C,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;IAIvC,SAAS,IAAI,eAAe,EAAE;IAe9B,YAAY,IAAI,MAAM;CAOvB;AAED,eAAO,MAAM,UAAU,kBAAyB,CAAC"}
@@ -0,0 +1,175 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import { McpClient } from './McpClient.js';
5
+ const MCP_CONFIG_DIR = path.join(os.homedir(), '.aurix', 'mcp');
6
+ const MCP_CONFIG_FILE = path.join(MCP_CONFIG_DIR, 'servers.json');
7
+ function ensureDirs() {
8
+ if (!fs.existsSync(MCP_CONFIG_DIR))
9
+ fs.mkdirSync(MCP_CONFIG_DIR, { recursive: true });
10
+ }
11
+ export function loadMcpConfig() {
12
+ ensureDirs();
13
+ try {
14
+ if (fs.existsSync(MCP_CONFIG_FILE)) {
15
+ return JSON.parse(fs.readFileSync(MCP_CONFIG_FILE, 'utf-8'));
16
+ }
17
+ }
18
+ catch { }
19
+ return { servers: [] };
20
+ }
21
+ export function saveMcpConfig(config) {
22
+ ensureDirs();
23
+ fs.writeFileSync(MCP_CONFIG_FILE, JSON.stringify(config, null, 2));
24
+ }
25
+ export function addMcpServer(server) {
26
+ const config = loadMcpConfig();
27
+ const idx = config.servers.findIndex(s => s.name === server.name);
28
+ if (idx >= 0)
29
+ config.servers[idx] = server;
30
+ else
31
+ config.servers.push(server);
32
+ saveMcpConfig(config);
33
+ }
34
+ export function removeMcpServer(name) {
35
+ const config = loadMcpConfig();
36
+ config.servers = config.servers.filter(s => s.name !== name);
37
+ saveMcpConfig(config);
38
+ }
39
+ export function toggleMcpServer(name) {
40
+ const config = loadMcpConfig();
41
+ const server = config.servers.find(s => s.name === name);
42
+ if (!server)
43
+ return null;
44
+ server.enabled = !server.enabled;
45
+ saveMcpConfig(config);
46
+ return server.enabled;
47
+ }
48
+ export const PRESET_SERVERS = {
49
+ github: {
50
+ command: 'npx',
51
+ args: ['-y', '@modelcontextprotocol/server-github'],
52
+ env: { GITHUB_PERSONAL_ACCESS_TOKEN: '<your-token>' },
53
+ description: 'GitHub repos, PRs, issues, actions',
54
+ },
55
+ filesystem: {
56
+ command: 'npx',
57
+ args: ['-y', '@modelcontextprotocol/server-filesystem', os.homedir()],
58
+ description: 'Filesystem read/write/search',
59
+ },
60
+ postgres: {
61
+ command: 'npx',
62
+ args: ['-y', '@modelcontextprotocol/server-postgres'],
63
+ env: { DATABASE_URL: 'postgresql://localhost:5432/mydb' },
64
+ description: 'PostgreSQL database queries',
65
+ },
66
+ sqlite: {
67
+ command: 'npx',
68
+ args: ['-y', '@modelcontextprotocol/server-sqlite'],
69
+ env: { SQLITE_DB_PATH: './data.db' },
70
+ description: 'SQLite database queries',
71
+ },
72
+ brave_search: {
73
+ command: 'npx',
74
+ args: ['-y', '@anthropic/mcp-server-brave-search'],
75
+ env: { BRAVE_API_KEY: '<your-key>' },
76
+ description: 'Brave web search',
77
+ },
78
+ puppeteer: {
79
+ command: 'npx',
80
+ args: ['-y', '@anthropic/mcp-server-puppeteer'],
81
+ description: 'Browser automation (navigate, screenshot, click)',
82
+ },
83
+ slack: {
84
+ command: 'npx',
85
+ args: ['-y', '@anthropic/mcp-server-slack'],
86
+ env: { SLACK_BOT_TOKEN: '<your-token>', SLACK_TEAM_ID: '<your-team>' },
87
+ description: 'Slack channels and messages',
88
+ },
89
+ memory: {
90
+ command: 'npx',
91
+ args: ['-y', '@modelcontextprotocol/server-memory'],
92
+ description: 'Persistent knowledge graph memory',
93
+ },
94
+ fetch: {
95
+ command: 'npx',
96
+ args: ['-y', '@modelcontextprotocol/server-fetch'],
97
+ description: 'Fetch and parse web pages',
98
+ },
99
+ sequential_thinking: {
100
+ command: 'npx',
101
+ args: ['-y', '@modelcontextprotocol/server-sequential-thinking'],
102
+ description: 'Structured step-by-step reasoning',
103
+ },
104
+ };
105
+ export class McpServerManager {
106
+ clients = new Map();
107
+ errors = new Map();
108
+ async startAll() {
109
+ const config = loadMcpConfig();
110
+ const enabled = config.servers.filter(s => s.enabled);
111
+ await Promise.allSettled(enabled.map(s => this.startServer(s)));
112
+ }
113
+ async stopAll() {
114
+ await Promise.allSettled(Array.from(this.clients.values()).map(c => c.stop()));
115
+ this.clients.clear();
116
+ }
117
+ async startServer(config) {
118
+ if (this.clients.has(config.name))
119
+ return true;
120
+ const client = new McpClient(config.name, config.command, config.args, config.env);
121
+ try {
122
+ await client.start();
123
+ this.clients.set(config.name, client);
124
+ this.errors.delete(config.name);
125
+ return true;
126
+ }
127
+ catch (e) {
128
+ this.errors.set(config.name, e.message || String(e));
129
+ return false;
130
+ }
131
+ }
132
+ async stopServer(name) {
133
+ const client = this.clients.get(name);
134
+ if (client) {
135
+ await client.stop();
136
+ this.clients.delete(name);
137
+ }
138
+ }
139
+ async restartServer(name) {
140
+ await this.stopServer(name);
141
+ const config = loadMcpConfig().servers.find(s => s.name === name);
142
+ if (!config)
143
+ return false;
144
+ return this.startServer(config);
145
+ }
146
+ getClient(name) {
147
+ return this.clients.get(name);
148
+ }
149
+ getAllClients() {
150
+ return this.clients;
151
+ }
152
+ getStatus() {
153
+ const config = loadMcpConfig();
154
+ return config.servers.map(s => {
155
+ const client = this.clients.get(s.name);
156
+ return {
157
+ name: s.name,
158
+ enabled: s.enabled,
159
+ running: client?.running ?? false,
160
+ toolCount: client?.tools.length ?? 0,
161
+ description: s.description,
162
+ error: this.errors.get(s.name),
163
+ };
164
+ });
165
+ }
166
+ getToolCount() {
167
+ let count = 0;
168
+ for (const client of this.clients.values()) {
169
+ count += client.tools.length;
170
+ }
171
+ return count;
172
+ }
173
+ }
174
+ export const mcpManager = new McpServerManager();
175
+ //# sourceMappingURL=McpRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpRegistry.js","sourceRoot":"","sources":["../../src/mcp/McpRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Tool } from '../tools/Registry.js';
2
+ import type { McpToolSchema } from './McpClient.js';
3
+ export declare function createMcpTool(serverName: string, schema: McpToolSchema): Tool;
4
+ export declare function registerMcpTools(registerFn: (tool: Tool) => void): Promise<number>;
5
+ export declare function unregisterMcpTools(unregisterFn: (name: string) => void): void;
6
+ //# sourceMappingURL=McpToolAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpToolAdapter.d.ts","sourceRoot":"","sources":["../../src/mcp/McpToolAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA+B7E;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAUxF;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAM7E"}
@@ -0,0 +1,54 @@
1
+ import { mcpManager } from './McpRegistry.js';
2
+ export function createMcpTool(serverName, schema) {
3
+ return {
4
+ name: `mcp_${serverName}_${schema.name}`,
5
+ description: `[MCP:${serverName}] ${schema.description || schema.name}`,
6
+ parameters: schema.inputSchema,
7
+ async execute(args) {
8
+ const client = mcpManager.getClient(serverName);
9
+ if (!client || !client.running) {
10
+ return `Error: MCP server "${serverName}" is not running. Use /mcp to restart it.`;
11
+ }
12
+ try {
13
+ const result = await client.callTool(schema.name, args);
14
+ if (typeof result === 'string')
15
+ return result;
16
+ if (result && typeof result === 'object') {
17
+ const r = result;
18
+ if (r.content) {
19
+ if (Array.isArray(r.content)) {
20
+ return r.content
21
+ .map((item) => item.type === 'text' ? item.text : JSON.stringify(item))
22
+ .join('\n');
23
+ }
24
+ return String(r.content);
25
+ }
26
+ return JSON.stringify(result, null, 2);
27
+ }
28
+ return String(result);
29
+ }
30
+ catch (e) {
31
+ return `MCP tool error (${serverName}/${schema.name}): ${e.message}`;
32
+ }
33
+ },
34
+ };
35
+ }
36
+ export async function registerMcpTools(registerFn) {
37
+ let count = 0;
38
+ for (const [serverName, client] of mcpManager.getAllClients()) {
39
+ for (const schema of client.tools) {
40
+ const tool = createMcpTool(serverName, schema);
41
+ registerFn(tool);
42
+ count++;
43
+ }
44
+ }
45
+ return count;
46
+ }
47
+ export function unregisterMcpTools(unregisterFn) {
48
+ for (const [serverName, client] of mcpManager.getAllClients()) {
49
+ for (const schema of client.tools) {
50
+ unregisterFn(`mcp_${serverName}_${schema.name}`);
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=McpToolAdapter.js.map