DEV Community

Cover image for Do Zero ao MCP: Criando um Servidor Model Context Protocol com TypeScript e a API do Star Wars
Glaucia Lemos
Glaucia Lemos

Posted on

Do Zero ao MCP: Criando um Servidor Model Context Protocol com TypeScript e a API do Star Wars

Se você ainda não conhece o Model Context Protocol (MCP), está perdendo uma das tecnologias mais promissoras para integração de IA com dados e ferramentas externas. E se você é fã de Star Wars, essa live vai ser ainda mais especial! 🌟

Recentemente, fiz uma live completa onde expliquei desde os fundamentos teóricos até a implementação prática de um servidor MCP que conecta o Claude Desktop com a API pública do Star Wars (SWAPI). Neste artigo, vou resumir os principais pontos abordados e te dar um roteiro completo para você começar sua jornada com MCP.


🎥 Assista à Live Completa

Antes de mergulharmos no conteúdo, convido você a assistir à live completa no YouTube, onde demonstro passo a passo todo o processo de criação:

  • ▶️ Assista à Live: Do Zero ao MCP com TypeScript

💡 A live está disponível com chapters para facilitar sua navegação entre os tópicos!


📚 O que é o Model Context Protocol (MCP)?

O MCP é um protocolo revolucionário que permite que modelos de linguagem (LLMs) acessem dados e ferramentas externas de forma segura e padronizada. Pense nele como uma ponte entre o modelo de IA e o mundo real.

Por que o MCP é importante?

Em vez de dar acesso direto à internet ou aos seus dados, o MCP atua como um tradutor controlado:

  1. Usuário faz uma pergunta no MCP Client (ex: Claude Desktop)
  2. MCP Client interpreta e envia ao MCP Server
  3. MCP Server executa a ação (chamada HTTP à API)
  4. API processa e retorna dados
  5. MCP Server formata a resposta
  6. Modelo de IA recebe e apresenta ao usuário

Tudo isso acontece via stdio (entrada e saída padrão), sem o modelo acessar diretamente a internet.


🏗️ Arquitetura do Projeto

O projeto que criamos na live é intencionalmente simples para facilitar o aprendizado:

swapi-mcp-server-app/
├── src/
│   ├── index.ts          # Servidor MCP + Lógica das Tools
│   └── types.ts          # Interfaces TypeScript (People, Planets, Films)
├── build/                # Arquivos JS compilados
├── package.json          # Dependências e scripts
├── tsconfig.json         # Configuração TypeScript
└── claude_desktop_config.json  # Configuração do MCP Client
Enter fullscreen mode Exit fullscreen mode

Tecnologias Utilizadas

  • Node.js - Runtime JavaScript
  • TypeScript - Tipagem estática e segurança
  • MCP SDK (@modelcontextprotocol/sdk) - SDK oficial do MCP
  • Axios - Cliente HTTP para chamadas à API
  • Zod - Validação de esquemas e tipos
  • SWAPI - Star Wars API (API pública)
  • Claude Desktop - Para ser usado como MCP Client

🔧 Funcionalidades Implementadas

Tools (Ações)

Criamos 4 tools que o modelo pode executar:

  1. search_characters - Busca personagens pelo nome

    • Exemplo: "Busque informações sobre Luke Skywalker"
  2. search_planets - Busca planetas pelo nome

    • Exemplo: "Encontre dados sobre Tatooine"
  3. search_films - Busca filmes pelo título

    • Exemplo: "Procure pelo filme A New Hope"
  4. get_character_by_id - Obtém personagem pelo ID

    • Exemplo: "Busque o personagem com ID 4"

Resources (Dados)

Implementamos 1 resource para acesso direto a dados:

  • all_films - Lista todos os filmes ordenados por episódio

💻 Implementação Passo a Passo

1. Configuração Inicial

Primeiro, criamos o projeto e instalamos as dependências:

npm init -y
npm install @modelcontextprotocol/sdk axios zod
npm install --save-dev @types/node typescript
Enter fullscreen mode Exit fullscreen mode

2. Configuração do package.json

Configuramos scripts essenciais e o bin para tornar o servidor executável:

{
  "name": "swapi-mcp-server-app",
  "type": "module",
  "bin": {
    "swapi-mcp-server": "./build/index.js"
  },
  "scripts": {
    "build": "tsc",
    "watch": "tsc --watch",
    "inspector": "npx @modelcontextprotocol/inspector build/index.js"
  }
}
Enter fullscreen mode Exit fullscreen mode

💡 Dica: O script inspector é ESSENCIAL para testar seu MCP antes de integrá-lo ao Claude Desktop!

3. Definindo os Tipos (types.ts)

Criamos interfaces TypeScript baseadas na documentação da SWAPI:

export interface People {
  name: string;
  height: string;
  mass: string;
  hair_color: string;
  eye_color: string;
  birth_year: string;
  gender: string;
  homeworld: string;
  films: string[];
  // ... outras propriedades
}

export interface SearchResponse<T> {
  count: number;
  next: string | null;
  previous: string | null;
  results: T[];
}
Enter fullscreen mode Exit fullscreen mode

O SearchResponse<T> é genérico e pode ser reutilizado para diferentes tipos de dados.

4. Criando o Servidor MCP (index.ts)

4.1 Instanciando o Servidor

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

class SwapiMcpServer {
  private server: McpServer;
  private axiosInstance;

  constructor() {
    this.server = new McpServer({
      name: "swapi-mcp-server",
      version: "1.0.0",
    });

    this.axiosInstance = axios.create({
      baseURL: "https://swapi.dev/api",
      timeout: 10000,
    });

    this.setupTools();
    this.setupResources();
  }
}
Enter fullscreen mode Exit fullscreen mode

4.2 Registrando uma Tool

private setupTools(): void {
  this.server.registerTool(
    "search_characters",
    {
      title: "Buscar Personagens",
      description: "Busca personagens do Star Wars por nome",
      inputSchema: {
        search: z.string().describe("Nome do personagem para buscar"),
      },
    },
    async ({ search }) => {
      try {
        const response = await this.axiosInstance.get<SearchResponse<People>>(
          "/people/",
          { params: { search } }
        );

        if (response.data.results.length === 0) {
          return {
            content: [{
              type: "text" as const,
              text: `Nenhum personagem encontrado com o nome "${search}".`,
            }],
          };
        }

        const charactersInfo = response.data.results
          .map((char) => `Nome: ${char.name}\nAltura: ${char.height}cm\n...`)
          .join("\n---\n\n");

        return {
          content: [{
            type: "text" as const,
            text: `Encontrados ${response.data.results.length} personagem(ns):\n\n${charactersInfo}`,
          }],
        };
      } catch (error) {
        return this.handleError(error, "buscar personagens");
      }
    }
  );
}
Enter fullscreen mode Exit fullscreen mode

4.3 Conectando via Stdio

async run(): Promise<void> {
  const transport = new StdioServerTransport();
  await this.server.connect(transport);
  console.error("SWAPI MCP Server rodando em stdio");
}

const server = new SwapiMcpServer();
server.run().catch((error) => {
  console.error("Erro fatal ao iniciar o servidor:", error);
  process.exit(1);
});
Enter fullscreen mode Exit fullscreen mode

🧪 Testando com o MCP Inspector

Antes de integrar com o Claude Desktop, SEMPRE teste com o Inspector:

npm run build
npm run inspector
Enter fullscreen mode Exit fullscreen mode

O Inspector abre uma interface web onde você pode:

  • ✅ Listar todas as tools disponíveis
  • ✅ Testar cada tool individualmente
  • ✅ Visualizar e testar os resources criados
  • ✅ Debugar problemas de conexão
  • ✅ Ver logs em tempo real

Exemplo de teste:

  1. Clique em "Connect"
  2. Vá em "Tools" → "search_characters"
  3. Digite "Darth Vader" no campo search
  4. Clique em "Run Tool"
  5. Veja a resposta formatada!

🔌 Conectando ao Claude Desktop

1. Localize o arquivo de configuração

No Windows:

%APPDATA%\Claude\claude_desktop_config.json
Enter fullscreen mode Exit fullscreen mode

2. Adicione a configuração do MCP Server

{
  "mcpServers": {
    "swapi-mcp-server": {
      "command": "node",
      "args": [
        "C:/Users/SEU_USUARIO/caminho/para/swapi-mcp-server-app/build/index.js"
      ]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

⚠️ IMPORTANTE: Use o caminho absoluto para o arquivo build/index.js!

3. Reinicie o Claude Desktop

Feche completamente e abra novamente o Claude Desktop.

4. Teste com perguntas naturais

Agora você pode fazer perguntas como:

  • "Busque informações sobre Luke Skywalker"
  • "Encontre dados sobre o planeta Tatooine"
  • "Liste todos os filmes de Star Wars"
  • "Qual é o personagem com ID 4?"

O Claude vai identificar automaticamente qual tool usar e chamar seu MCP Server! 🎉


🎯 Principais Aprendizados da Live

1. MCP vs Acesso Direto à Internet

O MCP oferece:

  • Controle granular sobre o que a IA pode acessar
  • Segurança - sem acesso direto a dados sensíveis
  • Padronização - mesmo protocolo para diferentes fontes
  • Validação - Zod garante tipos corretos (TypeScript)

2. Tools vs Resources

Aspecto Tools Resources
Propósito Ações dinâmicas Dados prontos
Entrada Requer parâmetros do usuário Sem entrada
Exemplo Buscar personagem por nome Listar todos os filmes
Registro server.registerTool() server.registerResource()

3. Boas Práticas

NÃO FAÇA:

  • Deixar URLs de APIs expostas no código (use .env)
  • Esquecer de validar entradas com Zod
  • Pular o teste com Inspector

FAÇA:

  • Use variáveis de ambiente para dados sensíveis
  • Valide todas as entradas
  • Teste exaustivamente antes de integrar
  • Documente suas tools claramente

🌟 Possibilidades Infinitas

O que criamos na live é apenas o começo! Imagine aplicar MCP para:

Casos de Uso Empresariais

  • 🏢 API Corporativa - Padronizar PRs no GitHub
  • 📊 Dashboard Analytics - Consultar métricas em tempo real
  • 🗄️ Banco de Dados - Queries naturais em SQL
  • 📁 Documentação Interna - Busca semântica

Próximos Passos

  1. ✅ Adicionar mais tipos da SWAPI (vehicles, species, starships)
  2. ✅ Implementar cache com Redis
  3. ✅ Adicionar autenticação para APIs privadas
  4. ✅ Deploy em produção (Azure, AWS, etc.)
  5. ✅ Criar testes automatizados

📦 Repositório e Recursos

Todo o código da live está disponível no GitHub:

  • 📂 Repositório: swapi-mcp-server-app

GitHub logo glaucia86 / swapi-mcp-server-app

An application for study purposes to understand more about MCP with TypeScript using Star Wars API

🌟 Star Wars MCP Server

TypeScript Node.js MCP Star Wars API Claude Desktop

Um servidor MCP (Model Context Protocol) que fornece acesso à Star Wars API (SWAPI) através do Claude Desktop

📖 Sobre o Projeto

Este projeto é um servidor MCP desenvolvido em TypeScript que integra a Star Wars API (SWAPI) com o Claude Desktop. Ele permite que você faça perguntas sobre o universo Star Wars e obtenha informações detalhadas sobre personagens, planetas, filmes e muito mais, diretamente através do Claude.

✨ Funcionalidades

🔧 Tools Disponíveis

  • search_characters - Busca personagens do Star Wars por nome
  • search_planets - Busca planetas do Star Wars por nome
  • search_films - Busca filmes do Star Wars por título
  • get_character_by_id - Obtém informações detalhadas de um personagem pelo ID

📚 Resources Disponíveis

  • all_films - Lista todos os filmes da saga Star Wars ordenados por episódio

🚀 Como Executar

Pré-requisitos

  • Node.js (versão 18 ou superior)
  • Claude Desktop instalado
  • npm ou yarn

1. Instalação

# Clone
Enter fullscreen mode Exit fullscreen mode

O que você encontra no repositório:

  • ✅ Código completo e comentado
  • ✅ README detalhado com instruções
  • ✅ Exemplos de perguntas para testar
  • ✅ Troubleshooting de problemas comuns
  • ✅ Estrutura pronta para expandir
  • ✅ E, explicação detalhada da parte teórica dada durante a live

⭐ Não esqueça de dar uma estrela no repositório!


🎓 Recursos Adicionais

Documentação Oficial

Próximas Lives

Já estou planejando uma série Zero to Hero sobre LangChain.js! Serão aproximadamente 23 vídeos cobrindo desde o básico até tópicos avançados incluindo: LangGraph e LangSmith.

📺 Inscreva-se no canal para não perder:

YouTube: @glaucialemos


🤔 Perguntas Frequentes

1. MCP funciona só com Claude Desktop?

Não! Você pode usar MCP com:

  • Claude Desktop ✅
  • Visual Studio Code (com extensões) ✅
  • Cursor ✅
  • Qualquer cliente que implemente o protocolo MCP

2. Preciso pagar para usar Claude Desktop?

Não! O Claude Desktop é gratuito e você pode usar MCPs localmente sem custo.

3. Como fazer deploy de um MCP Server?

Para produção, você precisará:

  • Hospedar o servidor (Azure, AWS, etc.)
  • Configurar variáveis de ambiente
  • Implementar autenticação
  • Usar Docker para containerização

(Ainda estou estudando a melhor abordagem - em breve farei uma live sobre isso!)

4. O MCP substitui APIs REST?

Não! O MCP complementa APIs REST, fornecendo uma camada de abstração que permite que modelos de IA interajam com elas de forma padronizada.


💬 Vamos Conversar!

Gostou do conteúdo? Tem dúvidas ou sugestões? Me encontre nas redes:


🎬 Call to Action

  1. ▶️ Assista à live completa no YouTube
  2. ⭐ Dê uma estrela no repositório
  3. 💬 Deixe suas dúvidas nos comentários
  4. 🔔 Inscreva-se no canal para a série LangChain.js

🌌 Conclusão

O Model Context Protocol está revolucionando a forma como integramos IA com sistemas externos. Com apenas algumas centenas de linhas de código TypeScript, criamos um servidor que permite ao Claude Desktop acessar toda a riqueza de dados do universo Star Wars de forma segura e controlada.

Agora é sua vez! Pegue o código, adapte para sua API favorita e explore as possibilidades infinitas do MCP.


May the Force (and the Code) be with you! ⭐✨


Top comments (1)

Collapse
 
synergy_shock profile image
Synergy Shock