
Muitas equipes descrevem o Model Context Protocol como “o padrão para conectar ferramentas a agentes de IA”. Isso está certo, mas ainda é vago demais para orientar arquitetura.
Uma leitura mais útil:
A especificação oficial define MCP como um protocolo baseado em JSON-RPC para expor tools, resources e prompts a runtimes de agentes. Vale revisar a especificação, a seção de lifecycle e o anúncio original da Anthropic sobre Model Context Protocol.
O que MCP não resolve:
Por isso equipes maduras tratam MCP como protocolo de entrega, não como arquitetura completa.
Um erro comum é colocar toda capacidade atrás de MCP apenas porque parece moderno. Na prática, é melhor escolher a superfície conforme o trabalho.
| Superfície | Força | Fraqueza | Use quando |
|---|---|---|---|
| Servidor MCP | Discovery, execução nativa para agentes, interoperabilidade | Payloads estáveis e políticas ainda precisam ser projetados | O consumidor é um host de agentes e aproveita a semântica de tools/resources |
| REST API | Contratos determinísticos, auth/gateways/caches maduros | O agente precisa conhecer a semântica do endpoint | Você precisa de contratos duradouros para agentes, apps e serviços |
| Skills | Empacotar workflows e guardrails | Fraco como plano de dados em tempo real | Você quer distribuir instruções reutilizáveis e puxar dados vivos via MCP/API |
Regra prática:
Essa combinação costuma ser a mais sólida em produção.
Ver MCP governado com puppyoneGet startedUm tool MCP fraco costuma virar um wrapper gigante que “faz tudo”. Um tool MCP forte tem escopo estreito, entrada rígida e saída previsível.
Princípios básicos:
import { McpServer } from "@modelcontextprotocol/sdk/server";
const server = new McpServer({ name: "org-context" });
server.tool(
"get_knowhow_item",
{
description: "Read one governed Know-How item by id",
inputSchema: {
type: "object",
properties: { id: { type: "string" } },
required: ["id"],
additionalProperties: false
}
},
async ({ id }, ctx) => {
const item = await ctx.store.read(id);
if (!ctx.policy.canRead(ctx.user, item.policyTag)) {
return {
ok: false,
error: { code: "forbidden", message: "Access not permitted" }
};
}
return {
ok: true,
data: {
id: item.id,
title: item.title,
version: item.version,
summary: ctx.redactor(item.summary)
},
trace: {
requestId: ctx.requestId,
policyTag: item.policyTag
}
};
}
);
O valor está em não transformar o tool em uma passagem sem fronteiras para todo o sistema interno.
Muitos tutoriais de MCP terminam em “o servidor está rodando”. Isso não basta se esse servidor pode ler contexto sensível ou disparar ações.
Base mínima de hardening:
A documentação do Docker para HEALTHCHECK, Compose healthchecks, rootless/non-root e bind mounts continua muito útil.
FROM node:22-slim AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci --ignore-scripts
COPY . .
RUN npm run build && npm prune --omit=dev
FROM gcr.io/distroless/nodejs22-debian12:nonroot
WORKDIR /app
COPY --from=build /app/dist ./dist
USER 65532:65532
ENV NODE_ENV=production
CMD ["/nodejs/bin/node", "dist/server.js"]
Seja local-first ou on-prem, sem fronteiras claras de runtime não existe confiança operacional real.
MCP é excelente para execução nativa de agentes, mas uma REST API versionada continua oferecendo:
Por isso muitas equipes expõem o mesmo contexto governado via MCP e via REST. As orientações de design de APIs da Azure, junto com RFC 6585 e RFC 9110, continuam úteis para throttling e Retry-After.
O importante não é duplicar por duplicar, mas especializar:
Se você precisa dos dois, isso é totalmente normal.
Skills funciona muito bem para distribuir intenção operacional: o que fazer, o que evitar e em que sequência agir.
Serve especialmente para:
Mas Skills sozinho não resolve frescor, autorização ou retrieval estruturado. A documentação da Anthropic sobre skills e o repositório público anthropics/skills mostram bem o formato.
Divisão pragmática:
Se um agente usar um tool de forma incorreta, você precisa conseguir responder:
Por isso OpenTelemetry e logs estruturados não são luxo. São o que permite reconstruir incidentes. Os documentos sobre context propagation e traces são bons pontos de partida. Para retenção e auditoria, veja NIST SP 800-92 e SP 800-53 Rev.5.
{
"ts": "2026-04-03T09:15:00Z",
"event": "tool.execute",
"requestId": "req_7ad2",
"tool": "get_knowhow_item",
"actor": "agent_ops_reader",
"decision": "allow",
"resultHash": "sha256:ab12...",
"latencyMs": 42
}
Se sua stack não consegue produzir algo assim, o problema principal ainda não é a escolha do protocolo.
A maioria dos projetos MCP falha não por causa do protocolo, mas por causa do contexto atrás dele:
É aqui que uma base de contexto governada faz diferença. Equipes avaliam puppyone para estruturar Know-How empresarial, aplicar hybrid indexing e distribuir o mesmo conhecimento governado por MCP, API ou empacotamento de workflow. Assim, o servidor MCP deixa de remontar contexto ad hoc a cada chamada.
Isso é especialmente valioso quando:
Leituras relacionadas:
Se você está no começo, não inicie com uma grande migração de protocolo. Escolha um workflow com muita leitura e torne-o previsivelmente confiável:
Depois disso, expandir tools, Skills e orchestration fica muito mais seguro.
Planejar rollout MCP com puppyoneGet startedNão. MCP é forte para execução orientada a agentes; REST continua melhor para contratos estáveis, controles de gateway e reutilização ampla.
Não. Tools amplos demais são difíceis de governar e depurar. Comece com capacidades estreitas, tipadas e previsíveis.
Na maioria dos casos, não. Skills empacota bem a intenção do workflow, mas se frescor, autorização e auditabilidade importam, você ainda precisará de tools MCP ou APIs para os dados de runtime.