Brazilian CEP MCP

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import axios from "axios"; // Criando o servidor MCP const server = new McpServer({ name: "CEP-Server", version: "1.0.0", capabilities: { tools: {}, resources: {}, prompts: {} } }); server.tool( "consultar-cep", "Query address information from a Brazilian postal code (CEP)", { cep: z.string() .length(8, "Postal code must have exactly 8 digits") .regex(/^\d+$/, "Postal code must contain only numbers") .describe("Postal code to be queried (only numbers, 8 digits)") }, async ({ cep }) => { try { console.error(`Consulting postal code: ${cep}`); const url = `https://viacep.com.br/ws/${cep}/json/`; const response = await axios.get(url); // Verificando se houve erro na resposta da API if (response.data.erro) { return { content: [{ type: "text", text: "Postal code not found in the database." }], isError: true }; } // Formatando a resposta para exibição const endereco = response.data; return { content: [{ type: "text", text: ` Endereço encontrado: CEP: ${endereco.cep} Logradouro: ${endereco.logradouro} Complemento: ${endereco.complemento || "N/A"} Bairro: ${endereco.bairro} Cidade: ${endereco.localidade} Estado: ${endereco.uf} (${endereco.estado}) Região: ${endereco.regiao} DDD: ${endereco.ddd} IBGE: ${endereco.ibge} ` }] }; } catch (erro: any) { console.error(`Error querying postal code: ${erro.message}`); // Verificando se o erro é devido a formato inválido (status 400) if (erro.response && erro.response.status === 400) { return { content: [{ type: "text", text: "Invalid postal code format. Use only numbers (8 digits)." }], isError: true }; } return { content: [{ type: "text", text: `Error querying postal code: ${erro.message}` }], isError: true }; } } ); async function main() { const transport = new StdioServerTransport(); await server.connect(transport); console.error("Postal Code Query Service running via stdio"); } main().catch((error) => { console.error("Fatal error in main():", error); process.exit(1); });