Live reference Endpoint · /v1/messages Model · claude-opus-4-8 Beta — verify before build
ServiceNow × Claude

Wiring Claude into ServiceNow

Skills, tool use, MCP, and Managed Agents — what each is, when to reach for it, and how to host Claude-powered actions inside Employee Center with a human approval gate.

Integration paths
4 building blocks
Recommended for PII
SN-orchestrated tool use
Control point
Approval gate in SN
Skills per request
Up to 8

Four ways to give a ServiceNow action predefined behavior. Not interchangeable — pick by what the action needs to touch and where compute should run.

01 / LandscapeThe four building blocks

Agent Skills

hosted container
What
A folder (SKILL.md + scripts) uploaded once, referenced by skill_id. Loaded only when relevant.
Best for
Reusable instruction/code packages — branded doc generation, repeatable formatting.
Runs in
Anthropic's sandboxed code-execution container — not your SN compute.
Data path
⚠ transits hosted sandbox · not ZDR-eligible

Messages API + tool use

you host the loop
What
You declare functions; Claude requests a call; your code runs it and returns the result.
Best for
ServiceNow actions hitting SN tables or your own systems. Deterministic, auditable.
Runs in
Your environment. You own the loop and the compute.
Data path
✓ stays in your boundary

MCP connector

remote tool bridge
What
Point Claude at a remote MCP server URL; it uses those tools without client glue.
Best for
Reaching external SaaS — Slack, HubSpot, a ServiceNow MCP. Layers onto tool use.
Runs in
The remote MCP server you connect to.
Caveat
⚠ not on Bedrock / Vertex / Foundry · not ZDR

Managed agents

Anthropic runs everything
What
Anthropic hosts the agent loop and a per-session container. Create once, reference by ID.
Best for
Long-running, stateful agents where you don't want to host compute.
Runs in
Anthropic-hosted session container.
Caveat
⚠ first-party API only · heaviest footprint

02 / DecisionWhich one for ServiceNow?

If the action…UseWhy
Reads / writes SN recordsTool useYour loop, your auth, PII never leaves your boundary
Generates a branded doc/deckSkillReusable formatting + code; pptx/docx skills exist
Reaches Slack / HubSpot / SaaSMCP connectorNo client code to maintain
Applies a fixed procedureTool use or SkillDeterminism over autonomy here
Runs long, multi-step, statefulManaged agentAnthropic hosts loop + session container
Just classifies / summarizesPlain Messages callOne request, one response — no machinery
PII / data-handling flag

Skills and Managed Agents execute in Anthropic-hosted containers. Per Ondaro policy, client/customer PII must not appear in responses or artifacts — and shouldn't transit a hosted sandbox either. For any action handling records with PII, prefer tool use so data stays in your environment. Route policy questions to people@ondarowave.com; contract questions to contracts@ondarowave.com.

03 / DirectionTwo architectures, opposite arrows

◐ Pattern one

Claude → ServiceNow

EXTERNAL ──▶ SN

Claude (or an external app) reaches into SN via tool use / MCP. SN is a data source & action target.

Good for assistants living outside SN.

◑ Pattern two — your Employee Center app

ServiceNow → Claude → ServiceNow

SN ──▶ CLAUDE ──▶ SN

An Employee Center widget triggers Claude to reason over SN data, propose changes, then SN acts on approval.

SN owns the loop, the data, and the gate.

04 / The loopSN → Claude → SN, step by step

Tap any node to read what happens at that stage. The gate sits between Claude's proposal and any write-back.

The non-negotiable

Claude proposes; ServiceNow disposes. Claude returns a structured intent (a tool_use block). It does not touch records. SN validates, shows it to the user, and only approval triggers the actual GlideRecord write.

Where does the loop live?

OptionHowTrade-off
SN-orchestratedFlow / scripted REST builds the request, loops on tool_use, gates writes✓ PII stays in SN · any deployment
Managed agentProvision once, open a session per request; Anthropic runs the loop⚠ 1P API only · data transits container

05 / Skills setupUpload once, reference by ID

You do not ship the SKILL.md from ServiceNow on every call. Upload once; Anthropic stores it; reference by skill_id.

Author the skill folder

SKILL.md at root (YAML + markdown), optional scripts/ and resources/. No hardcoded credentials.

Upload via the Skills API

POST to /v1/skills; get back a skill_id and version. Runs from a build/admin job, never SN runtime.

Store the skill_id in SN

Keep an action → skill_id map in a config table. This is your routing layer.

Reference at call time

Include in container.skills, add the code-execution tool, set three beta headers. Up to 8 per request.

# reference a stored skill at call time
response = client.beta.messages.create(
    model="claude-opus-4-8",
    max_tokens=4096,
    betas=["code-execution-2025-08-25",
           "skills-2025-10-02",
           "files-api-2025-04-14"],
    container={"skills": [
        {"type": "custom",
         "skill_id": "skill_01J...",
         "version": "latest"}
    ]},
    tools=[{"type": "code_execution_20250825",
            "name": "code_execution"}],
    messages=[{"role": "user", "content": "Draft the SOW..."}],
)
Three required beta headers

Skills won't run without all three: skills-2025-10-02, code-execution-2025-08-25, files-api-2025-04-14. Forget code execution and the skill silently never activates.

06 / Skills + connectorsCan a skill use connectors?

Short answer: yes — but a skill doesn't own a connector. They compose at the request level.

A skill is just instructions + scripts running in the code-execution container. What it can reach depends on the tools you attach to the same Messages request. Include container.skills, the code_execution tool, and an MCP connector in one call, and the skill's instructions can direct Claude to call those MCP tools. The MCP side handles connectivity; the skill side ensures the procedure and output are right.

In Cowork

Same session

A skill and your connected apps share one session — the same Claude can follow a skill and call a connector. Orthogonal by design.

On the API

Compose per request

Skills + code execution + MCP connector all attached to one call. The skill orchestrates; the connector provides access.

Tighter pattern

Code execution + MCP

MCP servers exposed to the container as code APIs. Claude writes code to call only the tools it needs — cuts token cost.

# skill + connector in a single request
response = client.beta.messages.create(
    model="claude-opus-4-8",
    max_tokens=4096,
    betas=["code-execution-2025-08-25",
           "skills-2025-10-02",
           "mcp-client-2025-11-20"],
    container={"skills": [
        {"type": "custom", "skill_id": "skill_01J..."}
    ]},
    tools=[{"type": "code_execution_20250825",
            "name": "code_execution"}],
    mcp_servers=[{
        "type": "url",
        "url": "https://your-mcp-server/mcp",
        "name": "servicenow-mcp",
    }],
    messages=[{"role": "user", "content": "..."}],
)
The catch for PII

Neither Skills nor the MCP connector is ZDR-eligible — data exchanged with MCP servers (tool definitions and execution results) is retained per Anthropic's standard policy, and runs through the hosted container. There's a tokenization pattern that swaps sensitive fields for placeholders inside the container, but that's a mitigation, not a guarantee.

Practical read for Employee Center

A skill can drive a connector in one call — but for PII-bearing SN records that routes data through the hosted container and MCP path, which is what the SN-orchestrated tool-use loop was designed to avoid. Keep tool use for record access; reserve skills (with or without connectors) for the non-sensitive generation half. The MCP header recently moved (mcp-client-2025-04-04mcp-client-2025-11-20) and tool config now lives in the tools array — confirm the current shape before wiring.

07 / ApprovalTwo gate models for Employee Center

Custom portal modal

Claude's proposed action renders in the widget. User taps Approve/Reject inline; SN executes immediately on approve.

✓ Fast self-service · great UX · low ceremony

Native approval record

SN creates a sysapproval_approver record routed to a manager/queue. Action fires when approved — full audit trail.

✓ Governed changes · delegation & SLA · audit-ready

Flexible routing

Let the proposed action's risk decide the gate: low-impact self-service → portal modal; anything touching cost, access, or another person's record → native approval. Claude can suggest the tier; ServiceNow makes the final call.

08 / RecommenderWhat does your action need?

Your action mainly needs to…

Pick an option to see the recommendation.

09 / Bottom lineFor Ondaro × ServiceNow

  • Default to tool use for actions touching SN records or PII — data stays in your boundary.
  • Use Skills for stateless, reusable generation where the input isn't sensitive.
  • Skills + connectors compose per request, but route PII-bearing access through SN tool use, not the hosted MCP path.
  • Add MCP only to reach external SaaS you don't want to hand-code, and only on the first-party API.
  • Reserve Managed Agents for long-running stateful workflows, after confirming you're not on Bedrock/Vertex/Foundry.
  • Always store skill_ids / agent_ids in SN config and reference by ID — provision once, call many.
Verify before building

These are beta features with dated headers that move fast. Confirm header strings, model IDs, and ZDR/data-retention terms against platform.claude.com before committing architecture.