ServiceNow MCP
Servidor MCP de ServiceNow: 65 herramientas sobre toda la superficie REST (Tabla, Agregado, Adjunto, Conjunto de Importación, Lote, CMDB/IRE, Catálogo, Cambio, Conocimiento, Correo Electrónico) con inteligencia de scripts, trazado de flujos, ejecuciones ATF, perfiles multi-instancia y diagramas Mermaid.
Documentación
servicenow-mcp-ai — Servidor MCP de ServiceNow
Un servidor de Protocolo de Contexto de Modelo que permite a un cliente MCP (VS Code, Claude Desktop, etc.) ejecutar comandos contra una instancia de ServiceNow a través de sus API REST — Table, Aggregate, Attachment, Import Set, Batch y CMDB, además de las API de plugins de Service Catalog, Change Management y Knowledge. Las credenciales se guardan en un archivo de entorno local y se pueden actualizar en tiempo de ejecución mediante una herramienta.
¿Actualizando desde 1.x? v2.0 hace que las escrituras sean plan-por-defecto:
create/update/deletey las demás herramientas de escritura de registros devuelven una vista previa no mutante a menos que pasesapply: true(o establezcasSN_WRITE_MODE=applypara restaurar el comportamiento v1 de "ejecutar inmediatamente"). Consulta el CHANGELOG → 2.0.0 para la nota de migración completa.
Contenidos: Demo rápida · Características · Requisitos · Configuración · Configurar credenciales · Ejecutar / depurar · Desarrollar · Herramientas · Recursos · Prompts · Estructura del proyecto · Notas de seguridad · Documentación del proyecto · Soporte
Construido y mantenido en mi tiempo libre — si te resulta útil, una propina de GitHub Sponsors lo mantiene en marcha. Las opciones completas de Soporte están cerca del final.
Demo rápida
Tres cosas que la plataforma hace difíciles, una llamada cada una. Apunta tu cliente MCP a una instancia (Configuración) y pregunta:
1. "¿Dónde se usa realmente este campo?" — cada script, regla de negocio, script de cliente, política/acción de UI y ACL que lo toca, como JSON o un gráfico Mermaid. La búsqueda de usos con calidad de IDE para la que ServiceNow no tiene botón:
// servicenow_where_used
{
"kind": "field", // "table" | "field" | "script"
"name": "u_cost_center",
"mermaid": true, // also render a reference graph
}
2. "¿Qué se ejecuta cuando guardo este registro?" — la cadena completa de automatización en orden de ejecución (reglas de negocio display → before → after → async, luego flujos, workflows y notificaciones), cada una con su condición — una prueba lógica que ejecuta nada:
// servicenow_trace_table_event
{
"table": "incident",
"operation": "update", // insert | update | delete | query
}
3. "¿Qué cambió entre dev y prod?" — un diff en Markdown de tablas, columnas, scripts (coincididos por sys_id y luego por nombre, con un diff unificado de cada script modificado) y plugins entre dos perfiles configurados — además, bajo petición, propiedades, opciones, ACLs, notificaciones, flujos, elementos de catálogo y roles — con un código de salida compatible con CI para que un pipeline pueda bloquear un despliegue arriesgado:
servicenow-mcp-ai drift dev prod # report on stdout; exit 1 on drift, 0 if clean
Las tres son de solo lectura y funcionan contra cualquier instancia — incluida una PDI gratuita — con el modelo y cliente de tu elección.
Características
- API Table completa: consultar, leer, crear, actualizar y eliminar registros en cualquier tabla, con consultas codificadas, selección de campos y paginación.
- API adicionales de ServiceNow: Aggregate (Stats), Attachment
(listar/subir/descargar/eliminar), Import Set, Batch (muchas llamadas REST en una
sola solicitud), además de metadatos de tablas/columnas (
sys_db_object,sys_dictionary). - API de procesos y plugins: CMDB (CRUD de CI con conocimiento de clases + meta,
lecturas de relaciones desde
cmdb_rel_ci, identificación y conciliación IRE con un plan solo de identificación), Service Catalog (explorar/ordenar elementos), Change Management (creación tipada + detección de conflictos) y Knowledge (búsqueda de artículos). Las API con ámbito de plugin informan claramente cuando no están activas en la instancia. - Inteligencia de scripts: leer y buscar el código propio de la instancia (reglas
de negocio, script includes, scripts de cliente, políticas/acciones de UI, trabajos programados,
scripts de transformación/REST, ACLs — y, aún no verificado en una instancia en vivo,
widgets de Service Portal, páginas/scripts/macros de UI, procesadores, scripts de correo/fix/
validación, acciones de script, fuentes de datos, funciones de mensajes REST,
mapas/entradas de transformación, scripts de cliente de catálogo y cálculos/
valores predeterminados de diccionario) y obtener la imagen completa de automatización de una
tabla — todo de solo lectura a través de la API Table.
servicenow_search_codedevuelve cada línea coincidente por artefacto (hasta 20, con una línea de contexto a cada lado) y, comoservicenow_where_used, acepta unscopede aplicación opcional.servicenow_where_usedtambién encuentra referencias estructurales — campos de referencia de diccionario, diseños de lista y formulario, variables de catálogo, entradas de flujo e informes — en una secciónstructuralseparada. - Trazado de flujos y verificación de código (Fase 8): trazar de forma determinista qué
ejecuta una operación de tabla (paquete
flows— reglas de negocio, flujos, workflows y notificaciones, en orden, con un diagrama de flujo Mermaid), leer flujos de Flow Designer e historial de ejecución, y hacer lint de scripts contra un conjunto de reglas local con un informe agregado de salud de código (codecheck). Ejecutar pruebas ATF a través de la API CI/CD (atf, opt-in, no predeterminado — las herramientas de ejecución se ejecutan en la instancia). - Deshacer basado en diario (
revert): listar el diario de escritura local y revertir un create/update/delete aplicado — con una verificación de desviación contra ediciones posteriores. - Lecturas genéricas de artefactos (
artifacts, opt-in): listar y leer cualquier tipo de artefacto registrado — políticas de UI con sus acciones, páginas de portal con su diseño, flujos, elementos de catálogo y más — con estado de ámbito y gestión de SDK. - Conciencia de update sets (
updatesets, opt-in): listar update sets, resumir un conjunto por artefacto, compararlo con otro perfil o una instantánea — y vincular escrituras de Table aplicadas a un update set nombrado (update_set/SN_UPDATE_SET), restaurando el conjunto actual del usuario después. - Operaciones y salud de datos (
ops, opt-in): lecturas acotadas de "por qué está lento" del registro del sistema, la cola del programador, la cola de correo saliente y semáforos, además deservicenow_data_health— claves duplicadas, referencias huérfanas y obsoletas para una tabla, a partir de conteos de la API Aggregate. - Lecturas de operaciones (opt-in): historial de cambios de un registro desde
sys_auditysys_journal_field(history— incluidos los comentarios y notas de trabajo que la API Table devuelve vacíos), propiedades del sistema con secretos enmascarados y un conjunto registrado y reversible (properties), y búsquedas de usuario / grupo / rol con membresías (directory). Las ejecuciones de ATF pueden esperar su resultado (wait_seconds), y las inserciones de Import Set informan la ejecución de transformación y los mapas. - Autodocumentación: una base de conocimiento local en Markdown (lectura/escritura/búsqueda) más generadores deterministas de Mermaid (diagramas ER a partir de referencias, diagramas de flujo de ciclo de vida de registros a partir de reglas de negocio) para que el servidor construya contexto duradero y reutilizable.
- Prompts: flujos de trabajo listos (triaje de incidentes, análisis de impacto de cambios, documentar una tabla, diagnosticar una instancia lenta) que orquestan las herramientas.
- Paquetes de herramientas: cargar solo los grupos de herramientas que necesitas mediante
SN_TOOL_PACKAGES(perfil predeterminadocore;allhabilita todo). - Autenticación Básica u OAuth 2.0 sobre HTTPS; la contraseña/token nunca se devuelve en el eco.
- Controles de privilegio mínimo: listas de permitir/denegar de tablas y un modo global de solo lectura.
- Resiliencia: tiempo de espera por solicitud, reintento con retroceso y
Retry-After, protección SSRF y un guardián de tamaño de resultado. - Anotaciones de herramientas y recursos MCP, cargas de error estructuradas y registro estructurado en stderr.
- Credenciales en un archivo de entorno (proyecto,
~/.config, oSN_ENV_FILE), actualizables en tiempo de ejecución medianteservicenow_set_credentials.
Requisitos
- Node.js 20+ (obligatorio:
engines+ un guardián de tiempo de ejecución con un mensaje claro; el proyecto apunta a la versión en.nvmrc).
Configuración
Desde el código fuente (para desarrollo):
npm install
npm run build
O ejecuta el paquete publicado directamente, sin clonar:
npx servicenow-mcp-ai
Instalar en tu cliente MCP
Cada cliente lanza el mismo comando stdio, npx -y servicenow-mcp-ai (Node.js 20+),
bajo el nombre de servidor servicenow. Los enlaces de un clic y los fragmentos a continuación no llevan credenciales:
mantenlas en el archivo de entorno (~/.config/servicenow-mcp-ai/.env, consulta
Configurar credenciales), ejecuta el npx servicenow-mcp-ai login único
para OAuth, o pide al asistente que llame a
servicenow_set_credentials una vez que el servidor esté conectado. Una variable de entorno real
establecida en una configuración de cliente anula el archivo de entorno, así que solo agrega un bloque env cuando
realmente lo necesites — y nunca pongas SN_PASSWORD u otros secretos en una configuración de cliente que compartas
o confirmes (consulta SECURITY.md).
| Cliente | Una línea | Archivo de configuración |
|---|---|---|
| VS Code (Copilot Chat) | Botón arriba, o code --add-mcp (abajo) — o la extensión ServiceNow MCP | .vscode/mcp.json (servers) |
| VS Code Insiders | Botón arriba, o code-insiders --add-mcp (abajo) | .vscode/mcp.json (servers) |
| Claude Code | claude mcp add servicenow -- npx -y servicenow-mcp-ai, o el plugin | .mcp.json (mcpServers) |
| Claude Desktop | — (edita el archivo de configuración) | claude_desktop_config.json (mcpServers) |
| Cursor | Botón arriba, o el deeplink cursor:// (abajo) | ~/.cursor/mcp.json o .cursor/mcp.json (mcpServers) |
| Windsurf | — (edita el archivo de configuración) | ~/.codeium/windsurf/mcp_config.json (mcpServers) |
| Cline | — (MCP Servers → Configure MCP Servers) | cline_mcp_settings.json (mcpServers) |
| Zed | — (edita la configuración) | settings.json (context_servers) |
| JetBrains AI Assistant | — (Settings → Tools → AI Assistant → Model Context Protocol) | Diálogo JSON (mcpServers) |
| Gemini CLI | — (edita la configuración) | ~/.gemini/settings.json (mcpServers) |
| Codex CLI | codex mcp add servicenow -- npx -y servicenow-mcp-ai | ~/.codex/config.toml ([mcp_servers.servicenow]) |
VS Code / VS Code Insiders
La ruta de configuración cero es la extensión ServiceNow MCP desde el Marketplace
(code --install-extension ivanbbaev.servicenow-mcp-ai); registra el servidor en
Copilot Chat (modo agente) automáticamente, sin mcp.json. Fuente: extension/.
Sin la extensión, agrega el servidor desde una terminal (perfil de usuario):
code --add-mcp '{"name":"servicenow","command":"npx","args":["-y","servicenow-mcp-ai"]}'
code-insiders --add-mcp '{"name":"servicenow","command":"npx","args":["-y","servicenow-mcp-ai"]}'
Los deeplinks crudos detrás de los botones (pégalos en la barra de direcciones del navegador):
vscode:mcp/install?%7B%22name%22%3A%22servicenow%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22servicenow-mcp-ai%22%5D%7D
vscode-insiders:mcp/install?%7B%22name%22%3A%22servicenow%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22servicenow-mcp-ai%22%5D%7D
O un archivo de espacio de trabajo, .vscode/mcp.json:
{
"servers": {
"servicenow": {
"type": "stdio",
"command": "npx",
"args": ["-y", "servicenow-mcp-ai"]
}
}
}
Claude Code
Plugin (configuración cero — instala el servidor conectado):
/plugin marketplace add IvanBBaev/servicenow-mcp-ai
/plugin install servicenow-mcp-ai
El plugin también incluye cinco habilidades de workflow — consulta Habilidades del plugin.
CLI — --scope user lo hace disponible en cada proyecto; --env establece una
variable no secreta (el host de la instancia) y deja los secretos en el archivo de entorno. Un valor establecido
de esta manera gana sobre el archivo de entorno, así que elimina --env si cambias de instancia
con servicenow_set_credentials:
claude mcp add servicenow --scope user --env SN_INSTANCE=your-instance.service-now.com -- npx -y servicenow-mcp-ai
Claude Desktop
claude_desktop_config.json — macOS ~/Library/Application Support/Claude/, Windows
%APPDATA%\Claude\ (Settings → Developer → Edit Config):
{
"mcpServers": {
"servicenow": {
"command": "npx",
"args": ["-y", "servicenow-mcp-ai"]
}
}
}
Reinicia Claude Desktop después de guardar.
Cursor
Usa el botón de arriba, o abre el deeplink directamente:
cursor://anysphere.cursor-deeplink/mcp/install?name=servicenow&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInNlcnZpY2Vub3ctbWNwLWFpIl19
O edita ~/.cursor/mcp.json (global) / .cursor/mcp.json (proyecto) con el mismo
bloque mcpServers que Claude Desktop.
Windsurf, Cline, JetBrains AI Assistant
Los tres aceptan el bloque mcpServers de Claude Desktop sin cambios:
- Windsurf —
~/.codeium/windsurf/mcp_config.json(Cascade → MCP servers → View raw config), luego actualiza la lista de servidores. - Cline — Icono de MCP Servers → Configure MCP Servers abre
cline_mcp_settings.json. - JetBrains AI Assistant — Settings → Tools → AI Assistant → Model Context Protocol (MCP) → Add → As JSON, pega el bloque.
{
"mcpServers": {
"servicenow": {
"command": "npx",
"args": ["-y", "servicenow-mcp-ai"]
}
}
}
Zed
En el settings.json de Zed (Zed → Settings → Open Settings):
{
"context_servers": {
"servicenow": {
"source": "custom",
"command": "npx",
"args": ["-y", "servicenow-mcp-ai"],
"env": {}
}
}
}
Gemini CLI
~/.gemini/settings.json (usuario) o .gemini/settings.json (proyecto):
{
"mcpServers": {
"servicenow": {
"command": "npx",
"args": ["-y", "servicenow-mcp-ai"]
}
}
}
Verifícalo con /mcp dentro de una sesión de Gemini CLI.
Codex CLI
codex mcp add servicenow --env SN_INSTANCE=your-instance.service-now.com -- npx -y servicenow-mcp-ai
O ~/.codex/config.toml:
[mcp_servers.servicenow]
command = "npx"
args = ["-y", "servicenow-mcp-ai"]
# Optional, non-secret only — secrets stay in ~/.config/servicenow-mcp-ai/.env:
# env = { SN_INSTANCE = "your-instance.service-now.com" }
¿Prefieres una instalación global (npm install -g servicenow-mcp-ai)? Reemplaza
"command": "npx", "args": ["-y", "servicenow-mcp-ai"] con
"command": "servicenow-mcp-ai" en cualquier fragmento. El
MCP Inspector funciona de la misma manera:
npx @modelcontextprotocol/inspector npx -y servicenow-mcp-ai.
Los enlaces de un clic se generan a partir de package.json mediante scripts/install-links.mjs
(node scripts/install-links.mjs los imprime); test/install-links.test.js falla si
este README o el sitio de documentación se desvían de las cadenas generadas.
Inicio rápido
La ruta más rápida son tres líneas de autenticación Basic: establece estas (en el archivo de entorno o en el entorno real) y estarás conectado:
SN_INSTANCE=dev12345.service-now.com
SN_USER=your.username
SN_PASSWORD=your-password
Todo lo demás es ajuste opcional; consulta la referencia completa de Variables de entorno para el resto.
Más allá de una prueba rápida, prefiere OAuth sobre una contraseña almacenada. Para cualquier cosa compartida o de larga duración, ejecuta el
npx servicenow-mcp-ai loginúnico en su lugar — almacena un token de actualización, no tu contraseña. Consulta Configurar credenciales → OAuth 2.1.
Verifica tu configuración
Una vez establecidas las tres variables, confirma la conexión antes de comenzar:
- Ejecuta la herramienta
servicenow_test_connection— lee un registrosys_usery reportaok, estado HTTP y latencia. - Ejecuta
servicenow_check_capabilities— previsualiza qué tablassys_*restringidas por administrador puede leer realmente el usuario conectado.
O haz ambas desde el shell de una sola vez:
npx servicenow-mcp-ai doctor # checks credentials, reachability and capabilities
¿Prefieres que te lo pregunten? npx servicenow-mcp-ai init solicita la instancia, el
método de autenticación y las credenciales, escribe el archivo de entorno y ejecuta doctor — consulta
Interfaz de línea de comandos.
Configurar credenciales
Las credenciales viven en .env en la raíz del proyecto (ignorado por git):
SN_INSTANCE=your-instance.service-now.com
SN_USER=your.username@example.com
SN_PASSWORD=your-password
SN_INSTANCE acepta dev12345, dev12345.service-now.com o una URL completa https://.
También puedes establecerlas o cambiarlas en tiempo de ejecución llamando a la
herramienta servicenow_set_credentials — los nuevos valores se escriben directamente de vuelta al archivo de entorno.
Mover un perfil configurado a una instancia diferente requiere user y password en la misma
llamada (los secretos almacenados nunca se envían a otro host), y el cambio debe ser confirmado por
el cliente — los clientes sin soporte de elicitación son rechazados a menos que
SN_ALLOW_UNCONFIRMED_CREDENTIAL_CHANGE=1 esté establecido.
La herramienta también establece el método de autenticación (auth), el ID de cliente OAuth (oauth_client_id) y el grant
(oauth_grant). Los secretos — la clave API y el secreto de cliente OAuth — nunca son argumentos de herramienta:
listalos en request_secrets y el servidor los solicita mediante un aviso de elicitación, por lo que
nunca aparecen en una llamada de herramienta registrada, en el resultado o en el diario de escritura. Un cliente sin
soporte de elicitación es rechazado (la exclusión anterior no aplica a los secretos); establece esas claves en
el archivo de entorno en su lugar. La regla de cambio de instancia sigue el método de autenticación resultante: un perfil
de clave API necesita una nueva clave API, un perfil OAuth client_credentials un nuevo secreto de cliente, el
grant OAuth password usuario, contraseña y secreto de cliente, Basic / none usuario y contraseña;
los perfiles de token portador, refresh_token y jwt_bearer no se pueden mover con esta herramienta.
servicenow_get_status (authWarnings), servicenow_list_instances y doctor evalúan cada
perfil contra su propio método de autenticación — un perfil de clave API no necesita contraseña — y reportan el
método, el grant OAuth, el estado del token de actualización y el modo de escritura, nunca un valor secreto. Cuando
el grant de token de actualización devuelve un token de actualización rotado, se escribe de vuelta a la clave de entorno
de la que se leyó; si el archivo de entorno no se puede escribir, el nuevo token se mantiene en memoria (se pierde al
reiniciar) y se registra y muestra una advertencia mediante get_status / doctor. Los valores que el servidor escribe
mantienen las rutas de Windows literales (las barras invertidas están entre comillas simples) y un archivo de entorno CRLF permanece CRLF. En
Windows, el archivo de entorno hereda la ACL de su carpeta — restringe el acceso tú mismo (por ejemplo
icacls .env /inheritance:r /grant:r "%USERNAME%:F"); el servidor solo advierte, nunca ejecuta
icacls.
El archivo de entorno se resuelve en este orden: SN_ENV_FILE, luego
~/.config/servicenow-mcp-ai/.env (XDG) si está presente, luego el .env de la raíz del proyecto.
Una instalación global/npx por lo tanto escribe en tu configuración de usuario en lugar de en
node_modules. Las variables de entorno reales siempre tienen prioridad sobre el archivo.
Primera ejecución: el modelo se configura solo
En initialize el servidor envía instructions construido a partir de la configuración en vivo: los paquetes
habilitados y el recuento de herramientas, el modo de escritura, el perfil activo y, cuando no hay nada configurado,
lo que falta y cómo solucionarlo. Hasta entonces, cada herramienta de instancia falla con
error.code: "NOT_CONFIGURED" y una pista que nombra servicenow_set_credentials. Una primera sesión
con un archivo de entorno vacío se ve así (resumido):
instructions Credentials: NOT configured (missing instance, user, password). Instance tools
fail with error.code NOT_CONFIGURED until fixed. To configure: ask the user for
the instance and credentials, call servicenow_set_credentials, then
servicenow_test_connection. Never guess or echo a password.
user How many open P1 incidents do we have?
model Which instance, user and password should I connect with?
user dev12345, admin, ••••••
tool call servicenow_set_credentials { instance: "dev12345", user: "admin", password: … }
tool result { message: "Credentials saved", profile: "default", configured: true, password: "***" }
tool call servicenow_test_connection {}
tool result { ok: true, … }
tool call servicenow_aggregate { table: "incident", query: "active=true^priority=1" }
model There are 7 open P1 incidents.
servicenow_get_status luego muestra el estado en vivo: versión del servidor, tiempo de actividad y transporte,
policy.summary, límites, redacción, el directorio de documentación, contadores de escritura, la fuente del perfil y
profileDetails (modo de autenticación por perfil, modo de escritura y claves faltantes) — nunca un valor secreto.
OAuth 2.1 (Authorization Code + PKCE) — recomendado
Registra un endpoint de API OAuth de Authorization Code en ServiceNow con una
URL de redirección de bucle invertido (por ejemplo, http://localhost:53682/callback), establece
SN_OAUTH_CLIENT_ID (y SN_OAUTH_CLIENT_SECRET para un cliente confidencial),
luego ejecuta el inicio de sesión interactivo único:
npx servicenow-mcp-ai login
Abre el navegador, apruebas, y el token de actualización obtenido se almacena en tu archivo de entorno. El servidor luego se ejecuta de forma no interactiva (grant refresh_token) — nunca se almacena una contraseña. PKCE (S256) siempre se usa.
El grant de contraseña OAuth 2.0 (ROPC) está obsoleto en OAuth 2.1 y deshabilitado en muchas instancias; prefiere
login. Los grantsclient_credentialsyrefresh_tokensiguen siendo compatibles para cuentas de servicio. Consulta .env.example.
Métodos de autenticación compatibles
Cada método de autenticación REST entrante que ofrece ServiceNow está cubierto:
| Método | SN_AUTH | Establecer | Notas |
|---|---|---|---|
| Basic | basic | SN_USER / SN_PASSWORD | Predeterminado. |
| OAuth 2.1 — Authorization Code + PKCE | oauth | npx servicenow-mcp-ai login | Recomendado. Interactivo, almacena un token de actualización. |
| OAuth — Client Credentials | oauth | SN_OAUTH_GRANT=client_credentials | Servicio a servicio. |
| OAuth — Refresh Token | oauth | SN_OAUTH_GRANT=refresh_token + SN_OAUTH_REFRESH_TOKEN | Establecido por login. |
| OAuth — JWT Bearer | oauth | SN_OAUTH_GRANT=jwt_bearer + SN_OAUTH_JWT_KEY | Aserción RS256; sin contraseña. |
| OAuth — Password (ROPC) | oauth | SN_OAUTH_GRANT=password | Obsoleto. |
| API Key | apikey | SN_API_KEY | Encabezado x-sn-apikey. |
| Bearer token | token | SN_BEARER_TOKEN o SN_TOKEN_FILE | Token preobtenido, usado tal cual. Un token rechazado (401) relee SN_TOKEN_FILE una vez, de lo contrario falla con AUTH_EXPIRED. |
| Mutual TLS (certificado de cliente) | none (o en capas) | SN_TLS_CLIENT_CERT / _KEY | El certificado se asigna a un usuario; necesita undici opcional. |
Variables de entorno
Toda la configuración se lee de .env (o del entorno de proceso real, que tiene
prioridad). Solo las primeras tres son obligatorias; el resto son ajustes opcionales.
Consulta .env.example para una plantilla.
| Variable | Requerido | Predeterminado | Descripción |
|---|---|---|---|
SN_INSTANCE | sí | — | Nombre de instancia, host o URL de https:// (dev12345, dev12345.service-now.com). |
SN_USER | sí | — | Nombre de usuario de ServiceNow para autenticación básica. |
SN_PASSWORD | sí | — | Contraseña de ServiceNow. Nunca se registra ni se devuelve mediante ninguna herramienta. |
SN_TIMEOUT_MS | no | 30000 | Tiempo de espera por solicitud en milisegundos. |
SN_MAX_RETRIES | no | 2 | Reintentos para fallos transitorios (429/5xx, errores de red). Las escrituras no idempotentes solo se reintentan en errores de conexión. |
SN_MAX_RECORDS | no | 10000 | Límite máximo de registros devueltos por una consulta de fetchAll. |
SN_MAX_RESULT_CHARS | no | 100000 | Presupuesto de caracteres para un resultado de consulta antes de truncarse para el cliente; la nota de truncamiento menciona a format:"file". Una instantánea, comparación o resultado de diagrama que supere el presupuesto se devuelve completo con un note. |
SN_OVERSIZE_TO_FILE | no | false | S-11: escribir una instantánea, comparación o resultado de diagrama que supere SN_MAX_RESULT_CHARS en un archivo bajo SN_DOCS_DIR (<profile>/exports/, <profile>/diagrams/) y devolver {path, bytes, preview} en su lugar. |
SN_RETRY_AFTER_MAX_MS | no | 60000 | Límite superior respetado para un encabezado Retry-After en 429/503; un valor mayor se ajusta para que un upstream con mal comportamiento no pueda dejar al cliente en espera durante minutos. |
SN_DEADLINE_MS | no | — | Presupuesto total de tiempo de pared para una solicitud lógica a través de reintentos, retroceso, espera en cola y reautenticación OAuth; el valor predeterminado es max(120000, 2 × SN_TIMEOUT_MS). Un reintento que no quepa en el presupuesto restante no se intenta: la llamada falla con el código DEADLINE_EXCEEDED. |
SN_ALLOWED_HOSTS | no | — | Lista de permitidos separada por comas de hosts permitidos (para dominios personalizados o de nube soberana). Cuando se establece, solo se contactan los hosts coincidentes. Cuando no se establece, solo se permiten instancias de *.service-now.com y se bloquean los hosts internos/de bucle local (protección SSRF). Una entrada puede incluir un puerto (host:8443) o ser un literal IPv6 entre corchetes ([2001:db8::1]); un puerto explícito distinto de 443 o un literal IPv6 en el valor de instancia se acepta solo cuando dicha entrada coincide con él, nunca bajo la política predeterminada. |
SN_MAX_BODY_BYTES | no | 52428800 | Cuerpo de respuesta más grande (bytes) leído en memoria; un cuerpo declarado o transmitido mayor falla con RESPONSE_TOO_LARGE. Las redirecciones nunca se siguen: un 3xx falla con REDIRECT_BLOCKED que nombra al host de destino. |
SN_AUTH | no | auto | Método de autenticación: basic, oauth, apikey, token o none (mTLS solo con certificado). Se detecta automáticamente según las claves presentes (clave API → bearer → OAuth → Básica). |
SN_API_KEY | no | — | Clave API entrante de ServiceNow, enviada como encabezado x-sn-apikey (habilita el modo apikey). |
SN_BEARER_TOKEN | no | — | Un token bearer obtenido previamente, enviado textualmente como Authorization: Bearer … (habilita el modo token). |
SN_TOKEN_FILE | no | — | Archivo que contiene el token bearer (habilita el modo token; tiene prioridad sobre SN_BEARER_TOKEN). Se vuelve a leer una vez cuando la instancia rechaza el token con 401, para que un emisor externo pueda rotarlo; de lo contrario, la llamada falla con AUTH_EXPIRED. |
SN_TOKEN_EXPIRES_AT | no | — | Caducidad ISO 8601 del token bearer. get_status / doctor advierten cuando quedan menos de 24 horas, cuando ha caducado o cuando no se puede analizar. |
SN_OAUTH_CLIENT_ID | no | — | ID de cliente OAuth (su presencia habilita OAuth). |
SN_OAUTH_CLIENT_SECRET | no | — | Secreto de cliente OAuth. |
SN_OAUTH_GRANT | no | password | Concesión OAuth: password (obsoleto — ROPC), client_credentials, refresh_token o jwt_bearer. El comando login lo establece en refresh_token por usted. |
SN_OAUTH_JWT_KEY | no | — | Clave privada PEM para la concesión jwt_bearer (o SN_OAUTH_JWT_KEY_FILE). Reclamaciones opcionales: SN_OAUTH_JWT_ISS (ID de cliente predeterminado), SN_OAUTH_JWT_SUB (predeterminado SN_USER), SN_OAUTH_JWT_AUD, SN_OAUTH_JWT_KID, SN_OAUTH_JWT_EXP_SEC (predeterminado 300). |
SN_OAUTH_REFRESH_TOKEN | no | — | Token de actualización para la concesión refresh_token. Se obtiene automáticamente mediante npx servicenow-mcp-ai login (Código de Autorización + PKCE). |
SN_OAUTH_REDIRECT_URI | no | http://localhost:53682/callback | URL de redirección de bucle local para el flujo PKCE login. Debe coincidir con la redirección registrada en el endpoint OAuth. |
SN_OAUTH_SCOPE | no | — | Ámbito OAuth opcional solicitado durante login. |
SN_HTTPS_PROXY | no | — | URL de proxy HTTPS saliente (http://user:pass@proxy:3128) para todo el tráfico de ServiceNow y OAuth; requiere el paquete opcional undici. Cuando no se establece, se respetan las variables ambientales HTTPS_PROXY / HTTP_PROXY junto con NO_PROXY; SN_HTTPS_PROXY en sí es explícito e ignora NO_PROXY. Las credenciales del proxy nunca se registran. |
SN_USER_AGENT_SUFFIX | no | — | Token adicional añadido al User-Agent enviado en cada solicitud (servicenow-mcp-ai/<version> (node/<major>; <transport>; <client>)), p. ej., un ID de equipo o ticket para correlación en el registro de transacciones de la instancia. ASCII imprimible, hasta 80 caracteres. |
SN_TLS_CLIENT_CERT | no | — | Certificado de cliente (PEM) para TLS mutuo (o SN_TLS_CLIENT_CERT_FILE). Con SN_TLS_CLIENT_KEY presenta un certificado de cliente; el perfil de autenticación mutua de ServiceNow lo asigna a un usuario. Requiere el paquete opcional undici (npm i undici). El certificado y la clave deben establecerse juntos: solo uno de ellos es un error de configuración. |
SN_TLS_CLIENT_KEY | no | — | Clave privada (PEM) para el certificado de cliente (o SN_TLS_CLIENT_KEY_FILE). |
SN_TLS_CA | no | — | Paquete de CA opcional (PEM) para confiar (o SN_TLS_CA_FILE): se aplica con o sin certificado de cliente; requiere el paquete opcional undici. SN_TLS_REJECT_UNAUTHORIZED=false desactiva la verificación (no recomendado; se advierte una vez al inicio). |
SN_TABLES_ALLOW | no | — | Lista de permitidos de tablas separada por comas; cuando se establece, solo estas tablas son accesibles. |
SN_TABLES_DENY | no | — | Lista de denegados de tablas separada por comas; siempre tiene prioridad sobre la lista de permitidos. |
SN_READONLY | no | false | Cuando es verdadero, rechaza toda creación/actualización/eliminación. |
SN_ALLOW_UNCONFIRMED_CREDENTIAL_CHANGE | no | false | H-2: exclusión voluntaria del operador: permite que servicenow_set_credentials continúe en clientes MCP sin soporte de elicitación (sin aviso de confirmación, sin servidor en vivo). Una denegación explícita aún se rechaza. Desactivado por defecto. |
SN_WRITE_MODE | no | plan | plan (predeterminado) previsualiza una escritura como una diferencia antes/después sin mutar; apply ejecuta; pasar apply:true fuerza una sola llamada. |
SN_DESTRUCTIVE_CONFIRM | no | off | H-3: confirmación para una apply:true destructiva (delete_record, delete_attachment, una batch de escritura, send_email, order_catalog_item, revert_write, change_conflicts con calculate:true) en modo plan. token: la vista previa del plan devuelve un plan_token de un solo uso y la aplicación debe devolverlo con los mismos argumentos, de lo contrario PLAN_REQUIRED; elicit: token más un aviso de confirmación en clientes con elicitación (una denegación es CONFIRM_DECLINED, registrada como rechazada). SN_WRITE_MODE=apply lo omite, excepto en un perfil marcado como prod (SN_ENV), que siempre es al menos elicit y se confirma también en modo aplicar. El valor predeterminado de 3.0 es una decisión del propietario (O-4). |
SN_PLAN_TOKEN_TTL_SEC | no | 600 | H-3: vida útil de un plan_token en segundos (30–86400). Los tokens viven solo en el proceso del servidor y se consumen con la aplicación. |
SN_BATCH_UNMAPPED | no | allow | H-4: una sub-solicitud servicenow_batch cuya ruta REST no pertenece a ningún paquete de herramientas: allow la verifica contra la tabla y los ejes de solo lectura únicamente; deny la rechaza (por lo que una nueva API de plugin no puede pasar SN_PACKAGES_DENY / SN_PACKAGES_READONLY dentro de un lote). Un lote anidado siempre se rechaza. El valor predeterminado de 3.0 es una decisión del propietario (O-4). |
SN_BATCH_MAX_REQUESTS | no | 1000 | H-4: la mayoría de sub-solicitudes que una llamada servicenow_batch puede llevar (1–1000), verificadas antes de enviar cualquier cosa. |
SN_PROTECTED_TABLES_WRITE | no | allow | H-11: deny rechaza escrituras en las tablas protegidas integradas (identidad, roles, ACL, sys_properties, OAuth, scripts, LDAP, certificados, fuentes de datos, mensajes REST — servicenow_explain_policy las lista) con POLICY_DENIED; una entrada exacta de SN_TABLES_ALLOW rehabilita una. Las lecturas no se ven afectadas. El valor predeterminado de 3.0 es una decisión del propietario (O-4). Por perfil: SN_PROFILE_<NAME>_PROTECTED_TABLES_WRITE. |
SN_IMPORT_SET_TABLES | no | — | H-11: patrones (*, ?) que la tabla de staging del conjunto de importación debe coincidir (p. ej., u_*,imp_*); sin establecer = cualquier tabla que permita la política de tablas. |
SN_MAX_WRITES_PER_SESSION | no | — | H-11: la mayoría de escrituras aplicadas a la instancia por sesión (el proceso en stdio, una sesión MCP sobre HTTP; un lote cuenta sus sub-solicitudes de escritura). Pasado eso, las escrituras fallan con WRITE_CAP antes de cualquier solicitud; get_status.writes.caps muestra el uso. Sin establecer = sin límite. |
SN_MAX_DELETES_PER_SESSION | no | — | H-11: la mayoría de eliminaciones aplicadas por sesión (WRITE_CAP). Sin establecer = sin límite. |
SN_MAX_BATCH_WRITES | no | — | H-11: la mayoría de sub-solicitudes de escritura (no GET) en un servicenow_batch (WRITE_CAP). Sin establecer = sin límite. |
SN_ENV | no | — | H-11: marca el perfil predeterminado como prod, test o dev (SN_PROFILE_<NAME>_ENV para otros). Un perfil prod permanece en modo plan incluso cuando aplicar está configurado, a menos que SN_PROD_WRITES (SN_PROFILE_<NAME>_PROD_WRITES) sea I_UNDERSTAND; sus aplicaciones destructivas siempre se confirman (al menos SN_DESTRUCTIVE_CONFIRM=elicit, también en modo aplicar — CONFIRM_REQUIRED para un cliente sin elicitación); los resultados llevan _meta.environment; use_instance advierte. SN_PROFILE_<NAME>_WRITE_MODE establece el modo de escritura por perfil. |
SN_PROD_WRITES | no | — | H-11: I_UNDERSTAND permite que un perfil predeterminado prod se ejecute en modo aplicar. |
SN_UPDATE_SET | no | — | S-6: conjunto de actualización (sys_id o nombre exacto) donde aterrizan las escrituras de herramientas de tabla aplicadas (crear / actualizar / upsert / eliminar); un update_set por llamada lo anula y SN_PROFILE_<NAME>_UPDATE_SET lo establece por perfil. El plan nombra el conjunto; el conjunto de actualización actual del usuario se cambia para la escritura y se restaura después. Las tablas de filas de datos se escriben sin cambios. |
SN_EMAIL_ALLOWED_DOMAINS | no | — | Dominios de destinatarios que servicenow_send_email puede dirigir (para/cc/cco; un dominio cubre sus subdominios, * permite cualquiera). Cuando no está establecido, cada destinatario debe ser el correo electrónico de un usuario en la tabla sys_user de la propia instancia; cualquier otra cosa falla con RECIPIENT_NOT_ALLOWED. |
SN_MAX_UPLOAD_BYTES | no | 10485760 | Mayor carga útil de adjunto decodificada, verificada en la longitud base64 antes de decodificar (PAYLOAD_TOO_LARGE). |
SN_UPLOAD_MIME_ALLOW | no | — | Lista de permitidos opcional de tipos de contenido de carga (exactos, o type/*); otros fallan con MIME_NOT_ALLOWED. |
SN_REDACT_FIELDS | no | — | DF-5: enmascarar estos valores de campo antes de que los registros lleguen al modelo (separados por coma/espacio). |
SN_REDACT_PII | no | false | DF-5: también enmascarar patrones de correo electrónico/teléfono/identificación nacional dentro de valores de cadena. Desde H-5, ambas configuraciones de redacción se aplican profundamente a cada resultado de herramienta (éxito y error) y al diario de escritura. |
SN_JOURNAL_MAX_BYTES | no | 20971520 | H-5: tamaño (bytes, predeterminado 20 MiB) en el que write-journal.jsonl rota a write-journal.<ISO-time>.jsonl; la cadena de hash continúa entre archivos. |
SN_CSV_FORMULA_GUARD | no | true | H-5: prefijar celdas de texto CSV que comiencen con =, +, -, @, tabulador o CR con ' para que las hojas de cálculo nunca las evalúen (un -5 de texto se exporta como '-5). 0 opta por no participar. |
SN_CSV_BOM | no | true | H-5: anteponer una marca de orden de bytes UTF-8 a las exportaciones format:"csv" para que Excel decodifique texto no ASCII. 0 opta por no participar. |
SN_TRANSPORT | no | stdio | DF-6: stdio (predeterminado) o http (HTTP Streamable para clientes remotos/agentes). |
SN_PORT | no | 3000 | DF-6: puerto TCP para el transporte http. |
SN_HTTP_HOST | no | 127.0.0.1 | DF-6: dirección de enlace para el transporte http (loopback por defecto). |
SN_HTTP_TOKEN | no | — | DF-6: cuando se establece, las solicitudes http deben enviar Authorization: Bearer <token>. |
SN_LOG_LEVEL | no | info | Verbosidad de registro en stderr: error, warn, info, debug. |
SN_LOG_FORMAT | no | json | E-5: formato de línea de registro en stderr — json (un objeto por línea) o text (HH:MM:SS level message key=value). |
SN_LOG_FILE | no | — | E-5: también agregar cada línea de registro (JSON Lines, redactado, modo 0600) a este archivo, con rotación basada en tamaño (<file>.1 … <file>.5). Stderr sigue funcionando. |
SN_LOG_FILE_MAX_BYTES | no | 10485760 | E-5: umbral de rotación para SN_LOG_FILE (bytes). |
SN_METRICS | no | off | E-5: solo transporte HTTP — servir métricas de Prometheus en GET /metrics, detrás de SN_HTTP_TOKEN (deshabilitado cuando no se establece token). |
SN_EXPERIMENTAL_TASKS | no | 0 | M-9, experimental: 1 agrega un argumento opcional run_as_task:true a snapshot_instance, compare_instances, run_atf_test, run_atf_suite, code_health y query_table (solo format:"file"). Tal llamada devuelve un identificador de tarea MCP de inmediato (_meta["io.modelcontextprotocol/related-task"]); el cliente consulta tasks/get, lee tasks/result (conservado 1 h, redactado) o lo detiene con tasks/cancel. Apagado: esquemas sin cambios. Construido sobre la API de tareas experimental del SDK. |
SN_LOG_NOTIFY_RATE | no | 20 | M-8: notificaciones de registro por segundo y sesión de cliente sobre la capacidad de registro de MCP (ráfaga 50, o la tasa si es mayor). Las líneas que lo superan se cuentan y se informan en una advertencia de "N mensajes de registro suprimidos" por minuto; stderr nunca se limita. 0 = sin límite. |
SN_ENV_FILE | no | — | Ruta explícita al archivo de entorno para leer/escribir. |
SN_TOOL_PACKAGES | no | core | Paquetes de herramientas o perfiles separados por coma/espacio para habilitar. Perfiles: core (predeterminado), all y los preajustes reader | developer | admin (ver Preajustes). Paquetes: table, schema, aggregate, attachment, importset, batch, catalog, change, knowledge, cmdb, scripts, flows, codecheck, docs, instance, email, atf, revert, artifacts, updatesets, ops, history, properties, directory, ui. Las herramientas de administración siempre están activadas. atf ejecuta pruebas en la instancia — habilítelo solo en una instancia que no sea de producción. |
SN_PACKAGES_DENY | no | — | Paquetes separados por coma/espacio para excluir incluso si están habilitados por SN_TOOL_PACKAGES. La única forma de bloquear APIs de plugin (catálogo, cambio, conocimiento…) — la política de tablas no las ve. |
SN_PACKAGES_READONLY | no | — | Paquetes separados por coma/espacio cuyas herramientas de escritura no están registradas; sus herramientas de lectura permanecen. Complemento por paquete al SN_READONLY global. |
SN_SCHEMA_CACHE_TTL_SEC | no | 300 | TTL para la caché de lecturas de esquema casi estáticas (list_tables, describe_table, get_cmdb_meta). 0 deshabilita el almacenamiento en caché. |
SN_SCHEMA_CACHE_MAX | no | 256 | Entradas máximas en la caché de lecturas de esquema; cuando está llena, se expulsa la entrada menos recientemente usada. Los contadores (size, hits, misses, evictions) aparecen en get_status bajo schemaCache. |
SN_CAPABILITY_TTL_MS | no | 600000 | Cuánto tiempo se almacena en caché una sonda de capacidad exitosa — la matriz servicenow_check_capabilities y la disponibilidad de API de plugin (CI/CD, Code Search, Batch…). Pase refresh: true para volver a sondear antes. |
SN_PLUGIN_NEGATIVE_TTL_MS | no | 60000 | Cuánto tiempo se almacena en caché una sonda de capacidad fallida (HTTP 401/403/404/5xx) o una API de plugin faltante antes de intentarlo nuevamente. Los errores de transporte nunca se almacenan en caché. |
SN_MAX_CONCURRENT | no | 4 | Máximo de solicitudes HTTP paralelas a la instancia (semáforo simple en proceso). |
SN_MAX_QUEUE | no | 64 | Máximo de solicitudes en espera por host para una ranura libre más allá de SN_MAX_CONCURRENT. El desbordamiento falla inmediatamente con código BUSY en lugar de acumularse. Los diagnósticos (servicenow_test_connection, doctor) omiten la cola para que aún respondan mientras está detenida. |
SN_QUEUE_TIMEOUT_MS | no | SN_TIMEOUT_MS | Tiempo máximo que una solicitud espera una ranura antes de fallar con código BUSY. El tiempo de espera no se factura al tiempo de espera por intento, solo a SN_DEADLINE_MS. |
SN_BREAKER_THRESHOLD | no | 0 (off) | Disyuntor de circuito opcional por host: después de este número de solicitudes fallidas consecutivas (error de transporte, plazo vencido, 5xx), las solicitudes posteriores fallan rápidamente con el código CIRCUIT_OPEN hasta que pase SN_BREAKER_RESET_MS. Los diagnósticos nunca se bloquean. |
SN_BREAKER_RESET_MS | no | 30000 | Cuánto tiempo un disyuntor de circuito abierto rechaza solicitudes antes de permitir una solicitud de prueba; el primer fallo lo reabre, el primer éxito lo cierra. |
SN_INCLUDE_REF_LINKS | no | false | Los campos de referencia se devuelven sin sus URLs de link de forma predeterminada (ahorro de tokens). Establezca true para incluirlos. |
SN_RESULT_PRETTY | no | false | Los resultados de las herramientas son JSON compacto de forma predeterminada (el formato bonito duplica aproximadamente los tokens). Establezca true para una salida indentada. |
SN_DOCS_DIR | no | docs/instance | Directorio donde el paquete docs lee/escribe Markdown. Las rutas relativas se resuelven contra el directorio de trabajo. También contiene el diario de escritura por perfil: agregue docs/instance/ a .gitignore en cualquier repositorio desde el que ejecute el servidor. |
SN_DOCS_MAX_FILE_BYTES | no | 5242880 | Límite de tamaño por archivo para las herramientas de documentación: escrituras más grandes se rechazan, las lecturas devuelven los primeros bytes con truncated: true, la búsqueda omite el archivo. |
SN_DOCS_STALE_DAYS | no | 30 | servicenow_docs_list marca un documento generado stale cuando su sn_generated_at es más antiguo que este número de días. |
SN_DOCS_SEARCH_MAX | no | 200 | La mayoría de coincidencias que servicenow_docs_search devuelve; más allá de eso, el resultado lleva truncated: true. |
SN_DIAGRAM_MAX_NODES | no | 200 | Límite de nodos para los diagramas Mermaid generados (flujo de tablas, rastreo de eventos, dónde se usa; tablas en un diagrama ER detallado). Los nodos que lo superen se pliegan en un nodo +N more. |
SN_SDK_MANAGED_SCOPES | no | — | P-3: ámbitos de aplicación separados por comas/espacios (espacio de nombres como x_acme_app, o el sys_id de sys_scope) que declara como gestionados por un proyecto ServiceNow SDK (Fluent). La fuente de mayor autoridad para la detección gestionada por SDK; listado en get_status / check_capabilities bajo sdkManaged. |
SN_SDK_MANAGED_WRITES | no | warn | P-22: escrituras en un ámbito gestionado por SDK (un registro cuyo sys_scope P-3 detecta como gestionado por SDK) desde create_record, update_record, upsert_record, delete_record, set_property y revert_write: warn previsualiza y aplica con un bloque sdkManaged nombrando la alternativa Fluent; deny rechaza la aplicación con SDK_MANAGED_SCOPE (el plan dice would_refuse); allow omite la verificación. Se ejecuta después de la política de tablas y no cuesta nada a menos que SN_SDK_MANAGED_SCOPES o SN_SDK_PROJECT_DIRS esté establecido. |
SN_SDK_PROJECT_DIRS | no | — | P-3: directorios (separados por comas o el delimitador de ruta de la plataforma) escaneados en solo lectura para proyectos SDK: cada now.config.json declara su scope / scopeId como gestionado por SDK. Acotado (profundidad 4, 2000 directorios, 100 archivos de configuración, 256 KiB por archivo), nunca sigue enlaces simbólicos, omite carpetas ocultas, node_modules y de compilación, y no lee nada más que now.config.json. |
SN_CODESEARCH | no | false | Opte por la API de búsqueda de código (sn_codesearch) para servicenow_search_code (FT-7). Cuando true y el plugin está activo, reemplaza la iteración LIKE; vuelve a LIKE ante cualquier fallo. |
SN_PROFILE_<NAME>_* | no | — | Perfiles de conexión nombrados: SN_PROFILE_DEV_INSTANCE / _USER / _PASSWORD definen el perfil dev. Las claves simples SN_INSTANCE/SN_USER/SN_PASSWORD son el perfil default. |
SN_ACTIVE_PROFILE | no | default | Qué perfil usan las herramientas. Cambie en tiempo de ejecución con servicenow_use_instance (persistido en el archivo de entorno). |
Política de acceso de dos ejes
El acceso se controla en dos ejes independientes: tablas y paquetes de herramientas.
| Eje | Habilitar / denegar / solo lectura | Ejemplo |
|---|---|---|
| Tablas | SN_TABLES_ALLOW / SN_TABLES_DENY / SN_READONLY | SN_TABLES_DENY=change_request bloquea la API de Tablas y (desde H-4) las herramientas de Cambio, que verifican su tabla subyacente. |
| Paquetes | SN_TOOL_PACKAGES / SN_PACKAGES_DENY / SN_PACKAGES_READONLY | SN_PACKAGES_DENY=change elimina las herramientas de Gestión de Cambios y bloquea la API del plugin sn_chg_rest, también dentro de un lote. |
Desde H-4, las herramientas respaldadas por plugins (Cambio, Catálogo, Conocimiento, Correo electrónico, ATF) y los adjuntos (a través de la tabla del registro padre) también obedecen el eje de tablas; el eje de paquetes aún elimina superficies completas. Consulte Notas de seguridad para el modelo completo (incluyendo cómo la API de Lotes obedece ambos ejes).
Sintaxis de listas: las listas de tablas (SN_TABLES_ALLOW / SN_TABLES_DENY) están
separadas por comas; las listas de paquetes (SN_TOOL_PACKAGES, SN_PACKAGES_DENY,
SN_PACKAGES_READONLY) aceptan comas o espacios en blanco. Los espacios circundantes se
recortan en ambas, y la coincidencia de tablas no distingue entre mayúsculas y minúsculas — por lo que
SN_TABLES_DENY=Change_Request, sys_user funciona. Desde H-11, una entrada de tabla puede ser
un patrón (* cualquier secuencia, ? un carácter): SN_TABLES_DENY=sys_* bloquea
sys_user y deja incident intacto. El orden es: una denegación exacta, una
permitida exacta, una denegación por patrón, las tablas protegidas (escrituras, con
SN_PROTECTED_TABLES_WRITE=deny), luego los patrones de la lista de permitidas. Pregunte
servicenow_explain_policy({table, action}) qué regla decide, o lea
servicenow://policy.
Ejecutar / depurar
- VS Code: abra la Paleta de Comandos e inicie el servidor definido en .vscode/mcp.json, luego úselo desde Chat.
- Inspector MCP:
npm run inspector - Directamente:
npm start
Observabilidad
-
Estado.
servicenow_get_statuslleva un bloqueobservability: por herramienta{count, errors, p50, p95, totalMs}(percentiles en ms sobre las últimas 256 llamadas de cada herramienta — la memoria permanece acotada), aciertos/fallos de caché de esquema, contadores de reintentos por host, límites y ocupación de cola, estado del interruptor de circuito y las últimasX-RateLimit-*cabeceras que cada host envió. Nunca llama a la instancia. -
Registros. Los registros van solo a stderr (stdout es el protocolo MCP).
SN_LOG_FORMAT=textcambia de líneas JSON a un formato legible por humanos;SN_LOG_FILEtambién añade líneas JSON a un archivo rotado por tamaño. Los campos con nombres de credenciales (password,token,authorization, …) se enmascaran en cada destino, y las reglasSN_REDACT_FIELDS/SN_REDACT_PIIse aplican además. -
Enlaces de rastreo. El bucle de solicitudes publica en
node:diagnostics_channel, por lo que un suscriptor de OpenTelemetry (o cualquier otro) puede conectarse sin dependencia de este servidor:Canal Cuándo Campos de mensaje servicenow-mcp:http.request.startcomienza una solicitud lógica id,system,method,host,telemetryKey,url, yprofile/requestId/sessionId/toolen una llamadaservicenow-mcp:http.request.endse resolvió con una respuesta OK los campos de inicio más status,attempts,msservicenow-mcp:http.request.errorfalló los campos de inicio más attempts,ms,status,code,errorName,errorMessageservicenow-mcp:http.request.retryse reproduce un intento (backoff, re-autenticación 401) id,system,method,host,url,attempt,reason,waitMsurlnunca incluye la cadena de consulta; las cabeceras, los cuerpos y las credenciales nunca se publican, yerrorMessagepasa por las reglas de redacción. -
Prometheus. Con el transporte HTTP,
SN_METRICS=1ySN_HTTP_TOKENconfigurados,GET /metrics(mismo token de portador) sirve las mismas cifras en el formato de texto de Prometheus (familiasservicenow_mcp_*, etiquetadas solo portool/host). Sin un token, el endpoint permanece desactivado y se registra una advertencia.
Interfaz de línea de comandos
El binario publicado servicenow-mcp-ai (ejecútelo directamente, o mediante
npx servicenow-mcp-ai) inicia el servidor MCP cuando no se le da ningún comando, y
de lo contrario ejecuta uno de los comandos siguientes y sale. La configuración de conexión proviene de
variables de entorno / el archivo de entorno (consulte Variables de entorno).
servicenow-mcp-ai --help lista todo; --version imprime la versión. Un
comando u opción desconocido imprime el uso en stderr y sale con 2 — nunca
inicia el servidor.
| Comando | Opciones | Qué hace | Códigos de salida |
|---|---|---|---|
servicenow-mcp-ai | (ninguna) | Inicia el servidor MCP. El transporte (stdio predeterminado, o http) se elige mediante SN_TRANSPORT; se ejecuta hasta SIGINT/SIGTERM. stdout es el canal de protocolo. | 0 apagado limpio · 1 error fatal de inicio |
servicenow-mcp-ai init | --profile <name>, --skip-doctor | Configuración interactiva: solicita la instancia, el método de autenticación y sus credenciales (secretos mediante un aviso oculto), escribe el archivo de entorno, luego ejecuta doctor. | el código de salida doctor · 0 con --skip-doctor · 2 respuestas rechazadas / inválidas |
servicenow-mcp-ai doctor | --json, --ascii, --profile <name> | Verificación de salud: credenciales, una sonda de conectividad en vivo y la verificación previa de capacidades. La primera línea nombra el archivo de entorno que se usó. | 0 saludable · 1 degradado o inalcanzable · 2 no configurado |
servicenow-mcp-ai login | --profile <name> | Inicio de sesión único OAuth 2.1 Código de Autorización + PKCE: abre el navegador, captura la redirección de bucle local, almacena un token de actualización. | 0 éxito · 1 inicio de sesión fallido |
servicenow-mcp-ai drift <profileA> <profileB> | (ninguna) | Puerta de deriva CI DF-3: compara las dos instancias y escribe un informe de diferencias en Markdown. | 0 sin deriva · 1 deriva encontrada · 2 uso / error |
servicenow-mcp-ai support-bundle | --out <file>, --profile <name> | Escribe un archivo JSON para un informe de error e imprime su ruta en stdout. | 0 escrito · 1 fallo de escritura |
init escribe a través del mismo escritor de archivos de entorno atómico, solo propietario (0600) que
servicenow_set_credentials, al archivo que doctor nombra (por defecto
~/.config/servicenow-mcp-ai/.env). Pregunta, en orden: la instancia (dev12345
o un host completo; un dominio personalizado necesita SN_ALLOWED_HOSTS), el método de autenticación
(basic / oauth / apikey / token), luego la configuración de ese método — para
oauth la concesión (client_credentials, password, o authorization_code,
que termina con una pista para ejecutar login). Los secretos nunca se muestran ni se registran; el
resumen lista solo los nombres de las claves. Con --profile qa las claves se escriben como
SN_PROFILE_QA_*. Un perfil existente se sobrescribe solo después de un y. Las
respuestas se pueden canalizar, una por línea, que es como CI y las pruebas lo manejan:
printf 'dev12345\nbasic\nalice\n%s\n' "$SN_PASSWORD" | npx servicenow-mcp-ai init
Sin una terminal y sin respuestas canalizadas, init se niega (salida 2) y
no escribe nada.
doctor imprime ASCII simple ([ok] / [x] en lugar de marcas de verificación) con
--ascii, cuando stdout no es una terminal, y en Windows fuera de Windows Terminal.
--json imprime un documento JSON en su lugar: envFile, status, summary,
checks[] (name, ok, detail), config, connection, capabilities y
serverStatus (el payload servicenow_get_status) — por ejemplo
servicenow-mcp-ai doctor --json | jq .checks. Los códigos de salida son los mismos.
support-bundle recopila el payload doctor --json, cada configuración SN_*
con secretos enmascarados como ***, npm ls --omit=dev (mejor esfuerzo), el
resumen del manifiesto de herramientas (versión, recuentos de herramientas y paquetes, herramientas activas) y las últimas
200 líneas de SN_LOG_FILE cuando se configura una. Cada valor enmascarado también se limpia
de todo el archivo. La ruta predeterminada es
./servicenow-mcp-ai-support-<timestamp>.json (modo 0600). Los nombres de instancia y de usuario
no están enmascarados — revise el archivo antes de adjuntarlo a un problema.
login opera en el perfil activo (SN_ACTIVE_PROFILE, predeterminado
default) y lee, para ese perfil:
SN_INSTANCE— obligatorio; la instancia de destino.SN_OAUTH_CLIENT_ID— obligatorio; id de cliente de un endpoint de API OAuth de Código de Autorización.SN_OAUTH_CLIENT_SECRET— opcional; para un cliente confidencial.SN_OAUTH_REDIRECT_URI— opcional; URL de bucle local, predeterminadohttp://localhost:53682/callback. Debe coincidir con la redirección registrada en el endpoint.SN_OAUTH_SCOPE— opcional; ámbito OAuth solicitado.
En caso de éxito, escribe SN_AUTH=oauth, SN_OAUTH_GRANT=refresh_token y
SN_OAUTH_REFRESH_TOKEN de vuelta al archivo de entorno (con prefijo de perfil cuando el perfil
no es default). La URL de autorización se imprime en stderr en caso de que el navegador
no se abra automáticamente.
drift toma dos nombres de perfil posicionales; cada uno debe resolverse a un perfil
configurado (SN_PROFILE_<NAME>_*, o las claves simples SN_INSTANCE / SN_USER /
SN_PASSWORD para default). El informe en Markdown se escribe en stdout
(captúrelo como un artefacto de CI); un resumen de deriva de una línea va a stderr.
Puerta de deriva CI (DF-3)
Compare dos perfiles configurados y haga fallar una canalización en caso de deriva de configuración:
servicenow-mcp-ai drift dev prod # report on stdout; exit 1 on drift, 0 if clean, 2 on error
El informe muestra cada script cambiado como un bloque diff. La CLI compara tablas,
columnas, scripts, plugins y aplicaciones; las secciones de registros (sections en
servicenow_compare_instances) son opcionales, por lo que los códigos de salida no cambian.
servicenow_snapshot_instance escribe el mismo material en la carpeta de documentación, un
archivo por sección, como máximo cuatro secciones a la vez. Una ejecución interrumpida se marca
partial en index.json; vuelva a ejecutarla con resume: true para omitir cada sección cuyos
archivos no hayan cambiado.
Desarrollar
npm run check # full gate: build, lint, format check, coverage-gated tests, tarball guard, prod audit
npm test # unit tests only (node:test; needs a prior npm run build)
npm run lint # ESLint (flat config + typescript-eslint)
npm run format # format with Prettier
Consulta CONTRIBUTING.md para conocer las convenciones (un commit por tarea, las pruebas se incluyen con el cambio, documentación generada).
Herramientas
Esta tabla se genera a partir de los registros de herramientas: edita las definiciones de herramientas en src/tools/ y luego ejecuta npm run docs:readme.
| Paquete | Herramienta | Solo lectura | Descripción | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
table | servicenow_query_table | sí | Leer registros de cualquier tabla (API de Tablas): consulta codificada, campos, paginación, fetchAll | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
table | servicenow_get_record | sí | Leer un único registro de una tabla por su sys_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
table | servicenow_create_record | no | Crear un nuevo registro en una tabla con los valores de campo dados | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
table | servicenow_update_record | no | Actualizar campos en un registro existente identificado por su sys_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
table | servicenow_upsert_record | no | Crear o actualizar un registro que coincida con una clave exacta de pares campo/valor: sin coincidencia crea, una actualiza, se… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
table | servicenow_delete_record | no | Eliminar un registro de una tabla por su sys_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
schema | servicenow_list_tables | sí | Listar tablas de sys_db_object, opcionalmente filtradas por un fragmento de nombre o etiqueta | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
schema | servicenow_describe_table | sí | Listar las columnas de una tabla desde sys_dictionary (nombre, etiqueta, tipo, obligatorio, referencia, valor por defecto, solo lectura/uni… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
aggregate | servicenow_aggregate | sí | Calcular agregados del lado del servidor (count, avg, min, max, sum) sobre una tabla mediante la API de Estadísticas, con agrupación opcional… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attachment | servicenow_list_attachments | sí | Listar metadatos de adjuntos, opcionalmente limitados a un registro específico (tabla + sys_id) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attachment | servicenow_get_attachment | sí | Leer los metadatos de un único adjunto por su sys_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attachment | servicenow_download_attachment | sí | Descargar los bytes de un adjunto, devueltos como base64 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attachment | servicenow_upload_attachment | no | Adjuntar un archivo (proporcionado como base64) a un registro identificado por tabla + sys_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attachment | servicenow_delete_attachment | no | Eliminar un adjunto por su sys_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
importset | servicenow_insert_import_set_row | no | Insertar una fila en una tabla de preparación y ejecutar su mapa de transformación | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
importset | servicenow_get_import_set_row | sí | Leer el resultado de la transformación para una fila de preparación previamente insertada por su sys_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
batch | servicenow_batch | no | Ejecutar varias sub-solicitudes REST de ServiceNow en un único viaje de ida y vuelta HTTP mediante la API de Lotes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
catalog | servicenow_list_catalogs | sí | Listar los Catálogos de Servicios disponibles en la instancia (API de Catálogo de Servicios) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
catalog | servicenow_list_catalog_categories | sí | Listar las categorías dentro de un catálogo de servicios | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
catalog | servicenow_list_catalog_items | sí | Buscar/listar artículos de catálogo pedibles, opcionalmente por texto o categoría | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
catalog | servicenow_get_catalog_item | sí | Obtener un artículo de catálogo, incluyendo sus variables de pedido, por sys_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
catalog | servicenow_order_catalog_item | no | Pedir un artículo de catálogo directamente ('pedir ahora') | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
change | servicenow_list_changes | sí | Listar solicitudes de cambio mediante la API de Gestión de Cambios | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
change | servicenow_get_change | sí | Obtener una única solicitud de cambio por sys_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
change | servicenow_create_change | no | Crear un cambio normal, estándar o de emergencia | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
change | servicenow_update_change | no | Actualizar campos en una solicitud de cambio por sys_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
change | servicenow_change_conflicts | no | Leer conflictos de agenda para un cambio, o recalcularlos (calculate=true) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
knowledge | servicenow_search_knowledge | sí | Búsqueda de texto completo de artículos de conocimiento (API de Conocimiento), con consulta codificada y paginación opcionales | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
knowledge | servicenow_get_knowledge_article | sí | Obtener un artículo de conocimiento (contenido y metadatos) por sys_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
knowledge | servicenow_knowledge_highlights | sí | Listar artículos de conocimiento destacados o más vistos para el usuario actual | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cmdb | servicenow_list_cis | sí | Listar elementos de configuración de una clase CMDB mediante la API de Instancia CMDB consciente de clases | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cmdb | servicenow_get_ci | sí | Obtener un CI con sus atributos y relaciones entrantes/salientes por clase y sys_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cmdb | servicenow_create_ci | no | Crear un CI mediante la API de Instancia CMDB (enrutado a través de Identificación y Reconciliación) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cmdb | servicenow_update_ci | no | Actualizar los atributos de un CI mediante la API de Instancia CMDB (IRE) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cmdb | servicenow_get_cmdb_meta | sí | Obtener el esquema/metadatos de una clase CMDB (atributos, reglas de relación) desde la API Meta CMDB | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cmdb | servicenow_list_ci_relations | sí | Listar las relaciones de un CI desde cmdb_rel_ci, cada una orientada desde ese CI (saliente = es el padre,… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cmdb | servicenow_identify_reconcile | no | Enviar CIs y relaciones a través del Motor de Identificación y Reconciliación (/api/now/identifyreconcile),… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
scripts | servicenow_list_scripts | sí | Listar artefactos de script de un tipo como metadatos compactos (sin código fuente); 'type' lista los estándar y opt-i… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
scripts | servicenow_get_script | sí | Leer un artefacto de script completo, incluyendo su código fuente y contexto de ejecución | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
scripts | servicenow_search_code | sí | Buscar en el código fuente de scripts una subcadena literal en uno o todos los tipos de script | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
scripts | servicenow_table_logic | sí | Ensamblar la automatización que se ejecuta en una tabla: reglas de negocio (ordenadas por cuándo+orden), scripts de cliente, po… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
scripts | servicenow_where_used | sí | Encontrar referencias a una tabla, campo (tabla.campo) o script: líneas coincidentes en fuentes de script, reglas/ACLs att… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flows | servicenow_trace_table_event | sí | Rastrear qué se ejecutaría para una operación de tabla, en orden, sin ejecutar: mostrar/antes/después/async negocio… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flows | servicenow_list_flows | sí | Listar flujos de Flow Designer (sys_hub_flow) o flujos de trabajo heredados (kind: 'workflow') como metadatos compactos | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flows | servicenow_get_flow | sí | Obtener una vista estructurada de un flujo o flujo de trabajo: su disparador (tabla/condición/cuándo) y pasos ordenados | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flows | servicenow_get_flow_runs | sí | Leer evidencia de ejecución de flujo desde sys_flow_context — por sys_id de flujo o por el registro (documento) contra el que se ejecutó… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flows | servicenow_explain_flow | sí | Explicar un flujo/subflujo (disparador, árbol de pasos con entradas y píldoras decodificadas, llamadas a subflujo/acción expandidas, dr… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
codecheck | servicenow_lint_script | sí | Ejecutar reglas deterministas de calidad de código sobre un artefacto de script (sys_ids/URLs codificados, sin límite o en-loo… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
codecheck | servicenow_lint_table | sí | Lint de cada regla de negocio activa, script de cliente y política de UI de una tabla (vía table_logic), devolviendo por-sc… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
codecheck | servicenow_code_health | no | Informe de salud de código: recuentos de scripts por tipo, escaneo de seguridad de ACL (abiertas, rol público, con script, ACLs elevadas, p… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
docs | servicenow_docs_list | sí | Listar los documentos Markdown en la carpeta local de documentación de instancia (SN_DOCS_DIR), con metadatos por archivo… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
docs | servicenow_docs_read | sí | Leer un documento Markdown o un compañero .json generado desde la carpeta local de documentación de instancia; el r… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
docs | servicenow_docs_search | sí | Buscar en la documentación local de instancia una subcadena; devuelve un fragmento y el encabezado más cercano por coincidencia… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
docs | servicenow_docs_write | no | Crear o sobrescribir un documento Markdown en la carpeta local de docs y actualizar index.md | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
docs | servicenow_generate_er_diagram | sí | Construir un erDiagram de Mermaid desde sys_dictionary: una entidad por tabla, una relación por campo de referencia | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
docs | servicenow_generate_table_flow | sí | Diagrama de flujo Mermaid del ciclo de vida de un registro en una tabla: reglas de negocio activas por fase (mostrar/antes/después/… | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
docs | servicenow_document_table | no | Escribir /tablas/.md + .json solo desde metadatos: herencia, columnas, columnas de referencia, ER…
|