Invoice by Ouroboros Apps
Factura de Ouroboros Apps: partidas de factura para freelancers, tarifas, fechas de vencimiento y términos de mora
Servidor MCP alojado
npx add-mcp 'https://invoice-continuity2.vercel.app/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
Factura
Invoice mantiene la factura aprobada de un freelancer — líneas de detalle, cantidades, la tarifa ya aprobada, la fecha de vencimiento y los términos por mora — y luego permite que un asistente lea ese registro antes de responder. Un asistente no puede agregar una línea, cambiar una tarifa, inventar un descuento ni mover una fecha de vencimiento a menos que ese cambio esté explícitamente aprobado.
Funciona con ChatGPT, Claude, Gemini, Grok y Cursor, además de cualquier otro cliente MCP que pueda usar Streamable HTTP y OAuth. No es un plugin exclusivo de ChatGPT.
Inicia sesión con tu cuenta de Invoice cuando el asistente abra OAuth. No pegues una clave de API ni una contraseña en un encabezado. Invoice admite registro dinámico de clientes: deja el client id y el secret vacíos. Los metadatos del recurso protegido en /.well-known/oauth-protected-resource/mcp dirigen a los clientes al emisor de OAuth, que los registra.
Las herramientas de Invoice requieren Pro o una prueba activa. Una suscripción nueva incluye una prueba de 14 días. Esta página no lista un precio. El proceso de pago muestra el intervalo de facturación y los términos de pago. Los montos almacenados en una factura son las cifras aprobadas del freelancer, en unidades menores enteras de la moneda de la factura. No son un precio de producto.
Para autoalojar, ejecuta el servidor y usa la URL base que configures. La dirección MCP predeterminada es http://127.0.0.1:3000/mcp.
Servidor alojado
- URL del servidor MCP:
https://invoice-continuity2.vercel.app/mcp(Streamable HTTP, inicio de sesión OAuth) - Documentación: https://ouroborosapps.com/docs/invoice
- Estado: acceso anticipado. Pega la URL en el modo desarrollador de Claude, Cursor, Grok o ChatGPT.
- Nombre del registro:
io.github.LAHutchins91/invoice
Lo que el asistente puede hacer
Después de que apruebes la conexión, el servidor expone estas herramientas:
- list_invoices
- begin_invoice
- read_invoice
- place_line
- describe_line
- quote_line_rate
- set_line_quantity
- set_invoice_due
- write_late_terms
- offer_discount
- seal_invoice
- suggest_invoice_change
- accept_invoice_change
read_invoice es la lectura que el asistente debe hacer antes de responder. Las cifras en borrador no son un compromiso aprobado. Un cambio de factura sugerido no modifica el registro. Después de que la factura esté sellada, place_line rechaza una línea nueva, quote_line_rate rechaza una tarifa modificada, offer_discount rechaza un descuento y set_invoice_due rechaza una fecha de vencimiento movida. Esos cambios pasan por suggest_invoice_change y luego por accept_invoice_change, y solo cuando apruebas explícitamente ese cambio.
El asistente solo llama a estas herramientas cuando tú y el host lo permiten.
Conectar
Cursor, en ~/.cursor/mcp.json o en un proyecto .cursor/mcp.json:
{
"mcpServers": {
"invoice": {
"url": "http://127.0.0.1:3000/mcp"
}
}
}
No agregues un bloque de encabezados. Cursor registra un cliente y abre el inicio de sesión.
Claude Code:
claude mcp add --transport http invoice http://127.0.0.1:3000/mcp
No pases un encabezado Authorization. Otros clientes usan la misma dirección, eligen OAuth y dejan el client id y el secret vacíos. Los pasos para ChatGPT, Claude, Gemini, Grok y Cursor están en la página de conexión en /connect.
Los metadatos del registro para este servidor están en server.json (io.github.LAHutchins91/invoice). La URL remota allí es https://invoice-continuity2.vercel.app/mcp.
Ejecutar
npm install
npm test
npm run typecheck
npm run build
npm start
Cuando stdin es una terminal, Invoice sirve Streamable HTTP en el puerto 3000. Cuando stdin no es una terminal, habla MCP sobre stdio y aun así abre el puerto HTTP. Los registros durante el modo stdio van a stderr para no mezclarse con el protocolo.
Los registros se almacenan de forma duradera en un archivo JSON. La ruta predeterminada es ~/.invoice/invoice.json. Configura INVOICE_DATA_PATH para moverla. Un proceso del servidor es dueño de ese archivo. No lo apuntes al archivo de datos de otro producto.
OAuth usa la misma idea que un servidor de autorización de Supabase con registro dinámico de clientes. Configura estos valores en el proceso del servidor, no en un encabezado MCP:
APP_BASE_URL(predeterminadohttp://localhost:3000)SUPABASE_URLSUPABASE_ANON_KEYSTRIPE_SECRET_KEYSTRIPE_WEBHOOK_SECRETSTRIPE_PRICE_MONTHLYySTRIPE_PRICE_YEARLY(ids de catálogo de Stripe, no precios)OPENAI_APPS_CHALLENGE(opcional; cuando se configura,/.well-known/openai-apps-challengedevuelve ese token como texto plano)
Las llamadas a herramientas distintas del descubrimiento requieren una cuenta con sesión iniciada cuyo estado de suscripción sea active o trialing.
Más de Ouroboros: https://ouroborosapps.com