Configure seu ambiente de desenvolvimento para construir servidores MCP com TypeScript e o SDK oficial
Antes de começarmos a construir servidores MCP, vamos garantir que você tenha tudo o que precisa. Não se preocupe - a configuração é simples!
Você precisará de:
Por que Node.js 18+? O SDK MCP usa recursos modernos de JavaScript e a API fetch nativa, que requer Node.js 18 ou superior.
Este módulo assume que você:
Se você é novo no TypeScript, não se preocupe! Explicaremos os conceitos específicos do TypeScript conforme avançamos.
Vamos configurar seu ambiente de desenvolvimento passo a passo.
Primeiro, verifique se você tem o Node.js instalado:
<CodeExample title="Verificando a Versão do Node.js" language="bash" code={`# Verificar versão do Node.js (deve ser 18.x ou superior) node --version
npm --version
/>
Se você precisar instalar ou atualizar o Node.js:
Embora não sejam obrigatórias, essas ferramentas melhorarão sua experiência de desenvolvimento:
<CodeExample title="Ferramentas Globais Opcionais" language="bash" code={`# Compilador TypeScript (opcional - usaremos tsx para desenvolvimento) npm install -g typescript
npm install -g @modelcontextprotocol/inspector`} />
Dica Profissional: Usar tsx
ao invés de tsc
durante o desenvolvimento permite executar arquivos TypeScript diretamente sem compilação!
Verifique sua instalação do Node.js
Agora vamos criar seu primeiro projeto de servidor MCP do zero.
<CodeExample title="Inicializar Projeto" language="bash" code={`# Criar diretório do projeto mkdir meu-primeiro-servidor-mcp cd meu-primeiro-servidor-mcp
npm init -y
npm install --save-dev typescript @types/node tsx npm install @modelcontextprotocol/sdk`} />
Crie um arquivo tsconfig.json
para configurar o TypeScript para desenvolvimento MCP:
<CodeExample
title="Configuração do TypeScript"
language="json"
fileName="tsconfig.json"
code={{ "compilerOptions": { "target": "ES2022", "module": "Node16", "moduleResolution": "Node16", "lib": ["ES2022"], "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "declaration": true, "declarationMap": true, "sourceMap": true }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] }
}
highlightLines={[3, 4, 5, 9]}
/>
Importante: As configurações module
e moduleResolution
devem ser "Node16" para funcionar corretamente com os módulos ES do SDK MCP.
Adicione configurações importantes ao seu package.json
:
<CodeExample
title="Configuração do Package"
language="json"
fileName="package.json"
code={{ "name": "meu-primeiro-servidor-mcp", "version": "1.0.0", "type": "module", "main": "dist/index.js", "scripts": { "dev": "tsx watch src/index.ts", "build": "tsc", "start": "node dist/index.js" }, // ... dependências }
}
highlightLines={[4, 6, 7, 8, 9]}
/>
Pontos Principais:
"type": "module"
habilita módulos EStsx watch
fornece recarga automática durante o desenvolvimentonpm run dev
para desenvolvimento, npm run build
para produçãoConfigure uma estrutura de projeto limpa:
Seu projeto agora deve parecer com isto:
meu-primeiro-servidor-mcp/
├── node_modules/
├── src/
│ └── index.ts
├── package.json
├── package-lock.json
└── tsconfig.json
Criar e configurar um novo projeto de servidor MCP
Configurar TypeScript para desenvolvimento MCP
Module content not available.
Depois de construir seu servidor, vamos testá-lo!
Adicione estes scripts úteis ao seu package.json
:
<CodeExample
title="Scripts do Package.json"
language="json"
fileName="package.json"
code={{ "name": "meu-primeiro-servidor-mcp", "version": "1.0.0", "type": "module", "scripts": { "dev": "tsx watch src/index.ts", "build": "tsc", "start": "node dist/index.js", "test": "npx @modelcontextprotocol/inspector" }, // ... outros campos }
}
highlightLines={[5, 6, 7, 8, 9]}
/>
O MCP Inspector é uma ferramenta poderosa para testar seu servidor:
Inicie seu servidor em um terminal:
Execute o inspector em outro terminal:
Conecte-se ao seu servidor no inspector:
npm run dev
Sucesso! Se tudo estiver configurado corretamente, você deve ver os recursos do seu servidor no inspector.
Problema: Erros "Cannot find module"
Solução: Certifique-se de que todas as importações terminam com extensão .js
(mesmo para arquivos TypeScript)
Problema: "Module not found" para SDK MCP
Solução: Verifique se você está usando Node.js 18+ e tem "type": "module"
no package.json
Problema: Servidor não responde no inspector Solução: Certifique-se de estar usando transporte stdio e que o servidor está rodando
Adicione scripts convenientes para desenvolvimento
Verifique se você entendeu os conceitos de configuração do MCP
1. Qual versão mínima do Node.js é necessária para o SDK MCP?
2. O transporte stdio é adequado para uso em produção.
True or False question
Correct Answer: A
Falso! O transporte stdio é principalmente para desenvolvimento e testes locais. Para produção, use HTTP ou WebSocket.
3. Qual arquivo de configuração é essencial para projetos TypeScript com MCP?
Conforme seu servidor MCP cresce, uma boa estrutura se torna essencial. Aqui está uma abordagem recomendada:
<CodeExample
title="Estrutura de Projeto Recomendada"
language="text"
code={meu-servidor-mcp/ ├── src/ │ ├── index.ts # Ponto de entrada principal do servidor │ ├── handlers/ # Manipuladores de requisição │ │ ├── resources.ts # Manipuladores de recursos │ │ └── tools.ts # Manipuladores de ferramentas │ ├── providers/ # Lógica de negócios │ │ ├── database.ts # Conexões de banco de dados │ │ └── files.ts # Operações do sistema de arquivos │ └── types/ # Definições de tipos TypeScript ├── dist/ # Saída compilada ├── tests/ # Arquivos de teste ├── .gitignore ├── package.json ├── tsconfig.json └── README.md
}
/>
<CodeExample title="Exemplo de Organização de Manipulador" language="typescript" fileName="src/handlers/resources.ts" code={`import { Server } from '@modelcontextprotocol/sdk/server/index.js';
export function registerResourceHandlers(server: Server) { // Registrar todos os manipuladores relacionados a recursos server.setRequestHandler('resources/list', async () => { return { resources: [ ...await fileProvider.listResources(), ...await databaseProvider.listResources() ] }; });
server.setRequestHandler('resources/read', async (request) => { // Delegar ao provedor apropriado baseado no esquema URI const uri = request.params.uri;
if (uri.startsWith('file://')) {
return fileProvider.readResource(uri);
} else if (uri.startsWith('db://')) {
return databaseProvider.readResource(uri);
}
throw new Error('Tipo de recurso desconhecido');
}); }`} />
Parabéns! Você conseguiu:
✅ Configurar um ambiente de desenvolvimento TypeScript ✅ Configurar seu projeto para desenvolvimento MCP ✅ Criar seu primeiro servidor MCP ✅ Testá-lo com o MCP Inspector ✅ Aprender melhores práticas de organização de projeto
Seu ambiente de desenvolvimento está pronto! No próximo módulo, você aprenderá a:
A Seguir: Implementando Recursos - Aprenda a expor dados através de recursos MCP!