Tema
Catálogo de tools
42 en total, agrupadas por dominio. Todas devuelven JSON.
Para conectar un cliente, ver MCP Server y Conectar un cliente.
Qué ve cada conexión lo decide lo que concediste al autorizarla. Las tools de uso —buscar en un RAG, ver un agente y leer sus conversaciones, ejecutar una inferencia, y los listados de cada uno— entran con solo conceder esa categoría, y dentro de ella solo llegan a los recursos concedidos (los listados filtran; el acceso directo a otro da 403, o 404 en las de agentes). Las que escriben un agente (su prompt, sus mensajes, sus áreas) solo existen si marcaste Permitir cambios al autorizar y administras alguno de los agentes que concediste, y cambian lo mismo que tú en el panel: en uno que solo ves responden 403 con manage_required. Las de administración (vincular tools, file sources, seguridad) solo existen si además eres administrador. Una tool que no concediste no aparece en el catálogo del cliente.
Una conexión con un access token en vez de OAuth tiene solo las de uso, las de los recursos de ese token: list_rags, search_rag, list_rag_files, list_inferences, run_inference y list_agents. Ahí list_agents va sin argumentos ni paginación (un array, no { data, total, … }) y trae de cada agente su id, nombre, identifier y los nombres de sus tools, sin el prompt.
RAG
| Tool | Argumentos | Qué hace |
|---|---|---|
list_rags | — | Los RAGs accesibles: id, nombre, identifier, estado, ficheros totales y procesados, número de vectores y la file source de la que se alimentan |
search_rag | identifier, semantic_search[], exact_phrase, top_k, use_reranking, candidate_multiplier, similarity_threshold, search_mode, include_duplicates, use_all_files, selected_files[], selected_folders[] | Búsqueda en los documentos indexados —por significado, por palabras (BM25) o ambas, según el RAG—: devuelve los N fragmentos más relevantes con su score, y reranking si el RAG tiene reranker. similarity_threshold no aplica en un RAG solo BM25. search_mode (auto/bm25/semantic/hybrid) es una orden salvo auto: si el RAG no puede cumplirla, la búsqueda falla con un error que lo explica. Con exact_phrase (en vez de semantic_search) devuelve los fragmentos que contienen esa frase palabra por palabra, y exactPhrase.exhaustive dice si «no está» es seguro — ver Comprobar si una frase aparece. include_duplicates no cuenta con exact_phrase: la frase exacta mira siempre los duplicados |
list_rag_files | identifier, page, limit | Los ficheros indexados, ordenados por ruta, con estado, tamaño, tipo, error de indexación si lo hubo y textQuality (caracteres ilegibles o mal codificados en el texto extraído: esas palabras no se encuentran al buscar) |
Agentes
| Tool | Argumentos | Qué hace |
|---|---|---|
list_agents | page, limit | Los agentes: id, nombre, identifier, modelo, tools vinculadas, si identifican a su usuario (auth) y número de conversaciones |
get_agent | id | Detalle de uno: system prompt, secciones de prompt, modelo, tools vinculadas (las que solo existen para un usuario identificado, en endUserToolInstanceIds) y número de conversaciones. auth dice si identifica a su usuario (mode) y con qué emisor: nombre, audiencia, iss y claves por kid, algoritmo y huella, nunca el secreto. El modo y el emisor se cambian en el panel, no desde el MCP. Las áreas de conocimiento van aparte, con list_agent_knowledge_areas |
list_agent_conversations | agent_id, channel, since, until, page, limit | Los hilos del agente, con filtro por canal y rango de fechas; cada fila trae messageCount, extracto, si fue bloqueado y, en las de un usuario identificado con JWT, endUser (su sub y el emisor). Canales con conversaciones reales: widget, js_sdk y demo (ver Canales) |
get_agent_conversation | agent_id, thread_id, include_tool_results | Una conversación entera: los mensajes con sus horas, las tools que usó y lo que bloqueó la seguridad; con un usuario identificado, endUserClaims, lo que su emisor guarda de su token. De cada tool, el nombre, los argumentos y el tamaño de lo que devolvió (resultChars); lo devuelto en sí, solo con include_tool_results: true |
list_agent_knowledge_areas | agent_id | Las áreas de conocimiento del agente |
list_agent_messages | agent_id | Los mensajes fijos del agente (bloqueo de seguridad, límites, error del modelo, fin de conversación…), con el de la plataforma, el propio si lo tiene y el que se usa |
Con Permitir cambios:
| Tool | Argumentos | Qué hace |
|---|---|---|
update_agent_prompt | id, system_prompt, prompt_mode, prompt_sections | Cambia el system prompt — en modo simple por texto, en advanced por secciones (prompt_sections es un objeto con identity, tone, dos, donts y responseStyle) |
update_agent_auto_message | id, enabled, message, language, translations | Cambia el mensaje de bienvenida (el que manda al abrir una conversación): si se usa, el texto por defecto, su idioma (language, un código como es, o null) y sus versiones en otros idiomas. translations va por código ({ "eu": "Kaixo!" }) y se suma a las que ya tiene el agente: solo cambian los idiomas que pases, y "" quita uno |
set_agent_message | agent_id, platform_message_id, message | Pone al agente su propio texto para uno de sus mensajes fijos |
reset_agent_message | agent_id, platform_message_id | Vuelve al texto de la plataforma |
add_agent_knowledge_area | agent_id, excerpt, content, active | Añade un área nueva |
update_agent_knowledge_area | id, excerpt, content, active | Cambia un área: su resumen, su contenido o si está activa |
delete_agent_knowledge_area | id | Borra un área (para dejar de usarla sin perderla, desactívala) |
Además siendo administrador:
| Tool | Argumentos | Qué hace |
|---|---|---|
link_tool_instance_to_agent | agent_id, tool_instance_id | Vincula una instancia de tool ya creada (no desvincula las anteriores) |
Inferencias
| Tool | Argumentos | Qué hace |
|---|---|---|
list_inferences | — | Las inferencias accesibles: nombre, identifier (lo que pide run_inference), fecha de creación, qué RAGs y fuentes consultan, qué adjuntos admite su modelo, los nombres de sus tools y jwtOnly si solo se llama con el JWT de un usuario |
run_inference | identifier, prompt, semantic_search[], top_k, use_reranking, similarity_threshold, json_schema, attachments[], include_system_prompt | Ejecuta una inferencia —aquí por su identifier (el slug), no por el id—: el mismo contrato que POST /api/inferences/{identifier}. Con json_schema la respuesta llega además como contenido estructurado. Una inferencia jwtOnly da 403: no la abre el MCP |
Instancias de tools
En el panel esta sección se llama simplemente Tools. Las instancias se vinculan a agentes y también a inferencias.
| Tool | Argumentos | Qué hace |
|---|---|---|
list_tool_instances | scopes[], page, limit | Las instancias configuradas (function-calling nativo): plantilla de origen y en cuántas inferencias/agentes se usan |
update_tool_instance_description | id, description | Cambia la descripción de una instancia |
File sources
| Tool | Argumentos | Qué hace |
|---|---|---|
list_file_sources | — | Los orígenes de ficheros: proveedor, estado, totales, patrones de exclusión, tipos de fichero excluidos y frecuencia de escaneo |
Seguridad
Cuatro capas independientes. Una frase que pase una puede caer en otra, y cada capa tiene su list_*, su add_*/update_* y su test_*. Los test_* miran como mucho los primeros 20.000 caracteres del texto, lo más que puede recibir un agente, igual que el Probar texto del panel.
Palabras prohibidas — coincidencia literal, con detección leet y difusa opcionales.
| Tool | Argumentos | Qué hace |
|---|---|---|
list_forbidden_word_categories | — | Las categorías, con su número de palabras |
create_forbidden_word_category | name | Crea una categoría (falla si el nombre ya existe) |
list_forbidden_words | category_id, active, page, limit | Las palabras/frases, con sus flags de leet y de coincidencia difusa |
add_forbidden_words | phrases[], category_id, leet_detection, fuzzy_detection | Alta masiva con los mismos flags. No deduplica |
update_forbidden_word | id, phrase, category_id, leet_detection, fuzzy_detection, active | Modifica una |
update_forbidden_words_bulk | ids[], category_id, leet_detection, fuzzy_detection, active | El mismo cambio a varias de una vez |
test_forbidden_words | text | Prueba un texto: por línea, qué palabras coinciden y si fue exacto, leet o difuso |
Palabras seguras (safe_phrases en las tools) — si el mensaje completo normaliza igual a una de ellas, se salta el resto del firewall.
| Tool | Argumentos | Qué hace |
|---|---|---|
list_safe_phrases | page, limit | Las frases seguras, activas y desactivadas (cada fila trae su active); no hay filtro por estado |
add_safe_phrases | phrases[] | Alta masiva. No deduplica |
test_safe_phrases | text | Comprueba si un texto coincide con alguna |
Firewall semántico — embeddings en Qdrant y umbral de similitud coseno por categoría.
| Tool | Argumentos | Qué hace |
|---|---|---|
list_firewall_categories | — | Las categorías, con su threshold y número de frases |
create_firewall_category | name, threshold | Crea una categoría (falla si el nombre ya existe; threshold por defecto 0.8) |
update_firewall_category | id, name, threshold | La renombra y/o ajusta su threshold |
list_firewall_phrases | category_id, active, page, limit | Las frases de ejemplo, y si ya tienen embedding indexado |
add_firewall_phrases | phrases[], category_id | Alta masiva; las indexa sola si hay modelo de embeddings configurado |
reindex_firewall_phrases | scope | Reindexado manual: pending solo las que no tienen embedding, all recrea la colección (necesario tras cambiar de modelo) |
test_firewall | text | Vectoriza un texto, busca las frases más similares y las evalúa contra el threshold de su categoría |
Entropía — detecta payloads ofuscados (racha hexadecimal, entropía de Shannon, ratio de leet). Son tres estrategias fijas, que vienen con el producto: no se crean ni se borran, solo se activan y se calibran.
| Tool | Argumentos | Qué hace |
|---|---|---|
list_entropy_strategies | — | Las estrategias, activadas o no, con sus umbrales |
update_entropy_strategy | id, enabled, config | Activa/desactiva una y ajusta sus umbrales |
test_entropy_strategy | text | Ejecuta todas las estrategias (activadas o no, para calibrar) y devuelve sus métricas |
Convenciones
Los listados que crecen paginan siempre. La respuesta de una tool va literalmente al contexto del modelo, así que nada que crezca con el uso se devuelve entero: esas tools aceptan page y limit (50 por defecto, 100 máximo) y responden { data, total, page, limit }. El total es lo que le dice al modelo si le quedan páginas. Los catálogos acotados —categorías, estrategias de entropía, RAGs, file sources y las áreas de conocimiento de un agente— no paginan.
Cada tool declara si escribe. El catálogo publica las annotations de MCP —readOnlyHint, openWorldHint (false salvo en run_inference, que puede llamar tools que salen fuera de tu instancia) y, en las que escriben, destructiveHint e idempotentHint—, derivadas del verbo del nombre:
| Verbo | Escribe | Repetir la llamada |
|---|---|---|
list_ · get_ · search_ · test_ | no | los test_* solo evalúan un texto contra la configuración vigente |
run_ | sí: una inferencia consume tokens | vuelve a ejecutar |
add_ · create_ | sí, solo añaden | vuelve a añadir |
link_ | sí, solo añade | idempotente: deja el mismo estado |
update_ · reindex_ · set_ | sí, sobrescriben lo que hubiera | idempotente: deja el mismo estado |
reset_ · delete_ | sí, quitan algo | idempotente: repetirla no quita más |
Un cliente puede usar esas pistas para ejecutar las de lectura sin preguntar y pedirte confirmación solo en las que escriben. Son pistas de UI, no permisos: la autorización la sigue aplicando el servidor.