puertafria

Plan Pro

Conecta tu agente

puertafria tiene una API HTTP, y su propio servidor MCP encima. Tu agente lee la cola, abre una empresa y apunta lo que pasó, por HTTPS y nunca contra la base de datos. Las mismas filas, las mismas reglas, otra puerta.

Incluido en Pro, 9 € al mes, y en Equipo. En el plan Gratis la API responde 403 PLAN_API.

# Claude Code, por MCP
$ claude mcp add puertafria \
    -e PUERTAFRIA_TOKEN=pf_... \
    -- npx -y @puertafria/mcp

# Cualquier cliente, por HTTP
$ curl -sS https://puertafria.es/api/v1/me \
    -H "Authorization: Bearer $PUERTAFRIA_TOKEN"

Cuatro pasos

  1. Crea una clave

    En tu cuenta, debajo del panel de la suscripción. Una etiqueta que diga dónde vas a usarla y una casilla para si puede escribir, desmarcada por defecto. La clave se enseña una vez y se guarda como hash, así que nadie la vuelve a leer. Conectar un agente forma parte del plan Pro. Ir a tu cuenta.

  2. Mándala en la cabecera

    En cada petición y en ningún otro sitio. Nunca como parámetro, que se queda en los logs. Nunca la cookie de sesión: un navegador con sesión abierta no puede llegar aquí sin querer.

    Authorization: Bearer pf_...
  3. Pregunta qué tienes en la mano

    La primera llamada dice de quién es la cuenta, en qué plan está y si esta clave puede escribir. El agente que lo lee primero no descubre el límite a base de que lo rechacen.

    curl -sS https://puertafria.es/api/v1/me \
      -H "Authorization: Bearer $PUERTAFRIA_TOKEN"
  4. Trabaja la cartera

    Lista las carteras, lee la cola, abre una empresa, apunta lo que pasó. Cada llamada pasa por la misma función que la pantalla, así que se topa con los mismos rechazos que tú.

    curl -sS https://puertafria.es/api/v1/funnels/$FUNNEL/queue \
      -H "Authorization: Bearer $PUERTAFRIA_TOKEN"

El servidor MCP

stdio, un proceso que arranca el host de tu agente, con los mismos tools de la tabla de abajo. No lleva lógica: cada tool es una petición a esas rutas, así que lo remoto es la API y no el shim, y a una clave de solo lectura se le ofrecen tools de solo lectura en vez de dejarla descubrir un 403 llamando.

Una línea en Claude Code, con una clave de tu cuenta. Cursor, Windsurf y Zed arrancan el mismo npx -y @puertafria/mcp desde sus ajustes de MCP, con la clave en PUERTAFRIA_TOKEN.

claude mcp add puertafria -e PUERTAFRIA_TOKEN=pf_... \
  -- npx -y @puertafria/mcp

Cada puerta, y lo que hay detrás

Las rutas, los nombres de los tools y los rechazos se quedan en inglés en los dos idiomas. Una ruta traducida es una ruta equivocada.

Lecturas

GET/api/v1/me
The account this key opens, its plan, and whether this key may change anything.tool: whoami
GET/api/v1/funnels
Every funnel this account holds. Start here: nothing else takes a funnel by name.tool: list_funnels
GET/api/v1/funnels/:id
One funnel: counts by stage, how many are due, its campaigns and provinces, and its tracking fields with their ids, kinds and options, and its saved views.tool: funnel
GET/api/v1/funnels/:id/queue
Who to call today. Takes ?stage= &campaign= &province= &q= &field= &value= (or &from= &to=) &sort= &dir= &page=. A company that asked to stop is never in it.tool: queue
GET/api/v1/companies/:id
One card: the row, its branches, its people, its history, its tracking values, its reminders and its email draft, { subject, body, updatedAt } or null.tool: company
GET/api/v1/funnels/:id/metrics
One funnel's numbers over ?days=7, 30 or 90. Pro and above; the free plan answers 403 PLAN_METRICS.tool: metrics
GET/api/v1/funnels/:id/export/:file
prospects.csv, contacts.csv or activities.csv. For curl and a pipe, never offered as a tool.sin tool, a propósito

Escrituras, y cada una necesita una clave que pueda escribir

PATCH/api/v1/funnels/:id
A funnel's new name, as { name }. BAD_NAME when blank or too long, NAME_TAKEN when another funnel has it.tool: rename_funnel
POST/api/v1/companies/:id/activities
What happened on a call. An outcome that leaves the company open needs nextActionAt; a losing one needs a note.tool: record_outcome
PATCH/api/v1/companies/:id/tracking
The funnel's own fields on one company, keyed by field id. A blank clears a value; a field left out is left alone; an unknown id is FIELD_GONE.tool: save_tracking
PATCH/api/v1/companies/:id/branches/:locationId/tracking
The funnel's branch fields on one branch of that company. The same rules; a branch of another company is BRANCH_GONE.tool: save_branch_tracking
PATCH/api/v1/companies/:id/contacts/:contactId/tracking
The funnel's contact fields on one contact of that company. The same rules; a contact of another company is CONTACT_GONE.tool: save_contact_tracking
PUT/api/v1/companies/:id/draft
The company's one email draft, as { subject, body }: at most 200 and 10,000 characters, TOO_LONG past that. An empty body clears it. Never sent by puertafria. SUPPRESSED on a company that asked to stop.tool: save_draft
POST/api/v1/companies/:id/reminders
A promise to come back to this company on a day. Pro and above.tool: add_reminder
PATCH/api/v1/reminders/:id
Tick a reminder off, put it back, or correct its day or note. One of those per call; what is left out stays.tool: update_reminder
PATCH/api/v1/companies/:id/branches/:locationId
One researched fact about one branch of this company. A blank string clears it.tool: edit_branch_fact
POST/api/v1/funnels/:id/activate
Move named companies into a campaign. Ids only, never a filter: read the queue first and send what you looked at. One write per company.tool: activate_cohort
POST/api/v1/funnels/:id/companies
One company typed in, for when there is no file. Bulk loading is the import screen, not this. A match for a company that asked not to be contacted is SUPPRESSED.tool: add_company

Lo que te va a rechazar

  • No borra nada. Ninguna ruta quita una empresa, una cartera, un campo o un recordatorio. Un agente que se enrede puede liarla de forma que la leas, nunca de forma que desaparezca.

  • Un no es para siempre. La empresa que pidió que no la llamaras sale de todas las colas, y el servidor se niega a registrar otro contacto lo pida quien lo pida.

  • Un resultado que deja la empresa abierta tiene que decir cuándo se retoma, y uno perdedor tiene que llevar nota. Las mismas reglas que obedece la pantalla.

  • 500 intentos de escritura por clave y día. Intentos, no aciertos: un bucle al que rechazan es justo el bucle que hay que parar. Activar una cohorte gasta uno por empresa. Las lecturas no gastan.

  • Una clave solo lee salvo que marcaras la casilla, y la revocas desde el mismo panel. Revocar no deshace nada de lo que escribió.

El archivo al que apuntar tu agente

Todo lo de esta página, más el sobre, las palabras de rechazo y las reglas que hay detrás, en una sola dirección en texto plano. Eso es lo que tiene que leer un agente, y es el contrato entero y no un resumen.

Leer /llms.txtVolver a la portada