Skip to main content
Glama
README.md
# 🧭 Geo-Explorer

Projeto educacional desenvolvido a partir das aulas de IBM Bob da DIO,
adaptado para explorar trilhas de aprendizagem pelo terminal e por um
servidor MCP.

A aplicação permite consultar planos de estudos, gerar desafios de código
e criar certificados fictícios. O catálogo ativo contém trilhas de Java,
TypeScript e Python, armazenadas em um arquivo JSON.

O funcionamento local não exige créditos de IA. O IBM Bob foi utilizado
nas aulas como apoio ao desenvolvimento; os comandos consultam dados
locais e também podem ser acessados por clientes compatíveis com MCP.

Os certificados são simulações educacionais, sem validade acadêmica ou
profissional e sem emissão ou validação pela DIO.

---

## 🚀 Instalação e primeira execução

Requisitos: Node.js 22 ou superior e npm. O projeto foi testado no Windows
com Node.js 24.14.1 e npm 11.11.0.

Abra um terminal na pasta principal do projeto, onde está o `package.json`.

### Instalar as dependências

```powershell
npm.cmd ci
npm.cmd --prefix .\mcp ci
```

O comando `npm ci` instala as versões registradas nos arquivos
`package-lock.json`. Essa instalação é necessária na primeira preparação
do projeto ou após mudanças nas dependências.

### Compilar e consultar uma trilha

```powershell
npm.cmd run build
node dist/index.js trilha python
```

A consulta deve retornar a trilha Python AI Developer, com 70 horas.

Após alterar o código TypeScript ou os dados JSON, compile novamente.

### Executar os testes

```powershell
npm.cmd run build
npm.cmd test -- --runInBand
```

Para compilar e verificar as ferramentas MCP por stdio:

```powershell
npm.cmd --prefix .\mcp run test:smoke
```

Esse último comando compila os dois pacotes, inicia um cliente MCP de teste,
verifica as ferramentas e encerra a conexão automaticamente.

Os exemplos acima usam PowerShell no Windows. Em outros sistemas,
use `npm` no lugar de `npm.cmd` e `./mcp` no lugar de `.\mcp`.

---

## 🎮 Como usar os comandos

Execute os exemplos na pasta principal, após compilar o projeto.

### Consultar uma trilha

```powershell
node dist/index.js trilha java
node dist/index.js trilha python
node dist/index.js trilha typescript
```

Sem informar a tecnologia, o comando lista as trilhas cadastradas:

```powershell
node dist/index.js trilha
```

### Gerar um desafio

```powershell
node dist/index.js desafio java basico
node dist/index.js desafio java intermediario
node dist/index.js desafio java avancado
```

Nesta versão, os desafios cadastrados são de Java, nos três níveis.
Python e TypeScript possuem trilhas, mas ainda não possuem desafios.

Os níveis são escritos sem acentos: `basico`, `intermediario` e `avancado`.

### Gerar um certificado fictício

```powershell
node dist/index.js certificado "Ana Silva" java
node dist/index.js certificado "Pessoa Exemplo" python
```

As aspas mantêm o nome completo como um único argumento.
Somente trilhas cadastradas podem receber certificados fictícios.
O programa não verifica conclusão real de cursos.

### Arquivos e respostas

Desafios e certificados são gravados em `dist/`, com o caminho informado
no campo `arquivo` da resposta JSON.

O código de saída é `0` para sucesso e `1` para falhas, como argumentos
obrigatórios ausentes, tecnologia inválida ou comando desconhecido.

No PowerShell, consulte o código imediatamente após a execução:

```powershell
$LASTEXITCODE
```

Os prompts em `.bob/commands/` foram preservados como material das aulas.
Os exemplos desta seção usam a interface de terminal implementada no projeto.

---

## 🗂️ Organização do projeto

```text
src/
  data/trilhas.json           # Base ativa: Java, TypeScript e Python
  index.ts                    # Interface de comandos pelo terminal
  services/                   # Consulta e geração dos documentos
  tools/commands.ts           # Validação e respostas dos comandos
  types/                      # Tipos TypeScript
  utils/                      # Funções auxiliares

tests/
  cli.test.ts                 # Executa a CLI e verifica suas respostas
  integration/                # Testes do fluxo completo
  *.test.ts                   # Testes dos serviços e comandos

mcp/
  src/index.ts                # Servidor e registro das ferramentas MCP
  src/tools.ts                # Adaptação para os comandos compartilhados
  smoke.mjs                   # Cliente de teste MCP por stdio
  package.json                # Comandos e dependências do servidor

dist/                         # Código compilado e documentos gerados
coverage/                     # Relatórios dos testes
.bob/commands/                # Prompts preservados das aulas
dio-explore/                  # Materiais e dados anteriores das aulas
docs/                         # Documentação complementar
```

O programa principal e o MCP usam a base `src/data/trilhas.json`
e as regras de `src/tools/commands.ts`.

O MCP importa os comandos compilados da pasta principal `dist/`.
Seu atalho de compilação prepara primeiro o projeto principal e depois
o servidor.

Os arquivos `mcp/src/services.ts` e `mcp/src/types.ts` foram preservados
da implementação anterior; as ferramentas atuais não usam essa lógica.

A pasta `mcp-github/` contém um servidor complementar para operações Git,
preservado das aulas. Ele não é necessário para executar o Geo-Explorer.

---

## 📊 Testes e validação

A última execução completa do Jest passou com:

| Verificação | Resultado |
| --- | --- |
| Conjuntos de testes | 7 aprovados |
| Testes automatizados | 86 aprovados |
| Cobertura de linhas do código incluído no relatório | Aproximadamente 99% |

Para repetir, compile antes de executar os testes:

```powershell
npm.cmd run build
npm.cmd test -- --runInBand
```

Os testes da CLI executam `dist/index.js`, por isso dependem da compilação
atualizada. A cobertura do Jest não inclui a execução desses processos
separados nem representa uma medição do servidor MCP.

### Verificação MCP por stdio

```powershell
npm.cmd --prefix .\mcp run test:smoke
```

O smoke verifica seis etapas:

1. Conexão e listagem das quatro ferramentas.
2. Consulta da trilha Java.
3. Recusa de certificado para trilha inexistente.
4. Listagem das três tecnologias da base JSON.
5. Geração e leitura do arquivo de desafio.
6. Geração e leitura do certificado fictício.

Os arquivos desse teste ficam em uma pasta temporária, removida ao final.
O cliente também encerra a conexão com o servidor.

O smoke é uma verificação separada e não entra na contagem dos 86 testes
do Jest. O transporte HTTP ainda não foi validado nesta versão.

---

## 🔌 Integração com clientes MCP

O servidor permite que um cliente compatível chame as ferramentas do
Geo-Explorer. A integração foi verificada pelo cliente local de teste
`mcp/smoke.mjs`, sem necessidade de créditos de IA.

Depois de instalar as dependências, compile:

```powershell
npm.cmd --prefix .\mcp run build
```

No cliente MCP, configure uma entrada semelhante a esta, ajustando o
caminho absoluto para sua máquina:

```json
{
  "mcpServers": {
    "geo-explorer": {
      "command": "node",
      "args": ["C:/caminho/geo-explorer/mcp/dist/index.js"]
    }
  }
}
```

Esse JSON é um exemplo de configuração do cliente, não um comando
para executar no terminal. O local e o formato da configuração dependem
do cliente utilizado.

O cliente inicia o servidor e troca mensagens pelo transporte `stdio`.
Executar o servidor manualmente apenas o deixa aguardando essas mensagens;
ele não recebe perguntas em linguagem natural diretamente no terminal.

Para uma verificação independente de agente de IA, use:

```powershell
npm.cmd --prefix .\mcp run test:smoke
```

### Ferramentas disponíveis

| Ferramenta | Argumentos | Resultado |
| --- | --- | --- |
| `buscar_trilha` | `tecnologia` opcional | Consulta uma trilha ou lista todas |
| `gerar_desafio` | `tecnologia`, `nivel`, `outputDir` opcional | Gera um desafio em Markdown |
| `gerar_certificado` | `alunoNome`, `trilhaNome`, `outputDir` opcional | Gera um certificado fictício |
| `listar_tecnologias` | Nenhum | Lista Java, TypeScript e Python |

No MCP, o nível do desafio deve ser `Basico`, `Intermediario` ou `Avancado`.
O adaptador converte esse valor para o formato usado pelos comandos principais.

Para gerar arquivos por um cliente MCP, prefira informar `outputDir` com
um caminho absoluto. Sem esse argumento, a pasta `dist` é relativa ao
diretório de trabalho do processo iniciado pelo cliente.

O modo HTTP permanece no código herdado das aulas, mas não foi validado
nesta versão. O fluxo documentado e testado utiliza `stdio`.

---

## 📁 Base de trilhas

A base ativa fica em [`src/data/trilhas.json`](src/data/trilhas.json).
Ela é usada pelos comandos do terminal e pelas ferramentas MCP.

| Tecnologia | Nível da trilha | Duração | Módulos |
| --- | --- | --- | --- |
| Java | Iniciante | 80 horas | 6 |
| TypeScript | Intermediário | 60 horas | 4 |
| Python | Intermediário | 70 horas | 4 |

Cada trilha possui:

- `id`: identificador da trilha.
- `tecnologia`: nome usado na consulta.
- `titulo`: nome apresentado à pessoa usuária.
- `nivel`: dificuldade da trilha.
- `duracaoHoras`: duração total.
- `modulos`: etapas de estudo, com título, descrição, duração e ordem.

As trilhas são fictícias e destinadas ao exercício educacional.

### Como alterar a base

Edite `src/data/trilhas.json`, preserve a estrutura dos campos e confira
se a soma das horas dos módulos corresponde à duração total da trilha.

Depois compile e execute os testes:

```powershell
npm.cmd run build
npm.cmd test -- --runInBand
```

Os desafios continuam definidos em `src/services/desafio.service.ts`.
Nesta versão, há três desafios de Java: básico, intermediário e avançado.
Acrescentar uma trilha ao JSON não cria desafios automaticamente.

### Material anterior das aulas

O arquivo com 30 trilhas em `dio-explore/` foi preservado como referência.
Ele não é a base consultada pelos comandos desta versão.

---

## 📋 Tecnologias utilizadas

- **TypeScript 5:** código principal e servidor MCP.
- **Node.js:** execução dos comandos e geração de arquivos.
- **JSON:** armazenamento da base ativa de trilhas.
- **Jest e ts-jest:** testes unitários, de integração e da CLI.
- **MCP SDK:** comunicação entre o servidor e clientes MCP.
- **Zod:** definição e validação dos argumentos das ferramentas.
- **Markdown:** desafios, certificados e documentação.
- **Git:** histórico das alterações feitas durante o desenvolvimento.
- **VS Code:** edição, terminal e revisão dos arquivos.

## ✨ Melhorias realizadas

O projeto partiu do material das aulas de IBM Bob e recebeu estas adaptações:

- Interface de terminal para escolher trilha, desafio ou certificado.
- Validação de argumentos obrigatórios e códigos de saída para sucesso e falha.
- Separação das trilhas em um arquivo JSON.
- Recusa de certificados para trilhas não cadastradas.
- Certificados explicitamente fictícios, sem link de validação oficial da DIO.
- Reutilização das mesmas regras pela CLI e pelo MCP.
- Correção da compilação TypeScript do servidor MCP.
- Novos testes de certificados e da interface de terminal.
- Cliente de teste MCP que verifica chamadas reais e arquivos gerados.
- Documentação atualizada para o comportamento verificado nesta versão.

A evolução foi realizada com orientação de IA, revisão dos arquivos,
execução local e registro das etapas em commits.

---
## 📚 O que aprendi

Este foi meu primeiro projeto. Nas aulas, acompanhei os prompts apresentados
pelo professor e usei o IBM Bob para construir a versão inicial.

Durante a adaptação para o Geo-Explorer, pratiquei a navegação pelos arquivos
no VS Code, a execução de comandos no terminal, a alteração do código,
a compilação, os testes automatizados e o registro de mudanças com Git.

Ainda estou me familiarizando com os termos técnicos. São muitos conceitos
novos em pouco tempo, e meu objetivo é continuar praticando para compreender
melhor cada parte, sem depender apenas de repetir instruções.

O acompanhamento passo a passo com assistência de IA facilitou o processo:
pude tirar dúvidas, conferir os resultados e corrigir problemas durante
o desenvolvimento.

Gostei da experiência e quero continuar aprendendo com novos projetos.

---

## 📄 Licença
MIT — IBM Bob Lab / Digital Innovation One

---

*Bootcamp IBM Bob + Appwrite | Aula 3 — Servidor MCP, Documentação e Publicação*