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

npm versionnpm downloadsnodetoolsLicense: MIT
CIcoveragelast commitMCPKnown Vulnerabilities

📖 Sitio de documentación →

Un servidor de Model Context Protocol 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 plugin 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-by-default: create/update/delete y las demás herramientas de escritura de registros devuelven una vista previa no mutante a menos que pases apply: true (o establezcas SN_WRITE_MODE=apply para 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, UI policy/action y ACL que lo toca, como JSON o un grafo Mermaid. El find usages de nivel IDE que ServiceNow no tiene botón para:

// 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 (display → before → after → reglas de negocio asíncronas, luego flows, 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é se desvió entre dev y prod?" — un diff en Markdown de tablas, columnas, scripts (por SHA-256) y plugins entre dos perfiles configurados, 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 el 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 + metadatos vía IRE), Service Catalog (navegar/solicitar artículos), 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: lee y busca el código propio de la instancia (reglas de negocio, script includes, scripts de cliente, UI policies/actions, trabajos programados, scripts transform/REST, ACLs) y obtén una imagen completa de la automatización de una tabla — todo de solo lectura a través de la API Table.
  • Trazado de flujos y verificación de código (Fase 8): traza de forma determinista qué ejecuta una operación de tabla (paquete flows — reglas de negocio, flows, workflows y notificaciones, en orden, con un diagrama de flujo Mermaid), lee flujos de Flow Designer e historial de ejecuciones, y analiza scripts contra un conjunto de reglas local con un informe agregado de salud del código (codecheck). Ejecuta pruebas ATF mediante la API CI/CD (atf, opt-in, no predeterminado — las herramientas de ejecución se ejecutan en la instancia).
  • Autodocumentación: una base de conocimiento local en Markdown (leer/escribir/buscar) más generadores Mermaid deterministas (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 para usar (triaje de incidentes, análisis de impacto de cambios, documentar una tabla) que orquestan las herramientas.
  • Paquetes de herramientas: carga solo los grupos de herramientas que necesitas mediante SN_TOOL_PACKAGES (perfil predeterminado core; all habilita todo).
  • Autenticación Basic u OAuth 2.0 sobre HTTPS; la contraseña/token nunca se devuelve en la respuesta.
  • Controles de privilegio mínimo: listas de permitir/denegar tablas y un modo global de solo lectura.
  • Resiliencia: tiempo de espera por solicitud, reintento con backoff y Retry-After, protección SSRF y protecció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 o SN_ENV_FILE), actualizables en tiempo de ejecución mediante servicenow_set_credentials.

Requisitos

  • Node.js 20+ (obligatorio: engines + una protección en 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

Regístralo con un cliente MCP (Claude Desktop, VS Code Chat, el Inspector…) apuntando el comando del servidor a npx:

{
  "mcpServers": {
    "servicenow": {
      "command": "npx",
      "args": ["-y", "servicenow-mcp-ai"]
    }
  }
}

Plugin de Claude Code (configuración cero — instala el servidor ya conectado):

/plugin marketplace add IvanBBaev/servicenow-mcp-ai
/plugin install servicenow-mcp-ai

VS Code — instala 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 manual. Código fuente: extension/.

Las credenciales se leen de ~/.config/servicenow-mcp-ai/.env (o de variables de entorno reales) — consulta a continuación.

Inicio rápido

El camino más rápido 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 credencialesOAuth 2.1.

Verifica tu configuración

Una vez establecidas las tres variables, confirma la conexión antes de empezar:

  1. Ejecuta la herramienta servicenow_test_connection — lee un registro de sys_user y reporta ok, estado HTTP y latencia.
  2. Ejecuta servicenow_check_capabilities — muestra una vista previa de qué tablas sys_* restringidas a administradores 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

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 de 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.

El archivo de entorno se resuelve en este orden: SN_ENV_FILE, luego ~/.config/servicenow-mcp-ai/.env (XDG) si está presente, luego .env en la raíz del proyecto. Una instalación global/npx por lo tanto escribe en tu configuración de usuario en lugar de node_modules. Las variables de entorno reales siempre tienen prioridad sobre el archivo.

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 loopback (p. ej. http://localhost:53682/callback), establece SN_OAUTH_CLIENT_ID (y SN_OAUTH_CLIENT_SECRET para un cliente confidencial), y 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 entonces se ejecuta de forma no interactiva (concesión refresh_token) — nunca se almacena una contraseña. PKCE (S256) se usa siempre.

La concesión de contraseña (ROPC) de OAuth 2.0 está obsoleta en OAuth 2.1 y deshabilitada en muchas instancias; prefiere login. Las concesiones client_credentials y refresh_token siguen 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étodoSN_AUTHEstablecerNotas
BasicbasicSN_USER / SN_PASSWORDPredeterminado.
OAuth 2.1 — Authorization Code + PKCEoauthnpx servicenow-mcp-ai loginRecomendado. Interactivo, almacena un token de actualización.
OAuth — Client CredentialsoauthSN_OAUTH_GRANT=client_credentialsServicio a servicio.
OAuth — Refresh TokenoauthSN_OAUTH_GRANT=refresh_token + SN_OAUTH_REFRESH_TOKENEstablecido por login.
OAuth — JWT BeareroauthSN_OAUTH_GRANT=jwt_bearer + SN_OAUTH_JWT_KEYAserción RS256; sin contraseña.
OAuth — Password (ROPC)oauthSN_OAUTH_GRANT=passwordObsoleto.
API KeyapikeySN_API_KEYCabecera x-sn-apikey.
Bearer tokentokenSN_BEARER_TOKENToken preobtenido, usado tal cual.
Mutual TLS (certificado de cliente)none (o en capas)SN_TLS_CLIENT_CERT / _KEYEl certificado se asigna a un usuario; necesita undici opcional.

Variables de entorno

Todos los ajustes se leen de .env (o del entorno de proceso real, que tiene prioridad). Solo las tres primeras son obligatorias; el resto son ajustes opcionales. Consulta .env.example para una plantilla.

VariableRequeridoPredeterminadoDescripción
SN_INSTANCENombre de instancia, host o URL https:// (dev12345, dev12345.service-now.com).
SN_USERNombre de usuario de ServiceNow para autenticación Basic.
SN_PASSWORDContraseña de ServiceNow. Nunca se registra ni se devuelve mediante ninguna herramienta.
SN_TIMEOUT_MSno30000Tiempo de espera por solicitud en milisegundos.
SN_MAX_RETRIESno2Reintentos para fallos transitorios (429/5xx, errores de red). Las escrituras no idempotentes solo se reintentan en errores de conexión.
SN_MAX_RECORDSno10000Límite máximo de registros devueltos por una consulta fetchAll.
SN_MAX_RESULT_CHARSno100000Presupuesto de caracteres para un resultado de consulta antes de que se trunque para el cliente.
SN_ALLOWED_HOSTSnoLista de permitidos de hosts separada por comas (para dominios personalizados o de nube soberana). Cuando se establece, solo se contactan los hosts que coinciden. Cuando no se establece, solo se permiten instancias *.service-now.com y se bloquean los hosts internos/loopback (protección SSRF).
SN_AUTHnoautoMétodo de autenticación: basic, oauth, apikey, token o none (mTLS solo con certificado). Se auto-detecta a partir de las claves presentes (clave API → bearer → OAuth → Basic).
SN_API_KEYnoClave API entrante de ServiceNow, enviada como encabezado x-sn-apikey (habilita el modo apikey).
SN_BEARER_TOKENnoUn token bearer obtenido previamente, enviado tal cual como Authorization: Bearer … (habilita el modo token).
SN_OAUTH_CLIENT_IDnoID de cliente OAuth (su presencia habilita OAuth).
SN_OAUTH_CLIENT_SECRETnoSecreto de cliente OAuth.
SN_OAUTH_GRANTnopasswordConcesión OAuth: password (obsoleto — ROPC), client_credentials, refresh_token o jwt_bearer. El comando login establece esto a refresh_token por ti.
SN_OAUTH_JWT_KEYnoClave 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 (SN_USER predeterminado), SN_OAUTH_JWT_AUD, SN_OAUTH_JWT_KID, SN_OAUTH_JWT_EXP_SEC (predeterminado 300).
SN_OAUTH_REFRESH_TOKENnoToken de actualización para la concesión refresh_token. Obtenido automáticamente por npx servicenow-mcp-ai login (Código de autorización + PKCE).
SN_OAUTH_REDIRECT_URInohttp://localhost:53682/callbackURL de redirección de bucle local para el flujo PKCE login. Debe coincidir con la redirección registrada en el endpoint OAuth.
SN_OAUTH_SCOPEnoAlcance OAuth opcional solicitado durante login.
SN_TLS_CLIENT_CERTnoCertificado de cliente (PEM) para mTLS (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 mapea a un usuario. Necesita el paquete opcional undici (npm i undici).
SN_TLS_CLIENT_KEYnoClave privada (PEM) para el certificado de cliente (o SN_TLS_CLIENT_KEY_FILE).
SN_TLS_CAnoPaquete de CA opcional (PEM) para confiar (o SN_TLS_CA_FILE). SN_TLS_REJECT_UNAUTHORIZED=false desactiva la verificación (no recomendado).
SN_TABLES_ALLOWnoLista de permitidos de tablas separada por comas; cuando se establece, solo estas tablas son accesibles.
SN_TABLES_DENYnoLista de denegados de tablas separada por comas; siempre gana sobre la lista de permitidos.
SN_READONLYnofalseCuando es verdadero, rechaza toda creación/actualización/eliminación.
SN_WRITE_MODEnoplanplan (predeterminado) previsualiza una escritura como un diff antes/después sin mutar; apply ejecuta; pasar apply:true fuerza una sola llamada.
SN_REDACT_FIELDSnoDF-5: enmascarar estos valores de campo antes de que los registros lleguen al modelo (separados por comas/espacios).
SN_REDACT_PIInofalseDF-5: también enmascarar patrones de correo/teléfono/ID nacional dentro de valores de cadena.
SN_TRANSPORTnostdioDF-6: stdio (predeterminado) o http (HTTP Streamable para clientes remotos/agentes).
SN_PORTno3000DF-6: puerto TCP para el transporte http.
SN_HTTP_HOSTno127.0.0.1DF-6: dirección de enlace para el transporte http (bucle local por defecto).
SN_HTTP_TOKENnoDF-6: cuando se establece, las solicitudes http deben enviar Authorization: Bearer <token>.
SN_LOG_LEVELnoinfoVerbosidad de registro en stderr: error, warn, info, debug.
SN_ENV_FILEnoRuta explícita al archivo de entorno para leer/escribir.
SN_TOOL_PACKAGESnocorePaquetes de herramientas o perfiles separados por comas/espacios para habilitar. Perfiles: core (predeterminado) y all. Paquetes: table, schema, aggregate, attachment, importset, batch, catalog, change, knowledge, cmdb, scripts, flows, codecheck, docs, instance, email, atf. Las herramientas de administración siempre están activadas. atf ejecuta pruebas en la instancia — habilítalo solo en una instancia que no sea de producción.
SN_PACKAGES_DENYnoPaquetes separados por comas/espacios para excluir incluso si están habilitados por SN_TOOL_PACKAGES. La única forma de bloquear las API de complementos (catálogo, cambio, conocimiento…) — la política de tablas no las ve.
SN_PACKAGES_READONLYnoPaquetes separados por comas/espacios cuyas herramientas de escritura no se registran; sus herramientas de lectura permanecen. Complemento por paquete al SN_READONLY global.
SN_SCHEMA_CACHE_TTL_SECno300TTL para la caché de lecturas de esquema casi estático (list_tables, describe_table, get_cmdb_meta). 0 desactiva el almacenamiento en caché.
SN_MAX_CONCURRENTno4Máximo de solicitudes HTTP paralelas a la instancia (semáforo simple en proceso).
SN_INCLUDE_REF_LINKSnofalseLos campos de referencia vuelven sin sus URLs link por defecto (ahorro de tokens). Establezca true para incluirlos.
SN_RESULT_PRETTYnofalseLos resultados de las herramientas son JSON compacto por defecto (el formato bonito ~duplica los tokens). Establezca true para salida indentada.
SN_DOCS_DIRnodocs/instanceDirectorio en el que el paquete docs lee/escribe Markdown. Las rutas relativas se resuelven contra el directorio de trabajo.
SN_CODESEARCHnofalseOpte por la API de búsqueda de código (sn_codesearch) para servicenow_search_code (FT-7). Cuando true y el complemento está activo, reemplaza la iteración LIKE; vuelve a LIKE ante cualquier fallo.
SN_PROFILE_<NAME>_*noPerfiles de conexión con nombre: 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_PROFILEnodefaultQué perfil usan las herramientas. Cambie en tiempo de ejecución con servicenow_use_instance (persistido en el archivo de entorno).

El acceso se controla en dos ejes independientes, porque una restricción de tabla no alcanza a las APIs basadas en plugins (Change, Catalog, Knowledge…). Proteja ambos:

EjeHabilitar / denegar / solo lecturaEjemplo
TablasSN_TABLES_ALLOW / SN_TABLES_DENY / SN_READONLYSN_TABLES_DENY=change_request bloquea solo la ruta de la API de Tablas.
PaquetesSN_TOOL_PACKAGES / SN_PACKAGES_DENY / SN_PACKAGES_READONLYSN_PACKAGES_DENY=change también bloquea la API de plugin de Gestión de Cambios.

Por lo tanto, denegar la tabla change_request aún deja que la API de Gestión de Cambios (sn_chg_rest) pueda leer/escribir cambios — el eje de paquetes existe por eso. Consulte Notas de seguridad para el modelo completo (incluyendo cómo la API Batch obedece ambos ejes).

Sintaxis de lista: 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 mayúsculas — por lo que SN_TABLES_DENY=Change_Request, sys_user funciona.

Ejecutar / depurar

  • VS Code: abra la Paleta de Comandos e inicie el servidor definido en .vscode/mcp.json, luego úselo desde Chat.
  • MCP Inspector: npm run inspector
  • Directamente: npm start

Interfaz de línea de comandos

El binario publicado servicenow-mcp-ai (ejecútelo directamente, o mediante npx servicenow-mcp-ai) tiene tres invocaciones. Todos los ajustes de conexión provienen de variables de entorno / el archivo de entorno (consulte Variables de entorno); solo drift acepta argumentos posicionales.

ComandoParámetros posicionalesQué haceCódigos de salida
servicenow-mcp-ai(ninguno)Inicia el servidor MCP. El transporte (stdio por defecto, o http) se elige mediante SN_TRANSPORT; se ejecuta hasta SIGINT/SIGTERM.0 apagado limpio · 1 error fatal de inicio
servicenow-mcp-ai login(ninguno — opera sobre el perfil activo)Inicio de sesión OAuth 2.1 Authorization Code + PKCE de una sola vez: abre el navegador, captura la redirección de loopback, almacena un token de refresco.0 éxito · 1 fallo de inicio de sesión
servicenow-mcp-ai drift <profileA> <profileB><profileA>, <profileB> — dos nombres de perfil configuradosPuerta de deriva de CI DF-3: compara las dos instancias y escribe un informe de diferencias en Markdown.0 sin deriva · 1 deriva encontrada · 2 uso / error

login opera sobre el perfil activo (SN_ACTIVE_PROFILE, por defecto default) y lee, para ese perfil:

  • SN_INSTANCEobligatorio; la instancia de destino.
  • SN_OAUTH_CLIENT_IDobligatorio; id de cliente de un endpoint OAuth de Authorization Code.
  • SN_OAUTH_CLIENT_SECRET — opcional; para un cliente confidencial.
  • SN_OAUTH_REDIRECT_URI — opcional; URL de loopback, por defecto http://localhost:53682/callback. Debe coincidir con la redirección registrada en el endpoint.
  • SN_OAUTH_SCOPE — opcional; alcance 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 Markdown se escribe en stdout (captúrelo como artefacto de CI); un resumen de deriva de una línea va a stderr.

Puerta de deriva de CI (DF-3)

Compare dos perfiles configurados y haga fallar un pipeline ante deriva de configuración:

servicenow-mcp-ai drift dev prod   # report on stdout; exit 1 on drift, 0 if clean, 2 on error

Desarrollo

npm run check     # full gate: build, lint, format check, coverage-gated tests, 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

Consulte CONTRIBUTING.md para las convenciones (un commit por tarea, las pruebas acompañan al cambio, documentación generada).

Herramientas

Esta tabla se genera a partir de los registros de herramientas — edite las definiciones de herramientas en src/tools/, luego ejecute npm run docs:readme.

PackageToolRead-onlyDescription
tableservicenow_query_tableyesLee registros de cualquier tabla de ServiceNow mediante la Table API
tableservicenow_get_recordyesLee un único registro de una tabla por su sys_id
tableservicenow_create_recordnoCrea un nuevo registro en una tabla con los valores de campo proporcionados
tableservicenow_update_recordnoActualiza campos de un registro existente identificado por su sys_id
tableservicenow_delete_recordnoElimina un registro de una tabla por su sys_id
schemaservicenow_list_tablesyesLista tablas de sys_db_object, opcionalmente filtradas por un fragmento de nombre o etiqueta
schemaservicenow_describe_tableyesLista las columnas de una tabla (nombre, etiqueta, tipo, obligatorio, referencia) desde sys_dictionary
aggregateservicenow_aggregateyesCalcula agregados del lado del servidor (count, avg, min, max, sum) sobre una tabla mediante la Stats API, con agrupación opcional…
attachmentservicenow_list_attachmentsyesLista metadatos de adjuntos, opcionalmente limitados a un registro específico (tabla + sys_id)
attachmentservicenow_get_attachmentyesLee los metadatos de un único adjunto por su sys_id
attachmentservicenow_download_attachmentyesDescarga los bytes de un adjunto, devueltos como base64
attachmentservicenow_upload_attachmentnoAdjunta un archivo (proporcionado como base64) a un registro identificado por tabla + sys_id
attachmentservicenow_delete_attachmentnoElimina un adjunto por su sys_id
importsetservicenow_insert_import_set_rownoInserta una sola fila en una tabla de staging y ejecuta su transform map
importsetservicenow_get_import_set_rowyesLee el resultado de la transformación de una fila de staging previamente insertada por su sys_id
batchservicenow_batchnoEjecuta varias sub-solicitudes REST de ServiceNow en un único round-trip HTTP mediante la Batch API
catalogservicenow_list_catalogsyesLista los Service Catalogs disponibles en la instancia (Service Catalog API)
catalogservicenow_list_catalog_categoriesyesLista las categorías dentro de un catálogo de servicios
catalogservicenow_list_catalog_itemsyesBusca/lista artículos de catálogo ordenables, opcionalmente por texto o categoría
catalogservicenow_get_catalog_itemyesObtiene un artículo de catálogo, incluidos sus variables de pedido, por sys_id
catalogservicenow_order_catalog_itemnoOrdena un artículo de catálogo directamente ('order now')
changeservicenow_list_changesyesLista solicitudes de cambio mediante la Change Management API
changeservicenow_get_changeyesObtiene una única solicitud de cambio por sys_id
changeservicenow_create_changenoCrea un cambio normal, estándar o de emergencia
changeservicenow_update_changenoActualiza campos de una solicitud de cambio por sys_id
changeservicenow_change_conflictsnoLee conflictos de agenda para un cambio, o los recalcula (calculate=true)
knowledgeservicenow_search_knowledgeyesBúsqueda de texto completo de artículos de conocimiento (Knowledge API), con encoded query y paginación opcionales
knowledgeservicenow_get_knowledge_articleyesObtiene un artículo de conocimiento (contenido y metadatos) por sys_id
knowledgeservicenow_knowledge_highlightsyesLista artículos de conocimiento destacados o más vistos para el usuario actual
cmdbservicenow_list_cisyesLista elementos de configuración de una clase CMDB mediante la class-aware CMDB Instance API
cmdbservicenow_get_ciyesObtiene un CI con sus atributos y relaciones entrantes/salientes por clase y sys_id
cmdbservicenow_create_cinoCrea un CI mediante la CMDB Instance API (enrutado a través de Identification & Reconciliation)
cmdbservicenow_update_cinoActualiza los atributos de un CI mediante la CMDB Instance API (IRE)
cmdbservicenow_get_cmdb_metayesObtiene el esquema/metadatos de una clase CMDB (atributos, reglas de relación) desde la CMDB Meta API
scriptsservicenow_list_scriptsyesLista artefactos de script de un tipo como metadatos compactos (sin código fuente)
scriptsservicenow_get_scriptyesLee un artefacto de script completo, incluidos su código fuente y su contexto de ejecución
scriptsservicenow_search_codeyesBusca una subcadena literal en el código fuente del script en uno o todos los tipos de script
scriptsservicenow_table_logicyesEnsambla la automatización que se ejecuta en una tabla: business rules (ordenadas por when+order), client scripts, UI po…
scriptsservicenow_where_usedyesEncuentra dónde se referencia una tabla, campo o script en el código de la instancia: referencias textuales en cada s…
flowsservicenow_trace_table_eventyesTraza de forma determinista lo que ServiceNow ejecutaría para una operación de tabla, en orden de ejecución: display/before…
flowsservicenow_list_flowsyesLista flujos de Flow Designer (sys_hub_flow) o workflows heredados (kind: 'workflow') como metadatos compactos
flowsservicenow_get_flowyesObtiene una vista estructurada de un flujo o workflow: su trigger (tabla/condición/cuándo) y sus pasos ordenados
flowsservicenow_get_flow_runsyesLee evidencia de ejecución de flujos desde sys_flow_context — por sys_id del flujo o por el registro (document) contra el que se ejecutó…
codecheckservicenow_lint_scriptyesEjecuta reglas deterministas de calidad de código sobre un artefacto de script (sys_ids/URLs hard-coded, bucles ilimitados o en-loo…
codecheckservicenow_lint_tableyesLint de cada business rule activa, client script y UI policy de una tabla (vía table_logic), devolviendo por-sc…
codecheckservicenow_code_healthnoAgrega una imagen de salud del código: recuentos de scripts por tipo, un escáner de seguridad de la capa de control de acceso (ACL scri…
docsservicenow_docs_listyesLista los documentos Markdown en la carpeta local de documentación de la instancia (SN_DOCS_DIR)
docsservicenow_docs_readyesLee un documento Markdown de la carpeta local de documentación de la instancia
docsservicenow_docs_searchyesBusca una subcadena en la documentación local de la instancia; devuelve un fragmento por coincidencia
docsservicenow_docs_writenoCrea o sobrescribe un documento Markdown en la carpeta local de docs y actualiza index.md
docsservicenow_generate_er_diagramyesConstruye un diagrama erDiagram de Mermaid desde sys_dictionary: una entidad por tabla más una relación por cada reference…
docsservicenow_generate_table_flowyesConstruye un diagrama de flujo Mermaid del ciclo de vida de un registro en una tabla, agrupando business rules activas por fase (disp…
instanceservicenow_snapshot_instancenoDescarga los metadatos estructurales de la instancia en la carpeta local de docs (SN_DOCS_DIR//): tables.md+…
instanceservicenow_compare_instancesnoCompara dos perfiles de conexión: tablas presentes solo en uno, columnas comunes cuyo tipo/obligatorio/referencia dif…
emailservicenow_send_emailnoEnvía un correo electrónico mediante la Email API de la instancia, opcionalmente asociado a un registro (tabla + sys_id)
emailservicenow_get_emailyesLee un registro de correo enviado/recibido por su sys_id (Email API)
atfservicenow_list_atf_testsyesLista pruebas de Automated Test Framework (sys_atf_test) como metadatos: nombre, flag activo, descripción
atfservicenow_list_atf_suitesyesLista suites de pruebas de Automated Test Framework (sys_atf_test_suite) como metadatos
atfservicenow_run_atf_testnoEjecuta una única prueba ATF mediante la CI/CD API
atfservicenow_run_atf_suitenoEjecuta una suite de pruebas ATF mediante la CI/CD API
atfservicenow_get_atf_resultyesConsulta una ejecución ATF por su id de ejecución: estado, porcentaje completado y mensaje (CI/CD progress API)
adminservicenow_set_credentialsnoGuarda o actualiza las credenciales de conexión de ServiceNow
adminservicenow_list_instancesyesLista los perfiles de conexión de ServiceNow configurados (instancias): nombre, host, usuario, flag de solo lectura y si…
adminservicenow_use_instancenoCambia el perfil de conexión de ServiceNow activo (persistido en el archivo de entorno)
adminservicenow_get_statusyesMuestra la instancia configurada, el usuario, el modo de autenticación y la política de acceso, y si las credenciales están completas
adminservicenow_test_connectionyesVerifica que las credenciales configuradas realmente funcionan: lee un registro de sys_user e informa ok/estado/latencia
adminservicenow_check_capabilitiesyesPreflight de qué tablas sys_* restringidas por administrador puede leer realmente el usuario conectado, e informa cuáles super…

Todas las herramientas llevan anotaciones MCP (readOnlyHint, destructiveHint, idempotentHint) para que los clientes puedan aplicar la UX de confirmación adecuada.

Paquetes de herramientas

Las herramientas se agrupan en paquetes para que pueda exponer solo lo que un cliente concreto necesita (menos herramientas mantienen al modelo centrado). Configure SN_TOOL_PACKAGES como una lista separada por comas/espacios de perfiles o nombres de paquetes:

  • core (por defecto) — table, schema, aggregate, attachment.
  • all — todos los paquetes siguientes.
  • Paquetes individuales: table, schema, aggregate, attachment, importset, batch, catalog, change, knowledge, cmdb, scripts, flows, codecheck, docs, instance, email, atf.

Las herramientas de administración (servicenow_set_credentials, servicenow_get_status) están siempre registradas, independientemente de los paquetes activos. Los nombres desconocidos se ignoran. servicenow_get_status informa el enabledPackages resuelto.

# Only table + batch tools (plus the always-on admin tools)
SN_TOOL_PACKAGES=table,batch

Presets

Si prefiere no seleccionar la lista usted mismo, tres presets con nombre cubren los roles habituales. Las herramientas de administración siempre están activas, por lo que no se listan. Cada preset también tiene un alias de una palabra — SN_TOOL_PACKAGES=reader|developer|admin — que se expande al mismo conjunto de paquetes.

PresetSN_TOOL_PACKAGES=…Para quién
readertable,schema,aggregatePrimer contacto, analistas, un juego con PDI — solo lectura y consulta.
developertable,schema,aggregate,scripts,flows,codecheck,docsEl segmento principal: inteligencia de scripts, trazado de flujos, linting, docs y diagramas.
adminallTodo, incluidos el plugin y los paquetes con mucha escritura.

El preset developer se basa en el conjunto reader; el paquete docs incluye los generadores de diagramas Mermaid. Use el alias por brevedad o escriba los paquetes completos para añadir o quitar uno.

Ejemplos

Consulte los 5 incidentes activos más recientes:

// servicenow_query_table
{
  "table": "incident",
  "query": "active=true^ORDERBYDESCsys_created_on",
  "fields": ["number", "short_description", "priority", "state"],
  "limit": 5,
}

Cree un incidente:

// servicenow_create_record
{
  "table": "incident",
  "fields": {
    "short_description": "Printer on 3rd floor is down",
    "urgency": "2",
    "impact": "2",
  },
}

Actualice las credenciales en tiempo de ejecución:

// servicenow_set_credentials
{
  "instance": "dev98765.service-now.com",
  "user": "admin",
  "password": "••••••",
}

Recursos

Los metadatos de solo lectura también se exponen como recursos MCP, para que los clientes puedan adjuntarlos de forma declarativa en lugar de llamar a una herramienta:

URIDescripción
servicenow://statusEstado de la conexión, modo de autenticación, política de acceso.
servicenow://tablesLista de tablas de sys_db_object.
servicenow://schema/{table}Columnas de una tabla de sys_dictionary.
servicenow://docs/{path}Un documento Markdown del almacén local de docs.

Prompts

Los flujos de trabajo listos para usar se exponen como prompts MCP; orquestan las herramientas e insisten en leer valores reales de la instancia:

PromptArgumentoPropósito
servicenow_incident_triageincidentResumir, evaluar la prioridad, categorizar y recomendar los siguientes pasos.
servicenow_change_impact_analysischangeCIs afectados, conflictos de agenda y una decisión go/no-go.
servicenow_document_tabletableEsquema + automatización + diagramas → documento Markdown guardado.

Estructura del proyecto

.
├── .env                   # credentials (git-ignored; or ~/.config/servicenow-mcp-ai/.env)
├── .env.example           # template
├── .github/workflows/     # CI: build + lint + test
├── .vscode/mcp.json       # VS Code MCP server registration
├── eslint.config.js       # ESLint flat config
├── .prettierrc.json       # Prettier config
├── src/
│   ├── index.ts           # bootstrap: load env, register, connect stdio
│   ├── registry.ts        # registers all tool groups
│   ├── resources.ts       # MCP resources (status, tables, schema, docs)
│   ├── prompts.ts         # MCP prompts (triage, change impact, document table)
│   ├── http.ts            # shared REST client (auth, retry, SSRF)
│   ├── auth.ts            # Basic + OAuth 2.0 providers
│   ├── host.ts            # host resolution + SSRF guard
│   ├── policy.ts          # table allow/deny + read-only guards
│   ├── settings.ts        # numeric env settings
│   ├── logging.ts         # structured stderr logger
│   ├── result.ts          # tool results + structured errors
│   ├── servicenow.ts      # Table API client
│   ├── config.ts          # env file read/write + location
│   ├── api/               # aggregate, attachment, import set, batch, catalog, change, knowledge, cmdb, scripts, diagrams, docs, meta
│   └── tools/             # tool registration per API group
├── test/                  # node:test unit + mock-fetch tests
└── build/                 # compiled output (after npm run build)

Nota sobre los nombres: el paquete npm y el repositorio de GitHub son ambos servicenow-mcp-ai (el servicenow-mcp sin ámbito ya estaba ocupado en npm); la carpeta de trabajo local es servicenow-mcp. La diferencia es cosmética y no afecta a la compilación ni al tiempo de ejecución.

Notas de seguridad

  • El archivo de entorno está en git-ignore — no confirmes credenciales reales.
  • El archivo de entorno se escribe solo con permisos de propietario (0600) — contiene una contraseña en texto plano.
  • El servidor usa el transporte stdio y solo registra en stderr; los secretos y las consultas codificadas sin procesar nunca se registran.
  • La contraseña/token nunca es devuelto por ninguna herramienta.
  • Los hosts están restringidos: sin SN_ALLOWED_HOSTS, solo se contactan instancias *.service-now.com (interno/loopback siempre bloqueado), por lo que un host redirigido o mal escrito no puede recibir credenciales silenciosamente. Establece SN_ALLOWED_HOSTS para optar por un dominio personalizado o de nube soberana.
  • Prefiere OAuth 2.0 sobre Basic cuando sea posible (SN_OAUTH_CLIENT_ID).
  • Aplica el mínimo privilegio con SN_TABLES_ALLOW / SN_TABLES_DENY y SN_READONLY=true para implementaciones de solo lectura.
  • La política de tablas no cubre las API de plugins. SN_TABLES_DENY=change_request bloquea la ruta de la API de Tablas, pero la API de Gestión de Cambios (sn_chg_rest) puede seguir leyendo/escribiendo cambios. Para restringir las superficies respaldadas por plugins, usa SN_PACKAGES_DENY (elimina el paquete completo) o SN_PACKAGES_READONLY (registra solo sus herramientas de lectura). La API Batch también obedece ambos ejes: una sub-solicitud a la ruta de un paquete denegado es rechazada, y las escrituras en un paquete de solo lectura están bloqueadas — un lote no puede usarse para evadir la política de paquetes.

Documentación del proyecto

DocumentoContenido
ARCHITECTURE.mdArquitectura en capas, diagramas Mermaid (módulos, ciclo de vida de solicitudes, modelo de seguridad, autenticación, paquetes), ADRs condensados
PRODUCT-STATE.mdEstado actual del producto: mapa de cobertura de API, estado de calidad, línea de tiempo histórica, hoja de ruta
ROADMAP.mdPlan a futuro: lanzar 1.0.0, Fase 8 (pruebas de flujo + análisis de código), Fase 9 (diferenciadores competitivos), elementos opcionales y diferidos
COMPETITIVE-ANALYSIS.mdPosicionamiento frente a la consola oficial del Servidor MCP de ServiceNow: comparación, dónde queda estructuralmente rezagado, el plan de impulso de la Fase 9 y riesgos de plataforma
IMPLEMENTATION-PLAN.mdEspecificaciones detalladas para las próximas fases (harness 2.0, multi-instancia, pruebas de flujo)
DONE.md / TODO.mdTrabajo completado con referencias de commits / decisiones pendientes
WORKLOG.md / CHANGELOG.mdDiario de trabajo detallado / registro de cambios orientado al usuario
CONTRIBUTING.md / SECURITY.mdConfiguración de desarrollo, compuertas y convenciones / modelo de seguridad y reporte

Soporte

Este proyecto se construye y mantiene en mi tiempo libre. Si te ahorra tiempo a ti o a tu equipo, considera apoyar su desarrollo continuo — el patrocinio financia directamente nuevas herramientas, correcciones de errores y el mantenimiento al ritmo de la superficie REST de ServiceNow.

  • GitHub Sponsors — único o recurrente, sin que se cobre ninguna tarifa de plataforma (la opción preferida).
  • Ko-fi — soporte único rápido; también acepta PayPal, por lo que es la alternativa para quienes no tienen cuenta de GitHub.
  • Donar (Donatree) — una página de donación sin cuenta (tarjeta, PayPal y más) para una propina única.

Sponsor on GitHub Support on Ko-fi Donate via Donatree

Marca comercial

servicenow-mcp-ai es un proyecto independiente, construido por la comunidad. No está afiliado con, respaldado por, ni patrocinado por ServiceNow, Inc.

"ServiceNow", el logotipo de ServiceNow, "Now" y las marcas relacionadas son marcas comerciales o marcas comerciales registradas de ServiceNow, Inc. en los Estados Unidos y otros países. Se usan en el nombre y la documentación de este proyecto solo de forma nominativa — para identificar la plataforma con la que este software interoperá — y no se implica afiliación ni respaldo. Todos los demás nombres de productos y marcas son propiedad de sus respectivos dueños.

Este proyecto está licenciado bajo la Licencia MIT; esa licencia cubre el código fuente y no otorga ningún derecho a usar las marcas comerciales de ServiceNow.