
O Loader .env do Meu Servidor MCP Funciona Apenas se Iniciado de um Diretório Específico
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": "...", 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
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.