Fluent MCP Server
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., "@Fluent MCP ServerCreate a new Fluent app in ~/my-app to manage employee time off"
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.
Fluent MCP Server
An MCP server that brings ServiceNow Fluent SDK capabilities to AI-assisted development environments. Enables natural language interaction with ServiceNow SDK commands, API specifications, code snippets, and development resources.
Built for @servicenow/sdk@v4.10.1.
Note : Since v0.6.0 the server speaks both MCP@2026-07-28 and MCP@2025-11-25 from one handler set — the stdio entry inspects the opening message and serves whichever era the client opens with. v0.5.1 is the last release built on the v1 MCP SDK (2025-11-25 only).
Key Features
SDK Command Tools -
sdk_infoplus ServiceNow SDK command tools forinit,build,install,dependencies,transform,download,clean,pack,explain,query, andcicdRich Resources - API specifications, instructions, and code snippets for 67 ServiceNow metadata types
API Documentation Lookup -
explain_fluent_apireturns SDK docs for any Fluent API or guide — no project requiredLazy Auto-Authentication - Detects and caches an auth profile only when an auth-requiring command or
check_auth_statusneeds itExplicit Project Context - Resolves each project command from its
workingDirectoryargument, the initialized session, orFLUENT_MCP_WORKING_DIR, then fails with actionable guidance instead of guessingMCPB Bundle - Builds a self-contained
.mcpbdistribution with the server, resources, and production dependenciesClient-Friendly Schemas - Optional inputs advertise their canonical value types while the enforced schema accepts
nullas an omitted-value compatibility form
This MCP server implements the Model Context Protocol specification with the following capabilities:
Core
Resources - 300+ resources across 67 ServiceNow metadata types (API specs, instructions, snippets, prompts)
Tools - 13 ServiceNow SDK command tools plus 4 resource/auth tools (17 total), with full parameter validation. Read tools (
get-api-spec,get-snippet,get-instruct,check_auth_status) declare anoutputSchemaand returnstructuredContentfor programmatic consumersPrompts - Development workflow templates for common ServiceNow tasks (
coding_in_fluent,create_custom_ui)Logging & Progress - Structured logs are written to stderr; progress notifications are sent for long-running commands (any command with a 30s or longer timeout — deploy, build, transform, download, dependencies, query, pack, cicd) when the client supplies a progress token
Project Context & Sessions
The server requires no client capabilities and issues no server→client requests: Roots, Sampling, and Elicitation are not used (MCP 2026-07-28 removed server-initiated requests, and all input arrives with the tools/call arguments). Automatic workspace detection through Roots is gone for every client, including MCPB hosts.
Session Management - Tracks the directory established by
init_fluent_appfor subsequent project commandsWorking Directory Resolution -
workingDirectorytool argument → initialized session →FLUENT_MCP_WORKING_DIR→ actionable failure. Accepted paths are non-empty absolute paths other than the filesystem root. The server never guesses from its process cwd or installed package directory. Clients must passworkingDirectoryor configureFLUENT_MCP_WORKING_DIRwhen no session directory exists.Non-interactive
init_fluent_app- Intent-specific arguments must be supplied with the call (creation:appName,packageName,scopeName,template; conversion:from); a missing argument fails with an error naming exactly what is absent. The tool does not prompt or elicit missing values.Error Handling - Comprehensive error messages with actionable guidance
Type Safety - Full TypeScript implementation with strict typing
Protocol Behavior
Dual-era stdio: a 2026-07-28 opening (per-request
_metaenvelope,server/discover) and a 2025-11-25initializeare both served from the same handler set; the SDK entry point pins one era per connection.The six cacheable results of 2026-07-28 (
tools/list,prompts/list,resources/list,resources/templates/list,resources/read,server/discover) advertisettlMs: 3600000/cacheScope: 'public'— everything they return is static for the process lifetime.The server advertises instructions during initialization;
tools/listis a side-effect-free read that returns tools in deterministic name order.Optional tool arguments advertise their canonical JSON types so clients render normal form fields. The enforced call schema additionally accepts
nullas an omitted value;workingDirectoryalso treats an empty string as omitted before applying the fallback chain.Structured logs go to stderr, keeping stdout reserved for MCP protocol traffic. Runtime
logging/setLevelandnotifications/messageare not used.Resource misses use the standard JSON-RPC invalid-params code (
-32602).
Related MCP server: servicenow-mcp-server
Quick Start
# Test with MCP Inspector
npx @modelcontextprotocol/inspector npx @modesty/fluent-mcp
# Build the optional self-contained MCPB distribution
npm run bundle
# Or use in your MCP client (see Configuration below)MCPB Distribution
The optional npm run bundle command produces fluent-mcp-<version>.mcpb. The bundle contains dist/, res/, and production dependencies, and its manifest.json declares all 17 tools. MCPB hosts expose these user-configurable values to the server:
FLUENT_MCP_WORKING_DIR— optional default project directory; otherwise passworkingDirectoryon project-aware tool callsSN_INSTANCE_URL— optional instance URL for lazy authentication validationSN_AUTH_TYPE— authentication type (basicoroauth, defaultoauth)
The npm package remains the primary distribution channel. MCPB does not restore Roots-based workspace detection or interactive init_fluent_app prompting.
Example prompt:
Create a new Fluent app in ~/projects/time-off-tracker to manage employee PTO requestsAvailable Tools
SDK Command Tools (13)
Tool | Description | Key Parameters |
| Get SDK version or help |
|
| Look up Fluent SDK documentation for any API or guide. No Fluent project required. |
|
| Initialize or convert a ServiceNow app. Non-interactive: missing intent-specific arguments fail with an error naming them. |
|
| Build the application |
|
| Deploy to a ServiceNow instance. SDK flow activation can be skipped. |
|
| Convert XML or instance metadata to Fluent TypeScript. Local paths do not require auth; instance transforms do. |
|
| Download dependencies and type definitions |
|
| Download metadata from an instance |
|
| Clean output directory |
|
| Create an installable artifact |
|
| Read-only Table REST query against an instance; returns a JSON envelope |
|
| Install, publish, or rollback an app via the ServiceNow CI/CD API ( |
|
| Run, watch, or fetch results for ATF test suites and tests via the CI/CD API. |
|
Resource and Authentication Tools (4)
Tool | Description | Key Parameters |
| Get an API specification or list all available metadata types |
|
| Get a Fluent code snippet; without |
|
| Get authoring guidance, conventions, and common pitfalls for a metadata type |
|
| Lazily validate configured ServiceNow authentication and return structured status information | No arguments |
Note: Authentication is validated lazily on the first auth-requiring command or
check_auth_status, then cached for the session. Useinit_fluent_appto establish project context, passworkingDirectoryper call, or setFLUENT_MCP_WORKING_DIR. Any optional argument sent asnullis treated as omitted;workingDirectoryalso treats an empty string as omitted and falls through to the next source.
Looking up Fluent APIs with explain_fluent_api
explain_fluent_api wraps now-sdk explain and returns SDK documentation for any Fluent API class or topic guide. It works from any directory — no Fluent project required.
Invocation | Result |
| Full API reference for |
| Brief summary of |
| Full API reference as plain markdown (good for piping into other tools) |
| Full topic index (all APIs and guides) |
| Topic index filtered to entries matching |
topic matches an API name (e.g. BusinessRule, Acl), a guide name (e.g. business-rule-guide, atf-guide), or a tag keyword (e.g. flow, atf, email). The SDK resolves by exact name first, then by tag.
Resources
Standardized URI patterns following MCP specification:
Resource Type | URI Pattern | Example | Purpose |
API Specs |
|
| API documentation and parameters |
Instructions |
|
| Best practices and guidance |
Code Snippets |
|
| Practical code examples |
Prompts |
|
| Development guides |
Supported Metadata Types
67 metadata types across the following categories:
Core Types: acl, application-menu, business-rule, client-script, cross-scope-privilege, data-policy, form, import-set, instance-scan, list, property, role, scheduled-script, script-action, script-include, scripted-rest, sla, state-model, table, ui-action, ui-page, ui-policy, user-preference
Table Types: column, column-generic
Service Catalog: catalog-item, catalog-item-record-producer, catalog-ui-policy, catalog-client-script, catalog-variable, variable-set
Email: email-notification, inbound-email-action
Automation & Workflow: flow, custom-action, playbook
Integration & Connections: alias, alias-template, retry-policy, rest-message, data-lookup
AI & Now Assist: ai-agent, ai-agent-workflow, now-assist-skill-config
Service Portal: service-portal, sp-header-footer, sp-page-route-map
Workspace & Analytics: workspace, dashboard
ATF (Automated Test Framework): atf-appnav, atf-catalog-action, atf-catalog-validation, atf-catalog-variable, atf-email, atf-form, atf-form-action, atf-form-declarative-action, atf-form-field, atf-form-sp, atf-list, atf-reporting, atf-rest-api, atf-rest-assert-payload, atf-server, atf-server-catalog-item, atf-server-record, atf-ui-test-script
What's new in 4.10.1
This release of the MCP server tracks @servicenow/sdk 4.10.1, covering the authoring-surface additions shipped across 4.10.0 and 4.10.1:
New metadata type:
state-model— theStateModelAPI defines a table's state machine (states, transitions, and the conditions that gate them) in a single call, writingsttrm_model/sttrm_state/sttrm_state_transition/sttrm_transition_conditionrecords, or thechg_model/prb_model/prb_task_modelsubclass auto-selected fromtable. It can also edit out-of-box models in place by referencing their real sys_ids.New metadata type:
atf-list— theatf.list.*ATF steps (relatedListVisibility,applyFilterToList,recordPresentInList,openRecordInList,listUIActionVisibility,clickListUIAction) exercise list and related-list UI behavior.New tools:
cicd_fluent_app(install/publish/rollback an app through thesn_cicdAPI — changes instance state) andcicd_fluent_test(run, watch, or fetch results for ATF suites and tests), wrapping the newnow-sdk cicdcommand.query_fluent_recordsgainsselectfor the new--selectpath extractor.$meta.useEsLatest— new cross-cutting flag that runs a record's script field(s) at the latest ECMAScript version the platform supports. It reaches the APIs whose type carries$meta(BusinessRule,Acl,ScriptInclude,ScriptAction,ScheduledScript,UiPage,RestApiroutes,SPWidget,SPMenu, and others) — not every API with a server-side script field:StateModeltransition conditions are server-side scripts whose type accepts no$metaat all (see the source-of-truth note below).Table
actionsobject form —actionsnow accepts the exportedTableActionAccessshape{ read?, update?, delete?, create? }, where each action is three-state. The array form is deprecated: it is a complete enumeration, soactions: ['read']also writes the other three asfalse. The SDK also no longer derives defaults foractions,allowClientScripts,allowNewFields,allowUiActions,allowWebServiceAccess, ormaxLength.Reference column
mtom— creates a many-to-many relationship. Note the semantic split:referenceKeyno longer means many-to-many, and now stores a field from the referenced table in place ofsys_id.UI Action icons —
UiAction'sformandlistobjects both accepticonNameandshowIconOnly.Form$meta—Formnow honors$meta.installMethodto route its output folder (previously accepted but inert).Playbook
timerSchedule—startWithDelaycan evaluate its delay against acmn_schedulerecord instead of elapsed clock time, on all three variants.Catalog dynamic default values — a variable's
dependentQuestionwidened to accept aReferenceVariable/RequestedForVariablein addition to a name string;CatalogUiPolicyactions acceptvariable, andCatalogClientScriptacceptsorder.$overrideonsys_*fields —$overridecan setsys_domainand most othersys_*columns on any table;sys_id,sys_scope,sys_update_name, andsys_domainpathremain framework-managed and error if overridden.Service Portal — widget/page/instance CSS fields accept SCSS or CSS,
widgetParametersnow correctly serializes a plain object,SPInstance's placeholder properties are functional rather than ignored, andurlSuffixaccepts hyphens. Theservice-portalspec also gained the previously undocumentedServicePortal()(sp_portal) API.
Source-of-truth note: several release-note claims are not corroborated by the installed package and were treated as corrections — "dependent questions" are a dynamic default value, not visibility or option control (and the property is not new, only its type widened);
runServerSideScript"surface support" already shipped in 4.9.0; and theadd_messageinference change is an internal transform fix with no authoring-surface change. The overview guide also listsStateModel,AliasTemplate,InboundEmailAction,CatalogItem,CatalogItemRecordProducer, and the instance-scan checks as accepting$meta.useEsLatest, but their declarations carry no$meta. See.mosey/upgrade-sdk-4.10.1.md.
Previously (4.9.x)
This release of the MCP server tracks @servicenow/sdk 4.9.0 — a maintenance and bug-fix release (Flow, ClientScript, ImportSet, SLA transform/build reliability) with select authoring-surface additions:
New metadata type:
atf-ui-test-script— theatf.uiTestScript.runTest()ATF step runs a TestingLibrary test body in the client test runner to test custom UI components (Angular/React widgets, embedded SPAs, custom workspaces,now-*web components) that the standardatf.form.*/atf.catalog.*steps cannot reach.Multi-language choice labels — a choice field's
choicesvalue may be an array ofChoiceConfigobjects, each with alanguage(BCP 47) key, producing one translatedsys_choicerecord per language.protectionPolicyon AI Agent & AI Agentic Workflow —AiAgentandAiAgenticWorkflowacceptprotectionPolicy: 'read' | 'protected'for post-install access control.Role.federatedId— optional identifier to match a role to an externally federated role during identity federation.Table index platform columns — a table
indexentry'selementmay reference platform default columns (for example,sys_created_on).Now Assist Skill Kit providers — new LLM providers selectable by name:
Now LLM LTS Generic,Google Cloud Vertex AI,Amazon Bedrock.
Source-of-truth note: two release-note claims are not corroborated by the installed package and were treated as corrections — Form
table_field.fieldis documented as a schema column name (not loosened to "any string"), and the four named NASK model strings appear nowhere in the package (modelis a free string). See.mosey/upgrade-sdk-4.9.0.md.
Previously (4.8.x)
This release of the MCP server tracks @servicenow/sdk 4.8.0 and adds support for the following Fluent APIs and SDK enhancements:
New metadata type:
playbook— thePlaybookDefinitionAPI (sys_pd_process_definition, from@servicenow/sdk/automation) for guided, record-driven multi-step processes with lanes, activities, triggers, and inputs/outputs.New metadata type:
rest-message— theRestMessageAPI (sys_rest_message) for outbound HTTP integrations with shared auth/headers and callable functions.New metadata types:
aliasandalias-template— theAlias(sys_alias) andAliasTemplate(sys_alias_templates) APIs for Connection & Credential aliases and reusable connection-setup templates.New metadata type:
retry-policy— theRetryPolicyAPI (sys_retry_policy) controlling transient-failure handling for connections (fixed-interval, exponential-backoff, orRetry-After).New metadata type:
data-lookup— theDataLookupAPI (dl_definition) that auto-copies field values from a matcher table to a source record.Declarative deletion (
Now.del()) — top-level statement to remove records by coalesce keys or sys_id.Type enhancements —
$overrideonDataPolicy/UserPreference;$meta.installMethodonRecord/Acl/Alias/UserPreference; ACLfieldaccepts known field names, system columns, or'*';TableaccessibleFromnow defaults to'public'.New CLI tool —
query_fluent_recordswrapsnow-sdk queryfor read-only Table REST queries (JSON envelope output).
Previously (4.7.x)
This release of the MCP server tracked @servicenow/sdk 4.7.x and added support for the following Fluent APIs and SDK enhancements:
New metadata type:
data-policy— theDataPolicyAPI (sys_data_policy2) for server-side mandatory/read-only field enforcement that cannot be bypassed via API, import, or web service.Flow error handling & parallelism —
wfa.flowLogic.tryCatch,wfa.flowLogic.doInParallel, andwfa.flowLogic.appendToFlowVariables(append toArray.Objectflow variables).Flow stages — declare
stageswithFlowStage({ label, value, … })and activate them in the body viawfa.stage(...)for progress tracking.Table augments — add columns to an existing platform/cross-scope table via
Table({ augments: '<table>', schema }); added columns must use the current app's ownership prefix:<scope>_in a named custom scope (for example,x_acme_), oru_in global and Store-app contexts.AI Agent — new
agentDescriptor;dataAccessacceptsroleMap(role names) orroleList(role sys_ids).NASK —
securityControlsacceptsroleMap(role names) alongsideroleRestrictions(role sys_ids).Universal field override (
$override) — escape hatch on Fluent constructors to set unmodeled columns by DB column name.Protection policy —
protectionPolicydocumented onsys_policy-backed APIs (Action, Subflow, business rules, scripted REST, etc.).CLI —
fluent_transformgains--table/--id(transform by table hierarchy);initgains thetypescript.vuetemplate; OAuthclient_credentialsfor CI/CD viaSN_SDK_*env vars (see Configuration).MCP — read tools now return
structuredContent(with declaredoutputSchema); long-running commands emit progress notifications.
Previously (4.6.0)
Added custom-action, inbound-email-action, sp-header-footer, and sp-page-route-map metadata types; the declarative Form API; subflow-of-subflow and custom actions in flows; AIAF auto-ACL generation; NASK output/input-type enhancements; Table dictionary overrides; and a project-free explain command with tag search, --list, --peek, and --format=raw.
Configuration
Requirements: Node.js 20.18.0+, npm 11.4.1+, @servicenow/sdk 4.10.1
MCP Client Setup
Add to your MCP client configuration file:
{
"mcpServers": {
"fluent-mcp": {
"command": "npx",
"args": ["-y", "@modesty/fluent-mcp"],
"env": {
"FLUENT_MCP_WORKING_DIR": "/absolute/path/to/your/fluent-project",
"SN_INSTANCE_URL": "https://your-instance.service-now.com",
"SN_AUTH_TYPE": "basic",
"SN_USER_NAME": "local-username",
"SN_PASSWORD": "local-password"
}
}
}
}Client-Specific Locations:
Claude Desktop / macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonVSCode Copilot:
.vscode/mcp.json(use Command Palette:MCP: Add Server...)Cursor: Settings → Features → MCP Settings
Windsurf: Settings → Cascade → MCP Servers → View raw config
Gemini CLI:
~/.gemini/settings.json
VSCode note: For VSCode, the JSON structure uses
"mcp": { "servers": { ... } }instead of"mcpServers".
Environment Variables:
Variable | Description | Default |
| Absolute Fluent project path used after the per-call and initialized-session sources; when it is also absent, project commands fail with actionable guidance | - |
| ServiceNow instance URL for auto-auth validation | - |
| Authentication method: |
|
| Username for basic auth (informational) | - |
| Password for basic auth (informational) | - |
| Minimum stderr log severity ( |
|
Note: On the first auth-requiring command (or
check_auth_status), the server detects an existing auth profile matchingSN_INSTANCE_URL, stores it in the session, and auto-injects it. Concurrent first calls share one validation promise. A new profile is added automatically only when setup can complete non-interactively (basic auth withSN_USER_NAME/SN_USERNAME+SN_PASSWORD); otherwise the server emits a single notice with the manualauth --addcommand to run.
Logging
The server writes its complete structured log stream to stderr so stdout remains reserved for MCP protocol traffic. Configure the minimum severity before launch with FLUENT_MCP_LOG_LEVEL (default info; use debug to include raw SDK CLI output). Runtime logging/setLevel and notifications/message are intentionally not used.
CI/CD (non-interactive) authentication — SDK v4.7.0+
For headless pipelines, the ServiceNow SDK CLI reads credentials directly from SN_SDK_* environment variables (the MCP server inherits and passes these through to spawned commands — no extra configuration needed). Set SN_SDK_NODE_ENV=SN_SDK_CI_INSTALL to enable CI mode, then:
Variable | Required | Value |
| yes |
|
| for oauth |
|
| yes | Full instance URL |
| basic | Username / password |
| oauth | OAuth |
OAuth uses the client_credentials grant against /oauth_token.do. See the SDK's ci-integration guide (via explain_fluent_api) for instance setup details.
Usage Examples
Typical Workflow
Initialize Project
Create a new Fluent app in ~/projects/asset-tracker for IT asset managementDevelop with Resources
Show me the business-rule API specification and provide an example snippetBuild and Deploy
Build the app with debug output, then deploy it
Note: Authentication is validated lazily using
SN_INSTANCE_URLandSN_AUTH_TYPE; those settings do not replace an SDK auth profile unless non-interactive setup can complete. If you need to set up a new profile, run:npx @servicenow/sdk auth --add <instance-url> --type <basic|oauth> --alias <alias>
Testing with MCP Inspector
The MCP Inspector provides a web interface for testing MCP servers.
Launch Inspector
# Test published package
npx @modelcontextprotocol/inspector npx @modesty/fluent-mcp
# Or for local development (built server)
npm run build && npm run inspect
# Or against the TypeScript entry point, no build required
npm run inspect:devWhat to verify
The Tools tab shows all 17 tools in deterministic name order.
Optional parameters render with their normal types rather than as nullable union forms.
Structured server logs appear on the server process stderr/terminal output; stdout remains reserved for MCP protocol traffic.
Test Scenarios
Scenario 1: Explore Business Rule Resources
Objective: Access API specs and code snippets for business rules
Steps:
Launch Inspector and wait for server connection
Navigate to Resources tab
Find and click
sn-spec://business-rulein the resource listReview the API specification showing all available methods and parameters
Go back and search for
sn-snippet://business-rule/0001Click the snippet to view a complete TypeScript example
Verify content includes proper imports and follows Fluent patterns
Expected Results:
API spec displays structured documentation with method signatures
Snippet shows runnable TypeScript code with ServiceNow metadata patterns
Content is properly formatted and readable
Scenario 2: Test SDK Info Command
Objective: Verify SDK version and help information retrieval
Steps:
Navigate to Tools tab
Select
sdk_infofrom the tool listTest Version:
Set
flagparameter to-vClick Execute
Verify response shows the SDK version (e.g.,
4.10.1)
Test Help:
Set
flagparameter to-hSet
commandparameter tobuildClick Execute
Verify response shows build command documentation with options
Monitor the server process stderr/terminal output for command execution logs (set
FLUENT_MCP_LOG_LEVEL=debugbefore launch for verbose output)
Expected Results:
Version command returns SDK version string
Help command returns detailed command documentation
List metadata (
-lm) returns available Fluent metadata typesNo unexpected protocol errors; command logs are emitted on stderr rather than through MCP
notifications/messageCommands execute within 2-3 seconds
License
MIT
Available Tools
17 toolsbuild_fluent_appAIdempotent
Build a Fluent (ServiceNow SDK) application package from source code. Requires a valid Fluent project directory with now.config.json. Run after init_fluent_app and before deploy_fluent_app. Does NOT require instance authentication.
| Name | Required | Description | Default |
|---|---|---|---|
| debug | No | Print debug output | |
| workingDirectory | No | Absolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation idempotentHint=true already covers idempotency. The description adds behavioral context by stating 'Does NOT require instance authentication', which is valuable for an agent deciding to invoke without credentials. However, it doesn't disclose whether the build produces specific artifacts or modifies the source tree, so it's not a full behavioral disclosure.
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?
Three sentences, each earning its place: purpose, prerequisite, and explicit sequencing plus auth note. No wasted words, front-loaded with the primary action.
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 description is complete for a simple build tool: it covers what, when, prerequisites, and auth requirements. It doesn't explicitly mention the output artifact, but the phrase 'application package' implies the result. With only two optional params and no output schema, the description provides adequate context for an agent to invoke 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?
Schema coverage is 100% with both 'debug' and 'workingDirectory' having clear descriptions in the input schema. The description itself does not add parameter-specific meaning, but since the schema already fully documents them, the baseline 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 opens with 'Build a Fluent (ServiceNow SDK) application package from source code', which is a specific verb and resource combination. It also distinguishes itself from sibling tools by explicitly placing it 'after init_fluent_app and before deploy_fluent_app'.
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?
Explicitly states 'Run after init_fluent_app and before deploy_fluent_app', giving clear workflow sequencing. It also specifies the prerequisite 'valid Fluent project directory with now.config.json' and notes that instance authentication is not required, helping the agent decide when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_auth_statusARead-onlyIdempotent
Check current ServiceNow authentication status. Lazily validates configured auth once and returns JSON including status, profile alias, instance host, auth type, and any required user action. Call this before commands that require authentication (deploy_fluent_app, fluent_transform, download_fluent_dependencies, download_fluent_app) to verify credentials are configured.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| host | No | The ServiceNow instance host. |
| alias | No | The matched auth profile alias. |
| status | Yes | Auth status: 'authenticated' | 'not_authenticated' | 'validation_error' | 'skipped' | 'unknown'. |
| message | Yes | Human-readable status message. |
| authType | No | Auth type: 'oauth' | 'basic'. |
| isDefault | No | Whether this is the default auth profile. |
| timestamp | No | ISO timestamp of the validation. |
| actionRequired | No | A shell command to run if manual auth setup is needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is known. The description adds 'Lazily validates configured auth once', disclosing caching behavior, and lists the returned fields, which goes beyond annotation coverage. No contradiction with annotations.
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 sentences, front-loaded with the main purpose, then behavioral details, then usage guidance. Every sentence adds value 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 read-only status check with an output schema available, the description covers purpose, behavior, and usage context completely. It even names the specific commands that require this check, making it self-contained.
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 0 parameters, so the schema is fully complete (100% coverage). The description doesn't need to add parameter-level detail. It does mention the output shape, which adds some context, but the baseline for zero parameters is 4.
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 ('Check') and resource ('ServiceNow authentication status'), clearly distinguishing it from sibling tools which are build/deploy/transform operations. It also states it returns a JSON with specific fields, reinforcing its purpose.
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?
Explicitly states when to use (before any command that requires authentication) and lists the exact sibling commands (deploy_fluent_app, fluent_transform, download_fluent_dependencies, download_fluent_app), providing clear context and exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cicd_fluent_appADestructive
Run a ServiceNow app-repo CI/CD operation via the sn_cicd API (SDK v4.10.0+): install, publish, or rollback an application on an instance. CHANGES INSTANCE STATE. Identify the app with either scope or appSysId; inside a Fluent project both appSysId and appVersion default from now.config.json/package.json, and outside one both must be passed explicitly. appVersion is always required for rollback. Requires instance authentication (auto-injected from session, or pass auth explicitly).
| Name | Required | Description | Default |
|---|---|---|---|
| auth | No | Credential alias to use for authentication with instance (auto-injected from session if not provided) | |
| wait | No | Wait for the operation to complete, polling progress (CLI default true). Set false to return immediately after dispatch with the progress id. | |
| debug | No | Print debug output | |
| scope | No | Scope name of the application (e.g. x_myco_app). Mutually exclusive with appSysId; prefer appSysId when known. | |
| action | Yes | App-repo operation to run: "install", "publish", or "rollback". | |
| output | No | Output format: "json" or "raw". Defaults to "json" (machine-readable envelope). | |
| select | No | Dot/bracket path to extract from the output (e.g. "result.links.progress.id" or "result.records[0].sys_id"). Implies machine-readable output. | |
| appSysId | No | sys_id of the application (sys_app). Mutually exclusive with scope. Defaults to the scopeId in now.config.json when run inside a Fluent project. | |
| devNotes | No | Developer notes to record for this published version. Only valid with action="publish". | |
| appVersion | No | Application version. For install/publish, defaults to the version in package.json inside a Fluent project — REQUIRED when no Fluent project directory is available. REQUIRED for rollback — the version expected after the rollback completes. | |
| pollTimeout | No | Milliseconds to poll for completion before giving up. CLI default 900000 (15 minutes). Values above ~15 minutes also require raising FLUENT_MCP_COMMAND_TIMEOUT_MS. | |
| baseAppVersion | No | Version of the base application to install alongside this application. Only valid with action="install". | |
| workingDirectory | No | Absolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR. | |
| autoUpgradeBaseApp | No | Automatically upgrade the base application if required. Only valid with action="install". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly warns 'CHANGES INSTANCE STATE', which aligns with and reinforces the destructiveHint=true annotation. It also adds behavioral context beyond the schema by noting authentication requirements and that these are instance-mutating operations via sn_cicd. It does not detail side effects or irreversibility, but given the annotations, this is adequate.
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 four sentences and front-loads the core purpose and state-change warning. It packs essential contextual rules—app identification, Fluent project defaults, rollback requirement, and auth—without filler or repetition of the full schema. Every sentence contributes operational value.
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 14-parameter tool and no output schema, the description covers the key non-obvious behaviors: action types, state mutation, app identification modes, defaulting behavior, rollback's mandatory version, and authentication. The schema already documents individual parameter details, so this high-level guidance is sufficient for safe and correct invocation.
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 coverage is 100%, so the baseline is 3, but the description adds cross-parameter logic not fully obvious from individual schema descriptions: 'inside a Fluent project both appSysId and appVersion default from now.config.json/package.json, and outside one both must be passed explicitly'. It also restates the rollback appVersion requirement, consolidating important conditional behavior.
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 opens with a specific verb and resource: 'Run a ServiceNow app-repo CI/CD operation via the sn_cicd API', and enumerates the exact action types: 'install, publish, or rollback'. This clearly distinguishes it from sibling tools like build_fluent_app or deploy_fluent_app, which target different stages of the app lifecycle.
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 gives clear contextual guidance: how app identity and version are resolved inside vs. outside a Fluent project, when appVersion is mandatory, and that auth is required. It does not explicitly name alternative tools or state when not to use this tool, but the context is clear enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cicd_fluent_testADestructive
Run or inspect ServiceNow ATF tests through the sn_cicd API (SDK v4.10.0+). Set target to "testsuite" or "test" and action to "run" (start it), "watch" (follow a progressId from a previous run), or "result" (fetch a resultId). Identify a suite by testSuiteSysId or testSuiteName, a test by testSysId or testName. action="run" executes real ATF steps on the instance and the records those steps touch change; "watch" and "result" only read. No Fluent project required. Requires instance authentication (auto-injected from session, or pass auth explicitly).
| Name | Required | Description | Default |
|---|---|---|---|
| auth | No | Credential alias to use for authentication with instance (auto-injected from session if not provided) | |
| wait | No | Wait for completion, polling progress (CLI default true). Set false to return immediately with the progress id, then follow up with action="watch". Not accepted when action="result". | |
| debug | No | Print debug output | |
| action | Yes | Operation: "run" to start, "watch" to follow a progressId from a previous run, or "result" to fetch a resultId. | |
| osName | No | Operating system to run UI-based tests on. Only with target="testsuite", action="run". | |
| output | No | Output format: "json" or "raw". Defaults to "json" (machine-readable envelope). | |
| select | No | Dot/bracket path to extract from the output (e.g. "result.interpretedResult.summary.testStatus" or "result.rollup_results[0].status"). Implies machine-readable output. | |
| target | Yes | What to act on: "testsuite" (an ATF test suite) or "test" (a single ATF test). | |
| resultId | No | Result sys_id to fetch. REQUIRED when action="result". For a suite this is the links.results.id from run; for a test it is the resultId from watch. | |
| testName | No | Name of the ATF test to run; resolved to a sys_id before starting. Fails if the name matches zero or more than one test. Mutually exclusive with testSysId. | |
| osVersion | No | Operating system version to run UI-based tests on. Only with target="testsuite", action="run". | |
| testSysId | No | sys_id of the ATF test (sys_atf_test) to run. Mutually exclusive with testName. Use with target="test", action="run". | |
| progressId | No | Progress id returned by a previous run. REQUIRED when action="watch". | |
| runInCloud | No | Run UI-based steps on the ATF Cloud Runner instead of a manual/scheduled client runner. Only with action="run". | |
| browserName | No | Browser to run UI-based tests in: any, chrome, firefox, edge, ie, safari. Only with target="testsuite", action="run". | |
| pollTimeout | No | Milliseconds to poll for completion before giving up. CLI default 900000 (15 minutes). Not accepted when action="result". Values above ~15 minutes also require raising FLUENT_MCP_COMMAND_TIMEOUT_MS. | |
| testSuiteName | No | Name of the test suite to run. Mutually exclusive with testSuiteSysId. Use with target="testsuite", action="run". | |
| browserVersion | No | Browser version to run UI-based tests in. Only with target="testsuite", action="run". | |
| testSuiteSysId | No | sys_id of the test suite to run. Mutually exclusive with testSuiteName. Use with target="testsuite", action="run". | |
| captureNodeLogs | No | Capture node (browser) logs during the run. Only with target="test", action="run". | |
| isPerformanceRun | No | Run the suite as a Performance Test instead of a standard functional test. Only with target="testsuite", action="run". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=false), the description explicitly warns that action='run' executes real ATF steps and changes records, while 'watch' and 'result' only read. It also discloses authentication requirements, adding meaningful context not present in the annotations alone.
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 compact yet information-dense: it states the purpose, defines the three action modes, clarifies read vs. write behavior, and notes prerequisites in just a few sentences. There is no repetition of schema content 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 21-parameter tool with no output schema, the description covers the key decision axes: operation mode, target type, identifier strategy, side effects, and authentication. It delegates parameter-level details to the already-rich schema, which is reasonable, though a bit more on expected return shapes would make it fully self-contained.
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 coverage is 100% with strong per-parameter descriptions, so the baseline is 3. The tool description adds semantic value by tying action values to progressId/resultId requirements and by explaining how target maps to suite/test identifiers, which helps disambiguate conditional parameter usage.
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 opens with a specific verb and resource: 'Run or inspect ServiceNow ATF tests through the sn_cicd API.' It clearly enumerates the target/action combinations and distinguishes this tool from sibling app build/query/deploy tools by focusing on ATF test execution and inspection.
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 gives actionable when-to-use guidance: use 'run' to start, 'watch' for an existing progressId, and 'result' for a resultId. It also clarifies that no Fluent project is required. It stops short of explicit 'when not to use' or named alternatives, but the guidance is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clean_fluent_appADestructiveIdempotent
Delete the build output directory of a Fluent (ServiceNow SDK) application. This is a destructive operation that removes all compiled artifacts. Run build_fluent_app afterward to regenerate. Does NOT require authentication.
| Name | Required | Description | Default |
|---|---|---|---|
| debug | No | Print debug output | |
| source | No | Path to the directory that contains package.json configuration | |
| workingDirectory | No | Absolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveHint and idempotentHint, and the description reinforces this by calling out that it 'removes all compiled artifacts'. It adds value beyond annotations with the follow-up instruction and the authentication note, which are not present in the structured metadata.
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 long, front-loaded with the primary action, and each sentence adds necessary information: what it does, the consequence, and the follow-up action. There is no redundant or irrelevant text.
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 destructive operation with no output schema, the description covers the essential context: what gets deleted, that it is destructive, what to do afterward, and that authentication is not needed. This is fully sufficient for an agent to decide when and how to invoke it.
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 input schema already documents all three parameters. The tool description does not add additional parameter-specific meaning beyond what is in the schema, so it meets the baseline but does not exceed it.
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 identifies the action ('Delete') and the specific resource ('build output directory of a Fluent (ServiceNow SDK) application'), distinguishing it from sibling tools like build_fluent_app or pack_fluent_app. It is concise and unambiguous.
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 it by stating 'Run build_fluent_app afterward to regenerate', which ties it to the build workflow. It also notes that no authentication is required, providing useful context. However, it does not explicitly state alternatives or when not to use it, so it stops 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.
deploy_fluent_appADestructive
Deploy a built Fluent (ServiceNow SDK) application to a ServiceNow instance. Requires a prior build via build_fluent_app and valid instance authentication (auto-injected from session, or pass auth explicitly). Use skipFlowActivation to prevent auto-publishing of flows and subflows during deployment.
| Name | Required | Description | Default |
|---|---|---|---|
| auth | No | Credential alias to use for authentication with instance (auto-injected from session if not provided) | |
| debug | No | Print debug output | |
| workingDirectory | No | Absolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR. | |
| skipFlowActivation | No | Skip automatic flow activation during deployment. By default in SDK v4.5.0, flows and subflows are auto-published on install. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already note destructiveHint=true, idempotentHint=false, and openWorldHint=true. The description adds valuable context about authentication auto-injection, the need for a prior build, and the option to prevent flow auto-publishing, which goes beyond the structured fields without contradicting them.
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, directly gets to the point with the primary action first, and includes only essential information about prerequisites and a key parameter. No redundant or flowery language.
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 complexity, the description covers the necessary context: prerequisites, auth, and a critical deployment option. While it doesn't detail post-deployment outcomes or error handling, the rich schema and annotations fill those gaps adequately for a deployment 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 baseline is 3. The description does not add significant meaning beyond the schema; mentions of skipFlowActivation and auth mirror the schema descriptions. No extra param semantics are provided.
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 explicitly states the tool deploys a built Fluent application to a ServiceNow instance, using a specific verb and resource. It distinguishes itself from siblings by mentioning the prerequisite build via build_fluent_app, clarifying its role in the workflow.
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 clearly indicates when to use the tool: after a prior build via build_fluent_app, and specifies a key option (skipFlowActivation) that controls behavior. However, it does not explicitly contrast with alternative tools or provide 'when not to use' exclusions, 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.
download_fluent_appADestructive
Download application metadata from a ServiceNow instance into a local directory. Includes metadata deployed to the instance that may not exist locally. The directory argument specifies where to expand the application. Use incremental mode to download only changes since the last download. Requires instance authentication (auto-injected from session).
| Name | Required | Description | Default |
|---|---|---|---|
| auth | No | Credential alias to use for authentication with instance (auto-injected from session if not provided) | |
| debug | No | Print debug output | |
| source | No | Path to the directory that contains package.json configuration | |
| directory | Yes | Path to expand application | |
| incremental | No | Download application metadata from the instance in incremental mode | |
| workingDirectory | No | Absolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate destructiveHint: true and openWorldHint: true. The description adds context about expanding the application to a directory and including metadata not present locally, but it does not explicitly disclose potential overwriting of local files. It does mention authentication auto-injection, which is helpful.
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, uses three sentences, and is front-loaded with the main purpose. Every sentence adds value: what it downloads, extra inclusion note, directory purpose, incremental mode, and authentication requirement. No wasted words.
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 complexity (6 parameters, 100% schema coverage) and annotations, the description provides sufficient context for invocation. It covers the core purpose, directory semantics, incremental mode, and authentication. It does not elaborate on return values or failure modes, but no output schema exists and the tool seems straightforward for a download operation.
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 already covers all parameters with descriptions (100% coverage), so the baseline is 3. The description adds extra meaning to 'directory' by explaining it specifies where to expand the application, and to 'incremental' by explaining it downloads only changes since the last download, which goes 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 the tool downloads application metadata from a ServiceNow instance to a local directory, with a specific verb and resource. It does not explicitly distinguish itself from download_fluent_dependencies, but the phrase 'application metadata' implies a different scope from dependencies.
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 by describing its core purpose and mentions incremental mode, but it does not explicitly name alternatives or exclusion scenarios. There is no direct comparison with download_fluent_dependencies or other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_fluent_dependenciesA
Download configured dependencies from now.config.json and TypeScript type definitions for use in a Fluent application. Requires instance authentication (auto-injected from session, or pass auth explicitly). Supports pulling type definitions for tables and roles outside application scope via dependencies.global configuration. Run this after init_fluent_app to set up type definitions before development.
| Name | Required | Description | Default |
|---|---|---|---|
| auth | No | Credential alias to use for authentication with instance (auto-injected from session if not provided) | |
| debug | No | Print debug output | |
| workingDirectory | No | Absolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses authentication requirements (auto-injected from session or explicit), the scope of dependencies (tables/roles outside application scope via global config), and the purpose (set up type definitions). This adds behavioral context beyond the openWorldHint annotation, which itself signals external side effects. No contradiction found.
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?
Three sentences: main action, prerequisite/auth info, and usage context. No filler, front-loaded with the primary verb and object. Every sentence 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?
No output schema exists, but the description clarifies what gets downloaded (config and type definitions) and when to run it. For a parameter-light tool with a straightforward file-download purpose, this is sufficient for an agent to plan the task. Additional details like resulting file layout would be nice but not essential.
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?
Input schema coverage is 100% for all three parameters with descriptive text (auth, debug, workingDirectory). The description does not add parameter-level detail beyond the schema, but the schema already carries the burden. 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 'Download' and resource 'configured dependencies from now.config.json and TypeScript type definitions'. It clearly distinguishes from siblings like download_fluent_app (which downloads the app itself) and init_fluent_app (which initializes the project).
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?
Explicitly states when to run ('Run this after init_fluent_app to set up type definitions before development') and describes a specific use case for pulling outside-scope types via dependencies.global. It does not name alternatives, but this tool is unique among siblings, so exclusion guidance is less critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_fluent_apiARead-onlyIdempotent
Look up Fluent SDK documentation for any API or guide. Accepts a topic name (e.g., "BusinessRule", "Acl") or a keyword/tag (e.g., "flow", "atf"). Set list=true to enumerate available topics (optionally combined with topic to filter). Set peek=true for a brief summary. Set format="raw" for plain markdown. Read-only; no authentication or active Fluent project required. Use get-api-spec for metadata-type specifications and get-snippet for code examples.
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | List available topics. Combine with topic to filter the index (e.g., list=true, topic="flow"). | |
| peek | No | Show a brief summary of the topic instead of the full document. | |
| debug | No | Print debug output | |
| topic | No | Topic name or keyword to look up (e.g., "BusinessRule", "Acl", "flow", "atf"). Required unless list=true. | |
| format | No | Output format: "pretty" (terminal, default) or "raw" (plain markdown). | |
| source | No | Optional path to a Fluent project directory. Not required in SDK v4.6.0+ — explain self-resolves from its own bundle. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description reinforces this with 'Read-only; no authentication or active Fluent project required.' It adds extra behavioral context about the list and peek flags, explaining how they alter the output. This goes beyond the annotations by describing optional behaviors, though it does not detail any potential side effects (which are unlikely given the read-only nature).
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 long, front-loaded with the primary purpose, and then efficiently covers capabilities, flags, and alternatives. There is no fluff—every sentence provides useful guidance, making it easy to parse quickly.
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 documentation-lookup tool with no output schema, the description fully covers behavior, parameters, alternatives, and prerequisites. It explains how to enumerate topics, peek, and switch formats, and it mentions that no active Fluent project is needed—critical for understanding this standalone read-only tool. The sibling context further clarifies the niche, making the description complete.
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 already provides 100% coverage, with detailed descriptions for every parameter (e.g., topic: 'Required unless list=true,' list: 'Combine with topic to filter the index'). The description largely restates these details without adding substantial new meaning, so it does not elevate the baseline of 3. It briefly reinforces list/peek/format but does not compensate for any missing schema coverage.
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 opens with a specific verb+resource: 'Look up Fluent SDK documentation for any API or guide.' It provides concrete examples of topics and keywords, and explicitly distinguishes itself from siblings by directing users to 'get-api-spec for metadata-type specifications and get-snippet for code examples.' This makes the tool's purpose unmistakable and well-differentiated.
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 this tool (for documentation lookups) and names alternatives for other use cases: 'Use get-api-spec for metadata-type specifications and get-snippet for code examples.' It also clarifies prerequisites by noting 'no authentication or active Fluent project required,' helping users decide when to call this tool without hesitation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fluent_transformADestructive
Download and convert XML metadata records from a ServiceNow instance or local path into Fluent source code. Requires instance authentication when downloading from instance (auto-injected from session, or pass auth explicitly). Use from for local XML files, or omit to pull from instance. Use table (SDK v4.7.0+) to transform by table hierarchy, optionally with id to target a specific record and its relationships.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | sys_id of a specific record to transform (used with table, SDK v4.7.0+). | |
| auth | No | Credential alias to use for authentication with instance (auto-injected from session if not provided) | |
| from | No | Path to local XML file(s)/directory to transform | |
| debug | No | Print debug output | |
| table | No | Comma-separated table names to transform by table hierarchy (SDK v4.7.0+). Combine with id to transform a specific record and its relationships. | |
| directory | No | Path to "package.json", default to current working directory | |
| workingDirectory | No | Absolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include destructiveHint=true and openWorldHint=true, which lowers the bar. The description adds context about authentication and source selection but does not disclose specific side effects (e.g., overwriting existing files or modifying the Fluent project). It doesn't contradict the annotations, but it also doesn't significantly elaborate beyond their safety signals.
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 long, front-loaded with the primary purpose, then providing actionable usage modes. Every sentence earns its place without redundancy or fluff.
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 description covers the main usage modes, authentication requirements, and parameter relationships. Given the tool's complexity (two sources, table hierarchy, optional id), it is fairly complete. It could mention what the output looks like or that conversion writes to the Fluent project directory, but the schema already documents directory and workingDirectory parameters, and there is no output schema to explain.
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 coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema by explaining that 'from' is for local files and omitting it pulls from the instance, and that 'table' can be combined with 'id' to target a specific record and its relationships. This goes beyond the raw schema descriptions.
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?
Description uses a specific verb and resource: 'Download and convert XML metadata records from a ServiceNow instance or local path into Fluent source code.' It clearly distinguishes the tool from sibling tools like build_fluent_app or deploy_fluent_app by focusing on transformation of XML metadata into Fluent source.
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 from for local XML files, or omit to pull from instance' and 'Use table (SDK v4.7.0+) to transform by table hierarchy, optionally with id.' Also notes the authentication requirement. However, it doesn't explicitly mention alternatives or when not to use this tool in favor of a sibling tool, so it doesn't fully earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-api-specARead-onlyIdempotent
Fetch the Fluent API specification for a ServiceNow metadata type (e.g., "business-rule", "script-include"). Call without arguments to list all available metadata types. Use this to understand the Fluent API for a specific metadata type before writing code. For code examples, use get-snippet instead. For best practices, use get-instruct instead.
| Name | Required | Description | Default |
|---|---|---|---|
| metadataType | No | ServiceNow metadata type (e.g., business-rule, script-include). Omit to list all available types. |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes | The resource content (markdown). |
| snippetId | No | The returned snippet id (snippets only). |
| metadataType | No | The ServiceNow metadata type, when a specific resource was returned. |
| resourceType | Yes | Resource type: spec | snippet | instruct. |
| availableTypes | No | All available metadata types (listing mode). |
| additionalSnippetIds | No | Other available snippet ids (snippets only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is clear. The description adds the behavior that calling without arguments lists all types, which is useful context beyond the annotations. It does not describe the return format, but the output schema likely covers that.
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?
Three sentences, each earning its place: the first states the core action, the second explains the no-arg behavior, and the third provides usage context and alternatives. It is front-loaded and free of fluff.
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 simplicity (one optional parameter) and the presence of an output schema, the description is complete. It covers purpose, usage, and alternatives without needing to explain return values, which are handled by the output schema.
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 already documents the single optional parameter with 100% coverage. The description adds meaningful examples ('business-rule', 'script-include') and clarifies that omitting the parameter lists all types, enhancing understanding of the parameter's role.
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 action ('Fetch') and the resource ('Fluent API specification for a ServiceNow metadata type'), with concrete examples. It explicitly distinguishes itself from sibling tools by directing users to get-snippet for code examples and get-instruct for best practices.
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 tells the user when to use the tool ('before writing code') and provides explicit alternatives for related needs, naming get-snippet and get-instruct. It also explains how to list all metadata types by omitting the argument.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-instructARead-onlyIdempotent
Fetch instructions and best practices for creating a ServiceNow metadata type using the Fluent API (e.g., "business-rule", "script-include"). Provides guidance on patterns, conventions, and common pitfalls. For API specifications, use get-api-spec. For code examples, use get-snippet.
| Name | Required | Description | Default |
|---|---|---|---|
| metadataType | Yes | ServiceNow metadata type (e.g., business-rule, script-include) |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes | The resource content (markdown). |
| snippetId | No | The returned snippet id (snippets only). |
| metadataType | No | The ServiceNow metadata type, when a specific resource was returned. |
| resourceType | Yes | Resource type: spec | snippet | instruct. |
| availableTypes | No | All available metadata types (listing mode). |
| additionalSnippetIds | No | Other available snippet ids (snippets only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=true and idempotentHint=true, the description need not repeat safety traits. It adds valuable context about what guidance is provided (patterns, conventions, common pitfalls), going beyond a generic summary and giving the agent an accurate expectation of the tool's output.
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 core purpose, and every clause serves a purpose. It avoids redundancy and formatting issues, making it easy to parse quickly.
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 a single parameter, an output schema, and clear sibling differentiation, the description fully covers the essential context. The alternatives are explicitly named, and no additional return-value explanations are needed since an output schema exists.
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 covers 100% of the parameter with a description ('ServiceNow metadata type (e.g., business-rule, script-include)'). The description repeats the same example but adds no additional semantic detail beyond what the schema already provides, so baseline 3 is appropriate per the rubric.
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') and resource ('instructions and best practices for creating a ServiceNow metadata type using the Fluent API'), and clearly distinguishes from siblings by naming get-api-spec and get-snippet as alternatives. This makes the tool's unique purpose unambiguous.
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 this tool (for instructions/best practices) and provides direct alternatives: 'For API specifications, use get-api-spec. For code examples, use get-snippet.' This gives clear guidance on choosing between related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-snippetARead-onlyIdempotent
Fetch a Fluent code snippet for a ServiceNow metadata type (e.g., "business-rule", "script-include"). Returns the first available snippet when called without an id. Provides additional snippet ids if more are available. For API specifications, use get-api-spec instead. For best practices, use get-instruct instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Optional identifier for specific resource (only for snippets) | |
| metadataType | Yes | ServiceNow metadata type (e.g., business-rule, script-include) |
Output Schema
| Name | Required | Description |
|---|---|---|
| content | Yes | The resource content (markdown). |
| snippetId | No | The returned snippet id (snippets only). |
| metadataType | No | The ServiceNow metadata type, when a specific resource was returned. |
| resourceType | Yes | Resource type: spec | snippet | instruct. |
| availableTypes | No | All available metadata types (listing mode). |
| additionalSnippetIds | No | Other available snippet ids (snippets only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, establishing safety. The description adds useful behavioral details not in annotations: it returns the first available snippet without an id and provides additional snippet ids if more are available. This enriches understanding of the tool's output behavior.
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 five sentences, all information-dense and front-loaded with the core purpose. It wastes no words, and every sentence adds value (purpose, behavior, alternatives).
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 two-parameter tool with annotations and an output schema, the description covers purpose, usage, alternatives, and behavioral nuances. It provides all needed context for an agent to select and invoke the tool 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?
Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying the optionality of 'id' and its effect ('Returns the first available snippet when called without an id'), and by giving examples for metadataType. This supplements the schema descriptions with behavioral semantics.
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 fetches a Fluent code snippet for a ServiceNow metadata type, with concrete examples ('business-rule', 'script-include'). It also distinguishes itself from sibling tools by explicitly naming get-api-spec and get-instruct.
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 provides when to use the tool and when not to: 'For API specifications, use get-api-spec instead. For best practices, use get-instruct instead.' It also explains behavior when called without an id, which informs usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
init_fluent_appA
Initialize a new Fluent (ServiceNow SDK) application or convert an existing scoped application. Set intent to "creation" for a new app (requires appName, packageName, scopeName, template) or "conversion" to convert from an instance sys_id or local directory (requires from, and auth for instance conversion). The workingDirectory must be an empty directory. After init, use build_fluent_app to compile.
| Name | Required | Description | Default |
|---|---|---|---|
| auth | No | For conversion only: credential alias for authentication with instance (auto-injected from session if not provided) | |
| from | No | For conversion: sys_id of the sys_app record or local file path to convert from | |
| debug | No | Print debug output | |
| intent | No | Specify your intent: "conversion" to convert an existing scoped app to Fluent, or "creation" to create a new scoped app. If omitted it is inferred — "conversion" when from is set, "creation" when appName, packageName or scopeName is set. Supply it explicitly when none of those are present. | |
| appName | No | For creation: The name of the application. | |
| template | No | For creation only (required): Template to use for the project. Choices: "base", "javascript.basic", "javascript.react", "typescript.basic", "typescript.react", "typescript.vue". Not needed for conversion. | |
| scopeName | No | For creation: The scope name for the application in x_<scope_name> format. Must start with 'x_' prefix. No spaces allowed, no greater than 18 characters. | |
| packageName | No | For creation: The NPM package name for the application, usually it's the snake-case of appName in lowercase with company prefix. | |
| workingDirectory | Yes | The directory where the Fluent (ServiceNow SDK) application will be created. Must be an empty local directory with no package.json or now.config.json files. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide openWorldHint=true and idempotentHint=false, setting the safety profile. The description adds behavioral context beyond annotations: the requirement that workingDirectory must be empty and that conversion from an instance requires auth. It doesn't fully enumerate side effects (e.g., files created or global changes), but given the annotation coverage, this is sufficient and consistent.
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: the first states the core purpose, the second explains mode-specific parameters, and the third adds a prerequisite and next-step pointer. There is zero fluff—every sentence contributes essential information, and it is front-loaded with the main action.
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 complexity (9 parameters, no output schema), the description covers the essential decision points (creation vs conversion), prerequisite (empty directory), and follow-up action (build_fluent_app). It doesn't describe the return value or detailed post-conditions, but the context provided is sufficient for an agent to select and invoke the tool correctly in most scenarios.
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 coverage is 100%, so parameters are already documented individually. The description adds cross-parameter semantics by grouping parameters per intent and clarifying which are required in each mode (e.g., 'template' required for creation, 'from'+'auth' for instance conversion). This synthesis of parameter relationships goes beyond the schema descriptions.
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 dual purpose: 'Initialize a new Fluent (ServiceNow SDK) application or convert an existing scoped application.' It uses specific verbs and distinguishes itself from sibling tools by mentioning 'After init, use build_fluent_app to compile,' which differentiates init from the build step.
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 explicit mode-selection guidance: 'Set intent to "creation" for a new app (requires appName, packageName, scopeName, template) or "conversion" to convert from an instance sys_id or local directory (requires from, and auth for instance conversion).' It also states the workingDirectory must be empty, offering clear context for when the tool can run. It doesn't explicitly exclude alternatives, but the workflow hint with build_fluent_app adds practical usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pack_fluent_appAIdempotent
Package a built Fluent (ServiceNow SDK) application into a zip artifact for installation. Requires a prior build via build_fluent_app. The output zip can be used for manual installation on a ServiceNow instance. Does NOT require authentication.
| Name | Required | Description | Default |
|---|---|---|---|
| debug | No | Print debug output | |
| source | No | Path to the directory that contains package.json configuration | |
| workingDirectory | No | Absolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already marks the tool as idempotent. The description adds that it does not require authentication and that it requires a prior build, which is useful behavioral context. It does not detail side effects like file overwrite, but idempotency provides some assurance.
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?
Three concise sentences, front-loaded with the core purpose. No unnecessary words.
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 simplicity (3 optional params, no output schema, idempotent annotation), the description covers purpose, prerequisites, auth requirements, and output usage, making it adequately complete.
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?
All 3 parameters have descriptions in the schema, so the description is not required to add param details. It does not, but the schema is self-sufficient.
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?
Description clearly states the tool packages a built Fluent app into a zip artifact. It identifies the specific action (package), resource (built app), and output (zip for installation), distinguishing it from siblings like build or deploy.
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?
States the prerequisite of a prior build via build_fluent_app and indicates the zip is for manual installation, implying an alternative to automated deployment. However, it doesn't explicitly contrast with deploy_fluent_app or specify when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_fluent_recordsARead-only
Run a read-only query against a ServiceNow table via the Table REST API (SDK v4.8.0+). Returns matching records as a JSON envelope. Requires instance authentication (auto-injected from session, or pass auth explicitly). Provide table and an encoded query (e.g. "active=true^priority<=2").
| Name | Required | Description | Default |
|---|---|---|---|
| auth | No | Credential alias to use for authentication with instance (auto-injected from session if not provided) | |
| view | No | UI view to determine which fields to return (sysparm_view) | |
| debug | No | Print debug output | |
| limit | No | Maximum records per page (sysparm_limit). Default 100. | |
| query | Yes | Encoded query string (sysparm_query), e.g. "active=true^priority<=2" | |
| table | Yes | ServiceNow table name to query (e.g. incident, sys_user) | |
| fields | No | Comma-separated list of fields to return (sysparm_fields), e.g. "number,short_description,priority" | |
| offset | No | Starting offset (sysparm_offset). Default 0. | |
| select | No | Dot/bracket path to extract from the output (SDK v4.10.0+), e.g. "records[0].sys_id". Implies machine-readable output; an unresolved path yields null rather than an error. | |
| noCount | No | Skip total count calculation for better performance (sysparm_no_count) | |
| timeout | No | Per-request timeout in milliseconds for each page fetch. Default 30000. | |
| displayValue | No | Return display values (sysparm_display_value): "true", "false", or "all" for both. Default "false". | |
| queryCategory | No | Query category for extended queries (sysparm_query_category) | |
| queryNoDomain | No | Ignore domain separation when querying (sysparm_query_no_domain) | |
| workingDirectory | No | Absolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR. | |
| excludeReferenceLink | No | Exclude reference link metadata (sysparm_exclude_reference_link). Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses read-only nature (reinforcing readOnlyHint), mentions authentication requirements, and adds extra behavior like 'unresolved path yields null rather than an error' in the select parameter. No contradiction with annotations; adds context beyond them.
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?
Description is a single, well-structured paragraph that front-loads the core purpose, includes authentication note, and provides an example—every sentence adds value without 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 tool with 16 parameters and a fully described schema, the description covers the essential usage pattern and return format. It doesn't explain pagination, but that's not critical given schema coverage and the mention of JSON envelope. Adequate for the 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 has 100% description coverage (baseline 3). Description adds value by providing a concrete query example and noting SDK version constraints for the select parameter. This enriches parameter meaning 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?
Description clearly states the action (run a read-only query), the target (ServiceNow table via Table REST API), and the outcome (returns matching records as JSON envelope). It also distinguishes this tool as the query capability among siblings, which are all build/deploy/init 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?
Provides clear usage context: requires instance authentication (with auto-injection or explicit auth), and gives an example query. No explicit exclusion or alternative mention, but no alternative query tool exists among siblings, so this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sdk_infoARead-onlyIdempotent
Get Fluent (ServiceNow SDK) version or help information. Use -v to check the installed SDK version, or -h for general help or help on a specific command (e.g., flag: "-h", command: "build"). Does NOT require authentication or a Fluent project directory.
| Name | Required | Description | Default |
|---|---|---|---|
| flag | Yes | SDK flag to execute: -v/--version (SDK version), -h/--help (SDK help) | |
| command | No | Specific command to get help for (only used with -h/--help flag) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds operational behavior beyond that: it explains the two flags, the optional command parameter, and the lack of authentication/project requirements. This gives the agent a solid understanding of what to expect.
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 sentences, front-loaded with the primary purpose, then concise flag guidance and key constraints. No wasted words; every sentence 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 simple 2-parameter info tool with complete schema coverage and no output schema, the description covers all essential context: what it does, how to invoke it, valid flags, and prerequisites (none). It is fully sufficient for an agent to select and use the tool 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?
Schema coverage is 100%, so baseline is 3. The description adds value by giving examples (-v, -h, command: 'build') and clarifying that command is only used with -h, which goes beyond the schema's field descriptions.
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 retrieves Fluent SDK version or help information, using a specific verb ('Get') and resource ('Fluent (ServiceNow SDK)'). It distinguishes itself from siblings that perform build/deploy/init operations by focusing on informational use cases.
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 gives explicit guidance for flag usage (-v for version, -h for help) and notes it does not require authentication or a project directory, which is clear usage context. It does not explicitly name alternatives among siblings, but the unique purpose implicitly guides selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clearly distinct actions (build, deploy, init, query), but explain_fluent_api, get-api-spec, get-instruct, and get-snippet all serve documentation purposes and overlap to some degree. Descriptions help clarify the differences, so selection is mostly unambiguous.
Naming is mixed: most tools use snake_case verb_noun (build_fluent_app, deploy_fluent_app), but the documentation tools use hyphenated kebab-case (get-api-spec, get-instruct, get-snippet). Also, fluent_transform is not a standard verb_noun order. The pattern is readable but not uniform.
15 tools is appropriate for a ServiceNow Fluent SDK server, covering development, build, deploy, packaging, download, documentation, and querying. Each tool addresses a distinct part of the workflow without feeling redundant or excessive.
The tool set covers the full lifecycle of Fluent application development: init, dependency download, build, clean, pack, deploy, download, and transformation. It also includes query capabilities, SDK info, auth checks, and comprehensive documentation lookup, leaving no obvious gaps for its stated purpose.
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
Plan Salesforce deploys, open pull requests and trigger pipelines from your AI client.
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
Versioned documentation registry and semantic search for AI tools and coding assistants.
Debug, build, and manage Power Automate cloud flows with AI agents
Related MCP Servers
- AlicenseBqualityNot gradedmaintenanceEnables Claude to interact with ServiceNow instances through the ServiceNow API. Supports comprehensive ServiceNow operations including incident management, service catalog management, change requests, user management, and workflow automation through natural language.82
- AlicenseAqualityDmaintenanceEnables natural language interaction with ServiceNow instances for managing incidents, changes, CMDB, service catalog, users, groups, and knowledge base via MCP.4130MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants and development tools to interact with ServiceNow instances through a standardized interface, supporting comprehensive API coverage for incident, change, CMDB, and more.MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude to interact with ServiceNow instances through the ServiceNow API, supporting record management, service catalog operations, change management, and more via natural language.MIT
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/modesty/fluent-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server