@botuyo/mcp 0.2.1 → 0.2.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.
- package/dist/client.d.ts +1 -0
- package/dist/client.js +1 -1
- package/dist/client.js.map +1 -1
- package/dist/commands/auth.d.ts +2 -3
- package/dist/commands/auth.js +13 -32
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/setup.d.ts +3 -3
- package/dist/commands/setup.js +86 -45
- package/dist/commands/setup.js.map +1 -1
- package/package.json +1 -2
package/dist/client.d.ts
CHANGED
package/dist/client.js
CHANGED
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/auth.d.ts
CHANGED
|
@@ -9,9 +9,8 @@
|
|
|
9
9
|
* 2. Opens admin.botuyo.com/mcp-auth?redirect=http://localhost:PORT
|
|
10
10
|
* 3. The admin panel authenticates the user (login/Google),
|
|
11
11
|
* calls POST /api/v1/mcp/oauth/authorize, then redirects to localhost with ?code=...
|
|
12
|
-
* 4. CLI exchanges the code for
|
|
13
|
-
* 5.
|
|
14
|
-
* 6. Saves the JWT to ~/.botuyo/credentials.json
|
|
12
|
+
* 4. CLI exchanges the code for a JWT directly (POST /api/v1/mcp/oauth/token)
|
|
13
|
+
* 5. Saves the JWT to ~/.botuyo/credentials.json
|
|
15
14
|
*
|
|
16
15
|
* For terminal-only login (email/password), use `npx @botuyo/mcp login` instead.
|
|
17
16
|
*/
|
package/dist/commands/auth.js
CHANGED
|
@@ -9,9 +9,8 @@
|
|
|
9
9
|
* 2. Opens admin.botuyo.com/mcp-auth?redirect=http://localhost:PORT
|
|
10
10
|
* 3. The admin panel authenticates the user (login/Google),
|
|
11
11
|
* calls POST /api/v1/mcp/oauth/authorize, then redirects to localhost with ?code=...
|
|
12
|
-
* 4. CLI exchanges the code for
|
|
13
|
-
* 5.
|
|
14
|
-
* 6. Saves the JWT to ~/.botuyo/credentials.json
|
|
12
|
+
* 4. CLI exchanges the code for a JWT directly (POST /api/v1/mcp/oauth/token)
|
|
13
|
+
* 5. Saves the JWT to ~/.botuyo/credentials.json
|
|
15
14
|
*
|
|
16
15
|
* For terminal-only login (email/password), use `npx @botuyo/mcp login` instead.
|
|
17
16
|
*/
|
|
@@ -20,7 +19,7 @@ import { URL } from 'url';
|
|
|
20
19
|
import { execSync } from 'child_process';
|
|
21
20
|
import { readCredentials, saveCredentials } from './credentials.js';
|
|
22
21
|
import os from 'os';
|
|
23
|
-
const ADMIN_URL = process.env.BOTUYO_ADMIN_URL || 'https://
|
|
22
|
+
const ADMIN_URL = process.env.BOTUYO_ADMIN_URL || 'https://botuyo.com';
|
|
24
23
|
const API_URL = process.env.BOTUYO_API_URL || 'https://api.botuyo.com';
|
|
25
24
|
export async function runAuth(args) {
|
|
26
25
|
console.log('\n🤖 BotUyo MCP — Autenticación por Browser\n');
|
|
@@ -49,8 +48,8 @@ export async function runAuth(args) {
|
|
|
49
48
|
console.error('❌ La autorización expiró o fue cancelada.');
|
|
50
49
|
process.exit(1);
|
|
51
50
|
}
|
|
52
|
-
console.log('✅ Código
|
|
53
|
-
// Exchange code for API key
|
|
51
|
+
console.log('✅ Código recibido! Obteniendo sesión...');
|
|
52
|
+
// Exchange code for JWT directly (no API key intermediate)
|
|
54
53
|
const tokenRes = await fetch(`${API_URL}/api/v1/mcp/oauth/token`, {
|
|
55
54
|
method: 'POST',
|
|
56
55
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -58,41 +57,24 @@ export async function runAuth(args) {
|
|
|
58
57
|
});
|
|
59
58
|
const tokenData = (await tokenRes.json());
|
|
60
59
|
if (!tokenData.success) {
|
|
61
|
-
console.error(`❌
|
|
62
|
-
process.exit(1);
|
|
63
|
-
}
|
|
64
|
-
const apiKey = tokenData.data.key;
|
|
65
|
-
const tenantId = tokenData.data.tenantId;
|
|
66
|
-
const tenantName = tokenData.data.tenantName;
|
|
67
|
-
const role = tokenData.data.role;
|
|
68
|
-
// Now use the API key to get a JWT
|
|
69
|
-
console.log('⏳ Obteniendo sesión JWT...');
|
|
70
|
-
const authRes = await fetch(`${API_URL}/api/v1/mcp/auth`, {
|
|
71
|
-
method: 'POST',
|
|
72
|
-
headers: {
|
|
73
|
-
'x-api-key': apiKey,
|
|
74
|
-
'Content-Type': 'application/json'
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
const authData = (await authRes.json());
|
|
78
|
-
if (!authData.success) {
|
|
79
|
-
console.error(`❌ Error al obtener JWT: ${authData.error}`);
|
|
60
|
+
console.error(`❌ Error: ${tokenData.error}`);
|
|
80
61
|
process.exit(1);
|
|
81
62
|
}
|
|
82
63
|
const creds = {
|
|
83
|
-
token:
|
|
84
|
-
tenantId,
|
|
85
|
-
tenantName: tenantName || tenantId,
|
|
86
|
-
role:
|
|
87
|
-
email:
|
|
64
|
+
token: tokenData.data.token,
|
|
65
|
+
tenantId: tokenData.data.tenantId,
|
|
66
|
+
tenantName: tokenData.data.tenantName || tokenData.data.tenantId,
|
|
67
|
+
role: tokenData.data.role || 'viewer',
|
|
68
|
+
email: tokenData.data.callerEmail || '',
|
|
88
69
|
savedAt: new Date().toISOString(),
|
|
89
|
-
expiresAt: new Date(Date.now() +
|
|
70
|
+
expiresAt: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString() // 7 days
|
|
90
71
|
};
|
|
91
72
|
await saveCredentials(creds);
|
|
92
73
|
console.log(`\n✅ ¡Autenticado exitosamente!`);
|
|
93
74
|
console.log(` Tenant: ${creds.tenantName}`);
|
|
94
75
|
console.log(` Role: ${creds.role}`);
|
|
95
76
|
console.log(` Email: ${creds.email || '(no disponible)'}`);
|
|
77
|
+
console.log(` Expira: ${new Date(creds.expiresAt).toLocaleDateString()}`);
|
|
96
78
|
console.log(`\n🚀 Ya podés usar el servidor MCP de BotUyo.\n`);
|
|
97
79
|
}
|
|
98
80
|
// ── Local callback server ─────────────────────────────────────────────────────
|
|
@@ -127,7 +109,6 @@ function startCallbackServer() {
|
|
|
127
109
|
});
|
|
128
110
|
server.listen(0, 'localhost', () => {
|
|
129
111
|
const port = server.address().port;
|
|
130
|
-
// Timeout after 10 minutes
|
|
131
112
|
setTimeout(() => { server.close(); resolveCode(null); }, 10 * 60 * 1000);
|
|
132
113
|
resolve({ port, waitForCode });
|
|
133
114
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/setup.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* npx @botuyo/mcp setup
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Interactive setup — auto-detects or asks for your editor,
|
|
5
|
+
* then writes the mcp.json config file automatically.
|
|
6
|
+
* No env vars needed (credentials from ~/.botuyo/credentials.json).
|
|
7
7
|
*/
|
|
8
8
|
export declare function runSetup(args: string[]): Promise<void>;
|
package/dist/commands/setup.js
CHANGED
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* npx @botuyo/mcp setup
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Interactive setup — auto-detects or asks for your editor,
|
|
5
|
+
* then writes the mcp.json config file automatically.
|
|
6
|
+
* No env vars needed (credentials from ~/.botuyo/credentials.json).
|
|
7
7
|
*/
|
|
8
|
+
import * as readline from 'readline';
|
|
8
9
|
import { readCredentials } from './credentials.js';
|
|
9
|
-
import { writeFile, readFile } from 'fs/promises';
|
|
10
|
-
import { join } from 'path';
|
|
10
|
+
import { writeFile, readFile, mkdir } from 'fs/promises';
|
|
11
|
+
import { join, sep } from 'path';
|
|
11
12
|
import { existsSync } from 'fs';
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
const EDITORS = [
|
|
14
|
+
{ name: 'Cursor', configPath: `.cursor${sep}mcp.json` },
|
|
15
|
+
{ name: 'VS Code / Antigravity', configPath: `.vscode${sep}mcp.json` },
|
|
16
|
+
{ name: 'Claude Desktop', configPath: getClaudeConfigPath() }
|
|
17
|
+
];
|
|
18
|
+
function getClaudeConfigPath() {
|
|
19
|
+
const home = process.env.HOME || process.env.USERPROFILE || '';
|
|
20
|
+
if (process.platform === 'win32') {
|
|
21
|
+
return join(home, 'AppData', 'Roaming', 'Claude', 'claude_desktop_config.json');
|
|
20
22
|
}
|
|
21
|
-
|
|
23
|
+
return join(home, '.config', 'claude', 'claude_desktop_config.json');
|
|
24
|
+
}
|
|
22
25
|
function buildServerBlock() {
|
|
23
26
|
return {
|
|
24
27
|
servers: {
|
|
@@ -38,58 +41,96 @@ export async function runSetup(args) {
|
|
|
38
41
|
else {
|
|
39
42
|
console.log(`✅ Autenticado como: ${creds.email} (${creds.tenantName})\n`);
|
|
40
43
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
// Auto-detect or ask
|
|
45
|
+
let selectedEditor;
|
|
46
|
+
// Check if an editor was passed as argument
|
|
47
|
+
const argTarget = args[0]?.toLowerCase();
|
|
48
|
+
if (argTarget) {
|
|
49
|
+
selectedEditor = EDITORS.find(e => e.name.toLowerCase().includes(argTarget));
|
|
44
50
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
// Try auto-detect
|
|
52
|
+
if (!selectedEditor) {
|
|
53
|
+
const detected = autoDetect();
|
|
54
|
+
if (detected) {
|
|
55
|
+
console.log(`📍 Detectado: ${detected.name}\n`);
|
|
56
|
+
const confirm = await prompt(`¿Querés configurar ${detected.name}? (s/n): `);
|
|
57
|
+
if (confirm.toLowerCase() === 's' || confirm.toLowerCase() === 'y' || confirm.trim() === '') {
|
|
58
|
+
selectedEditor = detected;
|
|
59
|
+
}
|
|
53
60
|
}
|
|
54
|
-
printClaudeSnippet();
|
|
55
61
|
}
|
|
56
|
-
|
|
57
|
-
|
|
62
|
+
// Interactive menu
|
|
63
|
+
if (!selectedEditor) {
|
|
64
|
+
console.log('¿Para qué editor querés configurar BotUyo?\n');
|
|
65
|
+
for (let i = 0; i < EDITORS.length; i++) {
|
|
66
|
+
console.log(` ${i + 1}. ${EDITORS[i].name}`);
|
|
67
|
+
}
|
|
68
|
+
console.log(` ${EDITORS.length + 1}. Mostrar snippet (copiar manual)`);
|
|
69
|
+
const choice = await prompt('\nElegí una opción: ');
|
|
70
|
+
const choiceNum = parseInt(choice, 10);
|
|
71
|
+
if (choiceNum >= 1 && choiceNum <= EDITORS.length) {
|
|
72
|
+
selectedEditor = EDITORS[choiceNum - 1];
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// Show snippet
|
|
76
|
+
console.log('\nCopiá este JSON en la config de tu editor:\n');
|
|
77
|
+
console.log(JSON.stringify(buildServerBlock(), null, 2));
|
|
78
|
+
console.log('\n💡 El servidor lee credenciales de ~/.botuyo/credentials.json automáticamente.\n');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Write config file
|
|
83
|
+
await writeConfigFile(selectedEditor);
|
|
58
84
|
}
|
|
59
|
-
async function writeConfigFile(
|
|
60
|
-
const
|
|
61
|
-
|
|
85
|
+
async function writeConfigFile(editor) {
|
|
86
|
+
const configPath = editor.configPath.startsWith('.')
|
|
87
|
+
? join(process.cwd(), editor.configPath)
|
|
88
|
+
: editor.configPath;
|
|
62
89
|
const config = buildServerBlock();
|
|
63
90
|
try {
|
|
64
91
|
// Merge with existing config if present
|
|
65
92
|
let merged = config;
|
|
66
93
|
if (existsSync(configPath)) {
|
|
67
|
-
|
|
68
|
-
|
|
94
|
+
try {
|
|
95
|
+
const existing = JSON.parse(await readFile(configPath, 'utf8'));
|
|
96
|
+
merged = { ...existing, servers: { ...existing.servers, ...config.servers } };
|
|
97
|
+
console.log('📋 Mergeando con config existente...');
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// If we can't parse, overwrite
|
|
101
|
+
}
|
|
69
102
|
}
|
|
70
|
-
|
|
103
|
+
// Create directory if needed
|
|
104
|
+
const dir = configPath.substring(0, configPath.lastIndexOf(sep));
|
|
71
105
|
if (dir) {
|
|
72
|
-
const { mkdir } = await import('fs/promises');
|
|
73
106
|
await mkdir(dir, { recursive: true });
|
|
74
107
|
}
|
|
75
108
|
await writeFile(configPath, JSON.stringify(merged, null, 2));
|
|
76
|
-
console.log(
|
|
77
|
-
console.log(
|
|
109
|
+
console.log(`\n✅ Config escrita en: ${configPath}`);
|
|
110
|
+
console.log(' Reiniciá tu editor para que tome los cambios.');
|
|
111
|
+
console.log('\n💡 Las credenciales se leen de ~/.botuyo/credentials.json automáticamente.\n');
|
|
78
112
|
}
|
|
79
113
|
catch (err) {
|
|
80
|
-
console.error(
|
|
114
|
+
console.error(`\n❌ Error al escribir config: ${err.message}`);
|
|
115
|
+
console.log('\nCopiá este JSON manualmente:\n');
|
|
116
|
+
console.log(JSON.stringify(config, null, 2));
|
|
117
|
+
console.log();
|
|
81
118
|
}
|
|
82
119
|
}
|
|
83
|
-
function
|
|
120
|
+
function autoDetect() {
|
|
84
121
|
if (existsSync('.cursor'))
|
|
85
|
-
return
|
|
122
|
+
return EDITORS[0];
|
|
86
123
|
if (existsSync('.vscode'))
|
|
87
|
-
return
|
|
124
|
+
return EDITORS[1];
|
|
88
125
|
return undefined;
|
|
89
126
|
}
|
|
90
|
-
function
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
127
|
+
function prompt(question) {
|
|
128
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
129
|
+
return new Promise((resolve) => {
|
|
130
|
+
rl.question(question, (answer) => {
|
|
131
|
+
rl.close();
|
|
132
|
+
resolve(answer);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
94
135
|
}
|
|
95
136
|
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAO/B,MAAM,OAAO,GAAmB;IAC9B,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE;IACvD,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE;IACtE,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,mBAAmB,EAAE,EAAE;CAC9D,CAAA;AAED,SAAS,mBAAmB;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAA;IAC9D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAA;IACjF,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAA;AACtE,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO;QACL,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC;aAC5B;SACF;KACF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;IAExC,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAA;IACrC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAA;IACrF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,UAAU,KAAK,CAAC,CAAA;IAC3E,CAAC;IAED,qBAAqB;IACrB,IAAI,cAAwC,CAAA;IAE5C,4CAA4C;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAA;IACxC,IAAI,SAAS,EAAE,CAAC;QACd,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;IAC9E,CAAC;IAED,kBAAkB;IAClB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAA;QAC7B,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAA;YAC/C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,sBAAsB,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAA;YAC5E,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC5F,cAAc,GAAG,QAAQ,CAAA;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAA;QAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAC/C,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,mCAAmC,CAAC,CAAA;QAEvE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;QACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAEtC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAClD,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;QACzC,CAAC;aAAM,CAAC;YACN,eAAe;YACf,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAA;YAC7D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YACxD,OAAO,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAA;YACjG,OAAM;QACR,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,eAAe,CAAC,cAAc,CAAC,CAAA;AACvC,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAAoB;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QAClD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC;QACxC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAA;IAErB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;IAEjC,IAAI,CAAC;QACH,wCAAwC;QACxC,IAAI,MAAM,GAAQ,MAAM,CAAA;QACxB,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;gBAC/D,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAI,MAAc,CAAC,OAAO,EAAE,EAAE,CAAA;gBACtF,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;QAChE,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACvC,CAAC;QAED,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5D,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAA;QACnD,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;QAC/D,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAA;IAC/F,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,iCAAiC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7D,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;QAC/C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5C,OAAO,CAAC,GAAG,EAAE,CAAA;IACf,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IAC5C,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IAC5C,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACrF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAA;YACV,OAAO,CAAC,MAAM,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botuyo/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "BotUyo MCP Server — create and manage AI agents via Model Context Protocol",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -30,7 +30,6 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@modelcontextprotocol/sdk": "^1.7.0",
|
|
33
|
-
"node-fetch": "^3.3.2",
|
|
34
33
|
"zod": "^3.22.4"
|
|
35
34
|
},
|
|
36
35
|
"devDependencies": {
|