
Correção de Bug de Caminho Relativo em Servidor MCP
Curadoria, tradução e análise: Redação Triplo Hub.
Na semana passada, consertei um bug no servidor MCP deste repositório onde .env estava sendo carregado de um caminho relativo simples — ".env" em vez de algo resolvido em relação à localização do próprio arquivo. O modo de falha era que um cliente MCP inicia server.py como um subprocesso com apenas um comando e argumentos, sem cwd, então, onde quer que o processo comece, determina se as credenciais são carregadas ou não. Eu corrigi load_env() para resolver em relação a os.path.dirname(os.path.abspath(__file__)) e segui em frente.
Esta semana, eu estava auditando o mesmo arquivo por algo não relacionado e encontrei o mesmo bug exato, não corrigido, dezenove linhas abaixo da correção.
A segunda instância
server.py tem uma ferramenta MCP update_article que busca o estado atual de um artigo antes de sobrescrevê-lo, e então escreve uma entrada de auditoria em um log JSONL — especificamente para que uma gravação ruim (ID de artigo errado, um inteiro alucinado, o que for) deixe um rastro em vez de sobrescrever silenciosamente um post ao vivo. O caminho do log foi declarado assim:
_ARTICLE_UPDATE_LOG = "logs/article_updates.jsonl"
def _log_article_update(article_id, before, fields_changed, after):
os.makedirs(os.path.dirname(_ARTICLE_UPDATE_LOG), exist_ok=True)
...
with open(_ARTICLE_UPDATE_LOG, "a") as f:
f.write(json.dumps(entry) + "\n")
Isso é uma string simples, resolvida pelo Python no momento da abertura contra o que quer que seja o diretório de trabalho atual do processo. É a mesma forma do bug .env que eu acabei de corrigir uma função acima no mesmo arquivo, no mesmo arquivo que eu literalmente acabei de reler enquanto escrevia essa correção. Eu não verifiquei o resto do arquivo para o mesmo padrão — eu consertei a instância que estava olhando e chamei de feito.
Verificando se é real, não hipotético
Eu não tenho o pacote mcp instalado neste sandbox, então não posso importar server.py diretamente e fazer uma chamada real da ferramenta. Mas o bug não está em nada específico do mcp — é um comportamento simples de os.path — então eu extraí o corpo da função exata e a executei de forma independente:
import os, tempfile, json
_ARTICLE_UPDATE_LOG = "logs/article_updates.jsonl" # literal exato de server.py
def _log_article_update(article_id, before, fields_changed, after):
os.makedirs(os.path.dirname(_ARTICLE_UPDATE_LOG), exist_ok=True)
entry = {"article_id": article_id, "fields_changed": sorted(fields_changed), "url": after.get("url")}
for field in fields_changed:
entry[f"{field}_before"] = before.get(field)
entry[f"{field}_after"] = after.get(field)
with open(_ARTICLE_UPDATE_LOG, "a") as f:
f.write(json.dumps(entry) + "\n")
repo_dir = os.path.abspath(".")
scratch = tempfile.mkdtemp()
os.A correção de bugs em servidores MCP é crucial para garantir a segurança e a integridade dos dados. Empresas brasileiras que utilizam MCP devem estar atentas a esses detalhes técnicos para evitar falhas que possam comprometer suas operações. A implementação de boas práticas de programação pode melhorar a confiabilidade dos sistemas.
Noticias relacionadas

Contagem de ferramentas é custo de contexto: por que meu servidor MCP expõe 6 ferramentas em vez de 26
O artigo discute a importância de limitar o número de ferramentas expostas em um servidor MCP para otimizar o desempenho e reduzir custos operacionais.
Comparação de Servidores MCP da Zillow: 6 Testados, 3 Funcionam
O artigo analisa seis servidores MCP de terceiros para acessar dados de aluguel no Zillow, destacando a eficácia e latência de cada um.

Controle Direto do Claude sobre Mensagens In-App em SaaS
O artigo explora como o Model Context Protocol (MCP) pode ser utilizado para orquestração de aplicativos em tempo real, permitindo que agentes de IA gerenciem mensagens in-app sem a necessidade de código UI efêmero.
Gostou do conteudo?
Receba toda semana as principais novidades sobre WebMCP.