API, MCP y agentes
Documentación para desarrolladores
Un agente puede enviar una elección, recibir una pregunta aclaratoria y obtener una recomendación razonada. No necesita cuenta ni claves de proveedores.
Conexión MCP
https://dilem.si/api/v1/mcpTransporte HTTP remoto, sin OAuth. El token de aplicación se pasa a las herramientas, no a la configuración del servidor. Prevé 110 segundos para una decisión.
Elige tu cliente. Integra el ejemplo en tu configuración existente sin reemplazarla. Recarga las herramientas MCP y comprueba que start_session, get_usage y decide estén disponibles.
Claude Code
claude mcp add --transport http dilem https://dilem.si/api/v1/mcpCodex
~/.codex/config.toml[mcp_servers.dilem]
url = "https://dilem.si/api/v1/mcp"
tool_timeout_sec = 110Cursor
.cursor/mcp.json{
"mcpServers": {
"dilem": {
"url": "https://dilem.si/api/v1/mcp"
}
}
}OpenCode
opencode.json{
"mcp": {
"dilem": {
"type": "remote",
"url": "https://dilem.si/api/v1/mcp",
"enabled": true,
"oauth": false
}
}
}Hermes Agent
hermes mcp add dilem --url https://dilem.si/api/v1/mcpMistral Vibe
~/.vibe/config.toml[[mcp_servers]]
name = "dilem"
transport = "streamable-http"
url = "https://dilem.si/api/v1/mcp"
tool_timeout_sec = 110
[mcp_servers.auth]
type = "static"
headers = {}OpenClaw
~/.openclaw/openclaw.json{
"mcp": {
"servers": {
"dilem": {
"url": "https://dilem.si/api/v1/mcp",
"transport": "streamable-http",
"enabled": true,
"connectionTimeoutMs": 10000,
"requestTimeoutMs": 110000
}
}
}
}Pi
~/.pi/agent/mcp.json{
"mcpServers": {
"dilem": {
"url": "https://dilem.si/api/v1/mcp",
"timeout": 110
}
}
}Referencia MCP
start_session
EscrituraCrear o renovar la identidad privada del cliente.
sessionstring | nullopcional · Por defecto null
Respuesta: Session
POST /api/v1/session
Entrada
Cabeceras
AuthorizationToken de sesión enviado como Bearer <session>.
No se requiere cuerpo de solicitud.
Respuesta
200 application/json
{
"session": "OPAQUE_SESSION_KEEP_PRIVATE",
"expires_in": 7776000
}sessionToken privado del cliente que se conserva para las llamadas siguientes.
expires_inDuración de la sesión en segundos.
Valor:
7776000
Errores y recuperación
403 · 408 · 409 · 413 · 422 · 429 · 503 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo de respuesta devuelta.
Valor:
"error"codeCódigo que consultar para gestionar el rechazo o fallo.
messageExplicación legible del rechazo o fallo.
retryableIndica si se puede considerar otro intento.
resets_atFecha y hora de la próxima renovación de créditos.
Fecha y hora ISO 8601
get_usage
LecturaLeer créditos, renovación y estado opcional del caso.
sessionstringobligatoriocase_idstring | nullopcional · Por defecto null
Respuesta: Usage
GET /api/v1/usage
Entrada
Cabeceras
AuthorizationToken de sesión enviado como Bearer <session>.
X-Dilem-Case-IDConserva este identificador en todos los turnos del mismo dilema.
Formato técnico
^[a-zA-Z0-9_-]{1,80}$
No se requiere cuerpo de solicitud.
Respuesta
200 application/json
{
"day": "2026-01-01",
"resets_at": "2026-01-02T00:00:00Z",
"collective": {
"completed": 42
},
"dilemmas": {
"used": 1,
"limit": 20,
"remaining": 19
},
"case": {
"id": "my-unique-dilemma-id",
"admitted": true,
"completed": false
},
"voice": {
"seconds_used": 0,
"seconds_reserved": 0,
"seconds_remaining": 1200,
"seconds_limit": 1200,
"max_seconds": 60
},
"budget": {
"daily_usd": 5,
"available": true
}
}dayDía UTC de los contadores.
Fecha ISO 8601
resets_atFecha y hora de la próxima renovación de créditos.
Fecha y hora ISO 8601
collectiveContador colectivo de dilemas completados.
Campos
completedNúmero de dilemas completados en el contador colectivo.
dilemmasCréditos de dilemas usados, disponibles y permitidos.
Campos
usedCréditos ya utilizados.
Mínimo: 0
limitLímite de créditos de la política activa.
Mínimo: 0
remainingCréditos todavía disponibles.
Mínimo: 0
caseEstado del dilema identificado por el Case-ID enviado.
Campos
idCase-ID solicitado, o null si no se proporcionó.
admittedIndica si el dilema ya fue admitido en la cuota.
completedIndica si una primera recomendación completó el dilema.
voiceDuraciones y límites de dictado en segundos.
Campos
seconds_usedSegundos de dictado ya consumidos.
seconds_reservedSegundos reservados temporalmente por una captura en curso.
seconds_remainingSegundos de dictado todavía disponibles.
seconds_limitLímite total de dictado en segundos.
max_secondsDuración máxima de una captura en segundos.
budgetPresupuesto financiero compartido y disponibilidad del servicio.
Campos
daily_usdLímite financiero diario del servicio en dólares estadounidenses.
availableIndica si el presupuesto aún permite cálculos.
Errores y recuperación
403 · 408 · 409 · 413 · 422 · 429 · 503 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo de respuesta devuelta.
Valor:
"error"codeCódigo que consultar para gestionar el rechazo o fallo.
messageExplicación legible del rechazo o fallo.
retryableIndica si se puede considerar otro intento.
resets_atFecha y hora de la próxima renovación de créditos.
Fecha y hora ISO 8601
decide
Cálculo IAEnviar un turno: pregunta, recomendación o error.
sessionstringobligatoriocase_idstringobligatoriotextstringobligatoriolanguage"fr" | "en" | "it" | "de" | "es" | "pt"opcional · Por defecto "fr"refinementsstring[] | nullopcional · Por defecto nullforce_decisionbooleanopcional · Por defecto falseclarification_countintegeropcional · Por defecto 0clarification_version2opcional · Por defecto 2
Respuesta: DecisionResponse
POST /api/v1/decide
Entrada
Cabeceras
AuthorizationToken de sesión enviado como Bearer <session>.
X-Dilem-Case-IDConserva este identificador en todos los turnos del mismo dilema.
Formato técnico
^[a-zA-Z0-9_-]{1,80}$
Cuerpo application/json
{
"text": "Train or bus for my commute?",
"language": "en",
"refinements": [],
"clarification_version": 2
}textElección inicial conservada en cada turno.
De 1 a 6 000 caracteres
languageIdioma de la interfaz. Las respuestas siguen las palabras del usuario.
Valores permitidos:
"fr","en","it","de","es","pt"refinementsPreguntas y respuestas reales, en orden cronológico.
40 elementos como máximo · 6 000 caracteres como máximo por elemento · Por defecto:
[]force_decisionSolo cuando el usuario pide recomendar sin más preguntas.
Por defecto:
falseclarification_countNúmero de respuestas a aclaraciones.
De 0 a 20 · Por defecto:
0clarification_versionVersión del contrato, siempre 2.
Por defecto:
2· Valor:2
{
"session": "<session from start_session>",
"case_id": "my-unique-dilemma-id",
"text": "Train or car for a weekend trip?",
"language": "en"
}Respuesta
200 application/json
Pregunta de aclaración Clarification
Una pregunta o un aviso según purpose. insufficient_evidence indica que no hay base suficiente para una clasificación defendible; no reintentes sin nueva información del usuario.
{
"type": "clarification",
"question": "How far is your commute?",
"choices": [],
"format": "number",
"unit": "km",
"summary": "Train or bus"
}typeTipo de respuesta devuelta.
Valor:
"clarification"questionPregunta que transmitir al usuario antes de continuar.
choicesRespuestas propuestas, si la pregunta las incluye.
6 elementos como máximo
formatFormato de respuesta esperado por la pregunta.
Valores permitidos:
"single","multiple","text","number"unitUnidad de una respuesta numérica, o null.
summaryResumen del dilema.
purposePropósito de la pregunta o aviso de alcance.
Valores permitidos:
"decision_scope","scope_notice","insufficient_evidence"metricsMétricas técnicas del procesamiento.
Recomendación Result
Recomendación, opciones, motivos y fuentes. Los pesos son preferencias relativas, no probabilidades de éxito. result_id puede faltar.
{
"type": "result",
"summary": "Train or bus for my commute?",
"options": [
{
"id": "train",
"label": "Take the train",
"description": "Use the direct rail connection.",
"probability": 0.7
},
{
"id": "bus",
"label": "Take the bus",
"description": "Use the bus stop near home.",
"probability": 0.3
}
],
"selected": "train",
"sources": [],
"result_id": "0123456789abcdef0123456789abcdef"
}typeTipo de respuesta devuelta.
Valor:
"result"summaryResumen del dilema.
contextContexto utilizado para la recomendación.
assumptionsSupuestos utilizados para comparar las opciones.
criteriaCriterios utilizados para comparar las opciones.
optionsOpciones comparadas e información asociada.
De 2 a 8 elementos
selectedIdentificador de la opción recomendada.
sourcesFuentes devueltas con la recomendación.
cautionAdvertencia específica, o null.
timingsDuraciones de las etapas del procesamiento.
modelsInformación sobre los modelos de este turno.
metricsMétricas técnicas del procesamiento.
result_idIdentificador del resultado perteneciente a este cliente.
Error Error
Rechazo o error de la ejecución. Revisa type incluso tras HTTP 200; MCP también indica isError.
{
"type": "error",
"code": "case_completed"
}typeTipo de respuesta devuelta.
Valor:
"error"codeCódigo que consultar para gestionar el rechazo o fallo.
messageExplicación legible del rechazo o fallo.
retryableIndica si se puede considerar otro intento.
resets_atFecha y hora de la próxima renovación de créditos.
Fecha y hora ISO 8601
Errores y recuperación
403 · 408 · 409 · 413 · 422 · 429 · 503 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo de respuesta devuelta.
Valor:
"error"codeCódigo que consultar para gestionar el rechazo o fallo.
messageExplicación legible del rechazo o fallo.
retryableIndica si se puede considerar otro intento.
resets_atFecha y hora de la próxima renovación de créditos.
Fecha y hora ISO 8601
export_result_card
LecturaCrear una tarjeta del resultado recibido, sin IA ni almacenamiento de imagen.
sessionstringobligatorioresultCardResultobligatoriolanguage"fr" | "en" | "it" | "de" | "es" | "pt"opcional · Por defecto "fr"theme"light" | "dark"opcional · Por defecto "light"
Respuesta: image/png
POST /api/v1/result-card
Entrada
Cabeceras
AuthorizationToken de sesión enviado como Bearer <session>.
Cuerpo application/json
{
"result": {
"summary": "Train or bus for my commute?",
"selected": "train",
"options": [
{
"id": "train",
"label": "Take the train",
"description": "Use the direct rail connection.",
"probability": 0.7
},
{
"id": "bus",
"label": "Take the bus",
"description": "Use the bus stop near home.",
"probability": 0.3
}
]
},
"language": "en",
"theme": "light"
}resultResultado ya recibido que se envía para generar el PNG.
Campos
summaryResumen del dilema.
De 1 a 6 000 caracteres
selectedIdentificador de la opción recomendada.
32 caracteres como máximo
optionsOpciones comparadas e información asociada.
De 2 a 8 elementos
Campos
idIdentificador único de esta opción en el resultado.
Formato técnico
^[a-z][a-z0-9_]{0,31}$labelEtiqueta de la opción en la tarjeta.
De 1 a 120 caracteres
descriptionDescripción breve mostrada con la opción.
240 caracteres como máximo · Por defecto:
""probabilityPeso de preferencia, no probabilidad de éxito.
De 0 a 1
languageIdioma de presentación.
Valores permitidos:
"fr","en","it","de","es","pt"· Por defecto:"fr"themeTema visual de la tarjeta PNG.
Valores permitidos:
"light","dark"· Por defecto:"light"
Respuesta
200 image/png
Archivo PNG privado adjunto. El nombre se devuelve en Content-Disposition.
Errores y recuperación
403 · 408 · 409 · 413 · 422 · 429 · 503 · 415 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo de respuesta devuelta.
Valor:
"error"codeCódigo que consultar para gestionar el rechazo o fallo.
messageExplicación legible del rechazo o fallo.
retryableIndica si se puede considerar otro intento.
resets_atFecha y hora de la próxima renovación de créditos.
Fecha y hora ISO 8601
get_result_feedback
LecturaLeer el voto del cliente propietario.
sessionstringobligatorioresult_idstringobligatorio
Respuesta: Feedback
GET /api/v1/feedback/{result_id}
Entrada
Cabeceras
AuthorizationToken de sesión enviado como Bearer <session>.
Parámetros de ruta
result_idIdentificador del resultado perteneciente a este cliente.
Formato técnico
^[0-9a-f]{32}$
No se requiere cuerpo de solicitud.
Respuesta
200 application/json
{
"result_id": "0123456789abcdef0123456789abcdef",
"helpful": false,
"reason": "missing_constraint"
}result_idIdentificador del resultado perteneciente a este cliente.
Formato técnico
^[0-9a-f]{32}$helpfulValoración registrada, o null si no se ha votado.
reasonMotivo de la valoración negativa, o null.
Valores permitidos:
null,"misunderstood","missing_constraint","too_many_questions","too_vague"
Errores y recuperación
403 · 408 · 409 · 413 · 422 · 429 · 503 · 404 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo de respuesta devuelta.
Valor:
"error"codeCódigo que consultar para gestionar el rechazo o fallo.
messageExplicación legible del rechazo o fallo.
retryableIndica si se puede considerar otro intento.
resets_atFecha y hora de la próxima renovación de créditos.
Fecha y hora ISO 8601
set_result_feedback
EscrituraRegistrar el voto explícito del usuario, sin deducir su satisfacción.
sessionstringobligatorioresult_idstringobligatoriohelpfulbooleanobligatorioreason"misunderstood" | "missing_constraint" | "too_many_questions" | "too_vague" | nullopcional · Por defecto null
Respuesta: Feedback
POST /api/v1/feedback
Entrada
Cabeceras
AuthorizationToken de sesión enviado como Bearer <session>.
Cuerpo application/json
{
"result_id": "0123456789abcdef0123456789abcdef",
"helpful": false,
"reason": "missing_constraint"
}result_idIdentificador del resultado perteneciente a este cliente.
Formato técnico
^[0-9a-f]{32}$helpfulValoración explícita del usuario sobre la respuesta.
reasonMotivo de la valoración negativa, o null.
Valores permitidos:
null,"misunderstood","missing_constraint","too_many_questions","too_vague"
Respuesta
200 application/json
{
"result_id": "0123456789abcdef0123456789abcdef",
"helpful": false,
"reason": "missing_constraint"
}result_idIdentificador del resultado perteneciente a este cliente.
Formato técnico
^[0-9a-f]{32}$helpfulValoración registrada, o null si no se ha votado.
reasonMotivo de la valoración negativa, o null.
Valores permitidos:
null,"misunderstood","missing_constraint","too_many_questions","too_vague"
Errores y recuperación
403 · 408 · 409 · 413 · 422 · 429 · 503 · 415 · 404 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo de respuesta devuelta.
Valor:
"error"codeCódigo que consultar para gestionar el rechazo o fallo.
messageExplicación legible del rechazo o fallo.
retryableIndica si se puede considerar otro intento.
resets_atFecha y hora de la próxima renovación de créditos.
Fecha y hora ISO 8601
send_user_feedback
EscrituraEnviar un mensaje o informe expresamente autorizado.
sessionstringobligatoriorequest_idstringobligatoriomessagestringobligatoriolanguage"fr" | "en" | "it" | "de" | "es" | "pt"opcional · Por defecto "fr"kind"general" | "response"opcional · Por defecto "general"emailstringopcional · Por defecto ""responseobject | nullopcional · Por defecto null
Respuesta: FeedbackAck
POST /api/v1/user-feedback
Entrada
Cabeceras
AuthorizationToken de sesión enviado como Bearer <session>.
Cuerpo application/json
{
"request_id": "0123456789abcdef0123456789abcdef",
"kind": "general",
"message": "Please explain how the recommendation uses my constraints.",
"email": "",
"language": "en",
"source": "agent",
"version": "unknown",
"screen": "other",
"response": null
}request_idIdentificador que se conserva para deduplicar el mismo envío.
Formato técnico
^[0-9a-f]{32}$kindMensaje libre o aviso sobre una respuesta.
Valores permitidos:
"general","response"messageComentario proporcionado expresamente por el usuario.
De 5 a 4 000 caracteres
emailDirección de contacto, o cadena vacía.
254 caracteres como máximo
languageIdioma de presentación.
Valores permitidos:
"fr","en","it","de","es","pt"sourcePunto de acceso desde el que se originó el mensaje.
Valores permitidos:
"agent","menu","help","response"versionSHA de la aplicación, o unknown.
Formato técnico
^[0-9a-f]{40}$|^unknown$screenPantalla desde la que se envía el mensaje.
Valores permitidos:
"home","clarification","result","other"responseRespuesta exacta adjunta al aviso, o null.
Campos
nullnullRespuesta adjunta
ReportedResponsekindTipo de respuesta adjunta al aviso.
Valores permitidos:
"clarification","recommendation"textTexto exacto de la respuesta adjunta.
De 1 a 12 000 caracteres
referenceReferencia de la respuesta correspondiente.
Formato técnico
^[A-Za-z0-9._:-]{1,80}$
Respuesta
200 application/json
{
"ok": true
}okConfirma que se registró el mensaje.
Valor:
true
Errores y recuperación
403 · 408 · 409 · 413 · 422 · 429 · 503 · 415 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo de respuesta devuelta.
Valor:
"error"codeCódigo que consultar para gestionar el rechazo o fallo.
messageExplicación legible del rechazo o fallo.
retryableIndica si se puede considerar otro intento.
resets_atFecha y hora de la próxima renovación de créditos.
Fecha y hora ISO 8601
Inicio rápido
Requiere curl y Python 3. Crea la identidad una vez, guarda el token en privado y recupéralo en visitas posteriores.
Crea una sesión y conserva el valor session. Úsalo como Authorization: Bearer *** en las siguientes llamadas. Dura 90 días; renuévalo con la misma llamada y el mismo token.
DILEM_SESSION=$(curl --fail-with-body --silent --show-error --max-time 15 \
https://dilem.si/api/v1/session \
-H 'Content-Type: application/json' -d '{}' | \
python3 -c 'import json, sys; print(json.load(sys.stdin)["session"])')curl --fail-with-body --max-time 15 https://dilem.si/api/v1/usage \
-H "Authorization: Bearer ${DILEM_SESSION:?}" \
-H 'X-Dilem-Case-ID: my-unique-dilemma-id'Elige un Case-ID para tu dilema y mantenlo durante la conversación. Recibirás una pregunta o una recomendación. Para responder, añade la pregunta y tu respuesta a refinements e incrementa clarification_count en 1.
curl --fail-with-body --max-time 110 --output result.json https://dilem.si/api/v1/decide \
-H "Authorization: Bearer ${DILEM_SESSION:?}" \
-H 'X-Dilem-Case-ID: my-unique-dilemma-id' \
-H 'Content-Type: application/json' \
-d '{"text":"Train or car for a weekend trip?","language":"en","refinements":[],"clarification_count":0,"clarification_version":2}'Sesión y autenticación
Sin token, start_session crea una identidad. Con session renueva la misma identidad por 90 días. Un token inválido o caducado se rechaza, nunca se sustituye en silencio. REST y MCP comparten el token; no leen las cookies del navegador.
Un Case-ID único por dilema hasta el resultado: de 1 a 80 caracteres entre a-z, A-Z, 0-9, _ y -. Identifica el caso, pero no hace idempotente el cálculo.
Ciclo de un dilema
- Envía la elección inicial con un nuevo Case-ID.
- Con clarification, revisa purpose: insufficient_evidence es un aviso que mostrar, no una pregunta ni una invitación a inventar una clasificación. En otro caso, pregunta y espera la respuesta real; añade pregunta + respuesta a refinements e incrementa clarification_count.
- Con result, conserva el JSON: el caso ha terminado. Usa otro Case-ID para un nuevo cálculo.
- Con error, revisa code y retryable. No repitas automáticamente un cálculo de resultado ambiguo.
El agente te transmite las preguntas y espera tus respuestas, sin inventar información que falte. Puedes pedirle una recomendación sin más preguntas.
Parámetros de decisión
textobligatorioElección inicial conservada en cada turno.
string · 1–6000languageobligatorioIdioma de la interfaz. Las respuestas siguen las palabras del usuario.
fr | en | it | de | es | ptrefinementsopcionalPreguntas y respuestas reales, en orden cronológico.
array · ≤40 × 6000clarification_countopcionalNúmero de respuestas a aclaraciones.
integer · 0–20clarification_versionopcionalVersión del contrato, siempre 2.
2force_decisionopcionalSolo cuando el usuario pide recomendar sin más preguntas.
boolean
Texto + precisiones: 24 000 caracteres en total. Cuerpo HTTP: 300 000 bytes en 10 segundos; una carga del proveedor demasiado grande puede rechazarse antes del consumo.
Respuestas
Pregunta de aclaración type: clarification
Una pregunta o un aviso según purpose. insufficient_evidence indica que no hay base suficiente para una clasificación defendible; no reintentes sin nueva información del usuario.
type, question, choices, format, unit, summary, purpose, metrics
Recomendación type: result
Recomendación, opciones, motivos y fuentes. Los pesos son preferencias relativas, no probabilidades de éxito. result_id puede faltar.
type, summary, context, assumptions, criteria, options, selected, sources, caution, timings, models, metrics, result_id
Error type: error
Rechazo o error de la ejecución. Revisa type incluso tras HTTP 200; MCP también indica isError.
type, code, message, retryable, resets_at
{
"type": "clarification",
"question": "How far is your commute?",
"choices": [],
"format": "number",
"unit": "km",
"summary": "Train or bus"
}Resultados y comentarios
Exportar el resultado como PNG
Pasa el resultado recibido en result, con language y theme (light o dark). PNG privado, nombre en Content-Disposition, Cache-Control: no-store. Sin crédito ni publicación. MCP devuelve una imagen nativa y metadatos del archivo.
python3 -c 'import json, sys; print(json.dumps({"result": json.load(sys.stdin), "language": "fr", "theme": "light"}))' < result.json > card-input.jsoncurl --fail-with-body --max-time 15 https://dilem.si/api/v1/result-card \
-H "Authorization: Bearer ${DILEM_SESSION:?}" \
-H "Content-Type: application/json" \
--data-binary @card-input.json --output dilem.pngLeer o registrar un voto
result_id pertenece a esta identidad. helpful es booleano; reason es opcional solo para un voto negativo: misunderstood, missing_constraint, too_many_questions o too_vague. Resultados ausentes, caducados o ajenos devuelven el mismo 404.
GET /api/v1/feedback/{result_id}{"result_id": "<result_id from your result>", "helpful": false, "reason": "missing_constraint"}curl --fail-with-body --max-time 15 https://dilem.si/api/v1/feedback \
-H "Authorization: Bearer ${DILEM_SESSION:?}" \
-H "Content-Type: application/json" \
--data-binary @feedback-input.jsonEnviar un mensaje o informar de una respuesta
request_id: 32 caracteres hexadecimales en minúscula. message: al menos 5 caracteres sin espacios, máximo 4 000. kind=general para mensajes; kind=response para informes con la respuesta exacta adjunta. Correo opcional. Conserva ID y contenido; sin repetición automática tras un fallo ambiguo.
{
"request_id": "<32 lowercase hex characters>",
"kind": "general",
"message": "<user-authorized message>",
"email": "",
"language": "fr",
"source": "agent",
"version": "unknown",
"screen": "other",
"response": null
}curl --fail-with-body --max-time 15 https://dilem.si/api/v1/user-feedback \
-H "Authorization: Bearer ${DILEM_SESSION:?}" \
-H "Content-Type: application/json" \
--data-binary @user-feedback-input.jsonCréditos
Un crédito cubre el dilema hasta su primera recomendación, incluidas las aclaraciones. Cualquier cálculo posterior a esa recomendación usa otro crédito.
Usa get_usage por MCP o GET /api/v1/usage por REST para consultar los créditos restantes y cuándo se renuevan.
Los límites vienen de la política activa, no de valores fijos en esta guía. PNG y comentarios no consumen créditos de dilema, pero mantienen límites técnicos y antiabuso.
Errores y recuperación
403: sesión ausente, inválida o caducada, origen rechazado o cookies prohibidas. 408/413/422: tiempo, tamaño o entrada inválida. 409: caso terminado. 429: cuota, presupuesto o capacidad. 503: servicio no disponible. Comprueba también type: la ejecución puede fallar tras la admisión. No repitas automáticamente un cálculo tras un fallo ambiguo; Case-ID no es una clave de idempotencia.
Una desconexión puede dejar trabajo consumido. Consultar el uso no reconstruye una respuesta perdida.
Agentes en el navegador
En un navegador compatible, WebMCP permite al agente usar la página abierta con tu historial y tus créditos. Si no, usa MCP remoto o la API. El acceso remoto admite texto; el dictado sigue disponible en la aplicación.
Lee primero get_dilemma. submit_dilemma envía una elección o respuesta; recommend_dilemma pide recomendar sin otra pregunta. Las acciones usan el caso visible, no el token remoto.
WebMCP añade exportación local con vista previa, votos y avisos, además de list_saved_dilemmas y get_saved_dilemma para el historial de este navegador. La URL de imagen caduca al cerrar la vista previa. El historial y las cookies no se comparten con MCP remoto.
Referencia técnica
Los esquemas OpenAPI describen solicitudes y respuestas completas. La guía Markdown sirve de entrada a los agentes; catálogo y Server Card permiten descubrir MCP.
El servicio conserva los intercambios de texto durante 30 días. El historial del navegador permanece en tu dispositivo y no se comparte con el agente remoto.
Privacidad y proveedores