Este projeto foi desenvolvido durante o workshop do evento The Developers Life Weekend, em Umuarama - PR (online).
Repositório com o passo a passo, código-fonte e exercícios para construir seu primeiro servidor baseado no Model Context Protocol (MCP).
Durante o workshop, foram apresentados:
- A arquitetura cliente-servidor do protocolo MCP;
- A criação e exposição de ferramentas (tools) para LLMs;
- O gerenciamento de recursos (resources) e prompts dinâmicos;
- A conexão do servidor a clientes reais de IA.
O projeto principal foi criado com Python e FastMCP. Ele disponibiliza ferramentas e recursos para consultar a previsão do tempo e demonstra uma operação que pede confirmação antes de enviar convites.
- Python 3.14 ou superior;
- uv instalado;
- Uma aplicação configurada no Auth0;
- Acesso à internet para consultar
https://wttr.in; - Um cliente MCP compatível, como OpenCode ou MCP Inspector.
O projeto usa uv.lock para manter as versões das dependências reproduzíveis.
Clone o repositório e entre na pasta do projeto:
git clone https://github.com/marcelomarkus/tdlw-workshop-mcp.git
cd tdlw-workshop-mcpSincronize as dependências. O comando cria ou atualiza o ambiente virtual
.venv automaticamente:
uv syncConfira a versão do Python selecionada:
python --version
uv python findO servidor principal usa Auth0Provider e precisa destas variáveis de ambiente:
| Variável | Descrição |
|---|---|
AUTH_DOMAIN |
Domínio da instância Auth0 |
CLIENT_ID |
Identificador da aplicação |
CLIENT_SECRET |
Segredo da aplicação |
AUDIENCE |
Identificador da API configurada no Auth0 |
Crie o arquivo local de configuração a partir do modelo:
cp .env_example .envPreencha o .env com valores reais:
AUTH_DOMAIN=https://seu-dominio.auth0.com
CLIENT_ID=seu-client-id
CLIENT_SECRET=seu-client-secret
AUDIENCE=https://sua-apiO arquivo .env não é carregado automaticamente pelo Python. Exporte as
variáveis antes de iniciar o servidor:
set -a
source .env
set +aOu defina-as diretamente na mesma chamada:
AUTH_DOMAIN="https://seu-dominio.auth0.com" \
CLIENT_ID="seu-client-id" \
CLIENT_SECRET="seu-client-secret" \
AUDIENCE="https://sua-api" \
uv run main.pyNunca compartilhe o CLIENT_SECRET nem o inclua em commits.
Com as variáveis carregadas, inicie o servidor principal:
uv run main.pyO endpoint MCP fica disponível em:
http://127.0.0.1:8000/mcp
Mantenha o processo em execução enquanto o cliente MCP estiver conectado. Para
encerrá-lo, pressione Ctrl+C.
O MCP Inspector fornece uma interface web para testar tools, resources e prompts.
Em um primeiro terminal, inicie o servidor:
set -a
source .env
set +a
uv run main.pyEm outro terminal, execute o Inspector:
npx @modelcontextprotocol/inspectorAbra http://localhost:6274 no navegador e configure:
| Campo | Valor |
|---|---|
| Transport | Streamable HTTP |
| URL | http://127.0.0.1:8000/mcp |
Clique em Connect e teste as ferramentas e os recursos disponíveis. As variáveis do Auth0 precisam estar no ambiente do processo do servidor.
O arquivo opencode.json já aponta para o endpoint local:
{
"mcp": {
"Workshop": {
"type": "remote",
"url": "http://127.0.0.1:8000/mcp"
}
}
}Com o servidor rodando, abra o OpenCode neste projeto.
Tempo(cidade): consulta o tempo atual de uma cidade;Temperatura(cidade): consulta a temperatura atual de uma cidade;Enviar_Convites(quantidade): solicita confirmação e simula o envio, reportando o progresso de cada item.
As consultas meteorológicas usam wttr.in/<cidade>?format=%t.
workshop://oque-o-mcp-nao-e: texto introdutório sobre MCP;previsao://{cidade}: previsão de uma cidade informada na URI.
exemplo_prompt(pergunta): orienta a escolha entre as tools meteorológicas.
.
├── main.py # Servidor MCP principal
├── mcp_com_api.py # Servidor MCP gerado a partir da API Petstore
├── exercises/ # Exercícios progressivos do workshop
│ ├── 01-mcp-server/
│ ├── 02-resources/
│ ├── 03-tools/
│ ├── 04-prompts/
│ ├── 05-Context/
│ ├── 06-auth/
│ └── 07-mcp-api/
├── slide/ # Material de apoio
│ └── TDLW-Umuarama.pdf
├── opencode.json # Configuração do OpenCode
├── pyproject.toml # Metadados e dependências
├── uv.lock # Versões resolvidas
└── .env_example # Modelo das variáveis do Auth0
Você pode executar o projeto pelo modo Debug do VS Code ou pelo uv:
uv run main.pyPara verificar a sintaxe dos módulos:
python -m compileall main.py mcp_com_api.py exercisesExecute uv sync e rode o programa com uv run main.py, evitando o Python
global quando as dependências estiverem instaladas apenas em .venv.
Verifique se as quatro variáveis do Auth0 foram exportadas no mesmo ambiente do servidor e se o domínio inclui o protocolo esperado.
Teste a conectividade com:
curl "https://wttr.in/Sao%20Paulo?format=%t"Libere a porta ou ajuste a porta no servidor e no opencode.json, mantendo o
mesmo endereço nos dois lados.
