Skip to main content
Glama

sn-mcp

A Model Context Protocol server that lets an LLM talk to a ServiceNow instance — query records, and (only when you turn it on) write them — without handing the model the keys to the kingdom.

Built for a healthcare context. The bar is: a CISO can read this page and know what the model can and cannot touch.


The problem

LLMs are useful against ServiceNow. They are also one bad prompt away from reading sys_user, dumping a table, or following instructions hidden in a work note.

Most MCP wrappers solve “can the model call the API?” They skip “what happens when it tries something it shouldn’t?”

Related MCP server: ServiceNow MCP Server

Why this exists

The day job is regulated healthcare. I needed an agent that could look at a live instance while I was building — and I would not point a raw API token at that instance.

So the product is not “nine ServiceNow tools.” The product is the safety kernel those tools cannot bypass.


How a call works

LLM
  │  stdio (no network, no ports)
  ▼
sn-mcp
  │  1. Zod validation
  │  2. Table + field allowlist      ← default deny
  │  3. Query denylist               ← no identity enumeration
  │  4. HTTPS to ServiceNow (10s cap)
  │  5. Error sanitization           ← LLM never sees stack traces
  │  6. PHI redaction
  │  7. Response wrapper             ← retrieved data is untrusted input
  │  8. Audit log + rate limit
  ▼
ServiceNow

Read tools always go through that path. Write tools add one more gate: BUILDER_MODE is off unless you set it. Idle sessions cannot create, update, delete, or run scripts.


Design decisions

These are the ones a stranger needs. The rest, including what was rejected, live in DECISIONS.md.

Decision

Choice

Why

Default deny

Only listed tables and fields come back

A miss is a closed door, not an open one

Writes are opt-in

BUILDER_MODE=true or the write tools refuse

An idle chat cannot change the instance

Errors fail safe

Unknown error category = no hint to the model

Better a confused model than a leaked schema

PHI regex is not the primary control

Allowlist is primary; redaction is defense in depth

Regex will miss things. We say that out loud.

Retrieved data is untrusted

Every SN payload is wrapped and tagged

Stops a work note from becoming an instruction

Identity fields are denied everywhere

One SYSTEM_IDENTITY_FIELDS list, every table

Closing caller_id and leaving sys_created_by is not a lock

What this is not: a production connector for a hospital instance. It is built and tested against a developer instance, with Basic auth. OAuth is the gating requirement before it ever sees real PHI.


What it can do

Always on (still subject to the kernel):

Tool

Purpose

query_table

Query an allowlisted table

get_record

Fetch one record by sys_id

search_kb

Search published knowledge articles

count_table

Return a count — no rows cross the boundary

health_check

Is ServiceNow up, and can we write the audit log?

Off until you opt in:

Tool

Purpose

create_record / update_record / delete_record

Write to the instance

execute_script

Run server-side JavaScript. Treat it as admin.

Default allowlist: incident, change_request, problem, sc_request, sc_task, kb_knowledge, alm_hardware, wm_order. Clinical tables, users, scripts, attachments, and email are denied by name.


Run it

git clone https://github.com/dadshorts/sn-mcp.git
cd sn-mcp
npm install
cp .env.example .env   # set SN_INSTANCE, SN_USERNAME, SN_PASSWORD
npm test               # regression suite against the safety kernel
node src/index.mjs     # listens on stdio

Point your MCP client at node src/index.mjs. Credentials stay in .env (gitignored). Leave BUILDER_MODE unset unless you are sitting down to write.


What's verified

  • Safety kernel + write gate exercised on a live developer instance

  • Regression suite for allowlist, denylist, wrapping, PHI false-positives, and builder-mode refusals

  • Audit log written for every tool call, including refusals

  • Months of local operation while building ServiceNow work

This repo is the server. It does not include instance credentials, audit logs, or production data.

Available Tools

9 tools
count_tableA

Count records in a ServiceNow table matching a sysparm_query filter. Returns ONLY an integer count — no record data. Use this for 'how many' questions: 'how many P1 incidents this week?', 'what % of assets are Dell?'. Subject to the same table + query filter allowlist as query_table.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNosysparm_query filter string. Example: 'active=true^priority=1'. Some identity-revealing filters (like caller_id) are denied. Max 500 chars.
tableYesServiceNow table name. Must be in the allowlist (same as query_table).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It clearly discloses the return type ('ONLY an integer count'), the absence of record data, and the allowlist restriction. This is good, but it omits details like error behavior, performance implications, or authentication requirements, which would have made it more complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core purpose in the first sentence, followed by usage examples and a constraint. Every sentence adds value and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (two parameters, simple integer output), the description adequately covers the purpose, usage context, and output type. It also mentions the allowlist constraint, which is important for proper invocation. The lack of an output schema is mitigated by the explicit statement about the return value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with clear descriptions for both parameters (`table` and `query`), including examples and max lengths. The tool description only paraphrases 'sysparm_query filter' and 'table', adding no new semantic meaning beyond the schema. Thus, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Count records') plus the resource ('ServiceNow table') and the filtering mechanism ('matching a sysparm_query filter'). It clearly distinguishes the tool from siblings like query_table by stating it 'Returns ONLY an integer count — no record data', which unambiguously defines its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: 'Use this for 'how many' questions' with concrete examples. It also notes that it is 'Subject to the same table + query filter allowlist as query_table', giving a constraint. However, it does not explicitly name alternative tools or state when NOT to use it (e.g., 'use query_table if you need record data'), so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_recordA

Create a new record on any ServiceNow table. Use this to deploy solutions: Business Rules (sys_script), Script Includes (sys_script_include), Scripted REST APIs (sys_ws_definition + sys_ws_operation), UI Pages, or any other table. No table restrictions — the PDI is the sandbox.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesServiceNow table name (e.g., 'sys_script', 'sys_ws_definition').
fieldsYesObject of field name → value pairs. Field names are snake_case SN column names. Values can be strings, numbers, or booleans.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the transparency burden. It does reveal a key trait: 'No table restrictions — the PDI is the sandbox,' which tells the agent the tool is safe for a sandbox and works universally. However, it does not disclose side effects of creating records on certain tables (e.g., triggering business rules) or error behavior, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. The first sentence states the core purpose, and the second adds usage context and the sandbox note. Information is front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create tool with two well-described parameters and no output schema, the description provides sufficient context to choose and invoke it: what it does, when to use it, and a safety note about the PDI. It lacks explicit return-value info, but with no output schema this is not required for selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully describes both parameters with examples ('sys_script', 'sys_ws_definition') and field value types. The description adds example table types, but these are already present in the schema. The 'fields' parameter is thoroughly described in the schema, so the description adds no unique semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a new record on any ServiceNow table' — a specific verb and resource. It then lists concrete example tables (Business Rules, Script Includes, Scripted REST APIs), which distinguishes it from update/delete/query siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Use this to deploy solutions' provides clear usage context, with a list of typical table types. It does not explicitly contrast with update_record or delete_record, but the create verb makes the intended use obvious. No exclusion criteria are stated, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_recordA

Delete a record from any ServiceNow table by sys_id. Returns confirmation. Use for cleanup after testing.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesServiceNow table name.
sys_idYesThe 32-character hex sys_id of the record to delete.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It does disclose that the tool 'Returns confirmation' and that it works 'any ServiceNow table,' which adds some behavioral context. However, it doesn't mention permanence, irreversibility, or required permissions, which are important for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, using three short sentences that each serve a purpose: action, return value, and usage context. No unnecessary words or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple tool (2 parameters, no output schema), the description is largely complete: it explains the action, the return behavior, and a typical use case. It could be improved by noting that deletion is permanent and irreversible, but the core information is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters already described in detail. The description reinforces that deletion is by sys_id but does not add significant meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Delete a record from any ServiceNow table by sys_id.' It uses a specific verb (delete) with a resource (record) and scope (any ServiceNow table), distinguishing it from sibling tools like create_record, update_record, and query_table.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear usage context: 'Use for cleanup after testing.' This tells the agent when the tool is appropriate, though it does not explicitly mention alternatives or situations to avoid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_scriptA

Run server-side JavaScript on the ServiceNow PDI. The script runs inside a Scripted REST API resource — use response.setBody({...}) to return data. GlideRecord, GlideDateTime, gs, sn_ws.RESTMessageV2, and all server-side APIs are available. Auto-deploys and auto-cleans up.

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptYesServer-side JavaScript to execute. Must be wrapped in the Scripted REST pattern: (function process(request, response) { ... })(request, response); Use response.setBody({...}) to return JSON results.
descriptionNoShort description of what this script does (for audit log).

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses important traits: the script runs inside a Scripted REST API resource, must use response.setBody for returns, and auto-deploys/cleans up. However, it doesn't mention execution limits, error handling, or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main verb and resource. Every sentence adds value: purpose, execution context, and lifecycle behavior. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has moderate complexity with no output schema. The description explains how to return data and lists available APIs, but omits potential side effects, error handling, and execution constraints. This is a useful but incomplete picture for a script execution tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents both parameters. The description adds context about available APIs and response handling, but it doesn't provide additional meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Run server-side JavaScript on the ServiceNow PDI' with a specific verb and resource. It differentiates from sibling tools (query_table, get_record, etc.) which handle data operations, whereas this tool executes arbitrary server-side code.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use this tool: for executing server-side JavaScript with access to GlideRecord, gs, and other APIs. It doesn't explicitly exclude alternatives, but the context implies it is for custom scripting beyond simple CRUD operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recordA

Fetch a single ServiceNow record by its sys_id. Use this when you already know the sys_id from a prior query_table call and need the full details of that specific record. Subject to the table + field allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesServiceNow table name. Must match the table the sys_id belongs to. Only allowlisted tables are permitted.
sys_idYesThe 32-character hex sys_id of the record to fetch.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. The allowlist constraint is disclosed, which is useful. However, it does not mention error behavior (e.g., not found), permission requirements, or output format beyond 'full details'. For a read operation, this is acceptable but not thorough, so a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: two main sentences plus a short constraint statement. The action is front-loaded, and every sentence contributes meaning without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter fetch tool, the description covers the purpose, usage context, and constraints. It lacks explicit error/return details, but 'full details' suffices. With no output schema, it does enough to set expectations. A 4 reflects its near-completeness for this tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters ('table' and 'sys_id') are well-described in the schema. The description adds minor context (like 'from a prior query_table call') but does not significantly expand on the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch') with a clear resource ('a single ServiceNow record') and identifies the key identifier (sys_id). It clearly distinguishes from siblings like query_table (which lists multiple records) and create/update/delete operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use this tool: when you already know the sys_id from a prior query_table call and need full details. It implicitly steers to query_table when sys_id is unknown, though it does not explicitly name alternatives or when-not cases. Still, the context is clear and useful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

health_checkA

Check the MCP server's liveness and control state. Returns status (ok|degraded), uptime, ServiceNow reachability, audit log writability, policy load time, phase, and version. Useful for demos and monitoring.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility. It discloses the exact return fields (status, uptime, ServiceNow reachability, audit log writability, policy load time, phase, version), giving a transparent picture of behavior. It does not mention side effects, but a health check is inherently read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first states the purpose, the second lists return fields and usage. Every word earns its place; no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter health check with no output schema, the description completely covers the tool's purpose, return values, and intended use. Nothing critical is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description correctly omits parameter details, as there are none to explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks the MCP server's liveness and control state, using a specific verb ('Check') and resource (server health). It distinguishes itself from sibling data-operation tools like query_table and create_record.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear usage context: 'Useful for demos and monitoring.' It does not explicitly mention when not to use it or name alternatives, but the sibling tools are unrelated operations, leaving no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_tableA

Query any ServiceNow table using a sysparm_query filter. Use this to find records — incidents, change requests, hardware assets, anything. Returns human-readable display values for reference fields. Subject to the table + field allowlist; some tables and fields will be denied.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax records to return. Hard cap: 50. Default: 10.
queryNosysparm_query filter string. Example: 'active=true^priority=1'. Some identity-revealing filters (like caller_id) are denied. Max 500 chars.
tableYesServiceNow table name. Allowed tables: 'incident', 'kb_knowledge', 'sc_request', 'change_request'. Other tables will be denied.
fieldsNoComma-separated list of fields to return. Disallowed fields are silently dropped. Omit to return the full set of allowed fields for the table.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses two key behaviors: returns human-readable display values for reference fields, and enforces an allowlist (some tables/fields denied). It does not mention error handling or response format, but these are not critical for selection and invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the primary action, and every sentence adds value: purpose, usage, and key behavioral constraints. No redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations or output schema, the description provides adequate context: purpose, constraints, and return behavior. It does not detail response structure, but the schema covers parameters well, making the tool sufficiently understood for typical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds minimal meaning beyond the schema (e.g., 'sysparm_query filter' is already in param description). It reinforces the allowlist, but does not substantially augment parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Query') and resource ('ServiceNow table'), and lists example use cases ('incidents, change requests, hardware assets'). It distinguishes from siblings by emphasizing querying via sysparm_query filter rather than fetching a single record, counting, or searching KB.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context ('Use this to find records...') and mentions constraints (allowlist). It does not explicitly exclude alternatives (e.g., get_record for single record retrieval), but the context is clear enough for an agent to choose this for broad queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_kbA

Search the ServiceNow knowledge base for published articles matching a text query. Use this when the user is asking how to do something, troubleshooting, or looking for documented procedures. Only returns published articles. Subject to the kb_knowledge field allowlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax articles to return. Hard cap: 20. Default: 5.
queryYesPlain-text search query. Example: 'password reset', 'VPN setup'. Max 200 chars. Special characters are stripped.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that only published articles are returned and that results are subject to the kb_knowledge field allowlist, providing valuable behavioral context. It could mention more (e.g., result format) but is quite transparent for a search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: front-loaded purpose, followed by usage guidance and constraints. Every sentence contributes meaning without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple search tool, the description covers purpose, when to use, and key constraints (published-only, allowlist). With no output schema, a brief note about return fields would improve completeness, so 4.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both 'query' and 'limit' are thoroughly documented with examples and constraints. The description adds no new parameter-level insights, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('Search') and resource ('ServiceNow knowledge base'). It also distinguishes itself from sibling tools like query_table by focusing on published articles and text queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage guidance: 'Use this when the user is asking how to do something, troubleshooting, or looking for documented procedures.' However, it lacks when-not scenarios or named alternatives, so it doesn't fully hit the 5 criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_recordA

Update an existing record on any ServiceNow table by sys_id. Only the fields you provide will be changed — other fields are untouched.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesServiceNow table name.
fieldsYesObject of field name → new value pairs. Only provided fields are updated.
sys_idYesThe 32-character hex sys_id of the record to update.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It usefully discloses that only provided fields are updated and others remain untouched, but it omits details on permissions, error handling, reversibility, or response behavior—important for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and resource. Every word earns its place, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward update tool with no output schema, the description covers the core operation and partial-update behavior. However, lacking annotations, it omits failure modes and permission requirements, leaving the description somewhat incomplete for full standalone use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are documented. The description adds no extra parameter-specific semantics; it merely reiterates the partial-update behavior already present in the 'fields' parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Update'), specifies the resource ('existing record on any ServiceNow table'), and the key identifier ('by sys_id'). This clearly distinguishes it from sibling tools like create_record and delete_record.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (updating by sys_id) but does not explicitly state when not to use it or mention alternatives such as query_table to find the sys_id first. It provides clear context but no exclusions or alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv0.1.0
    • First observedcount_table
    • First observedcreate_record
    • First observeddelete_record
    • First observedexecute_script
    • First observedget_record
    • First observedhealth_check
    • First observedquery_table
    • First observedsearch_kb
    • First observedupdate_record

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: querying records, fetching by sys_id, counting records, creating/updating/deleting, searching the KB, running scripts, and checking health. Even query_table and get_record are distinct (filtered search vs. direct ID lookup), so there is no ambiguity.

Naming Consistency4/5

Most tools follow a consistent verb_noun snake_case pattern (query_table, create_record, delete_record, etc.). The only minor deviation is 'health_check' which uses a noun-verb compound rather than verb_noun, but it remains readable and consistent in casing.

Tool Count5/5

With 9 tools, the server is well-scoped for its purpose. It covers CRUD, querying, counting, KB search, script execution, and health monitoring without unnecessary bloat or missing essentials.

Completeness5/5

The tool set provides full record lifecycle coverage (create, read, update, delete), flexible searching with query_table and count_table, knowledge base access, arbitrary script execution, and server health checks. There are no obvious gaps for typical ServiceNow automation workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides AI assistants with read access to ServiceNow instances to aid in building and debugging applications. It enables users to query tables, retrieve specific records, and inspect table schemas using standard ServiceNow encoded query strings.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables authenticated interaction with ServiceNow via its REST API using per-user OAuth 2.0 tokens. It provides tools for managing incidents, tasks, knowledge articles, and service catalog requests while maintaining user-specific permissions.
    28
    4
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dadshorts/sn-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server