v
← Quick start
Getting started · Introduction

Serac Documentation

Serac is an open-source ServiceNow MCP server and a library of ServiceNow skill guides, for the AI coding agent you already run — Claude Code, Claude Desktop, opencode, Cursor, or any other MCP client. It gives that agent the snow_* tool catalogue and the judgement to use it. Bring your approved LLM (Claude, GPT, Gemini, or local Ollama) through your client: your keys stay yours, your code stays in your repo.

Installation

Requirements

  • Node 20+ or Bun 1.2+ - Required runtime (ESM only; there is no CommonJS entrypoint)
  • An MCP client - Claude Code, Claude Desktop, opencode, Cursor, Continue.dev, or any other
  • ServiceNow instance - With OAuth configured
  • LLM provider - Configured in your client, not here. The server never talks to a model.

Install via npm

bash
# Global installation (recommended)
npm i -g @serac-labs/servicenow-mcp

# Verify installation
npm ls -g @serac-labs/servicenow-mcp
Tip

The package installs a servicenow-mcp-stdio binary onto your PATH. That name is what you put in your MCP client's config — see Use With Any AI IDE.

Quick Start

1. Register the server with your client

Write this into your MCP client's config file — Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json; Claude Code: .mcp.json in the project root; Cursor: .cursor/mcp.json. All three use the same mcpServers shape.

json
{
  "mcpServers": {
    "servicenow": {
      "command": "servicenow-mcp-stdio",
      "env": {
        "SNOW_INSTANCE": "https://acme.service-now.com",
        "SNOW_CLIENT_ID": "…",
        "SNOW_CLIENT_SECRET": "…",
        "SNOW_ENVIRONMENT_TYPE": "production"
      }
    }
  }
}

2. Check the connection

In your agent
# Restart the client so it reads the new config, then ask for:
"Run snow_test_connection"

That tool authenticates and reads one row from sys_user. It reports back the instance URL it resolved, so you can see which instance you are actually pointed at before you write anything to it.

Do this deliberately, because the failure mode is quiet. A server that finds no usable credentials starts anyway, in unauthenticated mode, so the first symptom is an OAuth error surfacing inside some later tool call that had nothing to do with auth. Provoking it here tells you it is the credentials.

3. Start Building

In your agent
# Just type your request in natural language:
"Create a widget showing high-priority incidents"

"Show me all incidents from last week"

"Create a business rule for auto-assignment"

The catalogue is large enough to blow a context window, so tools are deferred by default: tools/list returns two meta-tools, tool_search and tool_execute, and the model widens its own surface as it goes. Set SNOW_LAZY_TOOLS=false to register the whole catalogue up front instead.

Authentication Overview

Serac uses OAuth 2.0 for secure ServiceNow authentication. Credentials are stored securely and automatically refreshed.

Authentication Priority

Serac checks credentials in this order:

  1. Environment variables - Highest priority
  2. auth.json - Auto-loaded from the Serac TUI
  3. .mcp.json credentials - Project-specific
  4. Interactive login - Via /auth command in TUI

ServiceNow OAuth Setup

Create an OAuth application in your ServiceNow instance:

  1. Navigate to System OAuth → Application Registry
  2. Click New → Create an OAuth API endpoint for external clients
  3. Configure:
    • Name: Serac
    • Redirect URL: http://localhost:3005/callback
    • Refresh Token Lifespan: 0 (unlimited)
  4. Copy the Client ID and Client Secret
Security Note

Never commit OAuth credentials to version control. Use environment variables or the secure credential storage.

Credential Storage

Serac stores credentials securely at:

path
~/.local/share/serac/auth.json

This file is:

  • Created automatically by /auth command in TUI
  • Contains encrypted OAuth tokens
  • Tokens are automatically refreshed
  • Never synced to cloud or version control

Environment Variables (Alternative)

bash
# ServiceNow credentials
SERVICENOW_INSTANCE_URL=https://your-instance.service-now.com
SERVICENOW_CLIENT_ID=your-client-id
SERVICENOW_CLIENT_SECRET=your-client-secret

# Optional: Pre-configured refresh token
SERVICENOW_REFRESH_TOKEN=your-refresh-token

LLM Providers

Serac supports 75+ AI providers via Models.dev. Configure via environment variables:

Provider Environment Variable Notes
Claude (Anthropic) ANTHROPIC_API_KEY Recommended
GPT-4 (OpenAI) OPENAI_API_KEY
Gemini (Google) GOOGLE_API_KEY
DeepSeek DEEPSEEK_API_KEY
Groq GROQ_API_KEY Fast inference
OpenRouter OPENROUTER_API_KEY Access to 100+ models
Azure OpenAI AZURE_API_KEY Enterprise
GitHub Copilot serac auth login OAuth login
Together AI TOGETHER_API_KEY
Fireworks AI FIREWORKS_API_KEY
Mistral AI MISTRAL_API_KEY
xAI (Grok) XAI_API_KEY
Ollama (Local) OLLAMA_BASE_URL 100% Free, runs locally

Using Ollama (Free, Local)

bash
# Install Ollama
curl -fsSL https://ollama.com/install.sh | sh

# Pull a model
ollama pull llama3.3

# Configure Serac
DEFAULT_LLM_PROVIDER=ollama
OLLAMA_BASE_URL=http://localhost:11434
DEFAULT_OLLAMA_MODEL=llama3.3
All Supported Models

For the complete list of 75+ supported AI providers and models, visit models.dev. Serac uses their unified API to support Claude, GPT, Gemini, DeepSeek, Mistral, Llama, and many more.

Commands Reference

CLI Commands

The npm package puts these on your PATH. Neither one parses arguments — both are configured entirely through environment variables, so there is no --help to read and nothing useful happens if you pass a flag.

Command Description
servicenow-mcp-stdio Run the MCP server over stdio. Your MCP client starts this for you — you rarely run it by hand.
servicenow-mcp-enterprise-proxy Client for the licensed enterprise tool catalogue. Not needed for the open-source catalogue.

TUI Commands (inside Serac)

Different program

The commands below belong to the Serac CLI, not to the MCP server this page installs. If you came here for @serac-labs/servicenow-mcp, nothing in this subsection applies to you — skip to MCP Overview.

Type / followed by a command name. Most commands have keyboard shortcuts using ctrl+x as the leader key.

Command Keybind Description
/agents ctrl+x a List and switch between agents
/auth, /login Authenticate with LLM providers and ServiceNow
/compact, /summarize ctrl+x c Compact/summarize current session
/debug Toggle debug mode for troubleshooting
/details ctrl+x d Toggle tool execution details
/editor ctrl+x e Open external editor for composing messages
/exit, /quit, /q ctrl+x q Exit Serac
/export ctrl+x x Export conversation to Markdown
/help ctrl+x h Show help dialog
/init ctrl+x i Create or update AGENTS.md file
/models ctrl+x m List and select AI models
/new, /clear ctrl+x n Start a new session
/redo ctrl+x r Redo previously undone message (requires Git)
/report Generate session report with token usage and costs
/sessions, /resume ctrl+x l List and switch between sessions
/share ctrl+x s Share current session
/themes ctrl+x t List and select themes
/thinking Toggle thinking blocks display
/timeline, /history Show session timeline
/undo ctrl+x u Undo last message and file changes (requires Git)
/unshare Stop sharing current session

File References & Bash Commands

Use @ to reference files in your messages (fuzzy search). Use ! to run shell commands.

Examples
# Reference a file
How is auth handled in @src/auth/handler.ts?

# Run a shell command
!git status

# Both outputs are added to the conversation

Editor Setup

The /editor and /export commands use your EDITOR environment variable.

bash
# Add to ~/.bashrc or ~/.zshrc
export EDITOR="code --wait"   # VS Code
export EDITOR="cursor --wait" # Cursor
export EDITOR="vim"           # Vim
export EDITOR="nano"          # Nano

Keyboard Shortcuts

Serac uses a leader key pattern (default: ctrl+x) to avoid conflicts with your terminal. Press the leader key first, then the shortcut.

Action Default Keybind
Helpctrl+x h
Exitctrl+c or ctrl+x q
New sessionctrl+x n
Session listctrl+x l
Compact sessionctrl+x c
Export sessionctrl+x x
Share sessionctrl+x s
Interruptesc
Open editorctrl+x e
Model listctrl+x m
Cycle recent modelsF2
Agent listctrl+x a
Cycle agentsTab / Shift+Tab
Theme listctrl+x t
Tool detailsctrl+x d
Thinking blocksctrl+x b
Init AGENTS.mdctrl+x i
Undoctrl+x u
Redoctrl+x r
Copy messagectrl+x y
Page up/downPgUp / PgDown
Submit inputEnter
New line in inputShift+Enter or ctrl+j

Customize Keybinds

Override keybinds in your .mcp.json config. Use <leader> to reference the leader key, or "none" to disable.

json
{
  "$schema": "https://serac.build/config.json",
  "keybinds": {
    "leader": "ctrl+x",
    "app_help": "<leader>h",
    "session_compact": "none",
    "input_submit": "ctrl+enter"
  }
}

Configuration Reference

Configure Serac using .mcp.json (or .mcp.jsonc for comments). Supports JSON Schema for autocomplete.

Config Locations (by precedence)

LocationPurpose
SNOW_FLOW_CONFIG env varCustom config path (highest priority)
.mcp.json in projectProject-specific settings
~/.config/serac/.mcp.jsonGlobal settings (themes, providers)

Main Config Options

jsonc
{
  "$schema": "https://serac.build/config.json",

  // Model configuration
  "model": "anthropic/claude-sonnet-4-20250514",
  "small_model": "anthropic/claude-3-5-haiku-20241022",

  // UI settings
  "theme": "serac",
  "autoupdate": true,

  // Tool restrictions
  "tools": {
    "write": false,    // Disable write tool
    "bash": false      // Disable bash tool
  },

  // Permission modes: "allow", "ask", "deny"
  "permission": {
    "edit": "ask",
    "bash": "ask"
  },

  // Sharing: "manual", "auto", "disabled"
  "share": "manual",

  // Instructions from files
  "instructions": ["CONTRIBUTING.md", "docs/*.md"],

  // Disable specific providers
  "disabled_providers": ["openai", "gemini"],

  // Provider configuration
  "provider": {},

  // Custom agents, commands, keybinds
  "agent": {},
  "command": {},
  "keybinds": {},

  // MCP servers
  "mcp": {}
}

Variable Substitution

Use {env:VAR_NAME} for environment variables, {file:path} for file contents.

json
{
  "model": "{env:SNOW_FLOW_MODEL}",
  "provider": {
    "openai": {
      "options": {
        "apiKey": "{file:~/.secrets/openai-key}"
      }
    }
  }
}

Agents

Serac uses specialized agents for different tasks. Switch agents with /agents or Tab.

Built-in Agents

AgentDescription
BuildGeneral purpose agent for building and implementing. Can read, write, and execute code.
PlanCreates detailed implementation plans before coding. Focuses on architecture and design.

Custom Agents

Define custom agents in .mcp.json or as markdown files in .serac/agent/.

jsonc
{
  "agent": {
    "code-reviewer": {
      "description": "Reviews code for best practices",
      "model": "anthropic/claude-sonnet-4-20250514",
      "prompt": "You are a code reviewer. Focus on security, performance, and maintainability.",
      "tools": {
        "write": false,  // Read-only agent
        "edit": false
      }
    }
  }
}

Or create .serac/agent/code-reviewer.md:

markdown
---
description: Reviews code for best practices
model: anthropic/claude-sonnet-4-20250514
tools:
  write: false
  edit: false
---

You are a code reviewer. Focus on security, performance, and maintainability.

Custom Commands

Create custom slash commands for repetitive tasks. Define in .mcp.json or as markdown files.

Quick Example

Create .serac/command/test.md:

markdown
---
description: Run tests with coverage
agent: build
---

Run the full test suite with coverage report.
Focus on failing tests and suggest fixes.

Now run /test in the TUI.

Command Features

FeatureSyntaxExample
Arguments$ARGUMENTS, $1, $2/component Button
Shell output!`command`!`git log -5`
File reference@path/to/file@src/api.ts

Command Locations

  • Global: ~/.config/serac/command/
  • Per-project: .serac/command/

IDE Integration

Different program

This section covers the Serac CLI's editor extension. To run the ServiceNow MCP server inside an editor instead, you want Use With Any AI IDE — that one needs no extension, only a config entry.

Serac integrates with VS Code, Cursor, Windsurf, and any IDE with a terminal.

Keyboard Shortcuts

ActionMacWindows/Linux
Quick LaunchCmd+EscCtrl+Esc
New SessionCmd+Shift+EscCtrl+Shift+Esc
File ReferenceCmd+Option+KCtrl+Alt+K

Installation

The extension installs automatically when you run serac in VS Code's integrated terminal.

Manual install: Search for Serac in the Extension Marketplace.

Tool Permissions

By default, Serac allows all operations. Configure granular controls in .mcp.json.

json
{
  "$schema": "https://serac.build/config.json",
  "permission": {
    "edit": "ask",       // Prompt before editing
    "bash": "ask",       // Prompt before bash commands
    "webfetch": "deny"   // Disable web fetching
  }
}

Permission Values

  • "allow" — Allow without approval
  • "ask" — Prompt for approval
  • "deny" — Disable the tool

Granular Bash Permissions

json
{
  "permission": {
    "bash": {
      "git push": "ask",
      "git status": "allow",
      "terraform *": "deny",
      "*": "ask"
    }
  }
}

Project Rules (AGENTS.md)

Create an AGENTS.md file with custom instructions for Serac. Similar to Cursor rules.

Initialize

Run /init in the TUI to generate an AGENTS.md based on your project structure.

Example AGENTS.md

markdown
# My Project Rules

## Project Structure
- `packages/` - Workspace packages
- `infra/` - Infrastructure definitions

## Code Standards
- Use TypeScript with strict mode
- Shared code goes in `packages/core/`
- Follow ESLint and Prettier configs

Rule Locations

  • Project: AGENTS.md in project root
  • Global: ~/.config/serac/AGENTS.md

Custom Instruction Files

Include additional files via .mcp.json:

json
{
  "instructions": ["CONTRIBUTING.md", "docs/*.md", ".cursor/rules/*.md"]
}

Plugins

Extend Serac with JavaScript/TypeScript plugins. Place in .serac/plugin/ or ~/.config/serac/plugin/.

Basic Plugin Structure

javascript
// .serac/plugin/example.js
export const MyPlugin = async ({ project, client, $, directory }) => {
  console.log("Plugin initialized!")

  return {
    // Hook into events
    event: async ({ event }) => {
      if (event.type === "session.idle") {
        // Session completed
      }
    },

    // Intercept tool execution
    "tool.execute.before": async (input, output) => {
      if (input.tool === "read" && output.args.filePath.includes(".env")) {
        throw new Error("Do not read .env files")
      }
    }
  }
}

Themes

Select from built-in themes or create custom ones. Use /themes or set in config.

Built-in Themes

ThemeDescription
seracDefault theme
systemAdapts to terminal colors
tokyonightPopular dark theme
catppuccinPastel color theme
gruvboxRetro warm theme
nordArctic blue theme
matrixGreen on black
one-darkAtom One Dark

Custom Themes

Create JSON files in ~/.config/serac/themes/ or .serac/themes/.

Sharing Conversations

Create public links to share conversations. URL format: serac.build/s/<share-id>

Share Modes

ModeConfig ValueDescription
Manual"manual"Use /share command (default)
Auto"auto"Automatically share new sessions
Disabled"disabled"Disable sharing entirely

Use /unshare to remove a shared conversation.

GitHub Integration

Use Serac in GitHub issues and PRs. Mention /serac or /oc in comments.

Features

  • Triage issues and explain them
  • Fix issues and implement features in a new branch
  • Submit PRs with changes
  • Runs securely in your GitHub Actions runner

Installation

bash
serac github install

This sets up the GitHub App, workflow file, and secrets.

HTTP Server API

Run a headless HTTP server for programmatic access to Serac.

bash
serac serve --port 4096 --hostname 127.0.0.1

API Endpoints

MethodPathDescription
GET/docOpenAPI 3.1 spec
GET/appGet app info
GET/sessionList sessions
POST/sessionCreate session
POST/session/:id/chatSend message
GET/config/providersList providers

Troubleshooting

Log Files

  • macOS/Linux: ~/.local/share/serac/log/
  • Windows: %USERPROFILE%\.local\share\serac\log\

Run with --log-level DEBUG for detailed logs.

Common Issues

IssueSolution
Won't startCheck logs, run with --print-logs, upgrade with serac upgrade
Auth issuesRe-run serac auth login <provider>
Model not foundCheck model name format: provider/model
ProviderInitErrorDelete ~/.local/share/serac and re-auth
API errorsClear cache: rm -rf ~/.cache/serac
Copy/paste on LinuxInstall xclip, xsel, or wl-clipboard

Getting Help

TUI Workflow

The Serac TUI provides an interactive conversational interface for ServiceNow development:

TUI Conversation
# Create a widget
"Create a dashboard widget for incident metrics"

# Automate a process
"Create business rule to auto-assign incidents by category"

# Query and analyze
"Analyze incident trends from the past month"

# Complex task with multiple agents
"Build a complete workspace for IT support"
Automatic Update Sets

Serac automatically creates isolated update sets for each task, ensuring clean deployments and easy rollbacks.

MCP Tools Overview

Serac provides 444 MCP tools across 135 functional domains, all accessible through natural language commands via the unified MCP architecture.

444 Tools
One stdio server, one OAuth registration. Counted from the generated catalogue, not rounded up.
135 Domains
From incident management to UI Builder, CMDB to ML analytics.
Single OAuth
One authentication flow for all tools, no duplication.
Auto-Discovery
Tools automatically discovered and loaded on-demand.

Complete Tool Reference

Loading the complete tool reference from the source of truth…

MCP Configuration

Every client passes the server its configuration as environment variables on the servicenow-mcp-stdio process. These are the names the server reads. Set both spellings of a field and the SERVICENOW_ one wins:

Variable Also accepted as What it does
SNOW_INSTANCE SERVICENOW_INSTANCE_URL Bare host or full URL — acme.service-now.com and https://acme.service-now.com both work. The SERVICENOW_ spelling is taken as-is, so give that one a scheme.
SNOW_CLIENT_ID SERVICENOW_CLIENT_ID OAuth client id from your instance's Application Registry.
SNOW_CLIENT_SECRET SERVICENOW_CLIENT_SECRET OAuth client secret for that registration.
SNOW_ENVIRONMENT_TYPE SERVICENOW_ENVIRONMENT_TYPE Classifies the instance: production, development, test, uat or sandbox. Only production arms the write guard.
SNOW_LAZY_TOOLS Defaults to on. Set false to register the whole catalogue on connect instead of the two meta-tools.
The environment type is not optional

Leave SNOW_ENVIRONMENT_TYPE out and the instance is unclassified, so the production write guard never fires and every write goes straight through. With it set to production, a write tool against that instance is refused until you approve that specific change — the refusal comes back as an error your agent has to bring to you, naming the flag it wants. The update-set guard is unconditional and applies either way.

Do not leave your- in a placeholder

The credential loader treats any value containing your- or placeholder as unset. A half-edited config therefore starts the server unauthenticated instead of erroring, and the first symptom is an auth failure inside an unrelated tool call. Ask your agent for snow_test_connection after any config change — it returns the instance URL it resolved, which is the fastest way to see that a value did not take.

Use With Any AI IDE

Serac is a plain stdio MCP server, so any MCP-compatible client can run it. Point the client at the servicenow-mcp-stdio binary a global install puts on your PATH — there is no path to hunt for, and nothing generates a config file for you.

AI Tool Config Location Shape
Claude Code .mcp.json in the project root mcpServers
Claude Desktop ~/Library/Application Support/Claude/claude_desktop_config.json
(Windows: %APPDATA%\Claude\claude_desktop_config.json)
mcpServers
Cursor .cursor/mcp.json mcpServers
opencode opencode.json mcp
Continue.dev ~/.continue/config.json experimental.modelContextProtocolServers

The mcpServers shape (Claude Code, Claude Desktop, Cursor)

json
{
  "mcpServers": {
    "servicenow": {
      "command": "servicenow-mcp-stdio",
      "env": {
        "SNOW_INSTANCE": "https://acme.service-now.com",
        "SNOW_CLIENT_ID": "…",
        "SNOW_CLIENT_SECRET": "…",
        "SNOW_ENVIRONMENT_TYPE": "production"
      }
    }
  }
}

The placeholders are deliberate. Any value containing your- is discarded by the credential loader as a placeholder, so "your-client-id" left in a half-edited config starts the server unauthenticated rather than failing loudly. See MCP Configuration for what each variable does, and why SNOW_ENVIRONMENT_TYPE is the one that arms the production write guard.

Setup for Continue.dev

Continue.dev keeps its own schema; the command and the environment are the same.

json
{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "servicenow-mcp-stdio",
          "args": [],
          "env": {
            "SNOW_INSTANCE": "https://acme.service-now.com",
            "SNOW_CLIENT_ID": "…",
            "SNOW_CLIENT_SECRET": "…",
            "SNOW_ENVIRONMENT_TYPE": "production"
          }
        }
      }
    ]
  }
}

Setup for opencode

opencode keys its servers under mcp and takes the command as an array, with the environment under environment rather than env.

json
{
  "mcp": {
    "servicenow": {
      "type": "local",
      "command": ["servicenow-mcp-stdio"],
      "environment": {
        "SNOW_INSTANCE": "https://acme.service-now.com",
        "SNOW_CLIENT_ID": "…",
        "SNOW_CLIENT_SECRET": "…",
        "SNOW_ENVIRONMENT_TYPE": "production"
      },
      "enabled": true
    }
  }
}

Streamable HTTP instead of stdio

The package also exports a Hono app on /http for clients that speak streamable HTTP. Read the tenancy note in the package README before deploying it: stdio is single-tenant by design, HTTP keys every cache by tenant and refuses a request it cannot place, and none of that state is shared between processes — so an HTTP deployment runs single-replica or brings its own shared store.

ES5 JavaScript Requirement

Critical: ServiceNow Only Supports ES5

ServiceNow runs on Mozilla Rhino (2009), which ONLY supports ES5 JavaScript. Any ES6+ syntax will cause runtime errors.

ES6+ Features That WILL CRASH

javascript
// ALL OF THESE BREAK SERVICENOW:
const x = 5;                    // SyntaxError
let items = [];                 // SyntaxError
const fn = () => {};            // SyntaxError
var msg = `Hello ${name}`;      // SyntaxError
for (let item of items) {}    // SyntaxError
var {name, id} = user;          // SyntaxError
array.map(x => x.id);           // SyntaxError
class MyClass {}                // SyntaxError

Correct ES5 Syntax

javascript
// THESE WORK IN SERVICENOW:
var x = 5;
var items = [];
function fn() { return 'result'; }
var msg = 'Hello ' + name;
for (var i = 0; i < items.length; i++) {
  var item = items[i];
}
var name = user.name;
var id = user.id;
Automatic Validation

Serac automatically validates all scripts for ES5 compliance before deployment.

Update Set Management

Update Sets track ALL changes for deployment between instances. Always create an Update Set before making changes.

Workflow

javascript
// 1. Create Update Set FIRST
snow_update_set_manage({
  action: 'create',
  name: "Feature: Incident Dashboard",
  description: "Widget showing incident metrics"
});

// 2. Develop (changes auto-tracked)
snow_create_artifact({...});
snow_create_business_rule({...});

// 3. Complete Update Set
snow_update_set_manage({
  action: 'complete',
  update_set_id: 'sys_id_here'
});
OAuth Context

Serac uses a service account for API calls. Update Sets are automatically set as current for this account when auto_switch=true (default).

Widget Coherence

ServiceNow widgets require perfect synchronization between Server Script, Client Script, and HTML Template.

The Three-Way Contract

javascript
// SERVER SCRIPT - Initialize data
data.message = "Hello";
data.items = [];
if (input.action === 'loadItems') {
  data.items = getItems();
}

// CLIENT SCRIPT - Handle UI interactions
c.loadItems = function() {
  c.server.get({action: 'loadItems'}).then(function() {
    console.log(c.data.items);
  });
};

// HTML TEMPLATE - Display data
<button ng-click="loadItems()">Load</button>
<div ng-repeat="item in data.items">{{item}}</div>

Coherence Checklist

  • Every data.property in server is used in HTML/client
  • Every ng-click="method()" in HTML has matching c.method in client
  • Every c.server.get({action}) in client has matching if(input.action) in server

ServiceNow Permissions

Serac follows the principle of least privilege. Permissions are organized into 5 tiers — grant only what your team needs. We strongly recommend using a development or sandbox instance and following the standard DTAP/OTAP workflow.

Stakeholder Access (Read-Only)

For stakeholders using the portal AI chat or Serac TUI in read-only mode. No data can be created, modified, or deleted.

Required Roles

  • snc_read_only — or custom role with read ACLs
  • rest_api_explorer — REST API access

API Endpoints (GET only)

  • GET /api/now/table/* — Table API
  • GET /api/now/stats/* — Stats API
  • GET /api/now/attachment — Attachment API

Tables accessed: incident, change_request, problem, sc_request, task_sla, cmdb_ci_*, kb_knowledge, sys_dictionary, sp_widget, sn_customerservice_case, and more.

Developer Access (5-Tier Model)

For developers using Serac to build on ServiceNow. Create a custom ServiceNow role with only the tiers your team needs.

TIER 1 Read Only — ~100 tools

Query incidents, CMDB, knowledge, users, SLAs, logs. No data modification.

Roles: snc_read_only + rest_api_explorer

Endpoints: GET /api/now/table/*, GET /api/now/stats/*

TIER 2 ITSM Write — ~55 tools

Create/update incidents, changes, problems, catalog requests, assets, HR cases, CMDB CIs.

Roles: itil, catalog_admin, asset, cmdb_write

Tables: incident, change_request, problem, sc_request, cmdb_ci_*, alm_asset, kb_knowledge

TIER 3 Development Artifacts — ~130 tools

Create/modify business rules, script includes, widgets, flows, UI policies, reports, workspaces.

Roles: admin, flow_designer, report_admin

Tables: sys_script*, sp_widget, sp_page, sys_hub_flow, sys_ui_*, wf_workflow, sys_report

TIER 4 Script Execution — ~13 tools

Execute server-side JavaScript via GlideRecord. Full instance access — bypasses table-level ACLs.

Roles: admin (required)

All script executions are validated for ES5 compatibility and logged with full audit trails.

TIER 5 System Administration — ~30 tools

System properties, Update Sets, ACLs, user/role management. Changes affect instance-wide behavior.

Roles: admin (required)

Tables: sys_properties, sys_update_set, sys_security_acl, sys_user, sys_user_role, sys_user_group

API Endpoints Used (Developer)

Endpoint Methods Purpose
/api/now/table/*GET, POST, PUT, PATCH, DELETETable CRUD — dominant endpoint, ~1,319 calls across 346 tools
/api/now/processflow/*GET, POSTFlow Designer execution
/api/now/attachmentGET, POST, DELETEFile attachments
/api/now/graphqlPOSTGraphQL queries
/api/sn_source_control/*GET, POSTGit operations from inside ServiceNow (branch, commit, diff, push, pull, checkout, stash)
/api/now/atf/test/*POSTATF test execution
/api/now/stats/*GETAggregate queries
/api/now/import/*POSTImport set staging
/api/sn_cicd/*GET, POSTCI/CD pipeline integration
/api/now/v1/batchPOSTBatch request multiplexing (one wrapper tool)

DTAP / OTAP Recommendation

Always develop and test on a sub-production instance first. Promote changes to production via Update Sets. Serac automatically tracks all modifications in Update Sets for review and rollback.

Audit & Compliance

All tool executions are logged with timestamps, user identity, and operation details. Script executions include full audit trails. Update Sets provide complete change tracking with rollback capability.

Enterprise Features Enterprise

Serac Enterprise adds powerful integrations for team workflows:

Jira Integration
Pull stories, auto-update tickets, bidirectional sync with your sprint backlog.
Azure DevOps
Connect to Azure Boards, complete work items, integrate with pipelines.
Confluence
Auto-generate technical documentation, keep wiki in sync with code.
Stakeholder Seats
Read-only access for non-developers to query and get answers safely.

Integration Setup

bash
# In the TUI, authenticate with enterprise features
/auth

# Connect Jira
# (Follow prompts to authorize)

# Then in the TUI, complete a Jira story:
"Complete JIRA-1234"
Enterprise Portal

Manage licenses, users, and integrations at dashboard.serac.build