UNPKG

@marcelocorrea/mcp-hotmart-api

Version:

MCP Server para integração com API Hotmart

245 lines 8.84 kB
#!/usr/bin/env node import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js"; import { HotmartClient } from "./hotmart-client.js"; // Inicializar servidor MCP const server = new Server({ name: "hotmart-api", version: "1.0.0", }, { capabilities: { tools: {}, }, }); // Instância do cliente Hotmart const hotmartClient = new HotmartClient(); // Lista de ferramentas disponíveis server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ { name: "get_products", description: "Retorna lista de produtos da conta Hotmart", inputSchema: { type: "object", properties: {}, }, }, { name: "get_product_offers", description: "Retorna as ofertas de um produto específico (ucode)", inputSchema: { type: "object", properties: { product_ucode: { type: "string", description: "Código único (ucode) do produto", }, }, required: ["product_ucode"], }, }, { name: "get_subscribers", description: "Retorna lista de assinaturas (subscribers) da conta Hotmart", inputSchema: { type: "object", properties: { product_id: { type: "string", description: "ID do produto para filtrar assinaturas (opcional)", }, }, }, }, { name: "get_subscription", description: "Retorna detalhes de uma assinatura específica", inputSchema: { type: "object", properties: { subscriber_code: { type: "string", description: "Código do assinante", }, }, required: ["subscriber_code"], }, }, { name: "get_sales", description: "Retorna lista de vendas da conta Hotmart com filtros opcionais", inputSchema: { type: "object", properties: { start_date: { type: "number", description: "Data inicial em timestamp (milissegundos)", }, end_date: { type: "number", description: "Data final em timestamp (milissegundos)", }, product_id: { type: "string", description: "ID do produto para filtrar vendas", }, }, }, }, { name: "get_sale_by_transaction", description: "Busca uma venda específica pelo ID da transação", inputSchema: { type: "object", properties: { transaction_id: { type: "string", description: "ID da transação", }, }, required: ["transaction_id"], }, }, { name: "test_connection", description: "Testa a conexão com a API Hotmart", inputSchema: { type: "object", properties: {}, }, }, ], }; }); // Handler para execução de ferramentas server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; try { switch (name) { case "get_products": { const products = await hotmartClient.getProducts(); return { content: [ { type: "text", text: JSON.stringify(products, null, 2), }, ], }; } case "get_subscribers": { const productId = args?.product_id; const subscribers = await hotmartClient.getSubscribers(productId); return { content: [ { type: "text", text: JSON.stringify(subscribers, null, 2), }, ], }; } case "get_product_offers": { const productUcode = args?.product_ucode; if (!productUcode) { throw new Error("product_ucode é obrigatório"); } const offers = await hotmartClient.getProductOffers(productUcode); return { content: [ { type: "text", text: JSON.stringify(offers, null, 2), }, ], }; } case "get_subscription": { const subscriberCode = args?.subscriber_code; if (!subscriberCode) { throw new Error("subscriber_code é obrigatório"); } const subscription = await hotmartClient.getSubscription(subscriberCode); return { content: [ { type: "text", text: JSON.stringify(subscription, null, 2), }, ], }; } case "get_sales": { const startDate = args?.start_date; const endDate = args?.end_date; const productId = args?.product_id; const sales = await hotmartClient.getSales({ startDate, endDate, productId, }); return { content: [ { type: "text", text: JSON.stringify(sales, null, 2), }, ], }; } case "get_sale_by_transaction": { const transactionId = args?.transaction_id; if (!transactionId) { throw new Error("transaction_id é obrigatório"); } const sale = await hotmartClient.getSalesByTransaction(transactionId); return { content: [ { type: "text", text: JSON.stringify(sale, null, 2), }, ], }; } case "test_connection": { const isConnected = await hotmartClient.testConnection(); return { content: [ { type: "text", text: JSON.stringify({ connected: isConnected }, null, 2), }, ], }; } default: throw new Error(`Ferramenta desconhecida: ${name}`); } } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); return { content: [ { type: "text", text: JSON.stringify({ error: errorMessage }, null, 2), }, ], isError: true, }; } }); // Iniciar servidor async function main() { const transport = new StdioServerTransport(); await server.connect(transport); console.error("Hotmart MCP Server rodando em stdio"); } main().catch((error) => { console.error("Erro fatal no servidor:", error); process.exit(1); }); //# sourceMappingURL=index.js.map