
Série MCP (04): Construindo Seu Primeiro Servidor MCP — Do Hello World aos Padrões de Produção
A Lacuna Entre Hello World e um Servidor Útil
O servidor de demonstração do Artigo 02 está em funcionamento, mas possui apenas echo e add — ferramentas de brinquedo. Um servidor pronto para produção precisa resolver cinco problemas adicionais de engenharia:
- Como várias ferramentas compartilham dados e se compõem
- Como validar a entrada do usuário (LLMs também passam argumentos errados)
- Como retornar erros corretamente quando a execução da ferramenta falha
- Onde escrever logs (canal errado quebra o protocolo)
- Como Recursos fornecem contexto ao LLM antes de chamar ferramentas
A demonstração é um servidor Jira completo com dados fictícios integrados: nenhuma credencial real do Jira é necessária.
Estrutura do Servidor
demo_jira_server.py
Tools (4):
search_issues(query, project?, status?, max_results?)
get_issue(issue_key)
create_issue(project, summary, description?, priority?, issue_type?)
update_issue(issue_key, status?, assignee?, priority?)
Resources (1):
jira://projects → project list (LLM reads this to know valid project keys)
Prompts (1):
bug_analysis → structured bug report template
Padrão 1: Colaboração Multi-Ferramentas
Quatro ferramentas compartilham um único armazenamento de dados em memória ISSUES, formando um ciclo completo de leitura e escrita:
ISSUES: dict[str, dict] = {
"PROJ-101": {
"key": "PROJ-101",
"summary": "NullPointerException em parseInput() quando a configuração é nula",
"status": "Aberto",
"priority": "P1", "issue_type": "Bug",
...
},
}
# search_issues: filtrar e listar
# get_issue: ler um por chave
# create_issue: escrever nova questão (ID auto-incremental)
# update_issue: modificar questão existente
Extraia a validação compartilhada em um helper que várias ferramentas chamam:
def validate_issue_key(key: str) -> str | None:
"""Retorna mensagem de erro se a chave for inválida, None se for válida."""
if not key or "-" not in key:
return f"Formato de chave de questão inválido: '{key}'. Formato esperado: PROJECT-123"
project = key.split("-")[0]
if project not in PROJECTS:
return f"Projeto desconhecido: '{project}'. Projetos disponíveis: {', '.join(PROJECTS)}"
if key not in ISSUES:
return f"Questão '{key}' não encontrada"Este artigo é relevante para empresas brasileiras que buscam implementar servidores MCP, pois fornece insights práticos sobre a construção de sistemas robustos e escaláveis. A validação de entradas e a colaboração entre ferramentas são cruciais para garantir a eficiência e a confiabilidade dos serviços oferecidos.
Noticias relacionadas
Servidor MCP 1.1.0 da endoflife.ai: Exposição KEV, verificações SBOM e dispositivos de borda para agentes de IA
O servidor MCP da endoflife.ai agora possui dez ferramentas de leitura. Novas funcionalidades incluem exposição a vulnerabilidades conhecidas e status de dispositivos de borda, essenciais para a segurança de versões de software.

O que os agentes de IA realmente veem ao buscar seu Ator Apify
O artigo explora como os agentes de IA interagem com o servidor MCP da Apify, destacando a importância da descrição e otimização dos Ators para serem encontrados. Inclui uma análise de como os resultados de busca diferem entre humanos e agentes.
Como o Protocolo de Contexto do Modelo (MCP) muda para sempre o lançamento de recursos em SaaS
O Protocolo de Contexto do Modelo (MCP) é mais do que leitura de dados; sua aplicação mais poderosa é a orquestração de aplicativos em tempo de execução, permitindo que agentes de IA gerenciem anúncios e guias de onboarding sem código efêmero.
Gostou do conteudo?
Receba toda semana as principais novidades sobre WebMCP.