Servidor MCP
Stackin expone la API como herramientas MCP: un agente conectado emite, consulta, cancela y explica rechazos conversando, sin escribir peticiones. Doce herramientas, ocho prompts, y el alcance verificado en cada llamada.
Conversación, no petición
El agente llama a la herramienta, arma el payload y lee el resultado. Quien lo usa describe lo que quiere emitir.
Alcance verificado en cada llamada
Cada herramienta declara el alcance que exige, y el token se comprueba en el momento — no al registrar el plugin.
Doce herramientas, ocho prompts
Emitir, consultar, cancelar, corregir, manifestar y explicar un rechazo — la misma superficie de la API.
Empezar por ChatGPT
Registrar el plugin lleva una dirección y un login. El resto es conversación.
https://mcp.stackin.io/mcpCopiarLa misma dirección para ambos modos de autenticación.
Plugin de ChatGPT
En ChatGPT, Stackin entra como un plugin MCP: registras la dirección https://mcp.stackin.io/mcp, te autenticas por OAuth y pasas a emitir, consultar, explicar un rechazo y cancelar conversando. La grabación de abajo recorre el camino entero, del registro al cancelamiento, en homologación.
Grabación de pantalla, sin audio, en el entorno de homologación — las notas emitidas allí no tienen valor fiscal.
- Detalles
En un workspace Business, Enterprise o Edu el administrador lo habilita antes, en Configuración del workspace → Permisos y roles → Datos conectados, permitiendo crear conectores MCP personalizados. El toggle es por usuario: cada admin activa el suyo. Con el modo activo, el registro del conector aparece en Configuración → Conectores → Crear.
Modo desarrollador y apps MCP en ChatGPT — Centro de Ayuda de OpenAI - Detalles
Las configuraciones avanzadas de OAuth incluyen Registro Dinámico de Cliente (DCR), el Documento de Metadatos del Identificador del Cliente (CIMD), la URL de metadatos del cliente de ChatGPT, la URL de retorno OAuth y los alcances por defecto. Antes de guardar, ChatGPT avisa de que un servidor MCP personalizado solo debe añadirse si confías en quien lo opera.
- Detalles
La pantalla de consentimiento muestra los datos de la aplicación y los alcances que pide, antes de cualquier llamada. Tras autorizar, la página del plugin pasa a mostrar el estado de la conexión, los permisos concedidos y cuándo ChatGPT debe pedir autorización antes de ejecutar una acción.
Conectar
El servidor habla streamable-http en una dirección fija. Un cliente MCP se conecta con OAuth 2.1 y PKCE — el camino del plugin en ChatGPT — o con una API key de la empresa, lo más directo en un cliente local.
Con una API key
La key va en el header Authorization, como en la API. Sobre HTTP la credencial siempre viene de la petición: un proceso atiende a muchas empresas y nunca recurre a una clave del entorno.
{
"mcpServers": {
"stackin": {
"type": "http",
"url": "https://mcp.stackin.io/mcp",
"headers": {
"Authorization": "Bearer ${STACKIN_API_KEY}"
}
}
}
}Alcances
Un token OAuth lleva los alcances que su titular aprobó, y la API compara el alcance con la operación en cada llamada. El rechazo ocurre en la API, no en el agente.
- invoice:read
- Consultar, listar, descargar el PDF y leer el historial de envío.
- invoice:issue
- Emitir y reemitir un documento.
- invoice:cancel
- Cancelar un documento e inutilizar un rango de numeración.
- invoice:write
- Cartas de corrección y manifestación sobre una nota recibida.
curl https://mcp.stackin.io/.well-known/oauth-protected-resource
{
"resource": "https://mcp.stackin.io",
"authorization_servers": ["https://api.stackin.io"],
"scopes_supported": [
"invoice:read",
"invoice:issue",
"invoice:write",
"invoice:cancel"
]
}Herramientas
Doce herramientas. Siete alteran un documento y declaran destructiveHint; las otras cinco son de lectura. validate_invoice_payload no llama a la API, así que no exige alcance.
| Herramienta | Alcance | Obligatorios | Efecto |
|---|---|---|---|
issue_invoice | invoice:issue | document_typeclient_nametax_iditems | Altera documento |
reissue_invoice | invoice:issue | invoice_id | Altera documento |
cancel_invoice | invoice:cancel | access_keydocument_typereason | Altera documento |
correct_invoice | invoice:write | access_keycorrection | Altera documento |
invalidate_numbering | invoice:cancel | seriesnumber_startnumber_endreason | Altera documento |
manifest_received_invoice | invoice:write | access_keymanifestation | Altera documento |
consult_invoice | invoice:read | access_keydocument_type | Solo lectura |
list_invoices | invoice:read | — | Solo lectura |
get_invoice_pdf | invoice:read | access_keydocument_type | Solo lectura |
get_invoice_submissions | invoice:read | invoice_id | Solo lectura |
list_received_invoices | invoice:read | — | Solo lectura |
validate_invoice_payload | noauth | document_typeitems | Solo lectura |
Prompts
Ocho prompts guían al modelo en las tareas comunes — qué preguntar antes de emitir, qué nunca inventar, y cuándo cancelar no es la respuesta.
issue_nfseEmitir una nota de servicio.issue_nfeEmitir una nota de mercancía.recent_invoicesMostrar los últimos documentos de la empresa.diagnose_rejectionExplicar por qué se rechazó un documento y qué corregir.inspect_invoiceMostrar el estado actual de un documento.correct_nfeCarta de corrección para texto, no para importes.manifest_receivedDeclarar la posición de la empresa sobre la NF-e de un proveedor.cancel_invoice_promptCancelar un documento autorizado, con confirmación.Permisos del conector
Las herramientas que alteran un documento declaran readOnlyHint: false y openWorldHint: true, porque transmiten al fisco. Esa combinación es la que bloquea el modo por defecto.
Además, toda operación irreversible pide confirmación: las skills exigen leer los datos de vuelta antes de emitir, cancelar, inutilizar numeración o manifestarse — y emitir y cancelar aceptan idempotency_key, así que repetir la llamada no crea un segundo documento.
Preguntar siempre en los Permisos del conector antes de emitir. En el modo por defecto, Permitir acciones de bajo riesgo, toda escritura se deniega en silencio — la llamada no sale de la plataforma y nada llega aquí.