zyta-sign-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@zyta-sign-mcp log in to Zyta"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
zyta-sign-mcp
Servidor Model Context Protocol (stdio) que expone tus documentos, firmas y estudios de Zyta Sign a un agente como Claude Desktop, Cursor o Codex CLI — respetando tus permisos exactos.
Instalación rápida (cualquier usuario)
{
"mcpServers": {
"zyta": {
"command": "npx",
"args": ["-y", "zyta-sign-mcp"],
"env": {
"KAIRO_BASE_URL": "https://sign.zyta.app",
"KAIRO_CLIENT_LABEL": "Cursor"
}
}
}
}Pegá eso en
.cursor/mcp.json(Cursor) oclaude_desktop_config.json(Claude)Recargá MCP → conectado
En el chat: "logueate en zyta" → el agente llama
kairo_login→ autorizás en/device
No hace falta clonar repos ni rutas locales. Solo Node.js 18+.
Nota: el paquete npm se llama
zyta-sign-mcp(el nombrekairo-mcpya está ocupado en npm por otro proyecto). Las herramientas siguen usando el prefijokairo_*.
Related MCP server: SumoSign MCP Server
Autenticación (login obligatorio)
Sin sesión autenticada, todas las herramientas fallan — salvo kairo_login y
kairo_disconnect. No hay auto-login silencioso por variables de entorno: el token
KAIRO_API_TOKEN solo se usa si lo pasás explícitamente a kairo_login({ access_token })
(o como fallback dentro de esa herramienta). Los permisos los determina el usuario del
token: el agente no puede hacer más de lo que podés hacer vos en el dashboard.
Device Authorization Flow (recomendado, estilo gh auth login)
El MCP conecta al instante (stdio) sin bloquear en login. Cuando el agente necesita
operar, llama a kairo_login:
Se abre el navegador en
/device?user_code=XXXX-XXXXAutorizás con tu cuenta (o email/contraseña si no tenés sesión web)
El agente recibe el token y responde en el chat: "Sesión OK como Juan…"
El token queda en
~/.kairo/credentials-*.json(sesiones posteriores se reutilizan)
No hace falta copiar/pegar secretos en mcp.json.
Cursor (recomendado)
Levantá la app:
cd kairo-sign
npm run dev # :3000Configurá
.cursor/mcp.json(proyecto o global):
{
"mcpServers": {
"zyta": {
"command": "npx",
"args": ["-y", "zyta-sign-mcp"],
"env": {
"KAIRO_BASE_URL": "http://localhost:3000",
"KAIRO_CLIENT_LABEL": "Cursor"
}
}
}
}Cursor → Settings → MCP → Reload →
kairoconectado (verde)En el chat: "logueate en kairo" o el agente llama
kairo_loginAutorizás en el browser → mensaje en Cursor (hook) y/o respuesta de
kairo_login
Al autorizar en /device, se escribe .cursor/kairo-auth-complete.json y un hook de Cursor muestra en el chat que la sesión quedó lista (al terminar la respuesta del agente o al enviar el próximo mensaje).
Smoke test device flow: cd kairo-sign && npx tsx scripts/smoke-device-auth.ts
Bridge local (misma PC, alternativa al device flow)
Si desarrollás con el dashboard y Cursor en la misma máquina, podés sincronizar la
sesión del navegador al MCP sin abrir /device:
cd kairo-sign && npm run agent:setup— genera un secreto compartido en.env.localy.cursor/mcp.json(KAIRO_AGENT_BRIDGE_SECRET)Reiniciá
npm run devy recargá el MCP en CursorLogueate en el dashboard → el front hace POST al puente local (
127.0.0.1:9322) y el agente queda autenticado solo
El puente no reemplaza el login obligatorio: solo copia el token cuando ya iniciaste
sesión en el browser. En producción remota seguí usando kairo_login (device flow).
Token manual (alternativa)
Dashboard → "Acceso para agentes (MCP)" → Crear token
En el chat:
kairo_login({ access_token: "ztk_..." })— no lo pongas enmcp.json
Config mínima (sin token manual)
{
"mcpServers": {
"zyta": {
"command": "npx",
"args": ["-y", "zyta-sign-mcp"],
"env": {
"KAIRO_BASE_URL": "https://sign.zyta.app",
"KAIRO_CLIENT_LABEL": "Cursor laptop"
}
}
}
}Instalación
npm install -g zyta-sign-mcp
# o on-demand: npx -y zyta-sign-mcpClaude Desktop
Editá claude_desktop_config.json (Settings → Developer):
{
"mcpServers": {
"kairo": {
"command": "npx",
"args": ["-y", "zyta-sign-mcp"],
"env": {
"KAIRO_BASE_URL": "https://sign.zyta.app"
}
}
}
}Codex CLI
En ~/.codex/config.toml:
[mcp_servers.kairo]
command = "npx"
args = ["-y", "zyta-sign-mcp"]
env = { KAIRO_BASE_URL = "https://app.zyta.legal" }Avanzado / legacy: HTTP OAuth en Cursor
Cursor también puede conectarse por URL con OAuth 2.1 (cursor:// redirect).
Este flujo es más frágil en Windows (alert del browser, PKCE en Cursor).
Preferí stdio + kairo_login arriba.
Si igual querés probarlo:
cd kairo-sign
npm run dev # :3000
npm run mcp:http # :3001{
"mcpServers": {
"kairo": {
"url": "http://localhost:3001/mcp",
"transport": "http"
}
}
}Smoke test: npx tsx scripts/smoke-cursor-oauth.ts
Flujo típico: subir, firmar y descargar
kairo_loginsi no hay sesiónkairo_upload_document({ base64, filename, alias? })→document.idkairo_get_sign_url({ documentId, mode: "external" })→url+waitParamsAbrís la URL en el browser y firmás con el mouse
kairo_wait_for_signature(waitParams)→ cuandosigned: true, obtenéssignature.idkairo_download_signed_pdf({ signatureId })→ PDF firmado en base64kairo_verify_signature({ documentHash })→ verificación por hash
Para firma con tu cuenta (PIN + certificado completo), usá mode: "account" en el paso 3.
Variables de entorno
Variable | Default | Descripción |
|
| URL base de la instancia de Kairo. |
| — | Solo para scripts/CI o |
|
| Nombre mostrado en la pantalla |
| — | Secreto compartido con el dashboard (bridge local). |
|
| Puerto del puente localhost. |
| (activo) |
|
| (Windows) ruta a | Navegador usado por |
|
| Carpeta donde se guarda el token tras Device Flow. |
Tools expuestas (49)
Autenticación
Tool | Qué hace |
| Inicia sesión (device flow o token manual). |
| Usuario detrás del token. |
| Borra token cacheado. |
Documentos
Tool | Qué hace |
| Lista documentos visibles. |
| Detalle + firmas. |
| PDF original en base64. |
| Sube PDF (base64). Requiere scope |
| Sube hasta 10 PDFs en una llamada. |
| Cambia alias. Requiere scope |
| Elimina documento propio. Requiere scope |
Firma
Tool | Qué hace |
| URL para firmar + |
| Polling hasta firmado. |
| Subir PDF + link externo en un paso. |
| (legacy) Preferí |
| Paquete multi-documento (2–25 PDFs). |
| Estado del paquete. |
| Polling hasta paquete completo. |
| Pedidos externos de un documento. |
| Revoca link externo. Requiere scope |
| PDF estampado en base64. |
| Certificado JSON con |
| Verifica por hash del documento. |
| Verifica subiendo el PDF + signatureId. |
| Informe diff PDF (Premium). |
| OpenTimestamps: status / upgrade / .ots |
| Abre URL de firma en navegador. |
Presets de firma
Tool | Qué hace |
| Biblioteca de firmas guardadas. |
| Crea preset (PNG base64 obligatorio). Scope |
| Edita preset. Scope |
| Elimina preset. Scope |
Estudios
Tool | Qué hace |
| Estudios donde sos miembro. |
| Crea estudio (Premium). Scope |
| Detalle con áreas y miembros. |
| Renombra estudio. Scope |
| Elimina estudio. Scope |
| Crea área. Scope |
| Renombra área. Scope |
| Elimina área. Scope |
| Agrega miembro por email. Scope |
| Cambia rol/área. Scope |
| Quita miembro. Scope |
Cuenta, webhooks y settings
Tool | Qué hace |
| Plan, cuota mensual y features. |
| TTL del link externo. |
| Cambia TTL ( |
| Lista webhooks HTTPS. |
| Registra webhook. Scope |
| Elimina webhook. Scope |
Próximamente (stub)
Tool | Estado |
| No implementado en backend |
| Firma A→B no implementada |
Las mutaciones con scope write fallan con 403 si el token es solo lectura.
Modelo de seguridad
El token está hasheado con HMAC-SHA256 (
SIGNING_SECRET) en la base; solo guardamos el prefijo + últimos 4 chars para identificación.Cualquier endpoint que el MCP consume usa el mismo
getCurrentUserOrTokenque el dashboard → no hay "modo admin" oculto.Podés revocar un token en cualquier momento desde el dashboard. La revocación es instantánea (no hay TTL de caché).
Los tokens pueden tener vencimiento opcional (1–365 días).
Desarrollo
npm install
KAIRO_BASE_URL=http://localhost:3000 npm run dev
# o lo inspeccionás con MCP Inspector (login explícito vía kairo_login):
KAIRO_API_TOKEN=ztk_... npm run inspectAvailable Tools
49 toolskairo_add_studio_memberAgregar miembro al estudioB
Invita a un usuario registrado por email. Roles: socio o abogado. Requiere scope 'write'.
Inputs: studioId (required), email (required), role (required), areaId.
kairo_create_external_bundleCrear paquete de firma externaC
Varios PDFs en un solo link. Mínimo 2 documentos.
Inputs: documentIds (required), recipientName, recipientEmail, inviteMessage, +2 more.
kairo_create_sequential_sign[Próximamente] Firma secuencialD
Inputs: documentId (required).
kairo_create_signature_presetCrear preset de firmaA
Guarda una firma en la biblioteca. Requiere scope 'write'. La imagen PNG en base64 es obligatoria.
Inputs: signatureImageBase64 (required), firstName, lastName, dni, +1 more.
kairo_create_studioCrear estudioA
Crea un nuevo estudio (requiere plan Premium y scope 'write'). Devuelve el estudio creado.
Inputs: name (required).
kairo_create_studio_areaCrear área de estudioC
Crea un área dentro de un estudio. Requiere gestión y scope 'write'.
Inputs: studioId (required), name (required).
kairo_create_template[Próximamente] PlantillaD
Inputs: name (required).
kairo_create_webhookCrear webhookD
Inputs: url (required), events, secret.
kairo_delete_documentEliminar documentoA
Elimina un documento que subiste (y sus firmas asociadas). Requiere scope 'write'.
Inputs: documentId (required).
kairo_delete_signature_presetEliminar preset de firmaC
Elimina un preset de la biblioteca. Requiere scope 'write'.
Inputs: presetId (required).
kairo_delete_studioEliminar estudioA
Elimina un estudio definitivamente. Requiere rol de gestión y scope 'write'.
Inputs: studioId (required).
kairo_delete_studio_areaEliminar áreaA
Elimina un área del estudio. Los documentos quedan sin área. Requiere scope 'write'.
Inputs: studioId (required), areaId (required).
kairo_delete_webhookEliminar webhookD
Inputs: webhookId (required).
kairo_disconnectDesconectar agenteA
Borra el token cacheado del agente (~/.kairo/). La próxima llamada pedirá autorización de nuevo.
Inputs: no named parameters.
kairo_download_documentDescargar PDFC
Descarga el PDF original de un documento y devuelve metadata + bytes en base64.
Inputs: documentId (required).
kairo_download_signed_pdfDescargar PDF firmadoA
Descarga el PDF estampado de una firma. Podés acceder si ves el documento (incluye firmas del estudio).
Inputs: signatureId (required).
kairo_get_documentDetalle de documentoB
Obtiene un documento por id con sus firmas (si el usuario lo puede ver).
Inputs: documentId (required).
kairo_get_external_bundle_statusEstado del paquete externoD
Inputs: bundleId (required).
kairo_get_external_sign_settingsSettings firma externaD
Inputs: no named parameters.
kairo_get_plan_quotaPlan y cuota de firmasA
Devuelve plan (free/premium), features, firmas usadas este mes y límite.
Inputs: no named parameters.
kairo_get_signature_certificateObtener certificado de firmaC
Devuelve el certificado JSON de una firma (incluye verifyUrl). Requiere ver el documento.
Inputs: signatureId (required).
kairo_get_sign_urlObtener URL para firmarA
Devuelve una URL para abrir en el navegador y firmar con mouse/touch. Modo 'account': firma completa con tu cuenta (PIN, firma guardada, certificado fuerte) — requiere sesión iniciada en el browser. Modo 'external': link efímero sin login (duración según settings del usuario). No intentes firmar desde la terminal: la experiencia con canvas no es usable ahí.
Inputs: documentId (required), mode, recipientName, recipientEmail, +3 more.
kairo_get_studioDetalle de estudioB
Obtiene un estudio con áreas, miembros y tu rol.
Inputs: studioId (required).
kairo_list_documentsListar documentosA
Lista los documentos visibles para el usuario del token, respetando reglas de Estudio (owner/socio/abogado).
Inputs: limit.
kairo_list_external_requestsListar firmas externas pendientesC
Lista los pedidos de firma externa (token efímero) abiertos para un documento.
Inputs: documentId (required).
kairo_list_signature_presetsListar presets de firmaA
Lista la biblioteca de firmas guardadas del usuario (nombre, DNI, CUIL opcionales).
Inputs: no named parameters.
kairo_list_studiosListar estudiosA
Lista los estudios donde el usuario es miembro junto con su rol y áreas.
Inputs: no named parameters.
kairo_list_webhooksListar webhooksD
Inputs: no named parameters.
kairo_loginIniciar sesiónA
Obligatorio antes de cualquier otra herramienta si no hay sesión. Sin argumentos: abre el navegador en /device (estilo gh auth login). También acepta access_token (ztk_...) manualmente.
Inputs: access_token.
kairo_open_browserAbrir URL en navegadorD
Inputs: url (required).
kairo_remove_studio_memberQuitar miembro del estudioB
Elimina a un miembro del estudio. Requiere scope 'write'.
Inputs: studioId (required), memberId (required).
kairo_request_external_signPedir firma externa (legacy)B
Preferí kairo_get_sign_url(mode=external) o kairo_sign_workflow. Crea link externo con share links.
Inputs: documentId (required), recipientName, recipientEmail, inviteMessage, +2 more.
kairo_revoke_external_requestRevocar pedido de firma externaA
Invalida un pedido de firma externa (el link deja de funcionar inmediatamente). Requiere scope 'write'.
Inputs: documentId (required), requestId (required).
kairo_signature_anchorAnclaje OpenTimestampsD
Inputs: signatureId (required), action.
kairo_signature_diffInforme diff PDF (Premium)D
Inputs: signatureId (required), pdfBase64 (required).
kairo_sign_workflowWorkflow: subir y pedir firmaC
Sube PDF, crea link externo, devuelve share links.
Inputs: pdfBase64 (required), filename (required), alias, recipientName, +5 more.
kairo_update_documentActualizar documentoA
Cambia el alias de un documento que subiste. Requiere scope 'write'.
Inputs: documentId (required), alias.
kairo_update_external_sign_settingsActualizar settings firma externaD
Inputs: externalSignLinkTtl, externalSignExpireOnSign.
kairo_update_signature_presetActualizar preset de firmaC
Modifica datos y/o imagen de un preset. Requiere scope 'write'.
Inputs: presetId (required), signatureImageBase64, firstName, lastName, +2 more.
kairo_update_studioRenombrar estudioB
Cambia el nombre de un estudio. Requiere rol de gestión y scope 'write'.
Inputs: studioId (required), name (required).
kairo_update_studio_areaRenombrar áreaB
Cambia el nombre de un área. Requiere gestión y scope 'write'.
Inputs: studioId (required), areaId (required), name (required).
kairo_update_studio_memberActualizar miembro del estudioB
Cambia rol y/o área de un miembro. Requiere scope 'write'.
Inputs: studioId (required), memberId (required), role, areaId.
kairo_upload_documentSubir documento PDFA
Sube un PDF a Zyta. Requiere scope 'write'. Devuelve el documento creado o error 409 si es duplicado (usá force=true para subir igual).
Inputs: base64 (required), filename (required), alias, studioId, +2 more.
kairo_upload_documentsSubir varios PDFsD
Inputs: files (required), studioId, areaId, force.
kairo_verify_documentVerificar PDF subidoC
Sube un PDF y verifica contra signatureId o certificado JSON.
Inputs: pdfBase64 (required), signatureId, certificateJson.
kairo_verify_signatureVerificar firma por hashC
Verifica una firma de Zyta a partir del hash del documento. No requiere subir el PDF.
Inputs: documentHash (required).
kairo_wait_for_external_bundleEsperar paquete firmadoD
Inputs: bundleId (required), timeoutSeconds, pollIntervalSeconds.
kairo_wait_for_signatureEsperar firma completadaB
Hace polling hasta que el documento se firme o se agote el tiempo. Usá los waitParams que devuelve kairo_get_sign_url. Cuando signed=true, incluye verifyUrl para ver el certificado.
Inputs: documentId (required), since, externalRequestId, accountOnly, +2 more.
kairo_whoamiQuién soyA
Devuelve el usuario asociado al token del agente (sesión MCP), no la del navegador.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 49 tools
Several tools lack descriptions (e.g., kairo_create_sequential_sign, kairo_create_template, kairo_list_webhooks), making them indistinguishable. Tools like kairo_request_external_sign and kairo_get_sign_url overlap in purpose. With 49 tools, confusion is high.
All tools follow the consistent pattern 'kairo_verb_noun' (e.g., kairo_add_studio_member, kairo_upload_document). No mixing of conventions; naming is uniform and predictable.
49 tools is excessive for a single MCP server. Many tools could be consolidated (e.g., kairo_upload_document vs kairo_upload_documents). The scope seems overly broad, exceeding typical well-scoped server sizes.
The server covers CRUD for documents, studios, presets, webhooks, and signing workflows. Minor gaps exist due to missing tool descriptions (e.g., kairo_signature_anchor, kairo_create_template), but the overall lifecycle appears mostly covered.
Related MCP Connectors
Document creation, signing requests, and approval workflows for AI agents over Streamable HTTP.
Send AI-created PDFs for signature, track signers, and return verifiable document evidence.
Send encrypted files and secrets, collect files and get documents signed, from your AI.
Send documents for e-signature from AI assistants, track signers, and download sealed, signed PDFs.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI clients to create and manage e-signature sessions, envelopes, documents, and webhooks through the SignDocs Brasil API.24101 npm1MIT
- AlicenseAqualityCmaintenanceExposes the SumoSign signing API to AI agents, allowing document upload, envelope creation, and tracking, with signing always done by human recipients.15148 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to create and manage electronic signature documents via the ZapSign API, including sending from PDF, DOCX, URL, or template, tracking status, managing signers, templates, webhooks, background checks, and account settings.MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to create documents from templates, send them for legally valid Argentine electronic or digital signature, track status, download signed PDFs with audit certificates, and cryptographically verify signatures.1-