@botuyo/mcp 0.1.0 → 0.2.1
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 +9 -14
- package/dist/client.js +34 -29
- package/dist/client.js.map +1 -1
- package/dist/commands/auth.d.ts +18 -0
- package/dist/commands/auth.js +151 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/credentials.d.ts +28 -0
- package/dist/commands/credentials.js +59 -0
- package/dist/commands/credentials.js.map +1 -0
- package/dist/commands/login.d.ts +15 -0
- package/dist/commands/login.js +202 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/setup.d.ts +8 -0
- package/dist/commands/setup.js +95 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/switch_tenant.d.ts +10 -0
- package/dist/commands/switch_tenant.js +117 -0
- package/dist/commands/switch_tenant.js.map +1 -0
- package/dist/commands/tenants.d.ts +9 -0
- package/dist/commands/tenants.js +48 -0
- package/dist/commands/tenants.js.map +1 -0
- package/dist/index.d.ts +13 -14
- package/dist/index.js +120 -57
- package/dist/index.js.map +1 -1
- package/package.json +12 -3
package/dist/index.js
CHANGED
|
@@ -1,80 +1,143 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* @botuyo/mcp — Entry Point
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* }
|
|
5
|
+
* Sub-commands:
|
|
6
|
+
* npx @botuyo/mcp login — Login with email/password
|
|
7
|
+
* npx @botuyo/mcp tenants — List your tenants
|
|
8
|
+
* npx @botuyo/mcp switch-tenant — Switch active tenant
|
|
9
|
+
* npx @botuyo/mcp setup — Generate mcp.json for your editor
|
|
10
|
+
* npx @botuyo/mcp whoami — Show current credentials
|
|
11
|
+
* npx @botuyo/mcp logout — Clear stored credentials
|
|
12
|
+
* npx @botuyo/mcp — Start the MCP server (default)
|
|
13
|
+
*
|
|
14
|
+
* Token resolution (in priority order):
|
|
15
|
+
* 1. BOTUYO_TOKEN env var
|
|
16
|
+
* 2. ~/.botuyo/credentials.json (saved by `npx @botuyo/mcp login`)
|
|
18
17
|
*/
|
|
19
18
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
20
19
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
21
20
|
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
22
21
|
import { BotuyoApiClient } from './client.js';
|
|
23
22
|
import { ALL_TOOLS, TOOL_HANDLERS } from './tools/index.js';
|
|
24
|
-
|
|
25
|
-
const API_KEY = process.env.BOTUYO_API_KEY;
|
|
23
|
+
import { resolveToken, readCredentials, clearCredentials, isTokenExpired } from './commands/credentials.js';
|
|
26
24
|
const API_URL = process.env.BOTUYO_API_URL || 'https://api.botuyo.com';
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
//
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
25
|
+
// ─── Sub-command routing ──────────────────────────────────────────────────────
|
|
26
|
+
const [, , cmd, ...rest] = process.argv;
|
|
27
|
+
async function main() {
|
|
28
|
+
switch (cmd) {
|
|
29
|
+
// ── login ──────────────────────────────────────────────────────────────
|
|
30
|
+
case 'login': {
|
|
31
|
+
const { runLogin } = await import('./commands/login.js');
|
|
32
|
+
await runLogin(rest);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// ── auth (browser OAuth flow) ────────────────────────────────────────
|
|
36
|
+
case 'auth': {
|
|
37
|
+
const { runAuth } = await import('./commands/auth.js');
|
|
38
|
+
await runAuth(rest);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// ── tenants ────────────────────────────────────────────────────────────
|
|
42
|
+
case 'tenants': {
|
|
43
|
+
const { runTenants } = await import('./commands/tenants.js');
|
|
44
|
+
await runTenants();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// ── switch-tenant ─────────────────────────────────────────────────────
|
|
48
|
+
case 'switch-tenant': {
|
|
49
|
+
const { runSwitchTenant } = await import('./commands/switch_tenant.js');
|
|
50
|
+
await runSwitchTenant();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// ── setup ──────────────────────────────────────────────────────────────
|
|
54
|
+
case 'setup': {
|
|
55
|
+
const { runSetup } = await import('./commands/setup.js');
|
|
56
|
+
await runSetup(rest);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// ── whoami ─────────────────────────────────────────────────────────────
|
|
60
|
+
case 'whoami': {
|
|
61
|
+
const token = await resolveToken();
|
|
62
|
+
const creds = await readCredentials();
|
|
63
|
+
if (!token || !creds) {
|
|
64
|
+
console.log('No estás autenticado. Ejecutá: npx @botuyo/mcp login');
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const expired = await isTokenExpired();
|
|
68
|
+
console.log(`Email: ${creds.email}`);
|
|
69
|
+
console.log(`Tenant: ${creds.tenantName}`);
|
|
70
|
+
console.log(`Role: ${creds.role}`);
|
|
71
|
+
console.log(`Expira: ${new Date(creds.expiresAt).toLocaleDateString()}`);
|
|
72
|
+
console.log(`Estado: ${expired ? '❌ Expirado — ejecutá: npx @botuyo/mcp login' : '✅ Activo'}`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// ── logout ─────────────────────────────────────────────────────────────
|
|
76
|
+
case 'logout': {
|
|
77
|
+
await clearCredentials();
|
|
78
|
+
console.log('✅ Sesión cerrada.');
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// ── default: start MCP server ──────────────────────────────────────────
|
|
82
|
+
default: {
|
|
83
|
+
await startMcpServer();
|
|
84
|
+
}
|
|
54
85
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
86
|
+
}
|
|
87
|
+
async function startMcpServer() {
|
|
88
|
+
// Resolve JWT token
|
|
89
|
+
const token = await resolveToken();
|
|
90
|
+
if (!token) {
|
|
91
|
+
const expired = await isTokenExpired();
|
|
92
|
+
if (expired) {
|
|
93
|
+
console.error('[botuyo-mcp] Error: Tu sesión expiró.');
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.error('[botuyo-mcp] Error: No hay credenciales guardadas.');
|
|
97
|
+
}
|
|
98
|
+
console.error('[botuyo-mcp] Ejecutá `npx @botuyo/mcp login` para autenticarte.');
|
|
99
|
+
process.exit(1);
|
|
61
100
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
async function main() {
|
|
101
|
+
const creds = await readCredentials();
|
|
102
|
+
const client = new BotuyoApiClient({ token, apiUrl: API_URL });
|
|
65
103
|
// Verify credentials on startup
|
|
66
104
|
try {
|
|
67
|
-
const auth = await client.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
105
|
+
const auth = await client.verify();
|
|
106
|
+
const tenantName = creds?.tenantName || auth.tenantId;
|
|
107
|
+
const role = creds?.role || auth.role;
|
|
108
|
+
console.error(`[botuyo-mcp] ✓ Conectado a "${tenantName}" como ${role}`);
|
|
72
109
|
}
|
|
73
110
|
catch (err) {
|
|
74
111
|
const msg = err instanceof Error ? err.message : String(err);
|
|
75
112
|
console.error(`[botuyo-mcp] ✗ Auth failed: ${msg}`);
|
|
113
|
+
console.error('[botuyo-mcp] Ejecutá `npx @botuyo/mcp login` para re-autenticarte.');
|
|
76
114
|
process.exit(1);
|
|
77
115
|
}
|
|
116
|
+
// ── MCP Server ─────────────────────────────────────────────────────────
|
|
117
|
+
const server = new Server({ name: 'botuyo-mcp', version: '0.3.0' }, { capabilities: { tools: {} } });
|
|
118
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: ALL_TOOLS }));
|
|
119
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
120
|
+
const { name, arguments: args } = request.params;
|
|
121
|
+
const handler = TOOL_HANDLERS[name];
|
|
122
|
+
if (!handler) {
|
|
123
|
+
return { content: [{ type: 'text', text: `Unknown tool: ${name}` }], isError: true };
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
const result = await handler(client, args || {});
|
|
127
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
131
|
+
// Detect expired token and give helpful message
|
|
132
|
+
if (msg.includes('401') || msg.includes('expirada') || msg.includes('expired')) {
|
|
133
|
+
return {
|
|
134
|
+
content: [{ type: 'text', text: `Sesión expirada. El usuario debe ejecutar: npx @botuyo/mcp login` }],
|
|
135
|
+
isError: true
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
return { content: [{ type: 'text', text: `Error: ${msg}` }], isError: true };
|
|
139
|
+
}
|
|
140
|
+
});
|
|
78
141
|
const transport = new StdioServerTransport();
|
|
79
142
|
await server.connect(transport);
|
|
80
143
|
console.error('[botuyo-mcp] Server running via stdio');
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botuyo/mcp",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "BotUyo MCP Server — create and manage AI agents via Model Context Protocol",
|
|
5
|
-
"keywords": [
|
|
5
|
+
"keywords": [
|
|
6
|
+
"mcp",
|
|
7
|
+
"botuyo",
|
|
8
|
+
"ai-agents",
|
|
9
|
+
"chatbot",
|
|
10
|
+
"model-context-protocol"
|
|
11
|
+
],
|
|
6
12
|
"type": "module",
|
|
7
13
|
"main": "dist/index.js",
|
|
8
14
|
"bin": {
|
|
9
15
|
"botuyo-mcp": "dist/index.js"
|
|
10
16
|
},
|
|
11
|
-
"files": [
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"README.md"
|
|
20
|
+
],
|
|
12
21
|
"scripts": {
|
|
13
22
|
"build": "tsc",
|
|
14
23
|
"dev": "tsc -w",
|