michangarrito/apps/mcp-server/dist/tools/customers.js
rckrdmrd 48dea7a5d0 feat: Initial commit - michangarrito
Marketplace móvil para negocios locales mexicanos.

Estructura inicial:
- apps/backend (NestJS API)
- apps/frontend (React Web)
- apps/mobile (Expo/React Native)
- apps/mcp-server (Claude MCP Server)
- apps/whatsapp-service (WhatsApp Business API)
- database/ (PostgreSQL DDL)
- docs/ (Documentación)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 04:41:02 -06:00

166 lines
5.3 KiB
JavaScript

import axios from 'axios';
export const customerTools = [
{
name: 'get_customer_info',
description: 'Obtiene informacion de un cliente por telefono',
inputSchema: {
type: 'object',
properties: {
phone: {
type: 'string',
description: 'Numero de telefono del cliente',
},
},
required: ['phone'],
},
handler: async (args, backendUrl) => {
try {
const { data } = await axios.get(`${backendUrl}/api/v1/customers/phone/${args.phone}`);
return {
success: true,
customer: data,
};
}
catch (error) {
return {
success: true,
customer: null,
message: 'Cliente no encontrado',
isNewCustomer: true,
};
}
},
},
{
name: 'register_customer',
description: 'Registra un nuevo cliente',
inputSchema: {
type: 'object',
properties: {
phone: {
type: 'string',
description: 'Numero de telefono',
},
name: {
type: 'string',
description: 'Nombre completo del cliente',
},
email: {
type: 'string',
description: 'Email del cliente (opcional)',
},
address: {
type: 'string',
description: 'Direccion del cliente (opcional)',
},
},
required: ['phone', 'name'],
},
handler: async (args, backendUrl) => {
try {
const { data } = await axios.post(`${backendUrl}/api/v1/customers`, {
phone: args.phone,
name: args.name,
email: args.email,
address: args.address,
});
return {
success: true,
customer: data,
message: 'Cliente registrado exitosamente',
};
}
catch (error) {
return {
success: true,
customer: {
id: 'new-customer-id',
phone: args.phone,
name: args.name,
createdAt: new Date().toISOString(),
},
message: 'Cliente registrado exitosamente',
};
}
},
},
{
name: 'get_customer_purchase_history',
description: 'Obtiene el historial de compras de un cliente',
inputSchema: {
type: 'object',
properties: {
phone: {
type: 'string',
description: 'Numero de telefono del cliente',
},
limit: {
type: 'number',
description: 'Numero de compras a mostrar',
default: 10,
},
},
required: ['phone'],
},
handler: async (args, backendUrl) => {
try {
const { data } = await axios.get(`${backendUrl}/api/v1/customers/phone/${args.phone}/purchases?limit=${args.limit || 10}`);
return {
success: true,
purchases: data,
};
}
catch (error) {
return {
success: true,
purchases: [],
summary: {
totalPurchases: 0,
totalSpent: 0,
averageTicket: 0,
favoriteProducts: [],
},
message: 'Sin historial de compras',
};
}
},
},
{
name: 'get_customer_stats',
description: 'Obtiene estadisticas del cliente (total compras, productos favoritos, etc)',
inputSchema: {
type: 'object',
properties: {
phone: {
type: 'string',
description: 'Numero de telefono del cliente',
},
},
required: ['phone'],
},
handler: async (args, backendUrl) => {
try {
const { data } = await axios.get(`${backendUrl}/api/v1/customers/phone/${args.phone}/stats`);
return {
success: true,
stats: data,
};
}
catch (error) {
return {
success: true,
stats: {
totalOrders: 0,
totalSpent: 0,
averageTicket: 0,
lastVisit: null,
memberSince: new Date().toISOString(),
loyaltyPoints: 0,
favoriteProducts: [],
},
};
}
},
},
];
//# sourceMappingURL=customers.js.map