Docs

Inicio rápido. Conecta un agente, envía una señal.

Nada de acrobacias en el portal. Una clave, tres herramientas y la superficie de API más pequeña que permite a un agente recordar.

Inicio rápido

Ediccio es un servidor MCP remoto. No hay nada que instalar: el host de tu agente apunta a tu endpoint con un token de portador y llama a tres herramientas del plano de datos. Las señales entran como texto plano; los perfiles se construyen en segundo plano.

1. Obtén tu credencial

Tu panel en app.ediccio.ai guarda tus datos de conexión y tu credencial del plano de datos (un ID de cliente y un secreto que solo se muestra una vez). Canjéala por un token de portador:

# endpoint + credential: dashboard → connection details
TOKEN=$(curl -s "$EDICCIO_TOKEN_URL" \
  -u "$CLIENT_ID:$CLIENT_SECRET" \
  -d "grant_type=client_credentials" | jq -r .access_token)

2. Conecta tu agente

Añade esto al mcp.json de cualquier host compatible con MCP y reinicia. Tu agente ya puede llamar a las tres herramientas del plano de datos: ediccio___write, ediccio___read, ediccio___search. (Las herramientas de administración aparecen en el mismo listado, pero rechazan una clave de agente.) Los tokens son de corta duración: repite el canje cuando recibas un 401.

{
  "mcpServers": {
    "ediccio": {
      "type": "http",
      "url": "https://mcp.eu.ediccio.ai/mcp",
      "headers": { "Authorization": "Bearer <your token>" }
    }
  }
}

3. Envía una señal

Pídele a tu agente que registre lo que ha dicho un cliente, o llama tú mismo a la herramienta. Una entrada en lenguaje natural, identificada por el end_user_id que ya usas para ese cliente:

# via your agent, or one MCP tools/call by hand
write(
  end_user_id = "pat@acme.com",
  source      = "email",
  text        = "we keep reinventing memory for every agent",
)

# → { "event_id": "0197f3a8-…", "accepted_at": "…" }
# the accept is immediate; extraction runs in the background

4. Recupérala

Después, pregúntale a tu agente por el cliente:

> What does Pat at Acme care about?

Calling tool ediccio___read(end_user_id="pat@acme.com")
✓ profile

Pat is evaluating managed customer-profile layers.
Top pain: re-implementing memory per agent...

Los perfiles se construyen de forma asíncrona: la lectura de un sujeto completamente nuevo devuelve profile: null hasta que llega la primera proyección. Es un estado normal, no un error.

Referencia de la API

Tres herramientas en el plano de datos. Cada valor que guarda un perfil lleva una puntuación de confianza y apunta al evento del que procede.

write

TOOLediccio___write · scope: ediccio/mcp.write

Registra una señal asociada a un end_user_id. La extracción y la proyección se ejecutan de forma asíncrona.

write(
  end_user_id     = "pat@acme.com",   # required · your key, never resolved by us
  text            = "…",              # required · the conversation text
  source          = "zendesk",        # optional · defaults to "mcp"
  metadata        = {…},              # optional
  idempotency_key = "…",              # optional · see below
)
# → { "event_id": "0197f3a8-…", "accepted_at": "…" }

Los agentes reintentan; el perfil lo cuenta una sola vez. La misma idempotency_key en un plazo de 24 horas devuelve el event_id original y no escribe nada nuevo.

read

TOOLediccio___read · scope: ediccio/mcp.read

Recupera el perfil. dimensions acota la respuesta a un subconjunto (intent, pain, sentiment, preferences, traditional, además de cualquier custom.<name> o journey.<name> que defina tu capa semántica).

read(
  end_user_id      = "pat@acme.com",
  dimensions       = ["intent", "pain"],  # optional
  include_evidence = true,                # optional
)
# → { end_user_id, profile: { intent: [{value, confidence,
#      observed_at, provenance, evidence_event_id}], pain: […], … },
#      schema_version, updated_at, last_event_id }

En la lista de un recorrido, la primera entrada es la etapa actual del cliente. last_event_id es la marca de agua de frescura.

TOOLediccio___search · scope: ediccio/mcp.read

Búsqueda en lenguaje natural entre todos los perfiles de tu tenant. La recencia va en un filtro, no en el texto de la consulta. No hay umbral de relevancia: se devuelven los perfiles más cercanos aunque ninguno se parezca a la consulta, así que revisa el relevance_score antes de dar uno por bueno. Un 0.5 equivale a ninguna similitud, y un texto sin relación suele quedar apenas por encima.

search(
  query               = "anyone close to cancelling",
  top_k               = 10,     # max 50
  dimensions          = ["pain", "sentiment"],  # optional
  min_confidence      = 0.5,    # optional
  recency_window_days = 30,     # optional
)
# → { matches: [{ end_user_id, relevance_score,
#      matched_observations: [{dimension, value, confidence, provenance}],
#      updated_at }] }

Capa semántica

Todo lo anterior es el plano de datos. Esta sección y la siguiente son la superficie de administración: una segunda credencial (ámbito ediccio/semantics.admin) que puede cambiar lo que significan los perfiles, pero no puede leerlos.

Las dimensiones base son cinco. Las demás son tuyas: define dimensiones custom.<name> y etapas journey.<name> en lenguaje natural, y el extractor las rellena en cada perfil. Cuatro herramientas:

  • get_semantic_layer devuelve la versión activa y las propuestas abiertas.
  • propose_semantic_layer recibe tus refinamientos, dimensiones personalizadas y recorridos, y devuelve un diff y un token de confirmación. Todavía no cambia nada.
  • test_semantic_layer ejecuta una extracción real en modo de prueba sobre tu texto, para que veas exactamente qué guardaría una versión propuesta antes de que guarde nada.
  • confirm_semantic_layer activa la versión, sin efecto retroactivo. Los cambios de esquema se despliegan igual que el código: diff, ejecución de prueba, confirmación.

Reprocesar el historial

Redefine una dimensión hoy y todo tu historial se adapta a ella: el reprocesado vuelve a proyectar cada evento guardado según la capa semántica activa. Te dice cuántos eventos y sujetos abarca antes de que se ejecute nada, cuenta sus propias llamadas de extracción (una por cada evento histórico no vacío, reintentos incluidos) y nunca arranca por sí solo.

  • request_replay devuelve la estimación: events_total, subjects_total y un token de confirmación vinculado a la versión activa de la capa.
  • confirm_replay lo deja en cola para la siguiente pasada del worker. El worker reconstruye un sujeto por transacción, así que una llamada concurrente a read ve la proyección antigua o la nueva, nunca mitad y mitad.
  • get_replay informa del progreso y de los recuentos: eventos procesados, sujetos procesados, llamadas de extracción.

Seguridad y datos

Finalidad prevista. Ediccio construye un perfil profundo de los propios clientes, clientes potenciales y usuarios del producto de una empresa a partir de las conversaciones que esa empresa ya mantiene con ellos, para que los agentes de IA de su producto (asistente de ventas, copiloto de soporte, bot de onboarding de clientes, agente de éxito del cliente, agente de marketing que escribe a clientes que pueden responderle) puedan personalizar esas conversaciones. No está destinado a utilizarse en sistemas que evalúen a personas a efectos de crédito, seguros o prestaciones públicas, de triaje de emergencias, de contratación de personal o en el trabajo, o de educación o formación, ni como fuente de datos de entrada de dichos sistemas ni como parte de ellos, ni en los ámbitos de la garantía del cumplimiento del Derecho, la migración, la justicia o las elecciones. Tampoco está destinado a elaborar perfiles de los propios trabajadores, candidatos a un empleo, estudiantes, personas en formación o pacientes de una empresa. Una definición de dimensión, campo o recorrido que mencione una categoría especial de datos personales o antecedentes penales (arts. 9 y 10 del RGPD) se rechaza antes de que surta efecto.

  • El aislamiento entre tenants no es un filtro de filas. Los perfiles de cada tenant están en su propia base de datos. Ninguna herramienta recibe un parámetro de tenant: tu tenant se obtiene de tu token verificado, nunca de nada que envíes.
  • Credenciales particionadas por ámbito. La clave que tienen tus agentes puede escribir señales y leer perfiles; no puede tocar el esquema. La clave de administración puede cambiar el esquema; no puede leer perfiles. Un agente víctima de una inyección de prompts sigue siendo un grabador de datos, nunca un administrador.
  • Procedencia en cada dato. Cada observación lleva su puntuación de confianza, su marca de tiempo y el evento del que procede. Si no puede mostrar su evidencia, no se guarda nunca.
  • Supresión y exportación a petición. La supresión elimina físicamente al sujeto de la base de datos activa con un único borrado en cascada, mientras la solicitud sigue abierta; la exportación llega del mismo modo, como un paquete completo.
  • Rotación de claves sin tiempo de inactividad. Rótalas desde el panel; las credenciales antiguas y las nuevas conviven durante siete días. El nuevo secreto se muestra una sola vez y nunca más se puede recuperar desde el panel.
  • Residencia de datos en la UE por defecto. El almacenamiento, el procesamiento y la terminación TLS de los endpoints de la API permanecen todos en la UE; los modelos y proveedores que hay detrás del servicio se publican en la página de confianza y seguridad.

Planes y límites

Para los precios solo cuenta una cosa: las señales, las entradas en lenguaje natural que le das al extractor. Las lecturas nunca cuentan, y el número de perfiles que guardes tampoco. Estos son los precios que entrarán en vigor cuando empiece la facturación. Durante el acceso anticipado no se contabiliza nada ni se aplica ningún límite de plan; el único techo es una salvaguarda de concurrencia de toda la plataforma contra el tráfico desbocado, no un tope por plan. Los precios no incluyen el IVA ni otros impuestos aplicables.

  • Free. $0 para siempre. 5.000 señales / mes.
  • Team. $349 / mes. Incluye 250.000 señales / mes · luego $0,0015 cada una.
  • Scale. $1.499 / mes. Incluye 1,5 M de señales / mes · luego $0,0011 cada una.
  • Enterprise. Próximamente. Volumen a medida · anual · habla con nosotros.

Todos los planes incluyen el mismo producto: las mismas herramientas, las mismas credenciales particionadas por ámbito, el mismo aislamiento, la misma residencia de datos. Nada de lo que hay en esta página depende del plan.

Errores

Los errores de las herramientas se ajustan a JSON-RPC: un code, un message y un identificador con nombre en data.identifier que puedes comparar en tu código. Dos cosas que no son errores: un sujeto que aún no tiene perfil (read devuelve profile: null) y un reintento de escritura (la misma idempotency_key devuelve el event_id original).

{
  "code": -32602,
  "message": "text must be non-empty",
  "data": { "identifier": "validation_error" }
}

# a token without the tool's scope:
#   -32001 · data.identifier = mcp_write_scope_required

Para soporte, indica el event_id que devolvió la escritura.

Esa es toda la superficie. Empieza con una señal.