@cgalaviz/easysell-mcp 0.4.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 +256 -0
- package/dist/client.d.ts +53 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +372 -0
- package/dist/client.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +49 -0
- package/dist/main.js.map +1 -0
- package/dist/registry/audit.d.ts +3 -0
- package/dist/registry/audit.d.ts.map +1 -0
- package/dist/registry/audit.js +23 -0
- package/dist/registry/audit.js.map +1 -0
- package/dist/registry/binary-downloads.d.ts +3 -0
- package/dist/registry/binary-downloads.d.ts.map +1 -0
- package/dist/registry/binary-downloads.js +80 -0
- package/dist/registry/binary-downloads.js.map +1 -0
- package/dist/registry/canned-responses.d.ts +11 -0
- package/dist/registry/canned-responses.d.ts.map +1 -0
- package/dist/registry/canned-responses.js +54 -0
- package/dist/registry/canned-responses.js.map +1 -0
- package/dist/registry/catalog-images.d.ts +3 -0
- package/dist/registry/catalog-images.d.ts.map +1 -0
- package/dist/registry/catalog-images.js +48 -0
- package/dist/registry/catalog-images.js.map +1 -0
- package/dist/registry/catalog.d.ts +3 -0
- package/dist/registry/catalog.d.ts.map +1 -0
- package/dist/registry/catalog.js +156 -0
- package/dist/registry/catalog.js.map +1 -0
- package/dist/registry/conversations.d.ts +9 -0
- package/dist/registry/conversations.d.ts.map +1 -0
- package/dist/registry/conversations.js +246 -0
- package/dist/registry/conversations.js.map +1 -0
- package/dist/registry/customers.d.ts +3 -0
- package/dist/registry/customers.d.ts.map +1 -0
- package/dist/registry/customers.js +242 -0
- package/dist/registry/customers.js.map +1 -0
- package/dist/registry/iam.d.ts +3 -0
- package/dist/registry/iam.d.ts.map +1 -0
- package/dist/registry/iam.js +116 -0
- package/dist/registry/iam.js.map +1 -0
- package/dist/registry/index.d.ts +3 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +37 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/integrations.d.ts +3 -0
- package/dist/registry/integrations.d.ts.map +1 -0
- package/dist/registry/integrations.js +65 -0
- package/dist/registry/integrations.js.map +1 -0
- package/dist/registry/notifications.d.ts +3 -0
- package/dist/registry/notifications.d.ts.map +1 -0
- package/dist/registry/notifications.js +44 -0
- package/dist/registry/notifications.js.map +1 -0
- package/dist/registry/orders.d.ts +3 -0
- package/dist/registry/orders.d.ts.map +1 -0
- package/dist/registry/orders.js +134 -0
- package/dist/registry/orders.js.map +1 -0
- package/dist/registry/payments.d.ts +3 -0
- package/dist/registry/payments.d.ts.map +1 -0
- package/dist/registry/payments.js +39 -0
- package/dist/registry/payments.js.map +1 -0
- package/dist/registry/pricing.d.ts +3 -0
- package/dist/registry/pricing.d.ts.map +1 -0
- package/dist/registry/pricing.js +20 -0
- package/dist/registry/pricing.js.map +1 -0
- package/dist/registry/quotes.d.ts +19 -0
- package/dist/registry/quotes.d.ts.map +1 -0
- package/dist/registry/quotes.js +81 -0
- package/dist/registry/quotes.js.map +1 -0
- package/dist/registry/reports.d.ts +3 -0
- package/dist/registry/reports.d.ts.map +1 -0
- package/dist/registry/reports.js +33 -0
- package/dist/registry/reports.js.map +1 -0
- package/dist/registry/shipping.d.ts +3 -0
- package/dist/registry/shipping.d.ts.map +1 -0
- package/dist/registry/shipping.js +85 -0
- package/dist/registry/shipping.js.map +1 -0
- package/dist/registry/super-admin.d.ts +11 -0
- package/dist/registry/super-admin.d.ts.map +1 -0
- package/dist/registry/super-admin.js +222 -0
- package/dist/registry/super-admin.js.map +1 -0
- package/dist/registry/tenants.d.ts +13 -0
- package/dist/registry/tenants.d.ts.map +1 -0
- package/dist/registry/tenants.js +78 -0
- package/dist/registry/tenants.js.map +1 -0
- package/dist/registry/types.d.ts +67 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +10 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/registry/uploads.d.ts +3 -0
- package/dist/registry/uploads.d.ts.map +1 -0
- package/dist/registry/uploads.js +86 -0
- package/dist/registry/uploads.js.map +1 -0
- package/dist/registry/usage.d.ts +9 -0
- package/dist/registry/usage.d.ts.map +1 -0
- package/dist/registry/usage.js +33 -0
- package/dist/registry/usage.js.map +1 -0
- package/dist/tools.d.ts +8 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +150 -0
- package/dist/tools.js.map +1 -0
- package/package.json +41 -0
package/dist/tools.js
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { apiRequest } from "./client.js";
|
|
3
|
+
function fieldToZod(field) {
|
|
4
|
+
let schema;
|
|
5
|
+
switch (field.type) {
|
|
6
|
+
case "string":
|
|
7
|
+
schema = field.enum ? z.enum(field.enum) : z.string();
|
|
8
|
+
break;
|
|
9
|
+
case "number":
|
|
10
|
+
schema = z.number();
|
|
11
|
+
break;
|
|
12
|
+
case "boolean":
|
|
13
|
+
schema = z.boolean();
|
|
14
|
+
break;
|
|
15
|
+
case "array":
|
|
16
|
+
// El elemento de un array nunca es "opcional": `required` en `field.items`
|
|
17
|
+
// no tiene sentido ahí (no es una propiedad con nombre) y, sin forzarlo,
|
|
18
|
+
// `fieldToZod` lo envolvía en `.optional()` por default y zod-to-json-schema
|
|
19
|
+
// lo convertía en `anyOf:[{not:{}},{...}]` — cualquier tool con un array
|
|
20
|
+
// (tags, variantes, líneas) quedaba con un schema roto.
|
|
21
|
+
schema = z.array(fieldToZod({ ...field.items, required: true }));
|
|
22
|
+
break;
|
|
23
|
+
case "object":
|
|
24
|
+
schema = z.object(objectFieldsToZodShape(field.fields));
|
|
25
|
+
break;
|
|
26
|
+
case "any":
|
|
27
|
+
schema = z.any();
|
|
28
|
+
break;
|
|
29
|
+
default: {
|
|
30
|
+
// Exhaustividad: si alguien añade un tipo nuevo a `Field` (en
|
|
31
|
+
// registry/types.ts) sin tocar este switch, el compilador lo señala
|
|
32
|
+
// aquí (`never` no asignable a `string`) en vez de dejar salir un
|
|
33
|
+
// `undefined` como schema, que MCP aceptaría silenciosamente.
|
|
34
|
+
const _exhaustive = field;
|
|
35
|
+
throw new Error(`Tipo de Field no soportado: ${JSON.stringify(_exhaustive)}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (field.description)
|
|
39
|
+
schema = schema.describe(field.description);
|
|
40
|
+
return field.required ? schema : schema.optional();
|
|
41
|
+
}
|
|
42
|
+
function objectFieldsToZodShape(fields) {
|
|
43
|
+
const shape = {};
|
|
44
|
+
for (const [key, field] of Object.entries(fields))
|
|
45
|
+
shape[key] = fieldToZod(field);
|
|
46
|
+
return shape;
|
|
47
|
+
}
|
|
48
|
+
/** `ZodRawShape` de entrada de la tool: path params (siempre requeridos), query y body, todo al mismo nivel. */
|
|
49
|
+
export function routeInputShape(route) {
|
|
50
|
+
const shape = {};
|
|
51
|
+
for (const [key, field] of Object.entries(route.pathParams ?? {})) {
|
|
52
|
+
shape[key] = fieldToZod({ ...field, required: true });
|
|
53
|
+
}
|
|
54
|
+
for (const [key, field] of Object.entries(route.query ?? {})) {
|
|
55
|
+
shape[key] = fieldToZod(field);
|
|
56
|
+
}
|
|
57
|
+
for (const [key, field] of Object.entries(route.body ?? {})) {
|
|
58
|
+
// Un nombre presente tanto en query como en body (no pasa en este registro,
|
|
59
|
+
// pero si pasara) pisaría la entrada anterior: se documenta aquí para que
|
|
60
|
+
// quien añada una ruta nueva lo note en la revisión, no en producción.
|
|
61
|
+
shape[key] = fieldToZod(field);
|
|
62
|
+
}
|
|
63
|
+
return shape;
|
|
64
|
+
}
|
|
65
|
+
function buildPath(route, args) {
|
|
66
|
+
let path = route.path;
|
|
67
|
+
for (const key of Object.keys(route.pathParams ?? {})) {
|
|
68
|
+
path = path.replace(`:${key}`, encodeURIComponent(String(args[key])));
|
|
69
|
+
}
|
|
70
|
+
return path;
|
|
71
|
+
}
|
|
72
|
+
function buildQuery(route, args) {
|
|
73
|
+
const query = {};
|
|
74
|
+
for (const key of Object.keys(route.query ?? {})) {
|
|
75
|
+
const value = args[key];
|
|
76
|
+
if (value !== undefined)
|
|
77
|
+
query[key] = typeof value === "string" ? value : JSON.stringify(value);
|
|
78
|
+
}
|
|
79
|
+
return query;
|
|
80
|
+
}
|
|
81
|
+
function buildBody(route, args) {
|
|
82
|
+
if (!route.body)
|
|
83
|
+
return undefined;
|
|
84
|
+
const body = {};
|
|
85
|
+
for (const key of Object.keys(route.body)) {
|
|
86
|
+
if (args[key] !== undefined)
|
|
87
|
+
body[key] = args[key];
|
|
88
|
+
}
|
|
89
|
+
return body;
|
|
90
|
+
}
|
|
91
|
+
function toCallToolResult(status, ok, data) {
|
|
92
|
+
return {
|
|
93
|
+
isError: !ok,
|
|
94
|
+
content: [
|
|
95
|
+
{
|
|
96
|
+
type: "text",
|
|
97
|
+
text: JSON.stringify({ status, data }, null, 2),
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Pistas para el cliente MCP (Claude Desktop, Claude Code, cualquier otro):
|
|
104
|
+
* un cliente que respeta `ToolAnnotations` puede pedir confirmación antes de
|
|
105
|
+
* llamar una tool destructiva, o mostrarla distinto de una de solo lectura.
|
|
106
|
+
* El servidor NUNCA bloquea nada con esto — es información, no un permiso;
|
|
107
|
+
* el único candado real sigue siendo el scope de la API key en commerce-api.
|
|
108
|
+
*
|
|
109
|
+
* - readOnlyHint: GET nunca escribe nada.
|
|
110
|
+
* - destructiveHint: DELETE siempre (borra o revoca); el resto solo si
|
|
111
|
+
* `route.destructiveHint` lo marca a mano (cobra dinero, cancela,
|
|
112
|
+
* desactiva, o manda un mensaje real que no se puede des-enviar).
|
|
113
|
+
* - openWorldHint: true siempre — esto habla con un sistema externo real
|
|
114
|
+
* (commerce-api en producción), nunca un sandbox.
|
|
115
|
+
*/
|
|
116
|
+
function routeAnnotations(route) {
|
|
117
|
+
const readOnlyHint = route.method === "GET";
|
|
118
|
+
const destructiveHint = readOnlyHint ? false : (route.destructiveHint ?? route.method === "DELETE");
|
|
119
|
+
return {
|
|
120
|
+
readOnlyHint,
|
|
121
|
+
destructiveHint,
|
|
122
|
+
idempotentHint: route.method === "DELETE" || route.method === "PATCH",
|
|
123
|
+
openWorldHint: true,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
export function registerRoute(server, route) {
|
|
127
|
+
const scopeNote = route.scopes.length > 0 ? ` Requiere scope(s): ${route.scopes.join(", ")}.` : "";
|
|
128
|
+
server.registerTool(route.name, {
|
|
129
|
+
description: `${route.description}${scopeNote}`,
|
|
130
|
+
inputSchema: routeInputShape(route),
|
|
131
|
+
annotations: routeAnnotations(route),
|
|
132
|
+
}, async (args) => {
|
|
133
|
+
const path = buildPath(route, args);
|
|
134
|
+
const query = buildQuery(route, args);
|
|
135
|
+
const body = buildBody(route, args);
|
|
136
|
+
const result = await apiRequest(route.method, path, { query, body });
|
|
137
|
+
return toCallToolResult(result.status, result.ok, result.data);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
export function registerRoutes(server, routes) {
|
|
141
|
+
const seen = new Set();
|
|
142
|
+
for (const route of routes) {
|
|
143
|
+
if (seen.has(route.name)) {
|
|
144
|
+
throw new Error(`Nombre de tool duplicado en el registro: ${route.name}`);
|
|
145
|
+
}
|
|
146
|
+
seen.add(route.name);
|
|
147
|
+
registerRoute(server, route);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cgalaviz/easysell-mcp",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "Servidor MCP sobre la API de Easy Sell: catálogo, clientes, cotizaciones, pedidos, pagos, envíos, reportes, notificaciones, integraciones, conversaciones de WhatsApp, auditoría y administración de plataforma, autenticado con tu API key.",
|
|
5
|
+
"keywords": ["mcp", "model-context-protocol", "easysell", "whatsapp", "ecommerce"],
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Tupla (https://tupla.dev)",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"engines": { "node": ">=18" },
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"files": ["dist", "README.md", "LICENSE"],
|
|
14
|
+
"bin": {
|
|
15
|
+
"easysell-mcp": "./dist/main.js"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc -p tsconfig.json",
|
|
19
|
+
"dev": "tsx src/main.ts",
|
|
20
|
+
"start": "node dist/main.js",
|
|
21
|
+
"typecheck": "tsc -p tsconfig.test.json",
|
|
22
|
+
"lint": "eslint .",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"prepublishOnly": "npm run typecheck && npm run lint && npm run test && npm run build"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@modelcontextprotocol/sdk": "1.30.1",
|
|
28
|
+
"zod": "3.25.76"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@eslint/js": "9.17.0",
|
|
32
|
+
"@types/node": "22.10.5",
|
|
33
|
+
"@typescript-eslint/eslint-plugin": "8.18.2",
|
|
34
|
+
"@typescript-eslint/parser": "8.18.2",
|
|
35
|
+
"eslint": "9.17.0",
|
|
36
|
+
"globals": "15.14.0",
|
|
37
|
+
"tsx": "4.19.2",
|
|
38
|
+
"typescript": "5.6.3",
|
|
39
|
+
"vitest": "2.1.8"
|
|
40
|
+
}
|
|
41
|
+
}
|