Residência em Software III — Universidade Tiradentes

Desafio
MCP Server

Construa um gateway inteligente sobre a API Filazero para agentes de IA.

Transforme endpoints REST complexos em tools padronizadas que qualquer agente de IA (Claude, GPT, etc.) possa consumir de forma conversacional e natural.

Node.js + TypeScript MCP SDK Docker + Nginx
// Sobre a Filazero

Eliminando Filas Com Tecnologia

A Filazero é uma startup SaaS de Aracaju que elimina filas presenciais através de virtualização e previsão em tempo real via machine learning.

O Problema
7+ Endpoints
Hoje, para um agente de IA agendar um atendimento, ele precisa "adivinhar" a sequência correta de 7+ endpoints REST.
A Solução
MCP Server
Com o MCP Server, uma única tool orquestra todo o fluxo de agendamento de forma inteligente e padronizada.
O Resultado
Conversacional
Agentes de IA podem realizar agendamentos através de conversas naturais, sem conhecer a API REST.
// Ambiente de Homologação

Acesso à API

URLs de Acesso
Recurso URL
API Base (Staging) https://api.staging.filazero.net
Site Homologação https://site.staging.filazero.net/
Backoffice (Staging) https://app.staging.filazero.net
🎬 Treinamento da Plataforma Playlist no YouTube
⚠️
Importante
Usem as URLs de staging para desenvolvimento e testes. Não façam requisições para produção.
// O Que Implementar

8 Tools Obrigatórias

Tools são funções que o agente pode chamar. Cada uma deve ter nome, descrição, schema JSON e lógica de orquestração.

Lista de Tools
# Tool Descrição Auth
1 list_companies Lista empresas disponíveis para agendamento Pública
2 get_company_services Serviços de uma empresa específica Pública
3 get_available_dates Dias do mês com vagas disponíveis Pública
4 get_available_sessions Horários e profissionais de um dia Pública
5 get_booking_form Campos personalizados do formulário Pública
6 schedule_appointment Emite o ticket de agendamento Bearer Token
7 check_ticket_status Consulta status de um ticket Pública
8 list_my_tickets Lista tickets do usuário logado Bearer Token
// Fluxo de Agendamento

Sequência de Chamadas

list_companies
get_company_services
get_available_dates
get_available_sessions
get_booking_form
schedule_appointment
check_ticket_status
Resources (3 obrigatórios)
Resource URI
categories filazero://categories
ticket-lifecycle filazero://ticket-lifecycle
flow-guide filazero://scheduling-flow
Prompts (2 obrigatórios)
Prompt Descrição
agendar-atendimento Fluxo completo de agendamento
consultar-agendamento Verificar status de ticket
// API REST

Endpoints da API

Descoberta e Seleção
Endpoint Método Descrição
/api/companies GET Lista todas as empresas
/api/companies/{slug}/services GET Serviços da empresa
/api/companies/{slug}/template GET Template visual (cores, logo)
/api/companies/{slug}/business-units GET Unidades de atendimento
Disponibilidade
Endpoint Método Descrição
/v2/scheduling/self-service/providers/{slug}/services/{serviceId}/available-session-days GET Dias disponíveis no mês
/v2/scheduling/self-service/providers/{slug}/locations/{locationId}/services/{serviceId}/sessions-resources-by-service GET Sessões do dia
/api/providers/{providerId}/sessions/{sessionId}/custom-fields GET Campos do formulário
Emissão e Consulta
Endpoint Método Auth Descrição
/v2/ticketing/tickets POST Bearer Emitir ticket
/v2/ticketing/public/ticket?key={accessKey} GET Pública Consulta por chave
/v2/ticketing/me/filtered-tickets GET Bearer Meus tickets
// Atenção

Regras de Negócio Críticas

Estas regras são essenciais para o funcionamento correto do MCP Server. Leiam com atenção.

Regra #1
abstractServiceId
Cada serviço pode ter dois IDs: id e abstractServiceId. Use SEMPRE o abstractServiceId quando disponível e maior que zero. Se usar o ID errado, a API retorna 200 com dados vazios — sem erro.
Regra #2
Content-Type com charset
O header deve ser exatamente: Content-Type: application/json;charset=UTF-8. Sem o charset=UTF-8, a API retorna 403 Forbidden.
Regra #3
200 para erros de negócio
A API retorna HTTP 200 mesmo para erros de negócio. Sempre verifique o campo messages na resposta para identificar erros.
Regra #4
Datas em UTC
Todas as datas da API são em UTC. Convertam para America/Sao_Paulo antes de exibir ao usuário.
TypeScript
// Resolver abstractServiceId corretamente
function resolveServiceRef(service: any): number {
  if (service.abstractServiceId && service.abstractServiceId > 0) {
    return service.abstractServiceId;
  }
  return service.id;
}

// Verificar erros de negócio na resposta
function checkApiErrors(response: any): void {
  if (response.messages?.length > 0) {
    const errors = response.messages.filter((m: any) => m.type === 'ERROR');
    if (errors.length > 0) {
      throw new Error(errors[0].description);
    }
  }
}
// Headers

Headers Obrigatórios

TypeScript
const REQUIRED_HEADERS = {
  'Accept': 'application/json, text/plain, */*',
  'Origin': 'https://app.filazero.net',
  'Referer': 'https://app.filazero.net/',
  'User-Agent': 'MCP-Server-FilaZero/1.0',
  'DNT': '1',
};

// Para POST/PUT/PATCH, adicionar:
const WRITE_HEADERS = {
  'Content-Type': 'application/json;charset=UTF-8',  // charset é OBRIGATÓRIO!
};
// Avaliação

Critérios de Aceite

Funcionais
Requisitos
  • Todas as 8 tools implementadas e respondendo
  • Os 3 resources acessíveis via resources/list e resources/read
  • Os 2 prompts listáveis e funcionais
  • Fluxo completo executável por um agente
  • Tratamento de erros documentados
  • Cache implementado com TTLs corretos
  • abstractServiceId resolvido corretamente
Não-Funcionais
Performance
  • Servidor inicializa em < 3 segundos
  • Resposta de tools públicas em < 2 segundos (P95)
  • Rate limiting funcionando
  • Logs estruturados em JSON
  • Docker Compose funcional com docker compose up
  • README completo
  • TypeScript com tipos explícitos (sem any)
Apresentação
Demonstração Obrigatória
🔌
Conexão MCP
Cliente conectando ao servidor
💬
Fluxo Completo
Agendamento via conversa natural
⚠️
Tratamento de Erro
Pelo menos 2 cenários
📊
Observabilidade
Logs de chamadas
// Material de Apoio

Referências

💡
Dica
Assistam ao treinamento Filazero antes de começar — ele explica o funcionamento da plataforma e o fluxo de agendamento.
Links Importantes
Recurso Link
🎬 Treinamento Filazero (YouTube) Playlist Completa
MCP Specification modelcontextprotocol.io/specification
MCP TypeScript SDK github.com/modelcontextprotocol/typescript-sdk
MCP Inspector github.com/modelcontextprotocol/inspector
Claude Desktop claude.ai/download
// Variáveis

Variáveis de Ambiente

Variável Default Descrição
FILAZERO_API_URL https://api.staging.filazero.net URL base da API
FILAZERO_APP_ORIGIN https://app.filazero.net Origin para headers
MCP_SERVER_PORT 3000 Porta do servidor
RATE_LIMIT_RPM 30 Requisições/min por tenant
CACHE_TTL_COMPANIES 300 TTL em segundos
LOG_LEVEL info Nível de log