sn-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sn-mcpList open incidents in ServiceNow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
▼
ServiceNowRead 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 |
| 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 | Closing |
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 an allowlisted table |
| Fetch one record by |
| Search published knowledge articles |
| Return a count — no rows cross the boundary |
| Is ServiceNow up, and can we write the audit log? |
Off until you opt in:
Tool | Purpose |
| Write to the instance |
| 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 stdioPoint 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 toolscount_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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | sysparm_query filter string. Example: 'active=true^priority=1'. Some identity-revealing filters (like caller_id) are denied. Max 500 chars. | |
| table | Yes | ServiceNow table name. Must be in the allowlist (same as query_table). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ServiceNow table name (e.g., 'sys_script', 'sys_ws_definition'). | |
| fields | Yes | Object of field name → value pairs. Field names are snake_case SN column names. Values can be strings, numbers, or booleans. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ServiceNow table name. | |
| sys_id | Yes | The 32-character hex sys_id of the record to delete. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes | Server-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. | |
| description | No | Short description of what this script does (for audit log). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ServiceNow table name. Must match the table the sys_id belongs to. Only allowlisted tables are permitted. | |
| sys_id | Yes | The 32-character hex sys_id of the record to fetch. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max records to return. Hard cap: 50. Default: 10. | |
| query | No | sysparm_query filter string. Example: 'active=true^priority=1'. Some identity-revealing filters (like caller_id) are denied. Max 500 chars. | |
| table | Yes | ServiceNow table name. Allowed tables: 'incident', 'kb_knowledge', 'sc_request', 'change_request'. Other tables will be denied. | |
| fields | No | Comma-separated list of fields to return. Disallowed fields are silently dropped. Omit to return the full set of allowed fields for the table. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max articles to return. Hard cap: 20. Default: 5. | |
| query | Yes | Plain-text search query. Example: 'password reset', 'VPN setup'. Max 200 chars. Special characters are stripped. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ServiceNow table name. | |
| fields | Yes | Object of field name → new value pairs. Only provided fields are updated. | |
| sys_id | Yes | The 32-character hex sys_id of the record to update. |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v0.1.0- First observed
count_table - First observed
create_record - First observed
delete_record - First observed
execute_script - First observed
get_record - First observed
health_check - First observed
query_table - First observed
search_kb - First observed
update_record
TDQS
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.
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.
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.
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
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
- StackOneOAuthcom.stackone
Give AI agents 30,000+ safe, token-optimized actions across Workday, SAP, Oracle + hundreds more.
Connect LLM tools to your Algolia account with user-scoped access for internal workflows.
Security gateway for AI agents: policy, approval, and audited execution, no secrets shared.
Deterministic runtime safety for AI agents: scan PII, gate tool actions, verify LLM output.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides 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.-
- AlicenseNot gradedqualityDmaintenanceEnables 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.284MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to interact with ServiceNow instances through the ServiceNow API, allowing data retrieval, record management, and workflow execution. Supports multiple authentication methods and tool packaging for role-based access control.MIT
- AlicenseNot gradedqualityCmaintenanceEnables interaction with ServiceNow ITSM through browser-based SSO authentication, providing 80+ tools for incidents, changes, catalog, CMDB, and more via natural language.28MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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