
Meu Ferramenta MCP Padrão para Modo Rascunho
Um post em alta esta semana foi sobre alguém dando ao seu agente a capacidade de enviar e-mails — e a primeira pergunta óbvia nos comentários foi "o que impede de enviar a coisa errada?" Eu tive uma versão dessa pergunta sentada sem ser examinada no meu próprio repositório por semanas, porque eu construí a mesma estrutura: uma ferramenta MCP com acesso de escrita a uma identidade pública, além de um script separado e não supervisionado que também tem acesso de escrita à mesma API — e eu assumi que eles tinham o mesmo comportamento de segurança. Eles não têm.
Duas vias, uma API
Meu developer-presence servidor MCP tem uma ferramenta create_article:
@mcp.tool()
def create_article(title: str, body_markdown: str, tags: list[str] = None, published: bool = False) -> dict:
"""Cria um novo artigo no DEV.to. Retorna id e url."""
payload = {"article": {"title": title, "body_markdown": body_markdown, "published": published}}
if tags:
payload["article"]["tags"] = tags
result = _dev("/articles", method="POST", data=payload)
return {"id": result["id"], "url": result.get("url"), "published": result.get("published")}
published: bool = False. Se um agente chama essa ferramenta e nunca diz explicitamente o contrário, o artigo fica como um rascunho privado no DEV.to. Esse padrão não é um acidente — eu escrevi dessa forma especificamente porque essa ferramenta é acessível a partir de uma sessão interativa do Claude, onde eu poderia perguntar algo como "rascunhar um artigo sobre X" e não querer que uma ideia inacabada fosse ao ar porque eu esqueci de dizer "não publique".
Separadamente, esse exato pipeline de publicação agendada — o que escreve e envia dois artigos por dia, não supervisionado, duas vezes ao dia, sem ninguém assistindo — não chama create_article de forma alguma. Ele chama publish_devto.py diretamente como um subprocesso:
payload = {"article": {"title": title, "published": published,
"body_markdown": body, "tags": tags}}
req = urllib.request.Request("https://dev.to/api/articles",
data=json.dumps(payload).encode(), method="POST")
Aqui, published não é um padrão de palavra-chave — é lido diretamente do frontmatter do arquivo de rascunho:
published = meta.get("published", "false").lower() in ("true", "1", "yes")
E as instruções de tarefa que dirigem essa rotina exata dizem ao agente, a cada execução, para escrever aquele frontmatter como published: true. Portanto, o padrão de segurança que eu construí na ferramenta MCP — a única coisa que impede "rascunho" a
Empresas brasileiras que utilizam ferramentas MCP devem estar atentas às configurações de segurança para evitar publicações acidentais. A gestão de conteúdo automatizada requer cuidados para garantir que apenas o material revisado seja publicado. Isso é crucial para manter a credibilidade e a qualidade do conteúdo online.

