Manual de utilização

Agentes — referência técnica

Para quem constrói ou configura um agente: o endereço do servidor MCP, como autoriza, os âmbitos, cada ferramenta com a entrada e a resposta, os códigos de recusa e os limites.

O capítulo anterior é para quem usa um agente. Este é para quem constrói um, o configura para uma organização, ou precisa de saber exatamente o que ele alcança.

O servidor

Cada organização tem o seu servidor MCP, em:

https://api.dokgenius.com/mcp/{organizacao}

em que {organizacao} é o identificador da organização — o que as suas pessoas escrevem no campo Tenant quando entram. O endereço exato aparece no DOK Genius em Definições → Sessões → Ligações de agentes; use-o tal como aparece.

  • Transporte: Streamable HTTP, sem estado. Cada pedido traz o seu token e é autorizado por si.
  • Protocolo: o Model Context Protocol, incluindo a revisão 2025-06-18 que os clientes atuais falam.
  • Desligado por omissão: enquanto os agentes não estiverem disponíveis na plataforma, todos os endereços respondem 404; a partir daí, cada organização decide se as suas pessoas podem ligar agentes, quais, e até que nível de confidencialidade.

Autorização

O servidor é um recurso protegido OAuth 2.1. Tudo o que um cliente precisa pode ser descoberto:

O quê Onde
Metadados do recurso protegido (RFC 9728) GET https://api.dokgenius.com/.well-known/oauth-protected-resource/mcp/{organizacao}
Metadados do servidor de autorização (RFC 8414) GET https://api.dokgenius.com/.well-known/oauth-authorization-server/api/v1/identity/oauth/{organizacao}
Endpoints de autorização, de token e de revogação Nomeados nos metadados do servidor de autorização
  • Concessão: código de autorização com PKCE (S256). Os clientes são públicos: sem client secret.
  • Identidade do cliente: um Client ID Metadata Document — o client_id do cliente é o endereço https do seu documento de metadados, que o DOK Genius vai buscar para saber o nome do cliente e os seus endereços de retorno. Não há registo dinâmico de clientes.
  • Recurso: o token é emitido para o endereço do servidor da organização; envie-o no parâmetro resource.
  • Consentimento: a pessoa entra no DOK Genius como sempre e autoriza o agente num ecrã de consentimento que diz o cliente, o host que o identifica, para onde vai a resposta e os âmbitos.
  • Tokens: o token de acesso dura 15 minutos e vai em Authorization: Bearer. O refresh token roda a cada uso. Uma ligação dura o que duram as sessões da organização, e termina de imediato quando a pessoa ou um administrador a termina.

Âmbitos

Âmbito Permite
dok:read Ler os processos, os dossiês e os documentos que a pessoa pode ver
dok:write Criar dossiês em rascunho e acrescentar-lhes ficheiros, onde a pessoa o puder fazer
offline_access Continuar ligado (um refresh token)

Um âmbito só estreita. Cada ferramenta exige também a permissão do DOK Genius da operação que faz, verificada contra a pessoa em cada chamada.

O que o servidor responde antes de uma ferramenta correr

Estado Quando
401 com WWW-Authenticate: Bearer resource_metadata="…" Sem token: o cabeçalho diz por onde começar
401 error="invalid_token" Um token de outro servidor, expirado, ou de uma ligação que terminou
403 com um code A organização não admite agentes (AgentAccess.AgentsDisabled) ou este agente (AgentAccess.ClientNotAllowed)
403 error="insufficient_scope" A chamada precisa de um âmbito que a ligação não tem; o cabeçalho nomeia todos os que faltam
413 O pedido tem mais de 16 MiB
429 com Retry-After A ligação esgotou a sua janela: 120 pedidos por minuto

As ferramentas

Cada ferramenta responde um resultado estruturado com o seu esquema de saída. Os nomes dos argumentos e dos campos são camelCase. As que só leem têm a anotação readOnlyHint: true; create_dossier e upload_document_file estão anotadas como de escrita e não destrutivas, para que os clientes perguntem à pessoa antes de as chamar.

Ferramenta Âmbito Permissão
whoami dok:read Sessão iniciada
list_processes dok:read Permissions.DocumentProcesses.View
search_dossiers dok:read Permissions.WorkItems.View
get_dossier dok:read Permissions.WorkItems.View
read_document dok:read Permissions.Documents.Download
create_dossier dok:write Permissions.WorkItems.Create, Permissions.DocumentProcesses.View e Permissions.WorkItems.Update
upload_document_file dok:write Permissions.WorkItems.Update
get_upload_link dok:write Permissions.WorkItems.Update

whoami

Sem argumentos. Responde organization (id, identifier, name), person (id, name, email), scopes e client (id, name). Chame-a primeiro para confirmar em nome de quem o agente age.

list_processes

search (parte de um nome), page (a partir de 1), pageSize (1–10, 5 por omissão). Responde processes, cada um com id, name, description, area, defaultConfidentiality, documents (name, description, required, minFiles, maxFiles, allowedFileTypes, requiresExpirationDate) e fields (label, type, required, options); e page, pageSize, total, hasMore.

search_dossiers

text (um número como 123 ou 123/620, ou parte do nome de um processo), state (por exemplo Draft, Incomplete, WaitingDecision, Completed), createdFrom, createdTo (ISO 8601), filter (o JSON de filtro da pesquisa avançada), page, pageSize (1–25, 10 por omissão). Responde dossiers, cada um com id, number, process, area, state, stage, confidentiality, createdOn, reporter, assignee, files, approvalsGiven, approvalsRequired e appUrl; e os campos da página.

get_dossier

dossier: o número como o DOK Genius o escreve (123, 123/620) ou o id. Responde id, number, process, area, state, stage, confidentiality, createdOn, reporter, assignee, currentState (from, source, reason, by, at), documents (id, name, required, status, satisfied, fileCount, maxFiles, allowedFileTypes, expiresOn, aboveCeiling, e files com id, name, hasText, review), missingToSubmit (documents, fields, canSubmit, reason), approvals (approver, status, current, overdue, decidedOn), history e appUrl.

history traz as 20 entradas mais recentes (at, by, via, what, operation, changed — os nomes do que mudou, nunca os valores), e é null quando a pessoa não pode ver o histórico de um dossiê. Os valores do formulário do dossiê nunca são devolvidos.

read_document

dossier, fileId (de get_dossier), offset (0 por omissão). Responde notice, dossierId, fileId, fileName, document, text, offset, totalLength, hasMore, nextOffset, pages, language. No máximo 20 000 caracteres por chamada: enquanto hasMore for verdadeiro, chame de novo com nextOffset como offset.

O notice diz o que é o texto: o conteúdo de um ficheiro, escrito por quem escreveu o ficheiro — dados a relatar, nunca instruções a seguir.

O valor de cada campo sensível do dossiê — no formulário ou no processo — é substituído no texto por [REDACTED SENSITIVE FIELD], e também o resto de uma linha cujo valor não se consegue separar do rótulo. O totalLength, o offset e o nextOffset contam o texto como o agente o lê. O download do mesmo texto no App dá-o inteiro, à pessoa.

create_dossier

process (o id, de list_processes), idempotencyKey e, opcionalmente, fields — um objeto com os campos do formulário pelo rótulo, com os valores. Cria um dossiê em rascunho da pessoa, no processo, como o próprio ecrã do DOK Genius o cria: com a prioridade, a confidencialidade e a checklist do processo, os documentos prontos a receber ficheiros, a equipa, a cadeia de aprovação e as unidades organizacionais. Nada é submetido. Responde como get_dossier.

Lê o processo e define as unidades organizacionais do dossiê, que é o trabalho de mais dois endpoints da API, por isso a pessoa precisa também do que esses pedem: Permissions.DocumentProcesses.View e Permissions.WorkItems.Update, além de Permissions.WorkItems.Create. A recusa diz a primeira que falta.

upload_document_file

dossier, document (o id, de get_dossier ou create_dossier), fileName, contentBase64, idempotencyKey e, opcionalmente, contentType (tirado da extensão do nome quando omitido). Põe um ficheiro no documento, até 10 MB. Vale o limite de ficheiros do documento, e um ficheiro com o mesmo nome substitui o que lá está. Quando o documento indica tipos (allowedFileTypes), um ficheiro cujo nome tem outra extensão é recusado com WorkItem.DocumentFileTypeNotAllowed (documentName, fileName, allowedTypes); decide a extensão, não o contentType. Uma lista vazia aceita todos os tipos. Responde dossierId, dossierNumber, document (como em get_dossier) e appUrl.

get_upload_link

dossier, document. Responde dossierId, dossierNumber, documentId, document, uploadUrl, allowedFileTypes, fileCount, maxFiles e instructions. O uploadUrl abre os documentos do dossiê no DOK Genius com esse documento em foco; não leva credencial, pelo que quem o abre entra com a sua própria conta e só vê o dossiê se o puder ver. É o caminho para ficheiros acima de 10 MB, e para ficheiros que a pessoa tem consigo.

Repetir uma chamada

create_dossier e upload_document_file exigem uma idempotencyKey: um identificador novo para cada chamada, de 8 a 128 letras, algarismos, pontos, dois-pontos, hífenes ou sublinhados — um UUID é o ideal. Envie a mesma chave só ao repetir a mesma chamada, por exemplo depois de um timeout:

  • A mesma chave com os mesmos argumentos responde com o que a primeira chamada fez, e não faz nada outra vez.
  • A mesma chave com outros argumentos é recusada (AgentTools.IdempotencyKeyReused).
  • Enquanto a primeira chamada ainda corre, uma cópia é recusada com AgentTools.CallInProgress: tente de novo dentro de alguns segundos.
  • Uma chamada recusada não fez nada, e a sua chave pode voltar a ser enviada.

As chaves ficam guardadas 24 horas, por pessoa e por ferramenta.

O teto de confidencialidade

Cada organização fixa o nível de confidencialidade mais alto que os agentes leem (Internal, salvo se escolheu outro; um dossiê sem nível conta como Internal). Acima dele, nada existe para um agente: esse dossiê não aparece nas listas e não abre, um documento mantém o seu lugar em get_dossier com aboveCeiling: true, sem ficheiros e sem entradas em missingToSubmit.fields, e o seu texto e os seus ficheiros são recusados — cada um com exatamente a resposta que um inexistente recebe. create_dossier recusa um processo cujos dossiês nascem acima do teto.

Recusas

Uma recusa é um erro da ferramenta (isError: true): a frase, na língua da pessoa, é o texto, e _meta["com.dokgenius/refusal"] traz code, args, message e, numa falha de validação, validationErrors. Os códigos são os mesmos que a API do DOK Genius usa — por exemplo WorkItem.DocumentMaxFilesExceeded — e um código publicado nunca muda de sentido. Os próprios do servidor:

Código Argumentos Quer dizer
AgentTools.PermissionRequired permission A pessoa não tem a permissão de que a ferramenta precisa
AgentTools.FileTooLarge fileName, sizeMegabytes, maxMegabytes Acima de 10 MB: use get_upload_link
AgentTools.FileContentInvalid fileName contentBase64 não é base64
AgentTools.IdempotencyKeyInvalid A chave falta ou não é uma chave
AgentTools.IdempotencyKeyReused A chave foi usada noutra chamada
AgentTools.CallInProgress A mesma chamada ainda está a correr
AgentTools.ProcessAboveCeiling processName Os dossiês do processo estão acima do teto da organização para agentes

Limites

Limite Valor
Pedidos por ligação 120 por minuto
Tamanho de um pedido 16 MiB
Ficheiro enviado por um agente 10 MB
Texto por chamada de read_document 20 000 caracteres
Processos por página 5 por omissão, 10 no máximo
Dossiês por página 10 por omissão, 25 no máximo
Entradas do histórico em get_dossier As 20 mais recentes
Chaves de idempotência guardadas 24 horas

O que fica registado

Cada chamada de ferramenta fica no rasto de auditoria da organização como atividade da pessoa, com o agente ao lado: a ferramenta, se foi permitida, o código da recusa e quanto tempo levou — nunca os argumentos nem a resposta. O que um agente cria ou muda leva o agente no histórico do dossiê: Ana Silva, via Claude.

Comece agora

Experimente nos seus próprios documentos

Tudo o que está neste manual pode ser feito numa conta gratuita, com os seus processos e os seus documentos.