Nos dois posts anteriores entendemos o que é o Model Context Protocol e conhecemos o FastMCP, a biblioteca que simplifica a criação de servidores MCP em Python. Agora é hora de colocar a mão na massa.
Neste post vamos construir um servidor FastMCP real, do zero, que consulta endereços a partir de um CEP usando a API pública ViaCEP — sem chave de API, sem autenticação, pronto para usar.
Ao final, você vai conectar esse servidor ao Claude Desktop e perguntar diretamente ao Claude: “Qual o endereço do CEP 01310-100?” — e ele vai responder usando a sua tool.
Você verá o prefixo (.venv) no terminal — isso confirma que o ambiente está ativo.
Instale as dependências:
pipinstallfastmcphttpx
fastmcp — o framework do servidor
httpx — cliente HTTP moderno para consumir a API ViaCEP
Você irá ver os logs, com o sucesso da instalação.
2. Criando o servidor
Crie o arquivo principal do servidor:
touchserver.py# ou voce pode criar direto no vscode mesmo...
Abra seu editor de código favorito e escreva o código:
import httpxfrom fastmcp import FastMCPmcp =FastMCP("servidor-cep")@mcp.tool()asyncdefconsultar_cep(cep:str)->str:""" Consulta o endereço completo a partir de um CEP brasileiro. Retorna rua, bairro, cidade e estado.""" cep_limpo = cep.replace("-","").replace("","")iflen(cep_limpo)!=8ornot cep_limpo.isdigit():return"CEP inválido. Informe um CEP com 8 dígitos numéricos."asyncwith httpx.AsyncClient()as client: response =await client.get(f"https://viacep.com.br/ws/{cep_limpo}/json/")if response.status_code !=200:return"Erro ao consultar o CEP. Tente novamente." dados = response.json()if"erro"in dados:returnf"CEP {cep} não encontrado."return(f"CEP: {dados.get('cep','-')}\n"f"Rua: {dados.get('logradouro','-')}\n"f"Bairro: {dados.get('bairro','-')}\n"f"Cidade: {dados.get('localidade','-')}\n"f"Estado: {dados.get('uf','-')}")if __name__ =="__main__": mcp.run()
O que esse código faz?
Linha 4: instancia o servidor FastMCP com o nome "servidor-cep"
Linha 6: decora a função com @mcp.tool() — o FastMCP registra automaticamente a tool no protocolo
Linhas 7-10: a docstring vira a descrição da tool que o LLM vai ler para decidir quando usá-la
Linhas 12-14: limpa o CEP removendo traços e espaços, e valida o formato
Linhas 16-20: faz a requisição HTTP para a API ViaCEP de forma assíncrona
Linhas 22-30: trata erros e formata a resposta
3. Testando o servidor localmente
Antes de conectar ao Claude Desktop, vamos garantir que o servidor está funcionando. O FastMCP tem um modo de inspeção embutido:
fastmcpdevinspectorserver.py
Esse comando sobe o servidor e abre o MCP Inspector no navegador, uma interface visual onde você pode chamar suas tools manualmente.
No Inspector:
Clique em “Tools” no menu lateral
Selecione “consultar_cep”
Preencha o campo cep com 01310-100
Clique em “Run”
Você deve ver a resposta:
4. Conectando ao Claude Desktop
Agora vamos conectar o servidor ao Claude Desktop para que o Claude possa usar a tool diretamente nas conversas.
4.1 Localize o arquivo de configuração
O Claude Desktop usa um arquivo JSON para registrar servidores MCP. No Mac, ele fica em:
Para descobrir o caminho correto do Python no seu ambiente virtual, rode:
whichpython
4.3 Reinicie o Claude Desktop
Feche e abra o Claude Desktop novamente. Após reiniciar, você verá um ícone de conectore na interface de chat — isso indica que tools MCP estão disponíveis.
5. Testando no Claude Desktop
Com tudo configurado, abra uma nova conversa no Claude Desktop e pergunte:
“Qual o endereço do CEP 01310-100?”
O Claude vai identificar que tem uma tool disponível para isso, vai chamá-la automaticamente e retornar a resposta formatada.
📸 Print da conversa no Claude Desktop com a resposta como cep da Avenida Paulista
Você também pode testar casos de erro:
“Consulta o CEP 00000-000 pra mim”
E o Claude vai retornar a mensagem de CEP não encontrado — exatamente como programamos.
Retorno no Claude desktop, de um cep inválido.
Conclusão
Em menos de 40 linhas de Python, criamos um servidor MCP real que:
✅ Expõe uma tool funcional via protocolo MCP
✅ Consome uma API externa de forma assíncrona
✅ Valida entradas e trata erros
✅ Está conectado ao Claude Desktop e pronto para uso
Isso é o poder do MCP na prática: você escreve a lógica, o protocolo cuida da comunicação, e o LLM sabe exatamente quando e como usar sua tool.
Próximos passos
A partir daqui, as possibilidades são muitas:
Adicionar mais tools ao mesmo servidor (ex: consulta de CNPJ, cotação de moeda)
Criar Resources para expor dados estáticos ou dinâmicos
Fazer deploy do servidor em modo SSE para acesso remoto
Publicar seu servidor no ecossistema MCP para que outros usem
A série não para por aqui — fique ligado nos próximos posts.
Conseguiu rodar? Compartilha um print nos comentários! Tem alguma dúvida? Me chama.
[…] No próximo post, vamos pegar exatamente essa estrutura e transformar em um servidor funcional, rodando localmente e conectado a um cliente MCP real. […]