Tema
O formato .adapp
A analogia do instalador
Um .adapp ("Atende Direito App") é um instalador de provider MCP. Em vez de cadastrar um servidor MCP na mão — endpoint, tools, secrets, ícone — você empacota tudo isso num único arquivo .zip com extensão .adapp e importa de uma vez no catálogo global da plataforma.
É o mecanismo de portabilidade e distribuição de integrações MCP curadas: quem empacota gera o pacote uma vez, quem importa publica a integração pronta para todos os workspaces usarem.
Dica
Se você só quer conectar um servidor MCP ao seu workspace, não precisa de .adapp — cadastre um servidor customizado direto (veja Cadastrar MCP Server). O .adapp existe para quando você quer publicar uma integração no catálogo global.
Formato atual
A versão vigente do formato é adapp/v1, declarada no campo format do manifest.json.
Estrutura interna do ZIP
O layout dentro do .adapp muda conforme o transport declarado no manifest.
Transport http ou sse
text
pacote.adapp (ZIP)
├── manifest.json (obrigatório)
├── icon.png (opcional; png/jpg/jpeg/webp)
└── tools/
├── crawl.json (uma tool por arquivo)
├── search.json
└── ...Cada arquivo em tools/ descreve uma tool: name, description, inputSchema, required_secrets e, opcionalmente, um http_binding (ver Manifesto → http_binding).
Transport openapi
text
pacote.adapp (ZIP)
├── manifest.json (obrigatório)
├── icon.png (opcional)
└── openapi.json (spec OpenAPI completo)No modo openapi não existe pasta tools/ — as tools são derivadas do spec no momento do import (cada combinação path + método vira uma tool).
Ciclo de vida
text
Empacotar (mcp:pack-app) → .adapp → Importar (POST /mcp/apps/import) → Catálogo global → Usar no fluxo- Um desenvolvedor empacota um provider MCP (existente no catálogo ou a partir de um spec OpenAPI) com
php artisan mcp:pack-app. - O comando gera o arquivo
.adapp. - Um admin importa o pacote via
POST /api/v1/mcp/apps/import. - A integração passa a existir no catálogo MCP global, visível para todos os workspaces.
- Qualquer workspace pode cadastrar um servidor a partir dessa entrada e usá-la no Flow Builder.
Checksum: por que existe
Todo manifest.json carrega um campo checksum no formato sha256:<64 hex>. Ele é calculado a partir do conteúdo canônico do manifest, do hash de cada arquivo de tool (ou do openapi.json) e do hash do ícone. No import, esse checksum é recalculado e comparado em tempo constante — qualquer byte alterado no pacote invalida a verificação e o import é rejeitado.
Isso garante que o pacote que chega até o import é exatamente o que o empacotador gerou — sem adulteração no caminho.
Atenção
Nunca edite um .adapp (ou o manifest.json dentro dele) na mão depois de gerado. Qualquer alteração muda o checksum e o pacote passa a ser rejeitado no import. Se precisar mudar algo, refaça o empacotamento com mcp:pack-app.
Próximos passos
- Manifesto (manifest.json) — referência completa dos campos do manifest.
- Empacotar um .adapp — como gerar o pacote com
mcp:pack-app. - Importar um .adapp — como publicar o pacote no catálogo global.
- Templates e exemplos — pacotes prontos para copiar.
