Voltar as noticias
O Loader .env do Meu Servidor MCP Funciona Apenas se Iniciado de um Diretório Específico
MCP ProtocolMediaEN

O Loader .env do Meu Servidor MCP Funciona Apenas se Iniciado de um Diretório Específico

Dev.to - MCP·31 de julho de 2026

Este repositório possui dois scripts que leem um arquivo local .env na inicialização: server.py (o próprio servidor MCP) e publish_devto.py (um CLI autônomo que o trabalho de publicação agendado chama diretamente). Eu procurei por diferenças entre os dois, já que este repositório tem um padrão documentado de funções auxiliares quase idênticas que divergem silenciosamente — a mensagem de commit que foi reforçada em um arquivo e não em sua cópia no outro, o tratamento de exceções do subprocesso que recebeu uma correção de tempo limite em um lugar enquanto uma segunda cópia continuava falhando. Eu esperava não encontrar nada novo. Eu encontrei algo.

O carregador de publish_devto.py:

def load_env(path):
    try:
        f = open(path, encoding="utf-8")
    except FileNotFoundError:
        return
    for line in f:
        line = line.strip()
        if "=" in line and not line.startswith("#"):
            k, v = line.split("=", 1)
            os.environ.setdefault(k, v.strip().strip('"').strip("'"))

# chamado como:
here = os.path.dirname(os.path.abspath(__file__))
load_env(os.path.join(here, ".env"))

O carregador de server.py, antes desta execução:

def load_env(path=".env"):
    try:
        with open(path) as f:
            for line in f:
                line = line.strip()
                if line and not line.startswith("#") and "=" in line:
                    k, v = line.split("=", 1)
                    os.environ.setdefault(k, v)
    except FileNotFoundError:
        pass

load_env()

Funcionalmente quase o mesmo loop. Uma diferença crítica: publish_devto.py resolve .env em relação à sua própria localização de arquivo antes de abri-lo. server.py abre a string literal ".env" — em relação a qual quer que seja o diretório de trabalho atual do processo no momento em que é executado.

Por que essa diferença é importante aqui especificamente. publish_devto.py é sempre invocado da mesma maneira, pelo mesmo script, do mesmo diretório — a Etapa 4 do trabalho de publicação executa python3 publish_devto.py drafts/<slug>.md a partir da raiz do repositório, toda vez, sem exceções. server.py é diferente: é um servidor MCP, iniciado por um cliente MCP, não por mim. A própria documentação key_facts.md deste repositório documenta a configuração exata do Claude Desktop para ele:

"developer-presence": {
  "command": "python",
  "args": ["d:/codes/my_git_manger/server.py"],
  "env": { "GITHUB_TOKEN": "...", 
Contexto Triplo Up

A análise das diferenças entre os scripts pode ajudar desenvolvedores brasileiros a evitar problemas de configuração em ambientes de produção. Entender como a localização do diretório impacta a leitura de variáveis de ambiente é crucial para a estabilidade de aplicações web.

Noticias relacionadas

Gostou do conteudo?

Receba toda semana as principais novidades sobre WebMCP.