ServiceNow MCP

Servidor MCP ServiceNow: 65 ferramentas em toda a superfície REST (Tabela, Agregado, Anexo, Conjunto de Importação, Lote, CMDB/IRE, Catálogo, Mudança, Conhecimento, E-mail) com inteligência de script, rastreamento de fluxo, execuções ATF, perfis multi-instância e diagramas Mermaid.

Documentação

servicenow-mcp-ai — Servidor MCP ServiceNow

npm versionnpm downloadsnodetoolsLicense: MIT
CIcoveragelast commitMCPKnown Vulnerabilities

📖 Site de documentação →

Um servidor Model Context Protocol que permite a um cliente MCP (VS Code, Claude Desktop, etc.) executar comandos contra uma instância ServiceNow por meio de suas APIs REST — Table, Aggregate, Attachment, Import Set, Batch e CMDB, além das APIs de plugin do Service Catalog, Change Management e Knowledge. As credenciais são mantidas em um arquivo env local e podem ser atualizadas em tempo de execução por meio de uma ferramenta.

Atualizando da versão 1.x? A v2.0 torna as gravações planejadas por padrão: create/update/delete e as outras ferramentas de gravação de registros retornam uma prévia não mutável, a menos que você passe apply: true (ou defina SN_WRITE_MODE=apply para restaurar o comportamento "executar imediatamente" da v1). Consulte o CHANGELOG → 2.0.0 para a nota completa de migração.

Conteúdo: Demonstração rápida · Recursos · Requisitos · Configuração · Configurar credenciais · Executar / depurar · Desenvolver · Ferramentas · Recursos · Prompts · Estrutura do projeto · Notas de segurança · Documentação do projeto · Suporte

Construído e mantido no meu próprio tempo — se for útil, uma doação no GitHub Sponsors ajuda a manter o projeto. As opções completas de Suporte estão no final.

Demonstração rápida

Três coisas que a plataforma torna difíceis, uma chamada cada. Aponte seu cliente MCP para uma instância (Configuração) e pergunte:

1. "Onde este campo é realmente usado?" — todos os scripts, regras de negócio, scripts de cliente, políticas/ações de UI e ACLs que o utilizam, como JSON ou um gráfico Mermaid. A busca find usages com qualidade de IDE que o ServiceNow não tem botão para:

// servicenow_where_used
{
  "kind": "field", // "table" | "field" | "script"
  "name": "u_cost_center",
  "mermaid": true, // also render a reference graph
}

2. "O que é executado quando salvo este registro?" — a cadeia completa de automação em ordem de execução (regras de negócio display → before → after → assíncronas, depois flows, workflows e notificações), cada uma com sua condição — um teste lógico que executa nada:

// servicenow_trace_table_event
{
  "table": "incident",
  "operation": "update", // insert | update | delete | query
}

3. "O que mudou entre dev e prod?" — um diff em Markdown de tabelas, colunas, scripts (correspondidos por sys_id e depois nome, com um diff unificado de cada script alterado) e plugins entre dois perfis configurados — além, sob solicitação, de propriedades, choices, ACLs, notificações, flows, itens de catálogo e papéis — com um código de saída amigável para CI para que um pipeline possa bloquear uma implantação arriscada:

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

Todos os três são somente leitura e funcionam contra qualquer instância — incluindo um PDI gratuito — com o modelo e o cliente de sua escolha.

Recursos

  • API Table completa: consultar, ler, criar, atualizar e excluir registros em qualquer tabela, com consultas codificadas, seleção de campos e paginação.
  • APIs extras do ServiceNow: Aggregate (Stats), Attachment (listar/enviar/baixar/excluir), Import Set, Batch (várias chamadas REST em uma única solicitação), além de metadados de tabela/coluna (sys_db_object, sys_dictionary).
  • APIs de processo e plugin: CMDB (CRUD de CI com conhecimento de classe + meta, leituras de relacionamento de cmdb_rel_ci, IRE identify-and-reconcile com um plano somente de identificação), Service Catalog (navegar/ordenar itens), Change Management (criação tipada + detecção de conflitos) e Knowledge (busca de artigos). APIs com escopo de plugin relatam claramente quando não estão ativas na instância.
  • Inteligência de scripts: ler e pesquisar o código da própria instância (regras de negócio, script includes, scripts de cliente, políticas/ações de UI, jobs agendados, scripts de transform/REST, ACLs — e, ainda não verificado em uma instância ativa, widgets do Service Portal, páginas/scripts/macros de UI, processadores, scripts de email/fix/validação, ações de script, fontes de dados, funções de mensagem REST, mapas/entradas de transform, scripts de cliente de catálogo e cálculos/padrões de dicionário) e obter o panorama completo de automação de uma tabela — tudo somente leitura pela API Table. servicenow_search_code retorna cada linha correspondente por artefato (até 20, com uma linha de contexto em cada lado) e, como servicenow_where_used, aceita um scope de aplicação opcional. servicenow_where_used também encontra referências estruturais — campos de referência de dicionário, layouts de lista e formulário, variáveis de catálogo, entradas de fluxo e relatórios — em uma seção separada de structural.
  • Rastreamento de fluxos e verificação de código (Fase 8): rastrear deterministicamente o que uma operação de tabela executa (pacote flows — regras de negócio, flows, workflows e notificações, em ordem, com um fluxograma Mermaid), ler flows do Flow Designer e histórico de execução, e fazer lint de scripts contra um conjunto de regras local com um relatório agregado de saúde de código (codecheck). Executar testes ATF via API CI/CD (atf, opt-in, não padrão — as ferramentas de execução operam na instância).
  • Desfazer baseado em diário (revert): listar o diário local de gravações e reverter um create/update/delete aplicado — com uma verificação de divergência contra edições posteriores.
  • Leituras genéricas de artefatos (artifacts, opt-in): listar e ler qualquer tipo de artefato registrado — políticas de UI com suas ações, páginas de portal com seu layout, flows, itens de catálogo e mais — com escopo e status gerenciado por SDK.
  • Consciência de update sets (updatesets, opt-in): listar update sets, resumir um conjunto por artefato, compará-lo com outro perfil ou um snapshot — e vincular gravações de Table aplicadas a um update set nomeado (update_set / SN_UPDATE_SET), restaurando o conjunto atual do usuário depois.
  • Operações e saúde de dados (ops, opt-in): leituras limitadas de "por que está lento" do log do sistema, da fila do agendador, da fila de email de saída e semáforos, além de servicenow_data_health — chaves duplicadas, referências órfãs e desatualizadas para uma tabela, a partir de contagens da API Aggregate.
  • Leituras de operações (opt-in): o histórico de alterações de um registro de sys_audit e sys_journal_field (history — incluindo os comentários e work notes que a API Table lê vazios), propriedades do sistema com segredos mascarados e um conjunto registrado e reversível (properties), e consultas de usuário / grupo / papel com associações (directory). Execuções ATF podem aguardar seu resultado (wait_seconds), e inserções de Import Set relatam a execução de transform e mapas.
  • Autodocumentação: uma base de conhecimento local em Markdown (ler/gravar/pesquisar) além de geradores determinísticos de Mermaid (diagramas ER a partir de referências, fluxogramas de ciclo de vida de registros a partir de regras de negócio) para que o servidor construa contexto durável e reutilizável.
  • Prompts: workflows prontos (triagem de incidentes, análise de impacto de mudanças, documentar uma tabela, diagnosticar uma instância lenta) que orquestram as ferramentas.
  • Pacotes de ferramentas: carregue apenas os grupos de ferramentas necessários via SN_TOOL_PACKAGES (perfil padrão core; all habilita tudo).
  • Autenticação Básica ou OAuth 2.0 sobre HTTPS; a senha/token nunca é ecoada de volta.
  • Controles de privilégio mínimo: listas de permitir/negar de tabelas e um modo global somente leitura.
  • Resiliência: timeout por solicitação, nova tentativa com backoff e Retry-After, proteção contra SSRF e um limite de tamanho de resultado.
  • Anotações de ferramentas e recursos MCP, payloads de erro estruturados e registro estruturado em stderr.
  • Credenciais em um arquivo env (projeto, ~/.config ou SN_ENV_FILE), atualizáveis em tempo de execução via servicenow_set_credentials.

Requisitos

  • Node.js 20+ (imposto: engines + uma proteção em tempo de execução com uma mensagem clara; o projeto tem como alvo a versão em .nvmrc).

Configuração

A partir do código-fonte (para desenvolvimento):

npm install
npm run build

Ou execute o pacote publicado diretamente, sem clonar:

npx servicenow-mcp-ai

Instalar no seu cliente MCP

Cada cliente inicia o mesmo comando stdio, npx -y servicenow-mcp-ai (Node.js 20+), sob o nome de servidor servicenow. Os links de um clique e trechos abaixo não carregam credenciais: mantenha-as no arquivo env (~/.config/servicenow-mcp-ai/.env, consulte Configurar credenciais), execute o npx servicenow-mcp-ai login único para OAuth, ou peça ao assistente para chamar servicenow_set_credentials assim que o servidor estiver conectado. Uma variável de ambiente real definida em uma configuração de cliente substitui o arquivo env, então só adicione um bloco env quando realmente necessário — e nunca coloque SN_PASSWORD ou outros segredos em uma configuração de cliente que você compartilhe ou faça commit (consulte SECURITY.md).

Install in VS Code Install in VS Code Insiders Install in Cursor

ClienteUma linhaArquivo de configuração
VS Code (Copilot Chat)Botão acima, ou code --add-mcp (abaixo) — ou a extensão ServiceNow MCP.vscode/mcp.json (servers)
VS Code InsidersBotão acima, ou code-insiders --add-mcp (abaixo).vscode/mcp.json (servers)
Claude Codeclaude mcp add servicenow -- npx -y servicenow-mcp-ai, ou o plugin.mcp.json (mcpServers)
Claude Desktop— (edite o arquivo de configuração)claude_desktop_config.json (mcpServers)
CursorBotão acima, ou o deeplink cursor:// (abaixo)~/.cursor/mcp.json ou .cursor/mcp.json (mcpServers)
Windsurf— (edite o arquivo de configuração)~/.codeium/windsurf/mcp_config.json (mcpServers)
Cline— (MCP Servers → Configure MCP Servers)cline_mcp_settings.json (mcpServers)
Zed— (edite as configurações)settings.json (context_servers)
JetBrains AI Assistant— (Settings → Tools → AI Assistant → Model Context Protocol)Diálogo JSON (mcpServers)
Gemini CLI— (edite as configurações)~/.gemini/settings.json (mcpServers)
Codex CLIcodex mcp add servicenow -- npx -y servicenow-mcp-ai~/.codex/config.toml ([mcp_servers.servicenow])
VS Code / VS Code Insiders

A rota de configuração zero é a extensão ServiceNow MCP do Marketplace (code --install-extension ivanbbaev.servicenow-mcp-ai); ela registra o servidor no Copilot Chat (modo agente) automaticamente, sem mcp.json. Código-fonte: extension/.

Sem a extensão, adicione o servidor a partir de um terminal (perfil do usuário):

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"]}'

Os deeplinks brutos por trás dos botões (cole na barra de endereço do 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

Ou um arquivo de workspace, .vscode/mcp.json:

{
  "servers": {
    "servicenow": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "servicenow-mcp-ai"]
    }
  }
}
Claude Code

Plugin (configuração zero — instala o servidor já conectado):

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

O plugin também inclui cinco skills de workflow — consulte Plugin skills.

CLI — --scope user o disponibiliza em todos os projetos; --env define uma variável não secreta (o host da instância) e deixa os segredos no arquivo env. Um valor definido dessa forma vence o arquivo env, então remova --env se você trocar de instância com 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"]
    }
  }
}

Reinicie o Claude Desktop após salvar.

Cursor

Use o botão acima ou abra o deeplink diretamente:

cursor://anysphere.cursor-deeplink/mcp/install?name=servicenow&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInNlcnZpY2Vub3ctbWNwLWFpIl19

Ou edite ~/.cursor/mcp.json (global) / .cursor/mcp.json (projeto) com o mesmo bloco mcpServers do Claude Desktop.

Windsurf, Cline, JetBrains AI Assistant

Todos os três aceitam o bloco mcpServers do Claude Desktop sem alterações:

  • Windsurf — ~/.codeium/windsurf/mcp_config.json (Cascade → MCP servers → View raw config) e, em seguida, atualize a lista de servidores.
  • Cline — Ícone 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, cole o bloco.
{
  "mcpServers": {
    "servicenow": {
      "command": "npx",
      "args": ["-y", "servicenow-mcp-ai"]
    }
  }
}
Zed

No settings.json do Zed (Zed → Settings → Open Settings):

{
  "context_servers": {
    "servicenow": {
      "source": "custom",
      "command": "npx",
      "args": ["-y", "servicenow-mcp-ai"],
      "env": {}
    }
  }
}
Gemini CLI

~/.gemini/settings.json (usuário) ou .gemini/settings.json (projeto):

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

Verifique com /mcp dentro de uma sessão do Gemini CLI.

Codex CLI
codex mcp add servicenow --env SN_INSTANCE=your-instance.service-now.com -- npx -y servicenow-mcp-ai

Ou ~/.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" }

Prefere uma instalação global (npm install -g servicenow-mcp-ai)? Substitua "command": "npx", "args": ["-y", "servicenow-mcp-ai"] por "command": "servicenow-mcp-ai" em qualquer trecho. O MCP Inspector funciona da mesma forma: npx @modelcontextprotocol/inspector npx -y servicenow-mcp-ai.

Os links de um clique são gerados a partir de package.json por scripts/install-links.mjs (node scripts/install-links.mjs os imprime); test/install-links.test.js falha se este README ou o site de documentação divergirem das strings geradas.

Início rápido

O caminho mais rápido são três linhas de autenticação Basic — defina estas (no arquivo de ambiente ou no ambiente real) e você estará conectado:

SN_INSTANCE=dev12345.service-now.com
SN_USER=your.username
SN_PASSWORD=your-password

Todo o resto é ajuste opcional; consulte a referência completa de Environment variables para o restante.

Além de um teste rápido, prefira OAuth a uma senha armazenada. Para qualquer coisa compartilhada ou de longa duração, execute o npx servicenow-mcp-ai login único em vez disso — ele armazena um refresh token, não sua senha. Consulte Configure credentials → OAuth 2.1.

Verifique sua configuração

Depois que as três variáveis estiverem definidas, confirme a conexão antes de começar:

  1. Execute a ferramenta servicenow_test_connection — ela lê um registro sys_user e relata ok, status HTTP e latência.
  2. Execute servicenow_check_capabilities — ela pré-visualiza quais tabelas sys_* restritas a administradores o usuário conectado pode realmente ler.

Ou faça ambos pelo shell de uma só vez:

npx servicenow-mcp-ai doctor   # checks credentials, reachability and capabilities

Prefere ser perguntado? npx servicenow-mcp-ai init solicita a instância, o método de autenticação e as credenciais, grava o arquivo de ambiente e executa doctor — consulte Command-line interface.

Configure credentials

As credenciais ficam em .env na raiz do projeto (ignorado pelo git):

SN_INSTANCE=your-instance.service-now.com
SN_USER=your.username@example.com
SN_PASSWORD=your-password

SN_INSTANCE aceita dev12345, dev12345.service-now.com ou uma URL https:// completa.

Você também pode defini-las ou alterá-las em tempo de execução chamando a ferramenta servicenow_set_credentials — os novos valores são gravados diretamente de volta no arquivo de ambiente. Mover um perfil configurado para uma instância diferente exige user e password na mesma chamada (os segredos armazenados nunca são enviados para outro host), e a alteração deve ser confirmada pelo cliente — clientes sem suporte a elicitação são recusados, a menos que SN_ALLOW_UNCONFIRMED_CREDENTIAL_CHANGE=1 esteja definido.

A ferramenta também define o método de autenticação (auth), o ID do cliente OAuth (oauth_client_id) e a concessão (oauth_grant). Segredos — a chave de API e o segredo do cliente OAuth — nunca são argumentos de ferramenta: liste-os em request_secrets e o servidor os solicita por meio de um prompt de elicitação, para que nunca apareçam em uma chamada de ferramenta registrada, no resultado ou no diário de gravação. Um cliente sem suporte a elicitação é recusado (a opção de exclusão acima não se aplica a segredos); defina essas chaves no arquivo de ambiente em vez disso. A regra de alteração de instância segue o método de autenticação resultante: um perfil com chave de API precisa de uma nova chave de API, um perfil OAuth client_credentials de um novo segredo de cliente, a concessão OAuth password de usuário, senha e segredo de cliente; Basic / none de usuário e senha; perfis de bearer token, refresh_token e jwt_bearer não podem ser movidos com esta ferramenta.

servicenow_get_status (authWarnings), servicenow_list_instances e doctor avaliam cada perfil em relação ao seu próprio método de autenticação — um perfil com chave de API não precisa de senha — e relatam o método, a concessão OAuth, o estado do refresh token e o modo de gravação, nunca um valor secreto. Quando a concessão de refresh token retorna um refresh token rotacionado, ele é gravado de volta na chave de ambiente da qual foi lido; se o arquivo de ambiente não puder ser gravado, o novo token é mantido em memória (perdido na reinicialização) e um aviso é registrado e exibido por get_status / doctor. Valores que o servidor grava mantêm caminhos do Windows literais (barras invertidas são entre aspas simples) e um arquivo de ambiente CRLF permanece CRLF. No Windows, o arquivo de ambiente herda a ACL de sua pasta — restrinja você mesmo (por exemplo, icacls .env /inheritance:r /grant:r "%USERNAME%:F"); o servidor apenas avisa, nunca executa icacls.

O arquivo de ambiente é resolvido nesta ordem: SN_ENV_FILE, depois ~/.config/servicenow-mcp-ai/.env (XDG) se presente, depois o .env na raiz do projeto. Uma instalação global/npx portanto grava na configuração do usuário em vez de node_modules. Variáveis de ambiente reais sempre têm precedência sobre o arquivo.

Primeira execução: o modelo se configura sozinho

Em initialize, o servidor envia instructions construído a partir da configuração ativa: os pacotes habilitados e a contagem de ferramentas, o modo de gravação, o perfil ativo e, quando nada está configurado, o que está faltando e como corrigir. Até então, toda ferramenta de instância falha com error.code: "NOT_CONFIGURED" e uma dica nomeando servicenow_set_credentials. Uma primeira sessão com um arquivo de ambiente vazio se parece com isto (abreviado):

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 então mostra o estado ativo: versão do servidor, tempo de atividade e transporte, policy.summary, limites, redação, o diretório de documentação, contadores de gravação, a fonte do perfil e profileDetails (modo de autenticação por perfil, modo de gravação e chaves ausentes) — nunca um valor secreto.

OAuth 2.1 (Authorization Code + PKCE) — recomendado

Registre um endpoint de API OAuth Authorization Code no ServiceNow com uma URL de redirecionamento de loopback (por exemplo, http://localhost:53682/callback), defina SN_OAUTH_CLIENT_ID (e SN_OAUTH_CLIENT_SECRET para um cliente confidencial), então execute o login interativo único:

npx servicenow-mcp-ai login

Ele abre o navegador, você aprova, e o refresh token obtido é armazenado no seu arquivo de ambiente. O servidor então executa de forma não interativa (concessão refresh_token) — nenhuma senha é armazenada. PKCE (S256) é sempre usado.

A concessão de senha OAuth 2.0 (ROPC) está obsoleta no OAuth 2.1 e desabilitada em muitas instâncias; prefira login. As concessões client_credentials e refresh_token permanecem suportadas para contas de serviço. Consulte .env.example.

Métodos de autenticação suportados

Todo método de autenticação REST de entrada que o ServiceNow oferece é coberto:

MétodoSN_AUTHDefinirNotas
BasicbasicSN_USER / SN_PASSWORDPadrão.
OAuth 2.1 — Authorization Code + PKCEoauthnpx servicenow-mcp-ai loginRecomendado. Interativo, armazena um refresh token.
OAuth — Client CredentialsoauthSN_OAUTH_GRANT=client_credentialsServiço a serviço.
OAuth — Refresh TokenoauthSN_OAUTH_GRANT=refresh_token + SN_OAUTH_REFRESH_TOKENDefinido por login.
OAuth — JWT BeareroauthSN_OAUTH_GRANT=jwt_bearer + SN_OAUTH_JWT_KEYAsserção RS256; sem senha.
OAuth — Password (ROPC)oauthSN_OAUTH_GRANT=passwordObsoleto.
API KeyapikeySN_API_KEYCabeçalho x-sn-apikey.
Bearer tokentokenSN_BEARER_TOKEN ou SN_TOKEN_FILEToken pré-obtido, usado literalmente. Um token rejeitado (401) relê SN_TOKEN_FILE uma vez, caso contrário falha com AUTH_EXPIRED.
Mutual TLS (certificado de cliente)none (ou em camadas)SN_TLS_CLIENT_CERT / _KEYCertificado mapeia para um usuário; precisa de undici opcional.

Variáveis de ambiente

Todas as configurações são lidas de .env (ou do ambiente de processo real, que tem precedência). Apenas as três primeiras são obrigatórias; o restante são ajustes opcionais. Consulte .env.example para um modelo.

VariávelObrigatóriaPadrãoDescrição
SN_INSTANCEsim—Nome da instância, host ou URL https:// (dev12345, dev12345.service-now.com).
SN_USERsim—Nome de usuário do ServiceNow para autenticação básica.
SN_PASSWORDsim—Senha do ServiceNow. Nunca é registrada ou retornada por nenhuma ferramenta.
SN_TIMEOUT_MSnão30000Tempo limite por solicitação em milissegundos.
SN_MAX_RETRIESnão2Tentativas para falhas transitórias (429/5xx, erros de rede). Gravações não idempotentes são repetidas apenas em erros de conexão.
SN_MAX_RECORDSnão10000Limite máximo de registros retornados por uma consulta fetchAll.
SN_MAX_RESULT_CHARSnão100000Orçamento de caracteres para um resultado de consulta antes de ser truncado para o cliente; a nota de truncamento nomeia format:"file". Um resultado de snapshot, comparação ou diagrama acima do orçamento é retornado integralmente com um note.
SN_OVERSIZE_TO_FILEnãofalseS-11: gravar um resultado de snapshot, comparação ou diagrama acima de SN_MAX_RESULT_CHARS em um arquivo sob SN_DOCS_DIR (<profile>/exports/, <profile>/diagrams/) e retornar {path, bytes, preview} em vez disso.
SN_RETRY_AFTER_MAX_MSnão60000Limite superior respeitado para um cabeçalho Retry-After em 429/503; um valor maior é limitado para que um upstream com mau comportamento não possa deixar o cliente parado por minutos.
SN_DEADLINE_MSnão—Orçamento total de tempo real para uma solicitação lógica entre tentativas, backoff, espera na fila e reautenticação OAuth; o padrão é max(120000, 2 × SN_TIMEOUT_MS). Uma tentativa que não couber no orçamento restante não é executada — a chamada falha com o código DEADLINE_EXCEEDED.
SN_ALLOWED_HOSTSnão—Lista de permissões de hosts separada por vírgulas (para domínios personalizados ou de nuvem soberana). Quando definida, apenas hosts correspondentes são contatados. Quando não definida, apenas instâncias *.service-now.com são permitidas e hosts internos/loopback são bloqueados (proteção SSRF). Uma entrada pode incluir uma porta (host:8443) ou ser um literal IPv6 entre colchetes ([2001:db8::1]); uma porta explícita diferente de 443 ou um literal IPv6 no valor da instância é aceito somente quando tal entrada corresponde a ele — nunca sob a política padrão.
SN_MAX_BODY_BYTESnão52428800Maior corpo de resposta (bytes) lido na memória; um corpo maior declarado ou transmitido falha com RESPONSE_TOO_LARGE. Redirecionamentos nunca são seguidos — um 3xx falha com REDIRECT_BLOCKED nomeando o host de destino.
SN_AUTHnãoautoMétodo de autenticação: basic, oauth, apikey, token ou none (mTLS somente com certificado). Detectado automaticamente pelas chaves presentes (chave de API → bearer → OAuth → Básico).
SN_API_KEYnão—Chave de API de entrada do ServiceNow, enviada como cabeçalho x-sn-apikey (habilita o modo apikey).
SN_BEARER_TOKENnão—Um token bearer obtido previamente, enviado literalmente como Authorization: Bearer … (habilita o modo token).
SN_TOKEN_FILEnão—Arquivo contendo o token bearer (habilita o modo token; tem precedência sobre SN_BEARER_TOKEN). Relido uma vez quando a instância rejeita o token com 401, para que um emissor externo possa rotacioná-lo; caso contrário, a chamada falha com AUTH_EXPIRED.
SN_TOKEN_EXPIRES_ATnão—Expiração ISO 8601 do token bearer. get_status / doctor avisam quando restam menos de 24 horas, quando já expirou ou quando não pode ser analisado.
SN_OAUTH_CLIENT_IDnão—ID do cliente OAuth (sua presença habilita OAuth).
SN_OAUTH_CLIENT_SECRETnão—Segredo do cliente OAuth.
SN_OAUTH_GRANTnãopasswordConcessão OAuth: password (obsoleto — ROPC), client_credentials, refresh_token ou jwt_bearer. O comando login define isso como refresh_token para você.
SN_OAUTH_JWT_KEYnão—Chave privada PEM para a concessão jwt_bearer (ou SN_OAUTH_JWT_KEY_FILE). Claims opcionais: SN_OAUTH_JWT_ISS (ID do cliente padrão), SN_OAUTH_JWT_SUB (padrão SN_USER), SN_OAUTH_JWT_AUD, SN_OAUTH_JWT_KID, SN_OAUTH_JWT_EXP_SEC (padrão 300).
SN_OAUTH_REFRESH_TOKENnão—Token de atualização para a concessão refresh_token. Obtido automaticamente por npx servicenow-mcp-ai login (Authorization Code + PKCE).
SN_OAUTH_REDIRECT_URInãohttp://localhost:53682/callbackURL de redirecionamento de loopback para o fluxo PKCE login. Deve corresponder ao redirecionamento registrado no endpoint OAuth.
SN_OAUTH_SCOPEnão—Escopo OAuth opcional solicitado durante login.
SN_HTTPS_PROXYnão—URL de proxy HTTPS de saída (http://user:pass@proxy:3128) para todo o tráfego ServiceNow e OAuth; requer o pacote opcional undici. Quando não definido, as variáveis de ambiente HTTPS_PROXY / HTTP_PROXY são respeitadas juntamente com NO_PROXY; SN_HTTPS_PROXY em si é explícito e ignora NO_PROXY. Credenciais de proxy nunca são registradas.
SN_USER_AGENT_SUFFIXnão—Token extra anexado ao User-Agent enviado em cada solicitação (servicenow-mcp-ai/<version> (node/<major>; <transport>; <client>)), por exemplo, um ID de equipe ou ticket para correlação no log de transações da instância. ASCII imprimível, até 80 caracteres.
SN_TLS_CLIENT_CERTnão—Certificado do cliente (PEM) para TLS mútuo (ou SN_TLS_CLIENT_CERT_FILE). Com SN_TLS_CLIENT_KEY apresenta um certificado do cliente; o perfil de autenticação mútua do ServiceNow o mapeia para um usuário. Requer o pacote opcional undici (npm i undici). Certificado e chave devem ser definidos juntos — apenas um deles é um erro de configuração.
SN_TLS_CLIENT_KEYnão—Chave privada (PEM) para o certificado do cliente (ou SN_TLS_CLIENT_KEY_FILE).
SN_TLS_CAnão—Pacote de CA opcional (PEM) para confiar (ou SN_TLS_CA_FILE) — aplicado com ou sem certificado do cliente; requer o pacote opcional undici. SN_TLS_REJECT_UNAUTHORIZED=false desativa a verificação (não recomendado; avisado uma vez na inicialização).
SN_TABLES_ALLOWnão—Lista de permissões de tabelas separada por vírgulas; quando definida, apenas essas tabelas são acessíveis.
SN_TABLES_DENYnão—Lista de bloqueio de tabelas separada por vírgulas; sempre tem precedência sobre a lista de permissões.
SN_READONLYnãofalseQuando verdadeiro, recusa todo create/update/delete.
SN_ALLOW_UNCONFIRMED_CREDENTIAL_CHANGEnãofalseH-2: opt-out do operador — permite que servicenow_set_credentials prossiga em clientes MCP sem suporte a elicitação (sem prompt de confirmação, sem servidor ao vivo). Uma recusa explícita ainda é recusada. Desativado por padrão.
SN_WRITE_MODEnãoplanplan (padrão) pré-visualiza uma gravação como um diff antes/depois sem mutar; apply executa; passar apply:true força uma única chamada.

| SN_DESTRUCTIVE_CONFIRM | não | off | H-3: confirmação para uma apply:true destrutiva (delete_record, delete_attachment, uma batch de escrita, send_email, order_catalog_item, revert_write, change_conflicts com calculate:true) no modo de plano. token: a pré-visualização do plano retorna um plan_token de uso único e a aplicação deve devolvê-lo com os mesmos argumentos, caso contrário PLAN_REQUIRED; elicit: token mais um prompt de confirmação em clientes com elicitação (uma recusa é CONFIRM_DECLINED, registrada como recusada). SN_WRITE_MODE=apply ignora isso, exceto em um perfil marcado como prod (SN_ENV), que é sempre pelo menos elicit e é confirmado também no modo de aplicação. O padrão 3.0 é uma decisão do proprietário (O-4). | | SN_PLAN_TOKEN_TTL_SEC | não | 600 | H-3: tempo de vida de um plan_token em segundos (30–86400). Os tokens vivem apenas no processo do servidor e são consumidos pela aplicação. | | SN_BATCH_UNMAPPED | não | allow | H-4: uma sub-solicitação servicenow_batch cujo caminho REST não pertence a nenhum pacote de ferramentas: allow verifica-o apenas contra a tabela e os eixos somente leitura; deny recusa-o (portanto, uma nova API de plugin não pode passar SN_PACKAGES_DENY / SN_PACKAGES_READONLY dentro de um lote). Um lote aninhado é sempre recusado. O padrão 3.0 é uma decisão do proprietário (O-4). | | SN_BATCH_MAX_REQUESTS | não | 1000 | H-4: número máximo de sub-solicitações que uma chamada servicenow_batch pode carregar (1–1000), verificado antes de qualquer envio. | | SN_PROTECTED_TABLES_WRITE | não | allow | H-11: deny recusa gravações nas tabelas protegidas integradas (identidade, papéis, ACLs, sys_properties, OAuth, scripts, LDAP, certificados, fontes de dados, mensagens REST — servicenow_explain_policy as lista) com POLICY_DENIED; uma entrada exata de SN_TABLES_ALLOW reabilita uma. Leituras não são afetadas. O padrão 3.0 é uma decisão do proprietário (O-4). Por perfil: SN_PROFILE_<NAME>_PROTECTED_TABLES_WRITE. | | SN_IMPORT_SET_TABLES | não | — | H-11: padrões (*, ?) que a tabela de staging do import-set deve corresponder (ex.: u_*,imp_*); não definido = qualquer tabela que a política de tabelas permitir. | | SN_MAX_WRITES_PER_SESSION | não | — | H-11: número máximo de gravações aplicadas por sessão (o processo em stdio, uma sessão MCP sobre HTTP; um lote conta suas sub-solicitações de escrita). Além disso, as gravações falham com WRITE_CAP antes de qualquer solicitação; get_status.writes.caps mostra o uso. Não definido = sem limite. | | SN_MAX_DELETES_PER_SESSION | não | — | H-11: número máximo de exclusões aplicadas por sessão (WRITE_CAP). Não definido = sem limite. | | SN_MAX_BATCH_WRITES | não | — | H-11: número máximo de sub-solicitações de escrita (não-GET) em um servicenow_batch (WRITE_CAP). Não definido = sem limite. | | SN_ENV | não | — | H-11: marca o perfil padrão como prod, test ou dev (SN_PROFILE_<NAME>_ENV para outros). Um perfil prod permanece no modo de plano mesmo quando a aplicação está configurada, a menos que SN_PROD_WRITES (SN_PROFILE_<NAME>_PROD_WRITES) seja I_UNDERSTAND; suas aplicações destrutivas são sempre confirmadas (pelo menos SN_DESTRUCTIVE_CONFIRM=elicit, também no modo de aplicação — CONFIRM_REQUIRED para um cliente sem elicitação); os resultados carregam _meta.environment; use_instance avisa. SN_PROFILE_<NAME>_WRITE_MODE define o modo de escrita por perfil. | | SN_PROD_WRITES | não | — | H-11: I_UNDERSTAND permite que um perfil padrão prod execute no modo de aplicação. | | SN_UPDATE_SET | não | — | S-6: conjunto de atualização (sys_id ou nome exato) no qual as gravações de ferramentas de Tabela aplicadas (criar / atualizar / upsert / excluir) são registradas; um update_set por chamada o substitui e SN_PROFILE_<NAME>_UPDATE_SET o define por perfil. O plano nomeia o conjunto; o conjunto de atualização atual do usuário é trocado para a gravação e restaurado após ela. Tabelas de linhas de dados são gravadas inalteradas. | | SN_EMAIL_ALLOWED_DOMAINS | não | — | Domínios de destinatários que servicenow_send_email pode endereçar (para/cc/bcc; um domínio cobre seus subdomínios, * permite qualquer). Quando não definido, todo destinatário deve ser o e-mail de um usuário na tabela sys_user da própria instância; qualquer outra coisa falha com RECIPIENT_NOT_ALLOWED. | | SN_MAX_UPLOAD_BYTES | não | 10485760 | Maior anexo de upload decodificado, verificado no comprimento base64 antes da decodificação (PAYLOAD_TOO_LARGE). | | SN_UPLOAD_MIME_ALLOW | não | — | Lista de permissões opcional de tipos de conteúdo de upload (exatos, ou type/*); outros falham com MIME_NOT_ALLOWED. | | SN_REDACT_FIELDS | não | — | DF-5: mascarar esses valores de campo antes que os registros cheguem ao modelo (separados por vírgula/espaço). | | SN_REDACT_PII | não | false | DF-5: também mascarar padrões de e-mail/telefone/ID nacional dentro de valores de string. Desde H-5, ambas as configurações de redação se aplicam profundamente a todo resultado de ferramenta (sucesso e erro) e ao diário de gravação. | | SN_JOURNAL_MAX_BYTES | não | 20971520 | H-5: tamanho (bytes, padrão 20 MiB) no qual write-journal.jsonl rotaciona para write-journal.<ISO-time>.jsonl; a cadeia de hash continua entre arquivos. | | SN_CSV_FORMULA_GUARD | não | true | H-5: prefixar células de texto CSV que começam com =, +, -, @, tabulação ou CR com ' para que planilhas nunca as avaliem (um -5 de texto exporta como '-5). 0 opta por não participar. | | SN_CSV_BOM | não | true | H-5: antepor um BOM UTF-8 às exportações format:"csv" para que o Excel decodifique texto não-ASCII. 0 opta por não participar. | | SN_TRANSPORT | não | stdio | DF-6: stdio (padrão) ou http (HTTP Streamable para clientes remotos/agentes). | | SN_PORT | não | 3000 | DF-6: porta TCP para o transporte http. | | SN_HTTP_HOST | não | 127.0.0.1 | DF-6: endereço de bind para o transporte http (loopback por padrão). | | SN_HTTP_TOKEN | não | — | DF-6: quando definido, solicitações http devem enviar Authorization: Bearer <token>. | | SN_LOG_LEVEL | não | info | Verbosidade de log no stderr: error, warn, info, debug. | | SN_LOG_FORMAT | não | json | E-5: formato de linha de log no stderr — json (um objeto por linha) ou text (HH:MM:SS level message key=value). | | SN_LOG_FILE | não | — | E-5: também anexar toda linha de log (JSON Lines, redigido, modo 0600) a este arquivo, com rotação baseada em tamanho (<file>.1 … <file>.5). O stderr continua funcionando. | | SN_LOG_FILE_MAX_BYTES | não | 10485760 | E-5: limite de rotação para SN_LOG_FILE (bytes). | | SN_METRICS | não | off | E-5: somente transporte HTTP — servir métricas Prometheus em GET /metrics, atrás de SN_HTTP_TOKEN (desabilitado quando nenhum token é definido). | | SN_EXPERIMENTAL_TASKS | não | 0 | M-9, experimental: 1 adiciona um argumento opcional run_as_task:true a snapshot_instance, compare_instances, run_atf_test, run_atf_suite, code_health e query_table (somente format:"file"). Tal chamada retorna um identificador de tarefa MCP imediatamente (_meta["io.modelcontextprotocol/related-task"]); o cliente consulta tasks/get, lê tasks/result (mantido por 1 h, redigido) ou o interrompe com tasks/cancel. Desligado: esquemas inalterados. Construído na API de tarefas experimental do SDK. | | SN_LOG_NOTIFY_RATE | não | 20 | M-8: notificações de log por segundo e sessão de cliente sobre a capacidade de log do MCP (rajada 50, ou a taxa se maior). Linhas acima disso são contadas e relatadas em um aviso "N mensagens de log suprimidas" por minuto; stderr nunca é limitado. 0 = sem limite. | | SN_ENV_FILE | não | — | Caminho explícito para o arquivo de ambiente a ser lido/gravado. | | SN_TOOL_PACKAGES | não | core | Pacotes de ferramentas ou perfis separados por vírgula/espaço para habilitar. Perfis: core (padrão), all e os predefinidos reader | developer | admin (veja Predefinições). Pacotes: 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. As ferramentas de administração estão sempre ativas. atf executa testes na instância — habilite-o apenas em uma instância não-produtiva. | | SN_PACKAGES_DENY | não | — | Pacotes separados por vírgula/espaço para excluir mesmo se habilitados por SN_TOOL_PACKAGES. A única maneira de bloquear APIs de plugin (catálogo, mudança, conhecimento…) — a política de tabelas não as vê. | | SN_PACKAGES_READONLY | não | — | Pacotes separados por vírgula/espaço cujas ferramentas de escrita não são registradas; suas ferramentas de leitura permanecem. Complemento por pacote ao SN_READONLY global. | | SN_SCHEMA_CACHE_TTL_SEC | não | 300 | TTL para o cache de leituras de esquema quase estático (list_tables, describe_table, get_cmdb_meta). 0 desabilita o cache. | | SN_SCHEMA_CACHE_MAX | não | 256 | Número máximo de entradas no cache de leituras de esquema; quando cheio, a entrada menos recentemente usada é removida. Contadores (size, hits, misses, evictions) aparecem em get_status sob schemaCache. | | SN_CAPABILITY_TTL_MS | não | 600000 | Por quanto tempo uma sonda de capacidade bem-sucedida é armazenada em cache — a matriz servicenow_check_capabilities e a disponibilidade da API de plugin (CI/CD, Code Search, Batch…). Passe refresh: true para re-sondar mais cedo. | | SN_PLUGIN_NEGATIVE_TTL_MS | não | 60000 | Por quanto tempo uma sonda de capacidade falha (HTTP 401/403/404/5xx) ou uma API de plugin ausente é armazenada em cache antes de ser tentada novamente. Erros de transporte nunca são armazenados em cache. | | SN_MAX_CONCURRENT | não | 4 | Número máximo de solicitações HTTP paralelas à instância (semáforo simples em processo). | | SN_MAX_QUEUE | não | 64 | Número máximo de solicitações aguardando por host para um slot livre além de SN_MAX_CONCURRENT. Estouro falha imediatamente com código BUSY em vez de acumular. Diagnósticos (servicenow_test_connection, doctor) ignoram a fila para que ainda respondam enquanto ela está parada. | | SN_QUEUE_TIMEOUT_MS | não | SN_TIMEOUT_MS | Tempo máximo que uma solicitação espera por um slot antes de falhar com código BUSY. O tempo de espera não é cobrado no tempo limite por tentativa, apenas em SN_DEADLINE_MS. | | SN_BREAKER_THRESHOLD | não | 0 (desligado) | Disjuntor de circuito opcional por host: após esse número consecutivo de solicitações com falha (erro de transporte, prazo, 5xx), solicitações adicionais falham rapidamente com o código CIRCUIT_OPEN até que SN_BREAKER_RESET_MS passe. Diagnósticos nunca são bloqueados. | | SN_BREAKER_RESET_MS | não | 30000 | Por quanto tempo um disjuntor de circuito aberto rejeita solicitações antes de permitir uma solicitação de teste; a primeira falha o reabre, o primeiro sucesso o fecha. | | SN_INCLUDE_REF_LINKS | não | false | Os campos de referência retornam sem suas URLs link por padrão (economia de tokens). Defina true para incluí-los. | | SN_RESULT_PRETTY | não | false | Os resultados das ferramentas são JSON compacto por padrão (a formatação bonita ~duplica os tokens). Defina true para saída indentada. | | SN_DOCS_DIR | não | docs/instance | Diretório em que o pacote docs lê/escreve Markdown. Caminhos relativos são resolvidos em relação ao diretório de trabalho. Ele também contém o diário de gravação por perfil — adicione docs/instance/ ao .gitignore em qualquer repositório a partir do qual você execute o servidor. | | SN_DOCS_MAX_FILE_BYTES | não | 5242880 | Limite de tamanho por arquivo para as ferramentas de documentação: gravações maiores são recusadas, leituras retornam os primeiros bytes com truncated: true, a pesquisa ignora o arquivo. | | SN_DOCS_STALE_DAYS | não | 30 | servicenow_docs_list sinaliza um documento gerado stale quando seu sn_generated_at é mais antigo que esse número de dias. | | SN_DOCS_SEARCH_MAX | não | 200 | Número máximo de correspondências que servicenow_docs_search retorna; além disso, o resultado carrega truncated: true. | | SN_DIAGRAM_MAX_NODES | não | 200 | Limite de nós para os diagramas Mermaid gerados (fluxo de tabelas, rastreamento de eventos, onde usado; tabelas em um diagrama ER detalhado). Nós além disso são agrupados em um único nó +N more. | | SN_SDK_MANAGED_SCOPES | não | — | P-3: escopos de aplicação separados por vírgula/espaço (namespace como x_acme_app, ou o sys_id sys_scope) que você declara como gerenciados por um projeto ServiceNow SDK (Fluent). A maior fonte de autoridade para detecção gerenciada por SDK; listado em get_status / check_capabilities sob sdkManaged. | | SN_SDK_MANAGED_WRITES | não | warn | P-22: gravações em um escopo gerenciado por SDK (um registro cujo sys_scope P-3 detecta como gerenciado por SDK) de create_record, update_record, upsert_record, delete_record, set_property e revert_write: warn pré-visualiza e aplica com um bloco sdkManaged nomeando a alternativa Fluent; deny recusa a aplicação com SDK_MANAGED_SCOPE (o plano diz would_refuse); allow ignora a verificação. Executa após a política de tabelas e não custa nada, a menos que SN_SDK_MANAGED_SCOPES ou SN_SDK_PROJECT_DIRS esteja definido. | | SN_SDK_PROJECT_DIRS | não | — | P-3: diretórios (separados por vírgulas ou pelo delimitador de caminho da plataforma) verificados somente leitura para projetos SDK: cada now.config.json declara seu scope / scopeId como gerenciado por SDK. Limitado (profundidade 4, 2000 diretórios, 100 arquivos de configuração, 256 KiB por arquivo), nunca segue links simbólicos, ignora pastas ocultas, node_modules e de build, e lê apenas now.config.json. | | SN_CODESEARCH | não | false | Opte pela API de Pesquisa de Código (sn_codesearch) para servicenow_search_code (FT-7). Quando true e o plugin estão ativos, ela substitui a iteração LIKE; volta para LIKE em qualquer falha. | | SN_PROFILE_<NAME>_* | não | — | Perfis de conexão nomeados: SN_PROFILE_DEV_INSTANCE / _USER / _PASSWORD definem o perfil dev. As chaves simples SN_INSTANCE/SN_USER/SN_PASSWORD são o perfil default. | | SN_ACTIVE_PROFILE | não | default | Qual perfil as ferramentas usam. Alterne em tempo de execução com servicenow_use_instance (persistido no arquivo de ambiente). |

Política de acesso em dois eixos

O acesso é controlado em dois eixos independentes: tabelas e pacotes de ferramentas.

EixoHabilitar / negar / somente leituraExemplo
TabelasSN_TABLES_ALLOW / SN_TABLES_DENY / SN_READONLYSN_TABLES_DENY=change_request bloqueia a API de Tabelas e (desde H-4) as ferramentas de Change, que verificam sua tabela de apoio.
PacotesSN_TOOL_PACKAGES / SN_PACKAGES_DENY / SN_PACKAGES_READONLYSN_PACKAGES_DENY=change remove as ferramentas de Gerenciamento de Mudanças e bloqueia a API do plugin sn_chg_rest, também dentro de um lote.

Desde H-4, as ferramentas apoiadas por plugins (Change, Catalog, Knowledge, Email, ATF) e anexos (através da tabela do registro pai) também obedecem ao eixo de tabelas; o eixo de pacotes ainda remove superfícies inteiras. Consulte Notas de segurança para o modelo completo (incluindo como a API de Lote obedece a ambos os eixos).

Sintaxe de lista: listas de tabelas (SN_TABLES_ALLOW / SN_TABLES_DENY) são separadas por vírgula; listas de pacotes (SN_TOOL_PACKAGES, SN_PACKAGES_DENY, SN_PACKAGES_READONLY) aceitam vírgulas ou espaços em branco. Espaços ao redor são removidos em ambas, e a correspondência de tabelas não diferencia maiúsculas de minúsculas — então SN_TABLES_DENY=Change_Request, sys_user funciona. Desde H-11, uma entrada de tabela pode ser um padrão (* qualquer sequência, ? um caractere): SN_TABLES_DENY=sys_* bloqueia sys_user e deixa incident intacto. A ordem é: uma negação exata, uma permissão exata, uma negação por padrão, as tabelas protegidas (gravações, com SN_PROTECTED_TABLES_WRITE=deny), então os padrões da lista de permissões. Pergunte servicenow_explain_policy({table, action}) qual regra decide, ou leia servicenow://policy.

Executar / depurar

  • VS Code: abra a Paleta de Comandos e inicie o servidor definido em .vscode/mcp.json, depois use-o no Chat.
  • MCP Inspector: npm run inspector
  • Diretamente: npm start

Observabilidade

  • Status. servicenow_get_status carrega um bloco observability: por ferramenta {count, errors, p50, p95, totalMs} (percentis em ms sobre as últimas 256 chamadas de cada ferramenta — a memória permanece limitada), acertos/erros de cache de esquema, contadores de repetição por host, limites e ocupação de fila, estado do disjuntor e os últimos cabeçalhos X-RateLimit-* que cada host enviou. Ele nunca chama a instância.

  • Logs. Os logs vão apenas para stderr (stdout é o protocolo MCP). SN_LOG_FORMAT=text alterna de linhas JSON para um formato legível por humanos; SN_LOG_FILE também anexa linhas JSON a um arquivo com rotação de tamanho. Campos nomeados por credenciais (password, token, authorization, …) são mascarados em cada destino, e as regras SN_REDACT_FIELDS / SN_REDACT_PII se aplicam por cima.

  • Ganchos de rastreamento. O loop de requisições publica em node:diagnostics_channel, então um assinante OpenTelemetry (ou qualquer um) pode se anexar sem dependência deste servidor:

    CanalQuandoCampos de mensagem
    servicenow-mcp:http.request.startuma requisição lógica começaid, system, method, host, telemetryKey, url, e profile / requestId / sessionId / tool em uma chamada
    servicenow-mcp:http.request.endresolveu com uma resposta OKos campos iniciais mais status, attempts, ms
    servicenow-mcp:http.request.errorfalhouos campos iniciais mais attempts, ms, status, code, errorName, errorMessage
    servicenow-mcp:http.request.retryuma tentativa é repetida (backoff, reautenticação 401)id, system, method, host, url, attempt, reason, waitMs

    url nunca inclui a string de consulta; cabeçalhos, corpos e credenciais nunca são publicados, e errorMessage passa pelas regras de redação.

  • Prometheus. Com o transporte HTTP, SN_METRICS=1 e SN_HTTP_TOKEN definidos, GET /metrics (mesmo token de portador) serve as mesmas figuras no formato de texto Prometheus (famílias servicenow_mcp_*, rotuladas apenas por tool / host). Sem um token, o endpoint permanece desligado e um aviso é registrado.

Interface de linha de comando

O binário publicado servicenow-mcp-ai (execute-o diretamente, ou via npx servicenow-mcp-ai) inicia o servidor MCP quando nenhum comando é fornecido, e caso contrário executa um dos comandos abaixo e sai. As configurações de conexão vêm de variáveis de ambiente / arquivo de ambiente (consulte Variáveis de ambiente). servicenow-mcp-ai --help lista tudo; --version imprime a versão. Um comando ou opção desconhecido imprime o uso em stderr e sai com 2 — ele nunca inicia o servidor.

ComandoOpçõesO que fazCódigos de saída
servicenow-mcp-ai(nenhuma)Inicia o servidor MCP. O transporte (stdio padrão, ou http) é escolhido por SN_TRANSPORT; executa até SIGINT/SIGTERM. stdout é o canal de protocolo.0 desligamento limpo · 1 erro fatal de inicialização
servicenow-mcp-ai init--profile <name>, --skip-doctorConfiguração interativa: pergunta pela instância, o método de autenticação e suas credenciais (segredos através de um prompt oculto), escreve o arquivo de ambiente, então executa doctor.o código de saída doctor · 0 com --skip-doctor · 2 respostas recusadas / inválidas
servicenow-mcp-ai doctor--json, --ascii, --profile <name>Verificação de saúde: credenciais, uma sonda de conectividade ao vivo e a pré-verificação de capacidade. A primeira linha nomeia o arquivo de ambiente que foi usado.0 saudável · 1 degradado ou inacessível · 2 não configurado
servicenow-mcp-ai login--profile <name>Login único OAuth 2.1 Authorization Code + PKCE: abre o navegador, captura o redirecionamento de loopback, armazena um token de atualização.0 sucesso · 1 falha no login
servicenow-mcp-ai drift <profileA> <profileB>(nenhuma)Portão de deriva de CI DF-3: compara as duas instâncias e escreve um relatório de diferenças em Markdown.0 sem deriva · 1 deriva encontrada · 2 uso / erro
servicenow-mcp-ai support-bundle--out <file>, --profile <name>Escreve um arquivo JSON para um relatório de bug e imprime seu caminho em stdout.0 escrito · 1 falha na escrita

init escreve através do mesmo gravador de arquivo de ambiente atômico, somente do proprietário (0600) que servicenow_set_credentials, para o arquivo que doctor nomeia (por padrão ~/.config/servicenow-mcp-ai/.env). Ele pergunta, em ordem: a instância (dev12345 ou um host completo; um domínio personalizado precisa de SN_ALLOWED_HOSTS), o método de autenticação (basic / oauth / apikey / token), então as configurações desse método — para oauth a concessão (client_credentials, password, ou authorization_code, que termina com uma dica para executar login). Segredos nunca são ecoados ou registrados; o resumo lista apenas nomes de chaves. Com --profile qa as chaves são escritas como SN_PROFILE_QA_*. Um perfil existente é sobrescrito apenas após um y. As respostas podem ser canalizadas, uma por linha, que é como CI e testes a dirigem:

printf 'dev12345\nbasic\nalice\n%s\n' "$SN_PASSWORD" | npx servicenow-mcp-ai init

Sem um terminal e sem respostas canalizadas, init recusa (saída 2) e não escreve nada.

doctor imprime ASCII simples ([ok] / [x] em vez de marcas de verificação) com --ascii, quando stdout não é um terminal, e no Windows fora do Windows Terminal. --json imprime um documento JSON em vez disso: envFile, status, summary, checks[] (name, ok, detail), config, connection, capabilities e serverStatus (o payload servicenow_get_status) — por exemplo servicenow-mcp-ai doctor --json | jq .checks. Os códigos de saída são os mesmos.

support-bundle coleta o payload doctor --json, cada configuração SN_* com segredos mascarados como ***, npm ls --omit=dev (melhor esforço), o resumo do manifesto de ferramentas (versão, contagens de ferramentas e pacotes, ferramentas ativas) e as últimas 200 linhas de SN_LOG_FILE quando uma está definida. Cada valor mascarado também é limpo de todo o arquivo. O caminho padrão é ./servicenow-mcp-ai-support-<timestamp>.json (modo 0600). Nomes de instância e usuário não são mascarados — revise o arquivo antes de anexá-lo a um problema.

login opera no perfil ativo (SN_ACTIVE_PROFILE, padrão default) e lê, para esse perfil:

  • SN_INSTANCE — obrigatório; a instância de destino.
  • SN_OAUTH_CLIENT_ID — obrigatório; id do cliente de um endpoint de API OAuth Authorization Code.
  • SN_OAUTH_CLIENT_SECRET — opcional; para um cliente confidencial.
  • SN_OAUTH_REDIRECT_URI — opcional; URL de loopback, padrão http://localhost:53682/callback. Deve corresponder ao redirecionamento registrado no endpoint.
  • SN_OAUTH_SCOPE — opcional; escopo OAuth solicitado.

Em caso de sucesso, escreve SN_AUTH=oauth, SN_OAUTH_GRANT=refresh_token e SN_OAUTH_REFRESH_TOKEN de volta ao arquivo de ambiente (prefixado por perfil quando o perfil não é default). A URL de autorização é impressa em stderr caso o navegador não abra automaticamente.

drift recebe dois nomes de perfil posicionais; cada um deve resolver para um perfil configurado (SN_PROFILE_<NAME>_*, ou as chaves simples SN_INSTANCE / SN_USER / SN_PASSWORD para default). O relatório Markdown é escrito em stdout (capture-o como um artefato de CI); um resumo de deriva de uma linha vai para stderr.

Portão de deriva de CI (DF-3)

Compare dois perfis configurados e falhe um pipeline em deriva de configuração:

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

O relatório mostra cada script alterado como um bloco diff. A CLI compara tabelas, colunas, scripts, plugins e aplicativos; seções de registros (sections em servicenow_compare_instances) são opcionais, então os códigos de saída permanecem inalterados.

servicenow_snapshot_instance escreve o mesmo material na pasta de docs, um arquivo por seção, no máximo quatro seções por vez. Uma execução interrompida é marcada partial em index.json; execute novamente com resume: true para pular toda seção cujos arquivos não foram alterados.

Desenvolver

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

Consulte CONTRIBUTING.md para as convenções (um commit por tarefa, testes acompanham a alteração, documentação gerada).

Ferramentas

Esta tabela é gerada a partir dos registros de ferramentas — edite as definições de ferramentas em src/tools/, depois execute npm run docs:readme.

PacoteFerramentaSomente leituraDescrição
tableservicenow_query_tablesimLer registros de qualquer tabela (Table API): consulta codificada, campos, paginação, fetchAll
tableservicenow_get_recordsimLer um único registro de uma tabela pelo seu sys_id
tableservicenow_create_recordnãoCriar um novo registro em uma tabela com os valores de campo fornecidos
tableservicenow_update_recordnãoAtualizar campos em um registro existente identificado pelo seu sys_id
tableservicenow_upsert_recordnãoCriar ou atualizar um registro correspondente por uma chave exata de pares campo/valor: sem correspondência cria, uma atualiza, se…
tableservicenow_delete_recordnãoExcluir um registro de uma tabela pelo seu sys_id
schemaservicenow_list_tablessimListar tabelas de sys_db_object, opcionalmente filtradas por um fragmento de nome ou rótulo
schemaservicenow_describe_tablesimListar as colunas de uma tabela de sys_dictionary (nome, rótulo, tipo, obrigatório, referência, padrão, somente leitura/uni…
aggregateservicenow_aggregatesimCalcular agregados no servidor (count, avg, min, max, sum) sobre uma tabela via Stats API, com gr… opcional
attachmentservicenow_list_attachmentssimListar metadados de anexos, opcionalmente limitados a um registro específico (tabela + sys_id)
attachmentservicenow_get_attachmentsimLer os metadados de um único anexo pelo seu sys_id
attachmentservicenow_download_attachmentsimBaixar os bytes de um anexo, retornados como base64
attachmentservicenow_upload_attachmentnãoAnexar um arquivo (fornecido como base64) a um registro identificado por tabela + sys_id
attachmentservicenow_delete_attachmentnãoExcluir um anexo pelo seu sys_id
importsetservicenow_insert_import_set_rownãoInserir uma linha em uma tabela de staging e executar seu mapa de transformação
importsetservicenow_get_import_set_rowsimLer o resultado da transformação para uma linha de staging inserida anteriormente pelo seu sys_id
batchservicenow_batchnãoExecutar várias sub-solicitações REST do ServiceNow em uma única ida e volta HTTP via Batch API
catalogservicenow_list_catalogssimListar os Catálogos de Serviço disponíveis na instância (Service Catalog API)
catalogservicenow_list_catalog_categoriessimListar as categorias dentro de um catálogo de serviços
catalogservicenow_list_catalog_itemssimPesquisar/listar itens de catálogo ordenáveis, opcionalmente por texto ou categoria
catalogservicenow_get_catalog_itemsimObter um item de catálogo, incluindo suas variáveis de pedido, por sys_id
catalogservicenow_order_catalog_itemnãoPedir um item de catálogo diretamente ('order now')
changeservicenow_list_changessimListar solicitações de mudança através da Change Management API
changeservicenow_get_changesimObter uma única solicitação de mudança por sys_id
changeservicenow_create_changenãoCriar uma mudança normal, padrão ou de emergência
changeservicenow_update_changenãoAtualizar campos em uma solicitação de mudança por sys_id
changeservicenow_change_conflictsnãoLer conflitos de agenda para uma mudança, ou recalculá-los (calculate=true)
knowledgeservicenow_search_knowledgesimPesquisa de texto completo de artigos de conhecimento (Knowledge API), com consulta codificada e paginação opcionais
knowledgeservicenow_get_knowledge_articlesimObter um artigo de conhecimento (conteúdo e metadados) por sys_id
knowledgeservicenow_knowledge_highlightssimListar artigos de conhecimento em destaque ou mais visualizados para o usuário atual
cmdbservicenow_list_cissimListar itens de configuração de uma classe CMDB através da class-aware CMDB Instance API
cmdbservicenow_get_cisimObter um IC com seus atributos e relações de entrada/saída por classe e sys_id
cmdbservicenow_create_cinãoCriar um IC via CMDB Instance API (roteado através de Identification & Reconciliation)
cmdbservicenow_update_cinãoAtualizar os atributos de um IC via CMDB Instance API (IRE)
cmdbservicenow_get_cmdb_metasimObter o esquema/metadados de uma classe CMDB (atributos, regras de relacionamento) da CMDB Meta API
cmdbservicenow_list_ci_relationssimListar as relações de um IC de cmdb_rel_ci, cada uma orientada a partir desse IC (saída = ele é o pai,…
cmdbservicenow_identify_reconcilenãoEnviar ICs e relações através do Identification & Reconciliation Engine (/api/now/identifyreconcile),…
scriptsservicenow_list_scriptssimListar artefatos de script de um tipo como metadados compactos (sem código-fonte); 'type' lista os padrão e opt-i…
scriptsservicenow_get_scriptsimLer um artefato de script completo, incluindo seu código-fonte e contexto de execução
scriptsservicenow_search_codesimPesquisar o código-fonte de scripts por uma substring literal em um ou todos os tipos de script
scriptsservicenow_table_logicsimMontar a automação que roda em uma tabela: regras de negócio (ordenadas por when+order), scripts de cliente, UI po…
scriptsservicenow_where_usedsimEncontrar referências a uma tabela, campo (tabela.campo) ou script: linhas correspondentes em fontes de script, regras/ACLs att…
flowsservicenow_trace_table_eventsimRastrear o que seria executado para uma operação de tabela, em ordem, sem executar: display/before/after/async busines…
flowsservicenow_list_flowssimListar fluxos do Flow Designer (sys_hub_flow) ou workflows legados (kind: 'workflow') como metadados compactos
flowsservicenow_get_flowsimObter uma visão estruturada de um fluxo ou workflow: seu gatilho (tabela/condição/quando) e etapas ordenadas
flowsservicenow_get_flow_runssimLer evidências de execução de fluxo de sys_flow_context — por sys_id do fluxo ou pelo registro (documento) em que foi executado…
flowsservicenow_explain_flowsimExplicar um fluxo/subfluxo (gatilho, árvore de etapas com entradas e pílulas decodificadas, chamadas de subfluxo/ação expandidas, dr…
codecheckservicenow_lint_scriptsimExecutar regras determinísticas de qualidade de código sobre um artefato de script (sys_ids/URLs codificados, sem limites ou em loo…
codecheckservicenow_lint_tablesimLint de toda regra de negócio ativa, script de cliente e política de UI de uma tabela (via table_logic), retornando por-sc…
codecheckservicenow_code_healthnãoRelatório de saúde de código: contagens de scripts por tipo, varredura de segurança de ACL (abertas, função pública, scriptadas, ACLs elevadas, p…
docsservicenow_docs_listsimListar os documentos Markdown na pasta local de documentação da instância (SN_DOCS_DIR), com metadados por arquivo…
docsservicenow_docs_readsimLer um documento Markdown ou companheiro .json gerado da pasta local de documentação da instância; o r…
docsservicenow_docs_searchsimPesquisar a documentação local da instância por uma substring; retorna um trecho e o cabeçalho mais próximo por corres…
docsservicenow_docs_writenãoCriar ou sobrescrever um documento Markdown na pasta local de docs e atualizar index.md
docsservicenow_generate_er_diagramsimConstruir um erDiagram Mermaid a partir de sys_dictionary: uma entidade por tabela, uma relação por campo de referência
docsservicenow_generate_table_flowsimFluxograma Mermaid do ciclo de vida de um registro em uma tabela: regras de negócio ativas por fase (display/before/after/…
docsservicenow_document_tablenãoEscrever /tables/.md + .json apenas a partir de metadados: herança, colunas, colunas de referência, ER…
docsservicenow_document_appnãoEscrever /apps/.md + .json para um aplicativo com escopo: seu registro, tabelas com um diagrama ER, funções, c…
docsservicenow_document_instancenãoEscrever /README.md (versão, contagens, aplicativos, plugins, automação, conjuntos de atualização) e artifact-types.md, …
instanceservicenow_snapshot_instancenãoBaixar metadados estruturais para SN_DOCS_DIR// como Markdown + JSON: tabelas, schema/.md, plugi…
instanceservicenow_compare_instancesnãoComparar dois perfis: tabelas em apenas um, diferenças de tipo de coluna/obrigatório/referência, scripts ausentes/renomeados…
emailservicenow_send_emailnãoEnviar um e-mail através da Email API (o plugin deve estar ativo), opcionalmente vinculado a um registro (tabela + sys_id)
emailservicenow_get_emailsimLer um registro de e-mail enviado/recebido pelo seu sys_id (Email API)
atfservicenow_list_atf_testssimListar testes do Automated Test Framework (sys_atf_test) como metadados: nome, flag ativo, descrição
atfservicenow_list_atf_suitessimListar suítes de teste do Automated Test Framework (sys_atf_test_suite) como metadados
atfservicenow_run_atf_testnãoExecutar um teste ATF através da CI/CD API
atfservicenow_run_atf_suitenãoExecutar uma suíte de testes ATF através da CI/CD API
atfservicenow_get_atf_resultsimConsultar uma execução ATF pelo seu id de execução: status, percentual concluído e mensagem (CI/CD progress API)
revertservicenow_list_writessimListar o diário local de gravações (mais recentes primeiro): cada create/update/delete/execute que este servidor fez, com seu …
revertservicenow_revert_writenãoDesfazer uma gravação aplicada do diário local: uma atualização restaura seus valores anteriores, um create é excluído, u…
artifactsservicenow_list_artifactssimListar registros de qualquer tipo de artefato de registro (regras de negócio, políticas de UI, widgets, fluxos, itens de catálogo, …) …
artifactsservicenow_get_artifactsimLer um artefato de qualquer tipo de registro completo: o registro, seus registros filhos de registro (por exemplo
artifactsservicenow_explain_artifactsimExplicar um artefato de qualquer tipo de registro: resumo, campos de gatilho, campos não vazios, filhos, referenciados …
artifactsservicenow_artifact_dependenciessimGrafo de dependências de um artefato: saída (campos de referência, JSON decodificado, chamadas de script e GlideRecord ta…
updatesetsservicenow_list_update_setssimListar conjuntos de atualização (sys_update_set), mais recentes primeiro, com estado, escopo do aplicativo e se cada um é do usu…
updatesetsservicenow_get_update_setsimResumir um conjunto de atualização: suas atualizações de cliente (sys_update_xml) por artefato — tipo, nome do alvo, ação, t…
updatesetsservicenow_compare_update_setsimComparar os artefatos de um conjunto de atualização com outro perfil (ao vivo) ou um snapshot armazenado: por artefato igual / dif…
opsservicenow_ops_readsimVisões operacionais limitadas para triagem de 'por que está lento': visão geral (todas as contagens), syslog (entradas recentes por niv…
opsservicenow_data_healthsimContagens de qualidade de dados para uma tabela (gêmeo de servicenow_code_health): grupos duplicados sobre key_fields, e o…
historyservicenow_get_record_historysimLer o histórico de alterações de um registro: alterações de campo sys_audit e entradas sys_journal_field (comentários, work_notes…
propertiesservicenow_get_propertiessimLer propriedades do sistema (sys_properties) por nome exato ou prefixo de nome: valor, tipo, descrição, leitura/gravação …
propertiesservicenow_set_propertynãoDefinir o valor de uma propriedade de sistema existente (sys_properties) por nome
directoryservicenow_lookup_directorysimEncontrar usuários (user_name, prefixo de e-mail ou nome), grupos ou funções por termo de pesquisa ou sys_id
uiservicenow_explain_portalsimExplicar um Service Portal (url_suffix ou sys_id) ou uma página como uma árvore: tema, menu, páginas, depois layout cont…
adminservicenow_set_credentialsnãoSalvar credenciais de conexão no arquivo de ambiente para solicitações futuras (qualquer subconjunto; auth / oauth_client_id / oauth_…
adminservicenow_list_instancessimLista os perfis de conexão do ServiceNow configurados (instâncias): nome, host, usuário, método de autenticação (e OAuth gr…
adminservicenow_use_instancenãoAlterna o perfil de conexão ativo do ServiceNow (persistido no arquivo de ambiente)
adminservicenow_explain_policysimInforma se uma tabela pode ser lida ou gravada sob a política ativa e qual regra decide (as próprias guardas…)
adminservicenow_get_statussimMostra instância, autenticação, credenciais ausentes, modo de gravação por perfil, política, limites, TLS, fila, contador de gravação…
adminservicenow_test_connectionsimVerifica se as credenciais configuradas realmente funcionam: lê um registro sys_user e reporta ok/status/latência
adminservicenow_check_capabilitiessimPré-verifica quais tabelas sys_* o usuário pode ler e quais capacidades (esquema, inteligência de script, auditoria de ACL…)
adminservicenow_list_packagessimLista os pacotes de ferramentas com seu estado para esta sessão: habilitado, configurado (SN_TOOL_PACKAGES), negado, r…
adminservicenow_enable_packagenãoHabilita um pacote de ferramentas para esta sessão: suas ferramentas, recursos e prompts aparecem (list_changed é enviado)
adminservicenow_disable_packagenãoDesabilita um pacote de ferramentas para esta sessão: suas ferramentas, recursos e prompts são retirados (list_changed é enviado)

Todas as ferramentas carregam anotações MCP (readOnlyHint, destructiveHint, idempotentHint) para que os clientes possam aplicar a experiência de confirmação correta.

Pacotes de ferramentas

As ferramentas são agrupadas em pacotes para que você possa expor apenas o que um determinado cliente precisa (menos ferramentas mantêm o modelo focado). Defina SN_TOOL_PACKAGES para uma lista separada por vírgula/espaço de perfis ou nomes de pacotes:

  • core (padrão) — table, schema, aggregate, attachment.
  • all — todos os pacotes abaixo.
  • Pacotes individuais: 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.

As ferramentas de administração (servicenow_set_credentials, servicenow_get_status, servicenow_enable_package e o restante do pacote de administração) são sempre registradas, independentemente dos pacotes ativos. Nomes desconhecidos são ignorados. servicenow_get_status relata o enabledPackages resolvido.

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

Predefinições

Se você preferir não selecionar a lista manualmente, três predefinições nomeadas cobrem os papéis comuns. As ferramentas de administração estão sempre ativas, portanto não são listadas. Cada predefinição também tem um alias de uma palavra — SN_TOOL_PACKAGES=reader|developer|admin — que expande para o mesmo conjunto de pacotes.

PredefiniçãoSN_TOOL_PACKAGES=…Para quem
readertable,schema,aggregatePrimeiro contato, analistas, um teste de PDI — somente leitura e consulta.
developertable,schema,aggregate,scripts,flows,codecheck,docsO segmento principal: inteligência de script, rastreamento de fluxo, linting, documentação e diagramas.
adminallTudo, incluindo o plugin e os pacotes com muitas operações de escrita.

A predefinição developer é construída sobre o conjunto reader; o pacote docs inclui os geradores de diagramas Mermaid. Use o alias por brevidade ou escreva os pacotes por extenso para adicionar ou remover um.

Alternando pacotes em tempo de execução

Um cliente pode ampliar ou reduzir sua superfície sem reiniciar: servicenow_list_packages mostra cada pacote com seu estado para esta sessão (habilitado, configurado, negado, somente leitura, contagem de ferramentas), e servicenow_enable_package / servicenow_disable_package alternam um. O servidor anuncia a mudança com notifications/tools/list_changed (e os equivalentes de prompts / recursos quando esses também mudam), um por lista por alternância. Uma alternância nunca excede os eixos de política: um pacote em SN_PACKAGES_DENY é recusado (PACKAGE_DENIED), um pacote em SN_PACKAGES_READONLY traz apenas suas ferramentas de leitura, e as ferramentas de administração não podem ser desabilitadas. As alternâncias duram pela sessão; uma sessão HTTP que fecha retorna a SN_TOOL_PACKAGES. Nada muda a menos que um cliente chame essas ferramentas.

O servidor também declara resources.subscribe: após servicenow_use_instance ou servicenow_set_credentials ele envia notifications/resources/list_changed e, para assinantes, notifications/resources/updated para servicenow://status.

Upsert por chave

servicenow_upsert_record({table, key, fields}) cria ou atualiza um registro correspondido por key, uma correspondência exata em um ou mais pares de campo/valor (por exemplo {"u_external_id": "A-17"}; uma string vazia corresponde a um campo vazio). Sem correspondência cria um registro com a chave e os campos, exatamente uma correspondência o atualiza, e mais de uma correspondência é recusada com AMBIGUOUS_KEY — assim como uma correspondência que o usuário não pode ler, pois criar outra a duplicaria.

A ação é decidida no plano: sem apply:true a ferramenta retorna create ou update (com os valores de sys_id e before) além de apply_with: {expected_action, expected_sys_id}. Passe-os de volta com apply:true; se a chave agora resolver de forma diferente (o registro apareceu, sumiu ou é outro) a chamada falha com STALE_RECORD e não escreve nada. A escrita aplicada é registrada no diário como uma criação ou uma atualização, então servicenow_revert_write a desfaz como um create_record / update_record direto.

Desfazer uma escrita (reversão baseada em diário)

Toda escrita aplicada é registrada no diário de escrita local, encadeado por hash (<SN_DOCS_DIR>/<profile>/write-journal.jsonl). O pacote opcional revert o transforma em um desfazer:

  • servicenow_list_writes — o diário do mais novo para o mais antigo, filtrado por profile, table, since (data/hora ISO), result e action. Cada linha carrega a entrada id e se a linha sozinha permite uma reversão (revertible + reason).
  • servicenow_revert_write — entry_id → a escrita inversa através da API de Tabela: uma atualização escreve de volta seus valores de before registrados no diário, uma criação é excluída, uma exclusão é recriada a partir de seu registro before (campos de sistema removidos, o sys_id original solicitado; o resultado relata sys_id_preserved). Segue plano/aplicação como toda ferramenta de escrita: sem apply:true retorna o inverso, o estado atual do registro e a verificação de desvio, e não muda nada.

Regras de segurança:

  • Verificação de desvio. O sys_mod_count do registro é comparado com o valor que a escrita registrada no diário deixou (after_mod_count, ou before.sys_mod_count + 1); quando nenhuma contagem está disponível, os valores dos campos escritos são comparados em vez disso. Se o registro mudou desde então — ou nada pôde ser comparado — a reversão é recusada com STALE_RECORD; passe force:true para sobrescrever mesmo assim (a linha do diário da reversão então registra force: true).
  • NOT_REVERTIBLE, com o motivo, quando a entrada é desconhecida, a cadeia do diário está quebrada, a escrita não foi applied, a linha não tem estado before, um valor before foi redigido (SN_REDACT_FIELDS / SN_REDACT_PII), a entrada já foi revertida, ou sua origem não tem um inverso seguro: upload/exclusão de anexo, send_email, linhas de conjunto de importação, pedidos de catálogo, sub-requisições da API Batch, execuções de ATF, criações de CMDB (IRE pode ter correspondido a um CI existente) e entradas locais/de configuração. Um valor redigido nunca é restaurado como [redacted]: a entrada inteira é recusada, sem reversão parcial — restaure esses campos manualmente.
  • A reversão em si é registrada no diário (reverts: <entry_id>, tool: servicenow_revert_write), então reverter a reversão é um refazer. A política se aplica como para uma escrita direta: SN_READONLY, as listas de permitir/negar de tabela e os eixos de pacote tanto do pacote original quanto de table. Coloque revert em SN_PACKAGES_READONLY para manter list_writes sem o desfazer.

Conjuntos de atualização

O pacote opcional updatesets lê conjuntos de atualização (todas as três ferramentas são somente leitura e passam pela política de tabela e redação como qualquer leitor):

  • servicenow_list_update_sets — state opcional, fragmento name, application (namespace de escopo, global ou sys_id), query, limit / offset → conjuntos do mais novo para o mais antigo, com o conjunto atual do usuário marcado.
  • servicenow_get_update_set — update_set (sys_id ou nome exato) → suas atualizações de cliente (sys_update_xml) por artefato: tipo, nome do alvo, ação, tabela, além das contagens by_type / by_action. Os payloads são omitidos a menos que include_payload: true; eles são então analisados em valores de campo, cada um limitado a payload_max_chars (padrão 500), com campos de aparência secreta mascarados.
  • servicenow_compare_update_set — update_set mais with_profile (ler ao vivo) ou with_snapshot (um snapshot servicenow_snapshot_instance) → por artefato same / different (somente nomes de campos diferentes) / missing / not_comparable / not_covered / unknown. Somente campos no payload de atualização são comparados; colunas de auditoria são ignoradas.

Escritas: servicenow_create_record, servicenow_update_record, servicenow_upsert_record e servicenow_delete_record aceitam um update_set opcional (sys_id ou nome exato; padrão SN_UPDATE_SET). A prévia do plano nomeia o conjunto alvo; aplicar alterna a preferência sys_update_set do usuário (e a preferência updateSetForScope<scope> do escopo para um conjunto com escopo), executa a escrita e restaura o valor anterior — o resultado relata update_set: { bound, previous, restored } e a entrada do diário registra update_set. Um conjunto que não está in progress é recusado (UPDATE_SET_NOT_IN_PROGRESS); uma tabela de linhas de dados (qualquer coisa que não estenda sys_metadata e sem o atributo update_synch) é escrita sem alternar, e o plano diz isso. Sem o argumento ou a configuração, nada muda. Outras ferramentas de escrita (batch, catálogo, mudança…) não são vinculadas.

Operações e saúde de dados

O pacote opcional ops contém duas ferramentas somente leitura para o triage de "a instância está lenta" e qualidade de dados. Cada seção lê sua própria tabela; uma tabela ilegível (ACL, política de tabela, tabela ausente) relata available: false com o motivo em vez de falhar a chamada, então uma seção em branco nunca é lida como saudável.

  • servicenow_ops_read — kind:

    • overview — as contagens de cada seção abaixo em uma chamada.
    • syslog — entradas dos últimos minutes (padrão 60, máximo 1440) em ou acima de level (padrão warning), fragmento source opcional: contagens por nível, principais fontes e as linhas mais recentes (mensagens limitadas a 500 caracteres).
    • jobs — a fila do agendador (sys_trigger) por estado, o número de trabalhos prontos mais de overdue_minutes após sua próxima ação, e os trabalhos overdue (padrão), running ou queued com seu nó de reivindicação.
    • email_queue — sys_email de saída: o backlog pronto para envio e sua entrada mais antiga, contagens por tipo na janela e as falhas de envio recentes.
    • semaphores — linhas sys_semaphore, do mais novo para o mais antigo.

    As linhas são limitadas por limit (padrão 25, máximo 200).

  • servicenow_data_health — o equivalente de dados de servicenow_code_health para um table, opcionalmente escopado por query (sem ^NQ / ORDERBY): grupos duplicados sobre key_fields (agrupamento da API Aggregate, contagem > 1, limitado por limit), e por campo de referência (reference_fields, padrão os primeiros 10 não-sistema) as referências órfãs (linha alvo ausente) e — quando o alvo tem uma coluna active e stale não é false — as referências obsoletas (alvo inativo), cada uma com a consulta codificada que lista as linhas. Os nomes de campos são verificados contra o dicionário primeiro. Uma linha alvo que o usuário não pode ler também conta como órfã.

O prompt servicenow_why_is_it_slow percorre essas leituras e, com um table, a lógica que executa em suas escritas.

Histórico de registros, propriedades e diretório

Três pacotes opcionais cobrem perguntas de operações do dia a dia. Cada leitura passa pela política de tabela e redação como qualquer outro leitor.

  • servicenow_get_record_history (history) — table + sys_id → alterações de campo de sys_audit e entradas de diário (comentários, notas de trabalho) de sys_journal_field, mescladas das mais recentes para as mais antigas. source (all / audit / journal), fields, since (YYYY-MM-DD[ HH:MM:SS]), limit (padrão 100) e value_max_chars (padrão 2000) restringem a busca. Linhas de auditoria que repetem uma entrada de diário são ignoradas. Se uma fonte não puder ser lida (ACL ou política), ela é relatada em sources e a outra ainda é retornada.

  • servicenow_get_properties (properties) — um name exato ou um nome prefix → linhas sys_properties. Propriedades do tipo senha ou com aparência de segredo retornam como [redacted], e valores longos são truncados.

  • servicenow_set_property (properties) — define o valor de uma propriedade existente. Ele opera como plano/aplicação: o plano mostra o valor atual e o novo valor, e a aplicação é registrada no diário. servicenow_revert_write pode desfazê-la, exceto para propriedades secretas, que nunca são registradas em texto claro. Ele respeita SN_READONLY e SN_PACKAGES_READONLY=properties. Uma propriedade ausente é PROPERTY_NOT_FOUND; a ferramenta nunca cria uma.

  • servicenow_lookup_directory (directory) — kind (user / group / role) mais uma busca term ou um sys_id. Com include_details e exatamente uma correspondência, o resultado adiciona:

    • para um usuário, seus papéis e grupos;
    • para um grupo, seus membros e papéis;
    • para um papel, seus papéis contidos e os grupos que o concedem.

    Uma tabela de detalhes que não pode ser lida é listada em details_unavailable. Coloque directory em SN_PACKAGES_DENY para remover a superfície de dados do usuário.

Descoberta de instância

servicenow_document_instance (docs) aceita um depth opcional que adiciona uma pasta de descoberta, <SN_DOCS_DIR>/<profile>/discovery/, ao lado de README.md. Os níveis são cumulativos:

depthArquivos
overviewoverview.md — versão, contagens, automação, os arquivos gravados
apps+ apps.md e um tables-<scope>.md por escopo (tabelas e seu dicionário)
artefacts+ um artifacts-<scope>.md por escopo

Os escopos são os apps nomeados, caso contrário, todos os escopos sys_app não globais, até o limite alvo por execução (o restante é listado como ignorado). artifacts-<scope>.md lista cada tipo de artefato com uma coluna Coletado / não coletado e por quê: coletado (com uma contagem), limitado, não verificado (a tabela não é legível aqui), sem essa tabela, ilegível para este usuário, pacote desativado ou sem registros neste escopo. Cada leitura passa pela mesma política, redação, verificação prévia de capacidade e diário de gravação que os outros geradores. Sem depth, a ferramenta se comporta como antes.

Habilidades do plugin

O plugin Claude Code (/plugin install servicenow-mcp-ai) inclui cinco habilidades em skills/. Cada uma apenas orquestra as ferramentas deste servidor; nenhuma contém credenciais ou chama o ServiceNow por conta própria.

HabilidadeUse para
sn-discoverMapear uma instância ou seus aplicativos personalizados com servicenow_document_instance({depth})
sn-triageInvestigar um registro, fluxo ou script com falha (status, histórico, lógica, logs)
sn-impactAvaliar o que uma alteração em uma tabela, campo ou script afetaria (onde é usado, lógica da tabela)
sn-driftComparar duas instâncias ou um snapshot salvo, ou revisar um conjunto de atualizações
sn-safe-writeFazer uma alteração de registro com plano-e-aplicação, o diário de gravação e um caminho de reversão

Um teste (test/plugin-skills.test.js) verifica se cada nome de servicenow_* em uma habilidade existe no manifesto de ferramentas. As habilidades não fazem parte do pacote npm.

Árvore do Service Portal

servicenow_explain_portal (ui, opt-in) explica um Service Portal (portal: url_suffix ou sys_id) ou uma página (page: página id ou sys_id) como uma árvore. A árvore percorre página → contêiner → linha → coluna → instância de widget → widget. Instâncias widget_parameters são mapeadas no option_schema do widget, e cada widget lista suas dependências, includes de JS / CSS, provedores Angular e modelos. O tema, menu, cabeçalho / rodapé e mapas de rotas são incluídos. Linhas aninhadas são seguidas até depth (padrão 3, máximo 6), e o layout é lido para as primeiras 5 páginas. format é json, markdown, mermaid (árvore de layout) ou file. Uma tabela do Service Portal que não pode ser lida se torna uma ressalva, não uma falha.

O pacote cmdb também tem servicenow_list_ci_relations (relações de cmdb_rel_ci de um CI em qualquer direção, com o nome e a classe do CI relacionado) e servicenow_identify_reconcile, que envia uma carga IRE de itens e relações. No modo de plano, servicenow_identify_reconcile chama o endpoint somente-identificação e mostra o que o IRE corresponderia; quando o endpoint está ausente, o plano é marcado como degraded. A aplicação é registrada no diário, mas não é reversível, porque o IRE decide por item.

servicenow_run_atf_test e servicenow_run_atf_suite aceitam wait_seconds (0–300). A ferramenta consulta o endpoint de progresso de CI/CD com notificações de progresso, e cancelar a solicitação interrompe a espera. Uma execução que ainda está em andamento quando o tempo termina retorna wait.state: "running" com um tracker para servicenow_get_atf_result.

servicenow_insert_import_set_row também retorna import_set_run (a linha sys_import_set_run do conjunto de importação) e transform_maps (os mapas da tabela de staging, os usados por esta linha marcados como used: true). Se qualquer leitura de acompanhamento falhar, você recebe warnings em vez de um erro.

Leituras genéricas de artefatos

O pacote opt-in artifacts lê qualquer tipo no registro de artefatos (o recurso servicenow://artifact-types os lista, com suas tabelas, campos-chave e tabelas filhas):

  • servicenow_list_artifacts — artifactType mais scope opcional (namespace ou sys_id), active, query e limit → resumos: sys_id, nome, chave natural, escopo, sinalizador ativo, veredito gerenciado por SDK e os metadados do tipo. Sem corpos de script.
  • servicenow_get_artifact — artifactType mais sys_id ou a key natural → o registro completo, seus registros filhos em ordem de registro (ações de uma política de UI; contêineres, linhas, colunas e instâncias de widget de uma página de portal; instâncias de ação de um fluxo), seu escopo e se esse escopo é gerenciado por SDK.
  • servicenow_explain_artifact — mesma identificação → uma explicação estruturada: um summary de uma linha, when quando é executado (os campos de gatilho que estão definidos), seus fields não vazios, seus registros filhos como items compactos, os registros que ele references, e seus campos JSON codificados decoded (parâmetros de widget, props e dados do UI Builder, caches de rótulo de fluxo). Um valor que não pode ser decodificado retorna bruto com decoded: false e um reason — um campo ruim nunca falha a chamada. Valores longos são limitados contra SN_MAX_RESULT_CHARS (um valor recebe no máximo um vigésimo disso, a explicação inteira quatro quintos); truncatedFields, truncated / preview e a contagem de omitted de um filho dizem o que foi cortado. Valores de ação de fluxo e composições do UI Builder são lidos com o decodificador JSON simples até que seus decodificadores dedicados sejam lançados (via: "json"). Alguns tipos também recebem um explanation com lines de prosa: um modelo de estado lista seus estados e transições from -> to com suas condições, um conjunto de escolhas ou tabela suas escolhas por elemento em ordem de sequência, e uma política de UI ou política de dados o efeito em cada campo quando sua condição é válida (e, com reverso-se-falso, quando não é).
  • servicenow_artifact_dependencies — mesma identificação mais direction (outbound / inbound / both, padrão), depth (1–3, padrão 1), limit (linhas por fonte de entrada, 1–100) e format (json ou mermaid) → um grafo de dependência de nodes e edges (from depende de to, com via e field). Arestas de saída vêm de campos de referência do registro no registro e seus filhos, JSON decodificado (valores de etapa de fluxo, opções de widget, dados do UI Builder) e texto de script (chamadas de script-include, classes GlideAjax, tabelas GlideRecord literais). Arestas de entrada vêm de consultas de referência reversa e — para um script include — chamadores de script, etapas de fluxo cujos valores o chamam e a passagem estrutural do grafo onde é usado. A caminhada visita cada nó uma vez (ciclos são seguros), para em 150 nós (truncated) e transforma uma fonte ilegível em uma entrada unavailable em vez de um erro.

Cada leitura de tabela obedece a SN_TABLES_ALLOW / SN_TABLES_DENY; uma tabela filha negada retorna como redacted: true em vez de falhar a leitura, e SN_REDACT_FIELDS / SN_REDACT_PII se aplicam como em qualquer lugar. Tipos cujas tabelas ainda não foram confirmadas em uma instância ativa carregam verified: false e um caveat; quando a instância rejeita tal tabela, o resultado é vazio com um motivo degraded em vez de um erro, além de available: false quando sys_db_object mostra que a tabela não existe na instância.

Exemplos

Consultar os 5 incidentes ativos mais recentes:

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

Criar um incidente:

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

Atualizar credenciais em tempo de execução:

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

Recursos

Metadados somente leitura também são expostos como recursos MCP, para que os clientes possam anexá-los declarativamente em vez de chamar uma ferramenta:

URIDescrição
servicenow://statusStatus da conexão, modo de autenticação, política de acesso (nunca inclui a senha).
servicenow://capabilitiesVerificação prévia de capacidade: quais leituras sys_* restritas a administrador (esquema, inteligência de script, auditoria de ACL) o usuário conectado pode realmente alcançar, além da matriz de capacidade por grupo.
servicenow://tablesLista de tabelas de sys_db_object.
servicenow://schema/{table}Colunas de uma tabela de sys_dictionary (vinculadas ao perfil ativo).
servicenow://instancesPerfis de conexão configurados: nome, host, usuário, sinalizador somente leitura, completude de credenciais.
servicenow://{profile}/schema/{table}Colunas de uma tabela lidas por meio de um perfil de conexão nomeado específico.
servicenow://docs/{+path}Um documento Markdown do armazenamento de docs local (caminhos aninhados permitidos), envolvido em um bloco de conteúdo não confiável.
servicenow://artifact-typesTipos de artefato que as ferramentas genéricas de artefato aceitam: tabela, campos de nome / chave / escopo, tabelas filhas, API SDK, sinalizador verificado (pacote artifacts).
servicenow://reference/encoded-queryReferência de consulta codificada: sintaxe, valores javascript:, limites (sem escape ^, comprimento de URL, campos ignorados silenciosamente, linhas ocultas por ACL) e como fetchAll pagina.
servicenow://reference/toolsO manifesto de ferramentas como Markdown: cada ferramenta por pacote, leitura / gravação e se esta sessão a registrou sob a política de pacote.
Recursos são controlados por pacotes, assim como as ferramentas: status, capabilities e a referência de ferramenta estão sempre ativos; encoded-query vem com o pacote table, tables/schema com o pacote schema, instances/esquema por perfil com instance, e docs com o pacote docs.

Os três modelos suportam conclusão e listagem: {table} completa a partir das tabelas já no cache de esquema, mais uma pequena lista inicial de tabelas comuns, {profile} a partir dos perfis configurados, e {path} a partir do manifesto de documentos (index.json) por prefixo e sob a pasta do perfil ativo. resources/list mostra as tabelas em cache e os documentos (os gerados primeiro, intitulados a partir do manifesto; no máximo 100 por modelo, com os documentos index.md sempre por último). Listas e conclusões nunca chamam a instância.

Prompts

Fluxos de trabalho prontos são expostos como prompts MCP; eles orquestram as ferramentas e insistem em ler valores reais da instância. Os argumentos table e profile completam como os modelos de recursos. Argumentos (no máximo 200 caracteres) chegam ao modelo dentro de um bloco de conteúdo não confiável, e cada prompt diz ao modelo para tratar dados da instância como dados, não instruções. Um prompt é listado apenas quando os pacotes em que suas ferramentas vivem estão habilitados (triagem: table; impacto de mudança: change ou table; tabela de documentos: docs e scripts; por que está lento: ops; a visão geral da instância usa apenas ferramentas de administração e está sempre listada). A lista segue servicenow_enable_package / servicenow_disable_package ao vivo, com notifications/prompts/list_changed:

PromptArgumentoPropósito
servicenow_incident_triageincidentResumir, avaliar prioridade, categorizar e recomendar próximos passos.
servicenow_change_impact_analysischangeCIs afetados, conflitos de agenda e uma decisão de ir/não ir.
servicenow_document_tabletable, profileExecuta servicenow_document_table, depois preenche o bloco manual de Propósito de <profile>/tables/<table>.md; anexa a referência da consulta codificada.
servicenow_why_is_it_slowsymptom, table (ambos opcionais)Log do sistema, backlog do agendador, fila de e-mail e semáforos (ops), depois a lógica em uma tabela → causas classificadas.
servicenow_instance_overviewgoal (opcional)Matriz de capacidades (servicenow_check_capabilities), status e os pacotes da sessão; trata o perfil como produção até H-11 adicionar um marcador de ambiente.

Estrutura do projeto

.
├── .env                   # credentials (git-ignored; or ~/.config/servicenow-mcp-ai/.env)
├── .env.example           # template
├── .github/workflows/     # CI matrix, CodeQL, npm / MCP Registry / Marketplace publishing
├── .vscode/mcp.json       # VS Code MCP server registration
├── bin/                   # CLI launcher (servicenow-mcp-ai.cjs, incl. the doctor command)
├── extension/             # VS Code extension (thin wrapper that registers the server)
├── docs/                  # GitHub Pages site
├── scripts/               # generators + guards (README tools table, tool manifest, coverage guard)
├── src/
│   ├── index.ts           # bootstrap: load env, register, connect transport
│   ├── core/              # HTTP client (auth, retry, SSRF guard), OAuth/JWT/mTLS, policy,
│   │                      # settings, logging, config store, write journal, request
│   │                      # context (profiles); jira/ is a dark scaffold — no tools (ARCH-14)
│   ├── api/               # one module per REST area: table, aggregate, attachment,
│   │                      # importset, batch, catalog, change, knowledge, cmdb, scripts,
│   │                      # flows, codecheck, atf, email, docs, diagrams, meta, doctor,
│   │                      # history, properties, directory, portal…
│   ├── mcp/               # MCP surface: package registry/manifest, tool definition,
│   │                      # resources, prompts, result envelopes, redaction, write mode
│   │                      # (plan/apply), CSV export, stdio + HTTP transports
│   └── tools/             # tool registrations, one file per package (26 packages)
├── test/                  # node:test suite (406 tests): unit, mock-fetch api, MCP smoke, doc guards
└── build/                 # compiled output (after npm run build)

Nota sobre nomes: o pacote npm e o repositório GitHub são ambos servicenow-mcp-ai (o servicenow-mcp sem escopo já estava ocupado no npm); a pasta de trabalho local é servicenow-mcp. A diferença é cosmética e não afeta a compilação ou o tempo de execução.

Notas de segurança

  • O arquivo de ambiente é ignorado pelo git — não envie credenciais reais.
  • O arquivo de ambiente é escrito somente para o proprietário (0600) — ele contém uma senha em texto puro.
  • O servidor usa o transporte stdio e registra apenas em stderr; segredos e consultas codificadas brutas nunca são registrados.
  • A senha/token nunca é retornado por nenhuma ferramenta.
  • Os hosts são restritos: sem SN_ALLOWED_HOSTS, apenas instâncias *.service-now.com são contatadas (interno/loopback bloqueado, a menos que uma entrada na lista de permissões nomeie o host exatamente), então um host digitado incorretamente não pode receber credenciais silenciosamente. Redirecionamentos nunca são seguidos (REDIRECT_BLOCKED) e os corpos de resposta são limitados por SN_MAX_BODY_BYTES. Defina SN_ALLOWED_HOSTS para aceitar um domínio personalizado ou de nuvem soberana. Uma porta explícita diferente de 443 ou um literal IPv6 no valor da instância é aceito apenas quando uma entrada na lista de permissões o nomeia (host:8443, [2001:db8::1]).
  • Cada solicitação — incluindo solicitações de token OAuth — carrega o User-Agent: servicenow-mcp-ai/<version> (node/<major>; <transport>; <client>) identificador para que o log de transações da instância possa atribuir o tráfego; estenda-o com SN_USER_AGENT_SUFFIX. URLs de proxy (SN_HTTPS_PROXY, HTTPS_PROXY) são honrados para cada solicitação, mas suas credenciais nunca são registradas.
  • Prefira OAuth 2.0 em vez de Basic quando possível (SN_OAUTH_CLIENT_ID).
  • Aplique privilégio mínimo com SN_TABLES_ALLOW / SN_TABLES_DENY e SN_READONLY=true para implantações somente leitura.
  • A política de tabelas não cobre APIs de plugins. SN_TABLES_DENY=change_request bloqueia o caminho da API de Tabelas, mas a API de Gerenciamento de Mudanças (sn_chg_rest) ainda pode ler/escrever mudanças. Para restringir as superfícies apoiadas por plugins, use SN_PACKAGES_DENY (descarte o pacote inteiro) ou SN_PACKAGES_READONLY (registre apenas suas ferramentas de leitura). A API em Lote também obedece a ambos os eixos: uma sub-solicitação ao caminho de um pacote negado é recusada, e gravações em um pacote somente leitura são bloqueadas — um lote não pode ser usado para contornar a política de pacotes.

Documentação do projeto

DocumentoConteúdo
ARCHITECTURE.mdArquitetura em camadas, diagramas Mermaid (módulos, ciclo de vida de solicitação, modelo de segurança, autenticação, pacotes), ADRs condensados
PRODUCT-STATE.mdEstado atual do produto: mapa de cobertura da API, status de qualidade, linha do tempo histórica, roteiro
ROADMAP.mdPlano futuro: as fases entregues, a linha de endurecimento 2.x, o marco proposto 3.0, itens opcionais e adiados
ROADMAP-V3.md / DEEP-REVIEW-2026-09.mdO rastreador de execução v3.0 proposto (correção, governança, alcance em escala) / a revisão de cinco lentes na qual seus itens são construídos
GAP-ANALYSIS-2026-09.mdA segunda passagem de 2026-09-09 sobre o plano v3.0: nove lentes mais estreitas, 67 descobertas cada uma com design, critérios de aceitação e testes, mapeadas para itens do rastreador
INSTANCE-DOCS-ANALYSIS-2026-09.mdA passagem de 2026-09-23 sobre documentação da instância: o armazenamento de documentos, os geradores Mermaid, o prompt document_table e os tipos de documentos ausentes — 17 descobertas com design, critérios de aceitação e testes, mapeadas para S-14 … S-16
INSTANCE-DOCS-ANALYSIS-2026-09-25.mdA segunda passagem de 2026-09-25 sobre documentação da instância: disposições das primeiras 17 descobertas após o armazenamento de documentos, registro de artefatos, leitores de artefatos e varredura de segurança, mais 12 novas descobertas (ID-18 … ID-29) com design, critérios de aceitação e testes, mapeadas para S-15, S-16, M-4, M-8, S-7, E-6, E-7
COMPETITIVE-ANALYSIS.mdPosicionamento vs o Console do Servidor MCP oficial da ServiceNow: comparação, onde fica estruturalmente atrás, o plano de impulso da Fase 9 e riscos de plataforma
IMPLEMENTATION-PLAN.mdEspecificações detalhadas para as próximas fases (harness 2.0, multi-instância, teste de fluxo)
DONE.md / TODO.mdTrabalho concluído com referências de commit / decisões restantes
WORKLOG.md / CHANGELOG.mdDiário de trabalho detalhado / changelog voltado ao usuário
CONTRIBUTING.md / SECURITY.mdConfiguração de desenvolvimento, portões e convenções / modelo de segurança e relatórios

Suporte

Este projeto é construído e mantido no meu próprio tempo. Se ele economizar tempo para você ou sua equipe, considere apoiar seu desenvolvimento contínuo — o patrocínio financia diretamente novas ferramentas, correções de bugs e acompanhar a superfície REST da ServiceNow.

  • GitHub Sponsors — suporte único ou recorrente, sem taxa de plataforma (a opção preferida).
  • Ko-fi — suporte único rápido; também aceita PayPal, então é a alternativa para quem não tem conta no GitHub.
  • Doar (Donatree) — uma página de doação sem conta (cartão, PayPal e mais) para uma gorjeta única.

Sponsor on GitHub Support on Ko-fi Donate via Donatree

Marca registrada

servicenow-mcp-ai é um projeto independente, construído pela comunidade. Ele não é afiliado, endossado ou patrocinado pela ServiceNow, Inc.

"ServiceNow", o logotipo da ServiceNow, "Now" e marcas relacionadas são marcas comerciais ou marcas registradas da ServiceNow, Inc. nos Estados Unidos e em outros países. Elas são usadas no nome e na documentação deste projeto apenas nominativamente — para identificar a plataforma com a qual este software interopera — e nenhuma afiliação ou endosso está implícito. Todos os outros nomes de produtos e marcas são propriedade de seus respectivos proprietários.

Este projeto é licenciado sob a Licença MIT; essa licença cobre o código-fonte e não concede quaisquer direitos de uso das marcas comerciais da ServiceNow.