← Files AssinafyARCHIVED FILE
README.md
22.9 KB · Nov 3, 2026 · 19:20 UTC
# Plugin da Assinafy para assistentes de IA
*Português · [Read in English](README.en.md)*
Envie documentos para assinatura eletrônica com validade jurídica no Brasil sem sair
do seu assistente de IA. Use um PDF ou um modelo salvo, solicite assinaturas por **e-mail**,
**WhatsApp** ou **certificado digital ICP-Brasil (A1/A3)**, acompanhe o andamento,
lembre os signatários, baixe o PDF certificado e verifique qualquer assinatura.
Este repositório é um plugin, com o seu marketplace, para o Claude (Claude Code, apps
do Claude e Cowork), o OpenAI Codex e o ChatGPT, e o VS Code com GitHub Copilot. Ele
conecta o seu assistente ao [servidor MCP da Assinafy](https://mcp.assinafy.com.br/mcp)
hospedado e adiciona a skill `signing`, que ensina ao assistente o fluxo de assinatura,
as regras de cada canal e o acompanhamento seguro. Você entra com a sua conta Assinafy
por OAuth 2.1. Não é preciso chave de API, segredo de cliente nem servidor local.
- [Instalação](#instalação)
- [Login](#login)
- [Fluxo completo de assinatura](#fluxo-completo-de-assinatura)
- [O que você pode pedir](#o-que-você-pode-pedir)
- [Métodos de assinatura e custos](#métodos-de-assinatura-e-custos)
- [Status do documento](#status-do-documento)
- [Ferramentas](#ferramentas)
- [Sem o plugin](#sem-o-plugin)
- [Solução de problemas](#solução-de-problemas)
- [Segurança e privacidade](#segurança-e-privacidade)
## Instalação
### Claude Code (terminal, app desktop, VS Code, JetBrains)
```text
/plugin marketplace add assinafy/agent-plugin
/plugin install assinafy@assinafy
```
`/plugin install` abre os detalhes do plugin; escolha o escopo da instalação (para
você, para este repositório ou só para você neste repositório). No terminal, um único
comando adiciona o marketplace e instala:
```bash
claude plugin install assinafy --marketplace assinafy/agent-plugin # Claude Code 2.1.292+
```
Na aba **Code** do app desktop use **+ → Plugins → Add plugin**; no VS Code digite
`/plugins`. Se o Claude Code pedir, rode `/reload-plugins` para ativar. O plugin adiciona:
| Componente | Nome |
|---|---|
| Servidor MCP | `assinafy` → `https://mcp.assinafy.com.br/mcp` (Streamable HTTP, OAuth 2.1) |
| Skill | `assinafy:signing`, carregada automaticamente em tarefas de assinatura ou com `/assinafy:signing` |
Atualize com `claude plugin update assinafy@assinafy` (ou **Update now** em `/plugin`);
remova com `claude plugin uninstall assinafy@assinafy`. Sessões na nuvem em
claude.ai/code não carregam plugins instalados na sua máquina.
### Claude (chat na web, desktop e celular, e Cowork)
**Como plugin** (skill e conector juntos): vá em **Customize → Plugins → Add → Add
marketplace**, informe `assinafy/agent-plugin` e adicione **Assinafy**. Depois abra a
aba **Connectors** do plugin, adicione o conector da Assinafy e clique em **Connect**
para entrar. O plugin fica salvo na sua conta, então também aparece no Cowork e é
sincronizado com o Claude Code. Nos planos Team e Enterprise, um Owner pode precisar
liberar a origem ou adicionar o conector.
**Só como conector** (ferramentas sem a skill):
- **Free, Pro e Max**: vá em **Customize → Connectors → Add custom connector**, informe
`https://mcp.assinafy.com.br/mcp`, deixe vazias as configurações de cliente OAuth (ou
escolha **Use Claude's published identity**) e clique em **Add**. Depois clique em
**Connect** e entre na Assinafy.
- **Team e Enterprise**: um Owner adiciona o conector em **Organization settings →
Connectors → Add → Custom** com a mesma URL. Cada membro abre **Customize →
Connectors**, encontra a Assinafy e clica em **Connect**. Se for pedido o tipo de
conector, escolha **Web**.
Nesses apps, status, revisão e posicionamento de campos aparecem como cartões interativos.
### Codex
```bash
codex plugin marketplace add assinafy/agent-plugin
codex plugin add assinafy@assinafy
codex mcp login assinafy --scopes account:read,documents:read,documents:write,templates:read,templates:write,offline_access
```
O último comando abre o login da Assinafy. A extensão do Codex para IDE não carrega
plugins; nela, adicione o servidor pela URL como em [Sem o plugin](#sem-o-plugin).
### ChatGPT
Adicione um conector MCP remoto com a URL `https://mcp.assinafy.com.br/mcp`, escolha
OAuth, selecione CIMD se for perguntado o tipo de registro e deixe as credenciais de
cliente vazias. Depois conecte e entre na Assinafy. Status, revisão e posicionamento de
campos aparecem como cartões interativos.
### VS Code com GitHub Copilot
Rode **Chat: Install Plugin From Source** na Command Palette e informe
`https://github.com/assinafy/agent-plugin`, ou adicione o marketplace às configurações:
```json
"chat.plugins.marketplaces": ["assinafy/agent-plugin"]
```
Os plugins de agente precisam estar ativados (`chat.plugins.enabled`). O servidor da
Assinafy inicia com o plugin; faça o login no navegador quando o VS Code pedir.
## Login
Codex, ChatGPT e VS Code fazem o login como indicado na instalação de cada um; os apps
do Claude conectam pela aba **Connectors** do plugin. No Claude Code, faça o login uma
vez depois de instalar: abra `/mcp`, selecione
**plugin:assinafy:assinafy** e siga o pedido de login. O Claude Code também exibe um
aviso ao iniciar enquanto o servidor precisar de autenticação. Em um terminal sem navegador, rode
`claude mcp login --no-browser plugin:assinafy:assinafy` e cole a URL de retorno.
```mermaid
sequenceDiagram
participant U as Você
participant C as Assistente
participant M as mcp.assinafy.com.br
participant A as auth.assinafy.com.br
C->>M: Chamada de ferramenta sem token
M-->>C: 401 com metadados do recurso e escopos
C->>A: Login no navegador (PKCE S256, metadados de cliente)
U->>A: Entra, escolhe o workspace e aprova as permissões
A-->>C: Código de autorização
C->>A: Troca o código por tokens de acesso e de renovação
C->>M: Chamada com token bearer
M-->>C: Resultado do workspace aprovado
```
- **Uma conexão, um workspace.** Para usar outro workspace, escolha **Clear
authentication** em `/mcp` (ou rode `claude mcp logout plugin:assinafy:assinafy`) e
entre de novo escolhendo-o.
- **Permissões solicitadas**: `account:read`, `documents:read`, `documents:write`,
`templates:read`, `templates:write` e `offline_access`. Você pode aprovar menos;
ferramentas que precisem de uma permissão ausente retornam `403 insufficient_scope`
antes de fazer qualquer coisa. Gerar documento a partir de modelo exige
`templates:write`, e validar valores de campos exige `documents:write`.
- **Tokens** são armazenados com segurança pelo seu assistente e renovados automaticamente.
Com `offline_access`, a conexão só expira após 30 dias sem uso.
- **Verificar o hash de uma assinatura** não exige login.
- O login usa o ambiente de produção da Assinafy. Para testes, use um workspace de teste.
## Fluxo completo de assinatura
```mermaid
flowchart TD
A[Conectar workspace] --> B{Origem}
B -->|PDF novo| C[Enviar PDF]
B -->|Modelo salvo| D[Escolher modelo, preencher papéis e campos]
B -->|Documento existente| E[Encontrar documento]
C --> F[Escolher signatários, canais e ordem]
E --> F
D --> G[Solicitação de assinatura enviada]
F --> R{Revisar antes?}
R -->|Sim| RV[Resumo ou cartão de revisão] --> G
R -->|Não| G
G --> H[Signatários confirmam identidade e assinam]
H --> I{Todos assinaram?}
I -->|Pendente| J[Ver entrega, lembrar, prorrogar prazo] --> H
I -->|Expirado| X[Tentar prorrogar o prazo ou recomeçar]
I -->|Recusado| K[Ver o motivo; nova solicitação ou excluir]
I -->|Sim| L[certificating]
L --> M[certificated]
M --> N[Baixar PDF certificado]
N --> O[Verificar hash da assinatura]
```
### 1. Prepare o documento
Há três pontos de partida:
- **Um PDF novo.** Anexe o arquivo ou indique onde ele está. O assistente lê o arquivo e
envia os bytes; o servidor nunca abre caminhos do seu computador. Limite de 25 MiB
depois de decodificado.
- Quer enviar já, por e-mail? Diga isso; uma chamada envia o PDF, aguarda o
processamento e dispara os convites (`assinafy_send_pdf_for_signature`).
- Quer preparar antes? O assistente envia o arquivo (`assinafy_upload_document`) e
pode renomeá-lo enquanto não houver solicitação (`assinafy_rename_document`).
- **Um modelo salvo.** O assistente lista os modelos com papéis e campos
(`assinafy_list_templates`), associa os valores informados aos campos, valida-os
(`assinafy_validate_fields`) e atribui uma pessoa a cada papel
(`assinafy_create_document_from_template`).
- **Um documento já na Assinafy.** O assistente encontra o documento por nome, signatário
ou status (`assinafy_list_documents`) e confere que ele ainda não tem
solicitação.
### 2. Escolha signatários, canais e ordem
O assistente procura cada pessoa nos contatos do workspace (`assinafy_list_signers`) ou a
cadastra (`assinafy_create_signer`). Para cada signatário você define:
- **Como é notificado**: e-mail, WhatsApp ou ambos (um canal por signatário ao usar
modelo).
- **Como a identidade é verificada**: código por e-mail, código por WhatsApp ou
certificado digital ICP-Brasil (A1 ou A3). Veja
[Métodos de assinatura e custos](#métodos-de-assinatura-e-custos).
- **Ordem** (opcional): etapa 1, 2, 3… Quem está na mesma etapa assina em paralelo; a
etapa seguinte é convidada quando a anterior termina. Quem assina com certificado
precisa estar sozinho na sua etapa; com outros signatários, todos recebem etapa.
- **Destinatários em cópia** (opcional): contatos que recebem o documento assinado sem
assinar.
Também opcionais: mensagem do convite e data de expiração.
Há dois modos de assinatura:
- **Virtual** (padrão): o signatário assina o documento inteiro; a Assinafy adiciona a
página de certificado.
- **Coleta**: campos de assinatura, rubrica, data e preenchimento são posicionados em
páginas específicas para cada signatário. Nos apps do Claude e no ChatGPT,
`assinafy_place_fields` abre um editor visual. Nos demais, o assistente monta os
posicionamentos a partir do tamanho das páginas e dos IDs dos campos.
### 3. Revise e envie
Peça ao assistente para mostrar a solicitação antes de enviar.
`assinafy_review_signature_request` lista destinatários, canais e prazo e não envia
nada. Nos apps do Claude e no ChatGPT, o botão **Enviar** do cartão envia exatamente o que foi
revisado; nos demais casos, confirme na conversa.
O envio (`assinafy_create_assignment`) cria a solicitação e notifica os signatários.
Uma instrução explícita como "envie para a Ana" já é a sua confirmação; o assistente só
pergunta de novo quando um destinatário, documento ou papel do modelo é ambíguo.
Convites podem consumir documentos e créditos do seu plano.
### 4. O que os signatários fazem
Cada signatário, na sua vez:
1. Recebe o convite por e-mail e/ou WhatsApp, com a sua mensagem.
2. Abre a página de assinatura da Assinafy e aceita os termos.
3. Confirma a identidade:
- **E-mail**: digita o código enviado ao e-mail.
- **WhatsApp**: digita o código enviado ao WhatsApp.
- **Certificado digital**: assina com o próprio certificado ICP-Brasil, A1 (arquivo)
ou A3 (token ou cartão). O certificado precisa corresponder ao CPF ou CNPJ
cadastrado no contato do signatário na Assinafy.
4. Revisa o documento, preenche os campos atribuídos e assina, ou recusa informando o
motivo.
O assistente não assina, não aceita termos nem digita códigos por ninguém. Links de
assinatura e códigos nunca aparecem na conversa.
### 5. Acompanhe
- "Todos já assinaram?" O assistente encontra o documento e informa quem assinou e quem
falta (`assinafy_get_document`, ou o cartão de status de
`assinafy_show_document`, com **Lembrar** e **Atualizar**).
- "O convite chegou para o Bruno?" O assistente lê o histórico de entrega por e-mail nos
dados do signatário no documento (`assinafy_get_document`) e os detalhes de entrega
por WhatsApp (`assinafy_list_whatsapp_notifications`).
- "O que aconteceu com este documento?" O assistente mostra a linha do tempo de eventos
(`assinafy_list_document_activities`).
### 6. Lembre ou altere o prazo
- **Lembrar**: o assistente confirma que a pessoa ainda está pendente e já foi convidada (a
etapa dela está ativa) e envia um lembrete
(`assinafy_resend_notification`). Cada lembrete pode consumir créditos; o
assistente não repete só porque nada mudou.
- **Prorrogar**: o assistente altera a expiração sem notificar ninguém
(`assinafy_set_assignment_expiration`).
- **Corrigir um contato**: o assistente atualiza e-mail ou telefone (`assinafy_update_signer`).
A Assinafy bloqueia a troca de um canal que o signatário já verificou em
um documento não concluído. Trocar um canal não verificado invalida links
anteriores; o assistente só reenvia o convite se você pedir.
### 7. Certificação
Quando o último signatário termina, o documento passa a `certificating` e depois a
`certificated`. "100% assinado" ainda pode estar em `certificating`; o assistente espera
`certificated` antes de baixar.
Se a solicitação expirar (`expired`), o assistente pode tentar prorrogar o prazo
(`assinafy_set_assignment_expiration`); se a Assinafy não permitir, recomece. Se um
signatário recusar (`rejected_by_signer`), o assistente mostra o motivo e você decide se exclui o documento e envia uma nova solicitação.
### 8. Baixe e verifique
- **Baixar**: o assistente baixa o PDF certificado (`assinafy_download_document`,
`artifact: "certificated"`) e o salva com as ferramentas de arquivo. Outros artefatos:
`original`, `certificate-page`, `bundle` e `pades`. Prévias de página usam
`assinafy_download_document_page`.
- **Verificar**: informe ao assistente o hash de assinatura impresso no documento assinado.
`assinafy_verify_document` consulta a verificação pública e retorna se é válido, o
status, o número de signatários e a data de conclusão. Funciona sem login.
### 9. Recupere ou exclua
Operações compostas não são transacionais e escritas nunca são repetidas
automaticamente. Se um envio falhar depois do upload, o assistente informa o documento
retido e continua a partir dele, sem enviar o PDF de novo. A exclusão
(`assinafy_delete_document`) só acontece quando você pede, e só em status que permitem.
## O que você pode pedir
Nomes, e-mails e datas são exemplos.
| Você diz | O que acontece |
|---|---|
| "Envie contrato.pdf para Ana Lima, ana@example.com, para assinatura." | Envia o PDF, aguarda o processamento e manda o convite por e-mail |
| "Suba proposta.pdf mas não envie. Chame de Proposta v2." | Envia e renomeia; ninguém é notificado |
| "Envie a Proposta v2 primeiro para a Ana, depois para o Bruno por WhatsApp." | Ordem de assinatura com verificação por e-mail e depois WhatsApp |
| "A Carla assina com certificado digital." | Confere se o contato da Carla tem CPF ou CNPJ na Assinafy e solicita assinatura com certificado |
| "Quero revisar antes de enviar o NDA para Ana e Bruno." | Mostra a solicitação; envia só depois da sua confirmação |
| "Coloque financeiro@example.com em cópia, sem assinar." | Adiciona um destinatário em cópia |
| "Use o modelo de NDA para a Carla, carla@example.com, empresa Acme Ltda." | Associa e valida o campo, preenche o papel e envia |
| "11.222.333/0001-81 é válido para o campo CNPJ?" | Valida sem criar nada |
| "Quais documentos estão aguardando assinatura?" | Lista documentos em `pending_signature` |
| "Todos já assinaram o contrato da Acme?" | Informa quem assinou e quem falta |
| "O convite por WhatsApp chegou para o Bruno?" | Mostra os detalhes de entrega por WhatsApp |
| "Lembre a Ana de assinar o contrato de serviços." | Confirma que ela está pendente e envia um lembrete |
| "Dê prazo até 15 de dezembro para os signatários da locação." | Altera a expiração; nenhum lembrete |
| "Baixe a cópia assinada do contrato da Acme." | Aguarda a certificação e baixa o PDF certificado |
| "Esta assinatura é válida? Hash FE32ED…" | Verificação pública, sem login |
| "Exclua o rascunho Proposta v1." | Exclui se o status permitir |
## Métodos de assinatura e custos
| Verificação | Como o signatário confirma | Requisitos | Créditos por signatário |
|---|---|---|---|
| E-mail (padrão) | Código enviado por e-mail | Um e-mail | Incluído |
| WhatsApp | Código enviado por WhatsApp | Número de WhatsApp em E.164 (`+5511…`), notificação por WhatsApp, plano pago | 0,45 |
| Certificado digital | Certificado ICP-Brasil A1 ou A3 | Recurso Certificado Digital; CPF ou CNPJ no contato do signatário na Assinafy; sozinho na sua etapa | 0,5 mais a notificação |
- Cada solicitação de assinatura usa um documento da franquia do plano, ou 1 crédito
quando a franquia acaba. O custo do WhatsApp vem da notificação.
- Um signatário com **CPF** precisa do próprio e-CPF, ou de um e-CNPJ que o indique como
representante legal. Um signatário com **CNPJ** precisa do e-CNPJ dessa empresa, de
qualquer um dos representantes.
- O assistente nunca pede CPF ou CNPJ. Cadastre-o no contato do signatário pelo app da
Assinafy antes de solicitar assinatura com certificado.
- Canais de notificação: e-mail, WhatsApp ou ambos (um por signatário com modelos).
Notificação por WhatsApp é recurso pago.
- Se o seu plano não inclui WhatsApp ou assinatura com certificado, a Assinafy recusa a
solicitação (`403`) e o assistente informa qual recurso falta.
- O envio de PDF em um passo (`assinafy_send_pdf_for_signature`) sempre usa e-mail. Para outros canais, ordem de
assinatura ou cópias, o assistente usa o fluxo passo a passo.
## Status do documento
| Status | Significado | Pode excluir |
|---|---|:---:|
| `uploading`, `uploaded`, `metadata_processing` | Em processamento | não |
| `metadata_ready` | Pronto para preparar ou enviar | sim |
| `pending_signature` | Aguardando signatários | sim |
| `certificating` | Todos assinaram; certificação em andamento | não |
| `certificated` | Assinado e certificado | não |
| `expired` | Solicitação expirada | sim |
| `rejected_by_signer`, `rejected_by_user` | Recusado | sim |
| `failed` | Falha no processamento | sim |
## Ferramentas
27 ferramentas, uma por operação. As requisições e respostas completas de cada
ferramenta estão em
[`skills/signing/references/tools.md`](skills/signing/references/tools.md).
| Ferramenta | Efeito |
|---|---|
| `assinafy_list_documents` | Leitura |
| `assinafy_get_document` | Leitura |
| `assinafy_list_document_activities` | Leitura |
| `assinafy_list_whatsapp_notifications` | Leitura |
| `assinafy_show_document` | Leitura; cartão de status |
| `assinafy_upload_document` | Escrita; sem convites |
| `assinafy_rename_document` | Escrita; sem convites |
| `assinafy_send_pdf_for_signature` | Envia convites |
| `assinafy_create_assignment` | Envia convites |
| `assinafy_create_document_from_template` | Envia convites |
| `assinafy_review_signature_request` | Leitura; cartão de revisão |
| `assinafy_place_fields` | Leitura; cartão com editor de campos |
| `assinafy_resend_notification` | Envia um lembrete |
| `assinafy_set_assignment_expiration` | Altera o prazo |
| `assinafy_list_signers` | Leitura |
| `assinafy_get_signer` | Leitura |
| `assinafy_create_signer` | Escrita; sem convites |
| `assinafy_update_signer` | Escrita; sem convites |
| `assinafy_list_templates` | Leitura |
| `assinafy_get_template` | Leitura |
| `assinafy_list_fields` | Leitura |
| `assinafy_get_field` | Leitura |
| `assinafy_validate_fields` | Leitura |
| `assinafy_download_document` | Leitura |
| `assinafy_download_document_page` | Leitura |
| `assinafy_verify_document` | Leitura; pública |
| `assinafy_delete_document` | Exclusão |
Criação de modelos, webhooks (incluindo entregas assinadas e múltiplos endpoints),
usuários, chaves de API e cobrança são gerenciados na Assinafy ou pela
[API REST](https://api.assinafy.com.br/v1/docs), não por este plugin.
## Sem o plugin
Qualquer cliente MCP que aceite servidores remotos com OAuth pode usar o servidor
diretamente, com a mesma URL e o mesmo login; você tem as ferramentas, sem a skill.
| Cliente | Configuração |
|---|---|
| Claude Code | `claude mcp add --transport http assinafy https://mcp.assinafy.com.br/mcp`, depois `/mcp` |
| Codex (incluindo a extensão para IDE) | `codex mcp add assinafy --url https://mcp.assinafy.com.br/mcp`, depois `codex mcp login assinafy --scopes account:read,documents:read,documents:write,templates:read,templates:write,offline_access` |
| VS Code / GitHub Copilot | Adicione `{"servers": {"assinafy": {"type": "http", "url": "https://mcp.assinafy.com.br/mcp"}}}` à configuração MCP e inicie o servidor |
## Solução de problemas
Para entrar de novo ou trocar de workspace em cada cliente:
| Cliente | Reconectar |
|---|---|
| Claude Code | `/mcp` → **plugin:assinafy:assinafy** → **Clear authentication** e entre de novo (ou `claude mcp logout plugin:assinafy:assinafy`) |
| Apps do Claude, Cowork | **Customize → Plugins → Assinafy → Connectors**: desconecte e conecte |
| Codex | `codex mcp logout assinafy`, depois `codex mcp login assinafy --scopes account:read,documents:read,documents:write,templates:read,templates:write,offline_access` |
| ChatGPT, VS Code | Desconecte e conecte a Assinafy nas configurações do conector ou do servidor MCP |
| Sintoma | Solução |
|---|---|
| Servidor pede autenticação | Faça o login como indicado na instalação do seu cliente |
| `403 insufficient_scope` | Reconecte e aprove as permissões citadas na mensagem; nada foi enviado |
| `401` depois de um tempo sem uso | A conexão expirou; reconecte |
| `503` | A autorização da Assinafy está temporariamente indisponível; tente em instantes |
| `403` citando WhatsApp ou certificado digital | O seu plano não inclui o recurso; use e-mail ou mude de plano |
| PDF assinado indisponível | O documento ainda está em `certificating`; peça de novo em instantes |
| Erro citando documento retido | Peça ao assistente para continuar com esse documento em vez de enviar o PDF de novo |
| Ferramentas não aparecem no Claude Code | Rode `/reload-plugins` e confira a aba **Errors** em `/plugin` |
| Workspace errado | Reconecte e escolha o workspace correto no login |
## Segurança e privacidade
- A autenticação é OAuth 2.1 com PKCE. O assistente se identifica para a Assinafy com o seu
documento de metadados de cliente; não há segredo compartilhado. O seu assistente guarda os
tokens com segurança; eles nunca vão para prompts ou argumentos de ferramentas.
- O servidor valida cada token com a Assinafy e só age no workspace e nas permissões que
você aprovou. Argumentos de ferramentas não trocam de workspace.
- Links de assinatura, códigos de verificação e bytes de documentos não aparecem na
conversa.
- Revogue o acesso desconectando no seu cliente (veja
[Solução de problemas](#solução-de-problemas)) ou na sua conta Assinafy.
- [Política de privacidade](https://www.assinafy.com.br/politica-de-privacidade) ·
[Termos de uso](https://www.assinafy.com.br/termos-de-uso) ·
[Suporte](https://www.assinafy.com.br/contato)
## Licença
[MIT](LICENSE)
SHA-256: 6d6001e8e5660cde64339fec7a501d4f985ed59f4241fb88a7b346728dbb7820