Saltar al contenido

Herramientas del servidor MCP ​

Catálogo de las herramientas que puedes invocar con tools/call (ver Conexión). El catálogo que tú ves con tools/list depende de tu identidad: solo aparecen las que tu usuario puede usar.

  • Las herramientas de consulta son de solo lectura y devuelven únicamente lo que el usuario ya puede ver en Panteum.
  • Las dos de escritura (radicar_mesa_ayuda, comentar_solicitud) funcionan en dos pasos con confirmación y tienen un límite de 6 operaciones confirmadas por minuto.
  • Si el usuario no tiene permiso, la llamada responde HTTP 200 con isError: true y structuredContent.codigo = "SIN_PERMISO".

Cómo leer los ejemplos ​

Todos los ejemplos usan estas funciones auxiliares (definidas en Conexión); en curl se muestra la petición completa.

js
// JavaScript: función auxiliar sobre mcp("tools/call", …)
const llamar = (name, args) => mcp("tools/call", { name, arguments: args });
python
# Python: función auxiliar sobre mcp("tools/call", …)
def llamar(name, args):
    return mcp("tools/call", {"name": name, "arguments": args})

Los datos de los ejemplos son ficticios.

Índice ​

HerramientaTipoRequiere permiso
buscar_ayudalecturasolo estar identificado
buscar_documentolecturano
buscar_solicitudeslecturasí (solicitudes.bandeja.ver o solicitudes.radicar o solicitudes.ver_todas)
busqueda_globallecturasolo estar identificado
comentar_solicitudescritura con confirmaciónsí (solicitudes.bandeja.ver o solicitudes.radicar o solicitudes.ver_todas)
estado_cdplecturasí (presupuesto.planeacion.consultar)
estado_presupuestolecturasí (presupuesto.reportes.consultar)
estado_rplecturasí (presupuesto.planeacion.consultar)
estado_solicitudlecturano
mis_accesoslecturasolo estar identificado
mis_tareaslecturasí (solicitudes.bandeja.ver)
radicar_mesa_ayudaescritura con confirmaciónsí (solicitudes.radicar)
reporte_prepararlecturasí (presupuesto.reportes.personalizados)
resumen_ejecutivolecturasí (presupuesto.reportes.consultar o presupuesto.planeacion.consultar)
resumen_solicitudlecturasolo estar identificado

Existen además dos herramientas de administración técnica que no se documentan aquí: solo aparecen para usuarios con permisos de administración.

buscar_ayuda ​

Buscar en los manuales y guías de uso de Panteum.

Busca en los manuales y guías de uso de Panteum («¿cómo radico una solicitud?», «¿dónde veo mis tareas?») y devuelve los fragmentos más relevantes con su cita (manual y sección). No consulta datos de la entidad y no usa modelos de IA.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): — (cualquier usuario identificado)
  • Tipo: solo lectura
  • Devuelve: Fragmentos de manual con su cita y una indicación de si lo encontrado es suficiente para responder.

Argumentos ​

ArgumentoTipoRequeridoDescripción
consultastringsíLa duda de uso con palabras clave (ej. "radicar una solicitud", "publicar documento de calidad"). (mín. 3 car., máx. 200 car.)
maxintegernoCuántos fragmentos devolver (1 a 5). (mín. 1, máx. 5, por defecto: 4)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"buscar_ayuda","arguments":{"consulta":"radicar una solicitud","max":3}}}'

JavaScript (fetch)

js
const r = await llamar("buscar_ayuda", {
  "consulta": "radicar una solicitud",
  "max": 3
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("buscar_ayuda", {
    "consulta": "radicar una solicitud",
    "max": 3
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

Estructura general (el contenido de structuredContent varía por herramienta y puede ampliarse; lee solo los campos que necesites):

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "<resumen legible en español>"
      },
      {
        "type": "text",
        "text": "<el mismo dato como JSON en texto>"
      }
    ],
    "isError": false,
    "structuredContent": {
      "…": "datos de la herramienta"
    }
  }
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.

buscar_documento ​

Buscar documento de calidad (publicado).

Busca documentos vigentes (publicados) del Sistema de Gestión de Calidad por texto libre en título, código o tema. Nunca devuelve borradores ni descarga el contenido.

  • Acceso: Pública: usable solo con la API Key de integración (si tu entidad la habilita).
  • Permisos del usuario (alguno): — (cualquier usuario identificado)
  • Tipo: solo lectura
  • Devuelve: Lista de documentos con código, título, versión, tipo, proceso y fecha de publicación.

Argumentos ​

ArgumentoTipoRequeridoDescripción
textostringsíTexto a buscar en titulo, codigo o tema del documento (ej. "manual de calidad"). (mín. 2 car., máx. 120 car.)
limiteintegernoMaximo de resultados a devolver (1 a 50). (mín. 1, máx. 50, por defecto: 10)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"buscar_documento","arguments":{"texto":"manual de calidad","limite":5}}}'

JavaScript (fetch)

js
const r = await llamar("buscar_documento", {
  "texto": "manual de calidad",
  "limite": 5
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("buscar_documento", {
    "texto": "manual de calidad",
    "limite": 5
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

result.structuredContent (datos ficticios; la herramienta puede agregar campos nuevos, lee solo los que necesites):

json
{
  "texto": "manual de calidad",
  "total": 2,
  "documentos": [
    {
      "id": 12,
      "uid": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
      "codigo_publicado": "MAN-GC-01",
      "codigos_anteriores": [],
      "titulo": "Manual de calidad",
      "version": "3",
      "tipo": "Manual",
      "proceso": "Gestión de calidad",
      "estado": "publicado",
      "fecha_publicacion": "2026-09-15"
    }
  ]
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.

buscar_solicitudes ​

Buscar solicitudes (radicados).

Busca solicitudes (radicados) con filtros cuando no tienes el número exacto: texto, estado, tipo, rango de fechas. alcance="mias" (por defecto) busca entre las que el usuario radicó; "todas" solo funciona si su rol puede ver todas.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): solicitudes.bandeja.ver, solicitudes.radicar, solicitudes.ver_todas
  • Tipo: solo lectura
  • Devuelve: Lista corta con número de radicado, tipo, estado, etapa actual, resumen, fechas y un enlace a la pantalla del radicado.

Argumentos ​

ArgumentoTipoRequeridoDescripción
textostringnoTexto a buscar en el número de radicado o en el resumen (ej. "aseo", "CDP-2026"). (máx. 120 car.)
estadoenum: borrador · radicado · en_tramite · aprobado · rechazado · devuelto · anulado · requiere_atencionnoFiltra por estado de la solicitud.
tipostringnoCódigo o nombre (parcial) del tipo de solicitud (ej. "CDP", "PAA", "mesa de ayuda"). (máx. 80 car.)
desdestring (date)noFecha de radicación mínima (YYYY-MM-DD).
hastastring (date)noFecha de radicación máxima (YYYY-MM-DD).
alcanceenum: mias · todasno"mias" (defecto) o "todas" (requiere permiso de ver todas). (por defecto: "mias")
limiteintegernoMáximo de resultados (1 a 30). (mín. 1, máx. 30, por defecto: 10)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"buscar_solicitudes","arguments":{"texto":"aseo","estado":"en_tramite","alcance":"mias","limite":5}}}'

JavaScript (fetch)

js
const r = await llamar("buscar_solicitudes", {
  "texto": "aseo",
  "estado": "en_tramite",
  "alcance": "mias",
  "limite": 5
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("buscar_solicitudes", {
    "texto": "aseo",
    "estado": "en_tramite",
    "alcance": "mias",
    "limite": 5
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

result.structuredContent (datos ficticios; la herramienta puede agregar campos nuevos, lee solo los que necesites):

json
{
  "alcance": "mias",
  "total": 1,
  "mostradas": 1,
  "solicitudes": [
    {
      "numero_radicado": "AYUDA-2026-000004",
      "id_solicitud": 57,
      "enlace": "/m/solicitudes/57",
      "tipo": "Mesa de ayuda",
      "estado": "en_tramite",
      "etapa_actual": "Atención",
      "resumen": "No carga el tablero de presupuesto",
      "fecha_radicacion": "2026-10-03 10:12",
      "fecha_actualizacion": "2026-10-03 10:12"
    }
  ]
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.
  • SIN_PERMISO (isError): el usuario no tiene ninguno de solicitudes.bandeja.ver, solicitudes.radicar, solicitudes.ver_todas.

busqueda_global ​

Búsqueda global (solicitudes, documentos de calidad, CDP y RP).

Búsqueda abierta por tema en las solicitudes del usuario, los documentos vigentes de calidad y los CDP/RP que su usuario puede ver, con resultados agrupados y enlaces a las pantallas.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): — (cualquier usuario identificado)
  • Tipo: solo lectura
  • Devuelve: Resultados agrupados por ámbito (solicitudes, documentos, presupuesto).

Argumentos ​

ArgumentoTipoRequeridoDescripción
textostringsíTema o palabras clave (ej. "talento humano", "infraestructura", "vacaciones"). (mín. 2 car., máx. 120 car.)
ambitosarray de string (solicitudes · documentos · presupuesto)noDónde buscar: solicitudes | documentos | presupuesto (CDP y RP). Por defecto, todos.
tipostringnoSolo solicitudes: código o nombre parcial del tipo (ej. "CDP", "PAA", "AYUDA"). (máx. 60 car.)
estadoenum: borrador · radicado · en_tramite · aprobado · rechazado · devuelto · anulado · requiere_atencionnoSolo solicitudes.
desdestringnoSolo solicitudes: fecha inicial YYYY-MM-DD.
hastastringnoSolo solicitudes: fecha final YYYY-MM-DD.
alcanceenum: mias · todasnoSolo solicitudes: "todas" exige permiso de auditoría. (por defecto: "mias")
limiteintegernoMáximo de resultados por ámbito (1 a 10). (mín. 1, máx. 10, por defecto: 5)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"busqueda_global","arguments":{"texto":"talento humano","ambitos":["solicitudes","documentos"],"limite":3}}}'

JavaScript (fetch)

js
const r = await llamar("busqueda_global", {
  "texto": "talento humano",
  "ambitos": [
    "solicitudes",
    "documentos"
  ],
  "limite": 3
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("busqueda_global", {
    "texto": "talento humano",
    "ambitos": [
        "solicitudes",
        "documentos"
    ],
    "limite": 3
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

Estructura general (el contenido de structuredContent varía por herramienta y puede ampliarse; lee solo los campos que necesites):

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "<resumen legible en español>"
      },
      {
        "type": "text",
        "text": "<el mismo dato como JSON en texto>"
      }
    ],
    "isError": false,
    "structuredContent": {
      "…": "datos de la herramienta"
    }
  }
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.

comentar_solicitud ​

Comentar una solicitud (escritura con confirmación).

Escritura con confirmación. Publica un comentario en el chat de un radicado, a nombre del usuario y visible para los participantes del trámite. Solo agrega un mensaje: no aprueba, rechaza ni modifica la solicitud. Requiere acceso al radicado.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): solicitudes.bandeja.ver, solicitudes.radicar, solicitudes.ver_todas
  • Tipo: escritura con confirmación (dos pasos)
  • Devuelve: Paso 1 (sin confirmar): vista previa (radicado, estado y texto) y un token_confirmacion. Paso 2 (confirmar: true + token): publica el comentario.

Argumentos ​

ArgumentoTipoRequeridoDescripción
numero_radicadostringsíNúmero de radicado exacto. (mín. 3 car., máx. 60 car.)
comentariostringsíTexto del comentario. (mín. 3 car., máx. 2000 car.)
confirmarbooleannotrue SOLO después de que el usuario aprobó la vista previa. (por defecto: false)
token_confirmacionstringnoToken recibido en la vista previa (obligatorio con confirmar=true). (máx. 600 car.)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"comentar_solicitud","arguments":{"numero_radicado":"PAA-2026-000029","comentario":"Ya corregí el anexo solicitado."}}}'

JavaScript (fetch)

js
const r = await llamar("comentar_solicitud", {
  "numero_radicado": "PAA-2026-000029",
  "comentario": "Ya corregí el anexo solicitado."
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("comentar_solicitud", {
    "numero_radicado": "PAA-2026-000029",
    "comentario": "Ya corregí el anexo solicitado."
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Segundo paso (confirmar): repite la llamada con los mismos datos más confirmar y el token_confirmacion recibido en la vista previa (válido unos minutos y de un solo uso). Solo hazlo si la persona aprobó la vista previa.

json
{
  "name": "comentar_solicitud",
  "arguments": {
    "numero_radicado": "PAA-2026-000029",
    "comentario": "Ya corregí el anexo solicitado.",
    "confirmar": true,
    "token_confirmacion": "<token_confirmacion_de_la_vista_previa>"
  }
}

Respuesta de ejemplo ​

Estructura general (el contenido de structuredContent varía por herramienta y puede ampliarse; lee solo los campos que necesites):

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "<resumen legible en español>"
      },
      {
        "type": "text",
        "text": "<el mismo dato como JSON en texto>"
      }
    ],
    "isError": false,
    "structuredContent": {
      "…": "datos de la herramienta"
    }
  }
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.
  • SIN_PERMISO (isError): el usuario no tiene ninguno de solicitudes.bandeja.ver, solicitudes.radicar, solicitudes.ver_todas.
  • ESCRITURA_DESHABILITADA: las escrituras están apagadas en tu entidad. RATE_LIMIT: más de 6 operaciones confirmadas por minuto.

estado_cdp ​

Estado de un CDP (Certificado de Disponibilidad Presupuestal).

Estado de un CDP (Certificado de Disponibilidad Presupuestal) por su número o número externo. Solo ve los CDP de las áreas que el usuario puede ver.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): presupuesto.planeacion.consultar
  • Tipo: solo lectura
  • Devuelve: Número del CDP, estado visible y descripción, valor inicial y actual, comprometido por RP, saldo, área, objeto, fecha de expedición y radicado del trámite.

Argumentos ​

ArgumentoTipoRequeridoDescripción
numerostringsíNúmero del CDP (ej. "CDP-2026-000010") o número externo/SIIF. (mín. 2 car., máx. 60 car.)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"estado_cdp","arguments":{"numero":"CDP-2026-000010"}}}'

JavaScript (fetch)

js
const r = await llamar("estado_cdp", {
  "numero": "CDP-2026-000010"
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("estado_cdp", {
    "numero": "CDP-2026-000010"
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

result.structuredContent (datos ficticios; la herramienta puede agregar campos nuevos, lee solo los que necesites):

json
{
  "numero_cdp": "CDP-2026-000010",
  "numero_externo": null,
  "numero_radicado": "CDP-2026-000010",
  "estado": "expedido",
  "estado_visible": "Expedido",
  "estado_descripcion": "El CDP fue expedido.",
  "estado_expedicion": null,
  "area": "Planeación",
  "dependencia": null,
  "objeto": "Adquisición de equipos de cómputo",
  "valor_inicial": 12000000,
  "valor_actual": 12000000,
  "comprometido": 4000000,
  "saldo": 8000000,
  "fecha_expedicion": "2026-09-30",
  "movimientos": 0,
  "motivo_devolucion": null,
  "motivo_rechazo": null,
  "encontrado": true
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.
  • SIN_PERMISO (isError): el usuario no tiene ninguno de presupuesto.planeacion.consultar.
  • encontrado: false (isError): no existe ese número entre los que el usuario puede ver.

estado_presupuesto ​

Estado del presupuesto (tablero gerencial y disponibilidad).

Resume el tablero gerencial de presupuesto de la vigencia activa: techo, asignado, programado y disponible, avance, líneas del PAA por estado, y disponibilidad por proyecto y por área (con semáforo), solo de lo que el usuario puede ver. Admite filtros por proyecto o área.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): presupuesto.reportes.consultar
  • Tipo: solo lectura
  • Devuelve: Totales, avance y disponibilidad por proyecto/área; con detalle=true y un proyecto único, también sus actividades y su distribución por área.

Argumentos ​

ArgumentoTipoRequeridoDescripción
proyectostringnoId, código o nombre (parcial) de un proyecto (ej. "QA-PRY-A", "inversión"). (máx. 100 car.)
areastringnoId, sigla o nombre (parcial) de un área/dependencia/grupo. (máx. 100 car.)
detallebooleannotrue = si el proyecto filtrado es único, incluye sus actividades y distribución por área. (por defecto: false)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"estado_presupuesto","arguments":{"area":"Planeación","detalle":false}}}'

JavaScript (fetch)

js
const r = await llamar("estado_presupuesto", {
  "area": "Planeación",
  "detalle": false
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("estado_presupuesto", {
    "area": "Planeación",
    "detalle": False
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

Estructura general (el contenido de structuredContent varía por herramienta y puede ampliarse; lee solo los campos que necesites):

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "<resumen legible en español>"
      },
      {
        "type": "text",
        "text": "<el mismo dato como JSON en texto>"
      }
    ],
    "isError": false,
    "structuredContent": {
      "…": "datos de la herramienta"
    }
  }
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.
  • SIN_PERMISO (isError): el usuario no tiene ninguno de presupuesto.reportes.consultar.

estado_rp ​

Estado de un RP (Registro Presupuestal).

Estado de un RP (Registro Presupuestal) por su número o número externo. Solo ve los RP de las áreas que el usuario puede ver.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): presupuesto.planeacion.consultar
  • Tipo: solo lectura
  • Devuelve: Número del RP, estado visible, CDP de origen, beneficiario, objeto, valores (inicial, actual, obligado) y fechas.

Argumentos ​

ArgumentoTipoRequeridoDescripción
numerostringsíNúmero del RP (ej. "RP-2026-000005") o número externo. (mín. 2 car., máx. 60 car.)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"estado_rp","arguments":{"numero":"RP-2026-000005"}}}'

JavaScript (fetch)

js
const r = await llamar("estado_rp", {
  "numero": "RP-2026-000005"
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("estado_rp", {
    "numero": "RP-2026-000005"
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

result.structuredContent (datos ficticios; la herramienta puede agregar campos nuevos, lee solo los que necesites):

json
{
  "numero_rp": "RP-2026-000005",
  "numero_externo": null,
  "numero_radicado": "RP-2026-000005",
  "estado": "expedido",
  "estado_visible": "Expedido",
  "estado_descripcion": "El RP fue expedido.",
  "estado_expedicion": null,
  "cdp": "CDP-2026-000010",
  "beneficiario": "Proveedor Ejemplo S.A.S.",
  "objeto": "Compra de equipos de cómputo",
  "valor_inicial": 4000000,
  "valor_actual": 4000000,
  "obligado": 0,
  "fecha_expedicion": "2026-10-02",
  "fecha_inicio": "2026-10-05",
  "fecha_fin": "2026-12-31",
  "motivo_devolucion": null,
  "motivo_rechazo": null,
  "encontrado": true
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.
  • SIN_PERMISO (isError): el usuario no tiene ninguno de presupuesto.planeacion.consultar.
  • encontrado: false (isError): no existe ese número entre los que el usuario puede ver.

estado_solicitud ​

Estado de una solicitud (radicado).

Estado actual de una solicitud o trámite por su número de radicado exacto. Con usuario conectado solo ve radicados a los que ese usuario tiene acceso; sin usuario exige correo_solicitante (el correo de quien radicó) como verificación y devuelve un subconjunto mínimo. Si no existe o no hay acceso, el mensaje es el mismo.

  • Acceso: Verificada: usable sin usuario si envías un dato de verificación (correo_solicitante).
  • Permisos del usuario (alguno): — (cualquier usuario identificado)
  • Tipo: solo lectura
  • Devuelve: Número, estado, tipo, etapa actual y fechas. Con usuario, además: enlace a la pantalla, rol responsable, resumen y vínculos padre/hijos.

Argumentos ​

ArgumentoTipoRequeridoDescripción
numero_radicadostringsíNúmero de radicado exacto (ej. "SOL-2026-000123", "CDP-2026-000010"). (mín. 3 car., máx. 60 car.)
correo_solicitantestringnoSOLO si no hay usuario conectado: correo electrónico de quien radicó la solicitud (dato de verificación). (máx. 150 car.)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"estado_solicitud","arguments":{"numero_radicado":"PAA-2026-000029","correo_solicitante":"CORREO_DEL_SOLICITANTE"}}}'

JavaScript (fetch)

js
const r = await llamar("estado_solicitud", {
  "numero_radicado": "PAA-2026-000029",
  "correo_solicitante": "CORREO_DEL_SOLICITANTE"
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("estado_solicitud", {
    "numero_radicado": "PAA-2026-000029",
    "correo_solicitante": "CORREO_DEL_SOLICITANTE"
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

result.structuredContent (datos ficticios; la herramienta puede agregar campos nuevos, lee solo los que necesites):

json
{
  "numero_radicado": "PAA-2026-000029",
  "id_solicitud": 41,
  "enlace": "/m/solicitudes/41",
  "estado": "en_tramite",
  "tipo": "Aprobación de línea PAA",
  "etapa_actual": "Revisión del subdirector",
  "rol_responsable": "Subdirector",
  "resumen": "Adquisición de equipos de cómputo…",
  "fecha_radicacion": "2026-09-28 09:14",
  "fecha_actualizacion": "2026-09-29 15:02",
  "fecha_cierre": null,
  "radicado_padre": null,
  "radicados_hijos": []
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • FALTA_VERIFICACION (isError): sin usuario debes enviar correo_solicitante. Si el radicado no existe o el correo no coincide, encontrado: false (mismo mensaje en ambos casos). DEMASIADOS_INTENTOS: demasiadas verificaciones fallidas.

mis_accesos ​

Mis accesos (qué puedo hacer en PANTEUM).

Qué puede hacer el usuario conectado: sus roles, los módulos que ve, sus permisos agrupados por módulo y las herramientas de este asistente que tiene disponibles. Solo habla del propio usuario.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): — (cualquier usuario identificado)
  • Tipo: solo lectura
  • Devuelve: Roles, módulos, permisos (opcional) y herramientas disponibles.

Argumentos ​

ArgumentoTipoRequeridoDescripción
incluir_permisosbooleannotrue (defecto) = lista también las claves de permiso agrupadas por módulo; false = solo roles, módulos y herramientas. (por defecto: true)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"mis_accesos","arguments":{"incluir_permisos":false}}}'

JavaScript (fetch)

js
const r = await llamar("mis_accesos", {
  "incluir_permisos": false
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("mis_accesos", {
    "incluir_permisos": False
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

Estructura general (el contenido de structuredContent varía por herramienta y puede ampliarse; lee solo los campos que necesites):

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "<resumen legible en español>"
      },
      {
        "type": "text",
        "text": "<el mismo dato como JSON en texto>"
      }
    ],
    "isError": false,
    "structuredContent": {
      "…": "datos de la herramienta"
    }
  }
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.

mis_tareas ​

Mis tareas pendientes (bandeja).

Tareas pendientes del usuario (su bandeja): solicitudes que debe revisar, aprobar, firmar o corregir, con antigüedad y vencimiento (marca las vencidas y las que vencen en 48 h). alcance="rol" incluye la bandeja común de sus roles; "mias" solo lo asignado directamente a él.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): solicitudes.bandeja.ver
  • Tipo: solo lectura
  • Devuelve: Conteos (total_bandeja, mostradas, vencidas, por_vencer) y la lista de tareas.

Argumentos ​

ArgumentoTipoRequeridoDescripción
alcanceenum: rol · miasno"rol" (defecto): asignadas a mí + bandeja común de mis roles de flujo. "mias": solo asignadas directamente a mí. (por defecto: "rol")
solo_vencidasbooleannotrue = solo las tareas cuyo vencimiento ya pasó. (por defecto: false)
limiteintegernoMáximo de tareas a devolver (1 a 50). (mín. 1, máx. 50, por defecto: 20)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"mis_tareas","arguments":{"alcance":"rol","solo_vencidas":false,"limite":10}}}'

JavaScript (fetch)

js
const r = await llamar("mis_tareas", {
  "alcance": "rol",
  "solo_vencidas": false,
  "limite": 10
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("mis_tareas", {
    "alcance": "rol",
    "solo_vencidas": False,
    "limite": 10
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

result.structuredContent (datos ficticios; la herramienta puede agregar campos nuevos, lee solo los que necesites):

json
{
  "alcance": "rol",
  "total_bandeja": 1,
  "mostradas": 1,
  "vencidas": 0,
  "por_vencer": 1,
  "tareas": [
    {
      "numero_radicado": "PAA-2026-000029",
      "id_solicitud": 41,
      "enlace": "/m/solicitudes/41",
      "tipo": "Aprobación de línea PAA",
      "resumen": "Adquisición de equipos de cómputo…",
      "estado_solicitud": "en_tramite",
      "etapa": "Revisión del subdirector",
      "rol_flujo": "Subdirector",
      "requiere_firma": true,
      "asignada_a_mi": false,
      "es_correccion_mia": false,
      "recibida": "2026-09-29 15:02",
      "dias_pendiente": 6,
      "vence_en": "2026-10-06 15:02",
      "vencida": false,
      "por_vencer": true
    }
  ]
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.
  • SIN_PERMISO (isError): el usuario no tiene ninguno de solicitudes.bandeja.ver.

radicar_mesa_ayuda ​

Radicar ticket en la mesa de ayuda (escritura con confirmación).

Escritura con confirmación. Crea un ticket en la mesa de ayuda de Panteum a nombre del usuario (reportar un error, una mejora o una sugerencia). Solo se usa cuando la persona lo pide de forma explícita.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): solicitudes.radicar
  • Tipo: escritura con confirmación (dos pasos)
  • Devuelve: Paso 1 (sin confirmar): vista previa y token_confirmacion. Paso 2 (confirmar: true + token): radica el ticket y devuelve su número.

Argumentos ​

ArgumentoTipoRequeridoDescripción
asuntostringsíAsunto corto del ticket. (mín. 5 car., máx. 150 car.)
descripcionstringsíQué pasó, qué esperaba el usuario y pasos para reproducirlo. (mín. 10 car., máx. 4000 car.)
severidadenum: sugerencia · error · mejora_grave · bloqueantenosugerencia | error | mejora_grave | bloqueante. (por defecto: "error")
modulostringnoMódulo o pantalla afectada (opcional). (máx. 120 car.)
confirmarbooleannotrue SOLO después de que el usuario aprobó la vista previa. (por defecto: false)
token_confirmacionstringnoToken recibido en la vista previa (obligatorio con confirmar=true). (máx. 600 car.)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"radicar_mesa_ayuda","arguments":{"asunto":"No carga el tablero de presupuesto","descripcion":"Al abrir el tablero gerencial queda cargando y no muestra datos.","severidad":"error","modulo":"Presupuesto"}}}'

JavaScript (fetch)

js
const r = await llamar("radicar_mesa_ayuda", {
  "asunto": "No carga el tablero de presupuesto",
  "descripcion": "Al abrir el tablero gerencial queda cargando y no muestra datos.",
  "severidad": "error",
  "modulo": "Presupuesto"
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("radicar_mesa_ayuda", {
    "asunto": "No carga el tablero de presupuesto",
    "descripcion": "Al abrir el tablero gerencial queda cargando y no muestra datos.",
    "severidad": "error",
    "modulo": "Presupuesto"
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Segundo paso (confirmar): repite la llamada con los mismos datos más confirmar y el token_confirmacion recibido en la vista previa (válido unos minutos y de un solo uso). Solo hazlo si la persona aprobó la vista previa.

json
{
  "name": "radicar_mesa_ayuda",
  "arguments": {
    "asunto": "No carga el tablero de presupuesto",
    "descripcion": "Al abrir el tablero gerencial queda cargando y no muestra datos.",
    "severidad": "error",
    "modulo": "Presupuesto",
    "confirmar": true,
    "token_confirmacion": "<token_confirmacion_de_la_vista_previa>"
  }
}

Respuesta de ejemplo ​

Estructura general (el contenido de structuredContent varía por herramienta y puede ampliarse; lee solo los campos que necesites):

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "<resumen legible en español>"
      },
      {
        "type": "text",
        "text": "<el mismo dato como JSON en texto>"
      }
    ],
    "isError": false,
    "structuredContent": {
      "…": "datos de la herramienta"
    }
  }
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.
  • SIN_PERMISO (isError): el usuario no tiene ninguno de solicitudes.radicar.
  • ESCRITURA_DESHABILITADA: las escrituras están apagadas en tu entidad. RATE_LIMIT: más de 6 operaciones confirmadas por minuto.

reporte_preparar ​

Preparar un reporte (prellenar el constructor).

Prepara un reporte personalizado de presupuesto (Excel o CSV) sin generarlo: valida la ficha con el sistema y devuelve el total de filas, una muestra mínima y un enlace al constructor ya prellenado para que la persona lo revise y lo genere.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): presupuesto.reportes.personalizados
  • Tipo: solo lectura
  • Devuelve: Total de filas, muestra y enlace al constructor de reportes.

Argumentos ​

ArgumentoTipoRequeridoDescripción
peticionstringnoLo que pidió la persona, en una frase.
fichaobjetosí

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"reporte_preparar","arguments":{"peticion":"CDP expedidos de 2026 por área","ficha":{"fuente":"cdp","titulo":"CDP expedidos 2026","filtros":[{"campo":"estado","op":"igual","valor":"expedido"}],"formato":"xlsx"}}}}'

JavaScript (fetch)

js
const r = await llamar("reporte_preparar", {
  "peticion": "CDP expedidos de 2026 por área",
  "ficha": {
    "fuente": "cdp",
    "titulo": "CDP expedidos 2026",
    "filtros": [
      {
        "campo": "estado",
        "op": "igual",
        "valor": "expedido"
      }
    ],
    "formato": "xlsx"
  }
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("reporte_preparar", {
    "peticion": "CDP expedidos de 2026 por área",
    "ficha": {
        "fuente": "cdp",
        "titulo": "CDP expedidos 2026",
        "filtros": [
            {
                "campo": "estado",
                "op": "igual",
                "valor": "expedido"
            }
        ],
        "formato": "xlsx"
    }
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

Estructura general (el contenido de structuredContent varía por herramienta y puede ampliarse; lee solo los campos que necesites):

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "<resumen legible en español>"
      },
      {
        "type": "text",
        "text": "<el mismo dato como JSON en texto>"
      }
    ],
    "isError": false,
    "structuredContent": {
      "…": "datos de la herramienta"
    }
  }
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.
  • SIN_PERMISO (isError): el usuario no tiene ninguno de presupuesto.reportes.personalizados.

resumen_ejecutivo ​

Resumen ejecutivo de un área o del PAA de un mes (cifras agregadas).

Cifras agregadas para redactar un resumen ejecutivo: ambito="area" (situación presupuestal de un área y sus líneas del PAA por estado) o ambito="paa_mes" (líneas del PAA con inicio estimado en un mes: cantidad, valor total, por estado y por área, y las de mayor valor). Solo trae lo que el usuario puede ver.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): presupuesto.reportes.consultar, presupuesto.planeacion.consultar
  • Tipo: solo lectura
  • Devuelve: Cifras agregadas por ámbito, listas para redactar el texto.

Argumentos ​

ArgumentoTipoRequeridoDescripción
ambitoenum: area · paa_messí"area" = situación del área; "paa_mes" = PAA del mes.
areastringnoId, sigla o nombre (parcial) del área. Con ambito="area" es obligatoria; con "paa_mes" filtra por esa área (opcional). (máx. 100 car.)
messtringnoMes en formato AAAA-MM (por defecto, el mes actual). Solo ambito="paa_mes".

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"resumen_ejecutivo","arguments":{"ambito":"paa_mes","mes":"2026-10"}}}'

JavaScript (fetch)

js
const r = await llamar("resumen_ejecutivo", {
  "ambito": "paa_mes",
  "mes": "2026-10"
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("resumen_ejecutivo", {
    "ambito": "paa_mes",
    "mes": "2026-10"
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

Estructura general (el contenido de structuredContent varía por herramienta y puede ampliarse; lee solo los campos que necesites):

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "<resumen legible en español>"
      },
      {
        "type": "text",
        "text": "<el mismo dato como JSON en texto>"
      }
    ],
    "isError": false,
    "structuredContent": {
      "…": "datos de la herramienta"
    }
  }
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.
  • SIN_PERMISO (isError): el usuario no tiene ninguno de presupuesto.reportes.consultar, presupuesto.planeacion.consultar.

resumen_solicitud ​

Resumen de una solicitud (estado, historial y siguiente responsable).

Resumen completo de una solicitud por su número de radicado: estado, etapa y progreso, siguiente responsable (a quién le toca y desde cuándo) e historial resumido (quién hizo qué y cuándo). Opcionalmente incluye los últimos comentarios del chat y los campos de texto del formulario.

  • Acceso: Requiere usuario (token personal).
  • Permisos del usuario (alguno): — (cualquier usuario identificado)
  • Tipo: solo lectura
  • Devuelve: Estado, etapa y progreso, siguiente responsable e historial reciente.

Argumentos ​

ArgumentoTipoRequeridoDescripción
numero_radicadostringsíNúmero de radicado exacto (ej. "PAA-2026-000029"). (mín. 3 car., máx. 60 car.)
incluir_comentariosbooleannotrue = agrega los últimos mensajes del chat del radicado (autor, fecha, texto recortado). Úsalo para resumir o redactar una respuesta. (por defecto: false)
incluir_contenidobooleannotrue = agrega los campos de texto del formulario radicado (asunto, descripción, etc.; sin documentos de identidad ni contactos). (por defecto: false)
max_eventosintegernoCuántos eventos recientes del historial devolver (1 a 30). (mín. 1, máx. 30, por defecto: 10)

Ejemplo ​

curl

bash
curl -s https://mcp.tu-entidad.example/api/mcp \
  -H "Authorization: Bearer $PANTEUM_API_KEY" \
  -H "X-MCP-User-Token: $PANTEUM_TOKEN_PERSONAL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"resumen_solicitud","arguments":{"numero_radicado":"PAA-2026-000029","max_eventos":5}}}'

JavaScript (fetch)

js
const r = await llamar("resumen_solicitud", {
  "numero_radicado": "PAA-2026-000029",
  "max_eventos": 5
});
if (r.isError) console.warn(r.content[0].text);
else console.log(r.structuredContent);

Python (requests)

python
r = llamar("resumen_solicitud", {
    "numero_radicado": "PAA-2026-000029",
    "max_eventos": 5
})
print(r["content"][0]["text"] if r["isError"] else r["structuredContent"])

Respuesta de ejemplo ​

Estructura general (el contenido de structuredContent varía por herramienta y puede ampliarse; lee solo los campos que necesites):

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "<resumen legible en español>"
      },
      {
        "type": "text",
        "text": "<el mismo dato como JSON en texto>"
      }
    ],
    "isError": false,
    "structuredContent": {
      "…": "datos de la herramienta"
    }
  }
}

Errores ​

  • Los comunes del protocolo (ver Conexión): 401 por credenciales, 429 por límite, -32602 por argumentos mal formados.
  • SIN_IDENTIDAD (isError): enviaste solo la API Key; esta herramienta necesita el token personal.