Skip to main content
Glama
modesty

Fluent MCP Server

by modesty

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_info plus ServiceNow SDK command tools for init, build, install, dependencies, transform, download, clean, pack, explain, query, and cicd

  • Rich Resources - API specifications, instructions, and code snippets for 67 ServiceNow metadata types

  • API Documentation Lookup - explain_fluent_api returns SDK docs for any Fluent API or guide — no project required

  • Lazy Auto-Authentication - Detects and caches an auth profile only when an auth-requiring command or check_auth_status needs it

  • Explicit Project Context - Resolves each project command from its workingDirectory argument, the initialized session, or FLUENT_MCP_WORKING_DIR, then fails with actionable guidance instead of guessing

  • MCPB Bundle - Builds a self-contained .mcpb distribution with the server, resources, and production dependencies

  • Client-Friendly Schemas - Optional inputs advertise their canonical value types while the enforced schema accepts null as 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 an outputSchema and return structuredContent for programmatic consumers

  • Prompts - 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_app for subsequent project commands

  • Working Directory Resolution - workingDirectory tool 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 pass workingDirectory or configure FLUENT_MCP_WORKING_DIR when 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 _meta envelope, server/discover) and a 2025-11-25 initialize are 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) advertise ttlMs: 3600000 / cacheScope: 'public' — everything they return is static for the process lifetime.

  • The server advertises instructions during initialization; tools/list is 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 null as an omitted value; workingDirectory also 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/setLevel and notifications/message are 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 pass workingDirectory on project-aware tool calls

  • SN_INSTANCE_URL — optional instance URL for lazy authentication validation

  • SN_AUTH_TYPE — authentication type (basic or oauth, default oauth)

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 requests

Available Tools

SDK Command Tools (13)

Tool

Description

Key Parameters

sdk_info

Get SDK version or help

flag (-v/-h), command (optional for -h)

explain_fluent_api

Look up Fluent SDK documentation for any API or guide. No Fluent project required.

topic (optional API/guide name or tag keyword — required unless list=true), list (boolean — list topics), peek (boolean — brief summary), format (pretty|raw), source (optional project path override), debug (optional)

init_fluent_app

Initialize or convert a ServiceNow app. Non-interactive: missing intent-specific arguments fail with an error naming them.

intent, from (conversion), appName/packageName/scopeName/template (creation), auth, workingDirectory (required), debug

build_fluent_app

Build the application

workingDirectory, debug (optional)

deploy_fluent_app

Deploy to a ServiceNow instance. SDK flow activation can be skipped.

workingDirectory, auth (auto-injected), skipFlowActivation, debug

fluent_transform

Convert XML or instance metadata to Fluent TypeScript. Local paths do not require auth; instance transforms do.

workingDirectory, from, directory, auth (auto-injected), table, id, debug

download_fluent_dependencies

Download dependencies and type definitions

workingDirectory, auth (auto-injected), debug

download_fluent_app

Download metadata from an instance

workingDirectory, directory (required), source, auth (auto-injected), incremental, debug

clean_fluent_app

Clean output directory

workingDirectory, source (optional), debug

pack_fluent_app

Create an installable artifact

workingDirectory, source (optional), debug

query_fluent_records

Read-only Table REST query against an instance; returns a JSON envelope

workingDirectory, table (required), query (required encoded query), fields, limit, offset, displayValue, view, queryCategory, excludeReferenceLink, noCount, queryNoDomain, timeout, select, auth (auto-injected), debug

cicd_fluent_app

Install, publish, or rollback an app via the ServiceNow CI/CD API (sn_cicd). Changes instance state.

workingDirectory, action (required: install|publish|rollback), scope|appSysId, appVersion (required for rollback, and for install/publish outside a Fluent project), baseAppVersion, autoUpgradeBaseApp, devNotes, wait, pollTimeout, auth (auto-injected), output (json|raw), select, debug

cicd_fluent_test

Run, watch, or fetch results for ATF test suites and tests via the CI/CD API. run executes real ATF steps on the instance. No Fluent project required (and none accepted).

target (required: testsuite|test), action (required: run|watch|result), testSuiteSysId|testSuiteName, testSysId|testName, progressId (watch), resultId (result), browserName, browserVersion, osName, osVersion, runInCloud, isPerformanceRun, captureNodeLogs, wait, pollTimeout, auth (auto-injected), output (json|raw), select, debug

Resource and Authentication Tools (4)

Tool

Description

Key Parameters

get-api-spec

Get an API specification or list all available metadata types

metadataType (optional; omit to list all)

get-snippet

Get a Fluent code snippet; without id, returns the first available snippet and any additional snippet IDs

metadataType (required), id (optional)

get-instruct

Get authoring guidance, conventions, and common pitfalls for a metadata type

metadataType (required)

check_auth_status

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. Use init_fluent_app to establish project context, pass workingDirectory per call, or set FLUENT_MCP_WORKING_DIR. Any optional argument sent as null is treated as omitted; workingDirectory also 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

explain_fluent_api({ topic: 'BusinessRule' })

Full API reference for BusinessRule

explain_fluent_api({ topic: 'BusinessRule', peek: true })

Brief summary of BusinessRule

explain_fluent_api({ topic: 'BusinessRule', format: 'raw' })

Full API reference as plain markdown (good for piping into other tools)

explain_fluent_api({ list: true })

Full topic index (all APIs and guides)

explain_fluent_api({ list: true, topic: 'atf' })

Topic index filtered to entries matching atf

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

sn-spec://{type}

sn-spec://business-rule

API documentation and parameters

Instructions

sn-instruct://{type}

sn-instruct://script-include

Best practices and guidance

Code Snippets

sn-snippet://{type}/{id}

sn-snippet://acl/0001

Practical code examples

Prompts

sn-prompt://{id}

sn-prompt://coding_in_fluent

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 — the StateModel API defines a table's state machine (states, transitions, and the conditions that gate them) in a single call, writing sttrm_model/sttrm_state/sttrm_state_transition/sttrm_transition_condition records, or the chg_model/prb_model/prb_task_model subclass auto-selected from table. It can also edit out-of-box models in place by referencing their real sys_ids.

  • New metadata type: atf-list — the atf.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 the sn_cicd API — changes instance state) and cicd_fluent_test (run, watch, or fetch results for ATF suites and tests), wrapping the new now-sdk cicd command. query_fluent_records gains select for the new --select path 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, RestApi routes, SPWidget, SPMenu, and others) — not every API with a server-side script field: StateModel transition conditions are server-side scripts whose type accepts no $meta at all (see the source-of-truth note below).

  • Table actions object formactions now accepts the exported TableActionAccess shape { read?, update?, delete?, create? }, where each action is three-state. The array form is deprecated: it is a complete enumeration, so actions: ['read'] also writes the other three as false. The SDK also no longer derives defaults for actions, allowClientScripts, allowNewFields, allowUiActions, allowWebServiceAccess, or maxLength.

  • Reference column mtom — creates a many-to-many relationship. Note the semantic split: referenceKey no longer means many-to-many, and now stores a field from the referenced table in place of sys_id.

  • UI Action iconsUiAction's form and list objects both accept iconName and showIconOnly.

  • Form $metaForm now honors $meta.installMethod to route its output folder (previously accepted but inert).

  • Playbook timerSchedulestartWithDelay can evaluate its delay against a cmn_schedule record instead of elapsed clock time, on all three variants.

  • Catalog dynamic default values — a variable's dependentQuestion widened to accept a ReferenceVariable/RequestedForVariable in addition to a name string; CatalogUiPolicy actions accept variable, and CatalogClientScript accepts order.

  • $override on sys_* fields$override can set sys_domain and most other sys_* columns on any table; sys_id, sys_scope, sys_update_name, and sys_domainpath remain framework-managed and error if overridden.

  • Service Portal — widget/page/instance CSS fields accept SCSS or CSS, widgetParameters now correctly serializes a plain object, SPInstance's placeholder properties are functional rather than ignored, and urlSuffix accepts hyphens. The service-portal spec also gained the previously undocumented ServicePortal() (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 the add_message inference change is an internal transform fix with no authoring-surface change. The overview guide also lists StateModel, 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 — the atf.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 standard atf.form.* / atf.catalog.* steps cannot reach.

  • Multi-language choice labels — a choice field's choices value may be an array of ChoiceConfig objects, each with a language (BCP 47) key, producing one translated sys_choice record per language.

  • protectionPolicy on AI Agent & AI Agentic WorkflowAiAgent and AiAgenticWorkflow accept protectionPolicy: '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 index entry's element may 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.field is documented as a schema column name (not loosened to "any string"), and the four named NASK model strings appear nowhere in the package (model is 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 — the PlaybookDefinition API (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 — the RestMessage API (sys_rest_message) for outbound HTTP integrations with shared auth/headers and callable functions.

  • New metadata types: alias and alias-template — the Alias (sys_alias) and AliasTemplate (sys_alias_templates) APIs for Connection & Credential aliases and reusable connection-setup templates.

  • New metadata type: retry-policy — the RetryPolicy API (sys_retry_policy) controlling transient-failure handling for connections (fixed-interval, exponential-backoff, or Retry-After).

  • New metadata type: data-lookup — the DataLookup API (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$override on DataPolicy/UserPreference; $meta.installMethod on Record/Acl/Alias/UserPreference; ACL field accepts known field names, system columns, or '*'; Table accessibleFrom now defaults to 'public'.

  • New CLI toolquery_fluent_records wraps now-sdk query for 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 — the DataPolicy API (sys_data_policy2) for server-side mandatory/read-only field enforcement that cannot be bypassed via API, import, or web service.

  • Flow error handling & parallelismwfa.flowLogic.tryCatch, wfa.flowLogic.doInParallel, and wfa.flowLogic.appendToFlowVariables (append to Array.Object flow variables).

  • Flow stages — declare stages with FlowStage({ label, value, … }) and activate them in the body via wfa.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_), or u_ in global and Store-app contexts.

  • AI Agent — new agentDescriptor; dataAccess accepts roleMap (role names) or roleList (role sys_ids).

  • NASKsecurityControls accepts roleMap (role names) alongside roleRestrictions (role sys_ids).

  • Universal field override ($override) — escape hatch on Fluent constructors to set unmodeled columns by DB column name.

  • Protection policyprotectionPolicy documented on sys_policy-backed APIs (Action, Subflow, business rules, scripted REST, etc.).

  • CLIfluent_transform gains --table/--id (transform by table hierarchy); init gains the typescript.vue template; OAuth client_credentials for CI/CD via SN_SDK_* env vars (see Configuration).

  • MCP — read tools now return structuredContent (with declared outputSchema); 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.json

  • VSCode 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

FLUENT_MCP_WORKING_DIR

Absolute Fluent project path used after the per-call and initialized-session sources; when it is also absent, project commands fail with actionable guidance

-

SN_INSTANCE_URL

ServiceNow instance URL for auto-auth validation

-

SN_AUTH_TYPE

Authentication method: basic or oauth

oauth

SN_USER_NAME

Username for basic auth (informational)

-

SN_PASSWORD

Password for basic auth (informational)

-

FLUENT_MCP_LOG_LEVEL

Minimum stderr log severity (debug, info, notice, warning, error, etc.)

info

Note: On the first auth-requiring command (or check_auth_status), the server detects an existing auth profile matching SN_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 with SN_USER_NAME/SN_USERNAME + SN_PASSWORD); otherwise the server emits a single notice with the manual auth --add command 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

SN_SDK_NODE_ENV

yes

SN_SDK_CI_INSTALL

SN_SDK_AUTH_TYPE

for oauth

basic (default) or oauth

SN_SDK_INSTANCE_URL

yes

Full instance URL

SN_SDK_USER / SN_SDK_USER_PWD

basic

Username / password

SN_SDK_OAUTH_CLIENT_ID / SN_SDK_OAUTH_CLIENT_SECRET

oauth

OAuth client_credentials app credentials

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

  1. Initialize Project

    Create a new Fluent app in ~/projects/asset-tracker for IT asset management
  2. Develop with Resources

    Show me the business-rule API specification and provide an example snippet
  3. Build and Deploy

    Build the app with debug output, then deploy it

Note: Authentication is validated lazily using SN_INSTANCE_URL and SN_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:dev

What 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:

  1. Launch Inspector and wait for server connection

  2. Navigate to Resources tab

  3. Find and click sn-spec://business-rule in the resource list

  4. Review the API specification showing all available methods and parameters

  5. Go back and search for sn-snippet://business-rule/0001

  6. Click the snippet to view a complete TypeScript example

  7. 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:

  1. Navigate to Tools tab

  2. Select sdk_info from the tool list

  3. Test Version:

    • Set flag parameter to -v

    • Click Execute

    • Verify response shows the SDK version (e.g., 4.10.1)

  4. Test Help:

    • Set flag parameter to -h

    • Set command parameter to build

    • Click Execute

    • Verify response shows build command documentation with options

  5. Monitor the server process stderr/terminal output for command execution logs (set FLUENT_MCP_LOG_LEVEL=debug before 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 types

  • No unexpected protocol errors; command logs are emitted on stderr rather than through MCP notifications/message

  • Commands execute within 2-3 seconds

License

MIT

Available Tools

17 tools
build_fluent_appA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
debugNoPrint debug output
workingDirectoryNoAbsolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_statusA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostNoThe ServiceNow instance host.
aliasNoThe matched auth profile alias.
statusYesAuth status: 'authenticated' | 'not_authenticated' | 'validation_error' | 'skipped' | 'unknown'.
messageYesHuman-readable status message.
authTypeNoAuth type: 'oauth' | 'basic'.
isDefaultNoWhether this is the default auth profile.
timestampNoISO timestamp of the validation.
actionRequiredNoA shell command to run if manual auth setup is needed.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_appA
Destructive

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
authNoCredential alias to use for authentication with instance (auto-injected from session if not provided)
waitNoWait for the operation to complete, polling progress (CLI default true). Set false to return immediately after dispatch with the progress id.
debugNoPrint debug output
scopeNoScope name of the application (e.g. x_myco_app). Mutually exclusive with appSysId; prefer appSysId when known.
actionYesApp-repo operation to run: "install", "publish", or "rollback".
outputNoOutput format: "json" or "raw". Defaults to "json" (machine-readable envelope).
selectNoDot/bracket path to extract from the output (e.g. "result.links.progress.id" or "result.records[0].sys_id"). Implies machine-readable output.
appSysIdNosys_id of the application (sys_app). Mutually exclusive with scope. Defaults to the scopeId in now.config.json when run inside a Fluent project.
devNotesNoDeveloper notes to record for this published version. Only valid with action="publish".
appVersionNoApplication 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.
pollTimeoutNoMilliseconds to poll for completion before giving up. CLI default 900000 (15 minutes). Values above ~15 minutes also require raising FLUENT_MCP_COMMAND_TIMEOUT_MS.
baseAppVersionNoVersion of the base application to install alongside this application. Only valid with action="install".
workingDirectoryNoAbsolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR.
autoUpgradeBaseAppNoAutomatically upgrade the base application if required. Only valid with action="install".

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_testA
Destructive

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
authNoCredential alias to use for authentication with instance (auto-injected from session if not provided)
waitNoWait 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".
debugNoPrint debug output
actionYesOperation: "run" to start, "watch" to follow a progressId from a previous run, or "result" to fetch a resultId.
osNameNoOperating system to run UI-based tests on. Only with target="testsuite", action="run".
outputNoOutput format: "json" or "raw". Defaults to "json" (machine-readable envelope).
selectNoDot/bracket path to extract from the output (e.g. "result.interpretedResult.summary.testStatus" or "result.rollup_results[0].status"). Implies machine-readable output.
targetYesWhat to act on: "testsuite" (an ATF test suite) or "test" (a single ATF test).
resultIdNoResult 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.
testNameNoName 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.
osVersionNoOperating system version to run UI-based tests on. Only with target="testsuite", action="run".
testSysIdNosys_id of the ATF test (sys_atf_test) to run. Mutually exclusive with testName. Use with target="test", action="run".
progressIdNoProgress id returned by a previous run. REQUIRED when action="watch".
runInCloudNoRun UI-based steps on the ATF Cloud Runner instead of a manual/scheduled client runner. Only with action="run".
browserNameNoBrowser to run UI-based tests in: any, chrome, firefox, edge, ie, safari. Only with target="testsuite", action="run".
pollTimeoutNoMilliseconds 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.
testSuiteNameNoName of the test suite to run. Mutually exclusive with testSuiteSysId. Use with target="testsuite", action="run".
browserVersionNoBrowser version to run UI-based tests in. Only with target="testsuite", action="run".
testSuiteSysIdNosys_id of the test suite to run. Mutually exclusive with testSuiteName. Use with target="testsuite", action="run".
captureNodeLogsNoCapture node (browser) logs during the run. Only with target="test", action="run".
isPerformanceRunNoRun the suite as a Performance Test instead of a standard functional test. Only with target="testsuite", action="run".

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_appA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
debugNoPrint debug output
sourceNoPath to the directory that contains package.json configuration
workingDirectoryNoAbsolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_appA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
authNoCredential alias to use for authentication with instance (auto-injected from session if not provided)
debugNoPrint debug output
workingDirectoryNoAbsolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR.
skipFlowActivationNoSkip automatic flow activation during deployment. By default in SDK v4.5.0, flows and subflows are auto-published on install.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_appA
Destructive

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
authNoCredential alias to use for authentication with instance (auto-injected from session if not provided)
debugNoPrint debug output
sourceNoPath to the directory that contains package.json configuration
directoryYesPath to expand application
incrementalNoDownload application metadata from the instance in incremental mode
workingDirectoryNoAbsolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

The description implies when to use the tool 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
authNoCredential alias to use for authentication with instance (auto-injected from session if not provided)
debugNoPrint debug output
workingDirectoryNoAbsolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_apiA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
listNoList available topics. Combine with topic to filter the index (e.g., list=true, topic="flow").
peekNoShow a brief summary of the topic instead of the full document.
debugNoPrint debug output
topicNoTopic name or keyword to look up (e.g., "BusinessRule", "Acl", "flow", "atf"). Required unless list=true.
formatNoOutput format: "pretty" (terminal, default) or "raw" (plain markdown).
sourceNoOptional path to a Fluent project directory. Not required in SDK v4.6.0+ — explain self-resolves from its own bundle.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_transformA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNosys_id of a specific record to transform (used with table, SDK v4.7.0+).
authNoCredential alias to use for authentication with instance (auto-injected from session if not provided)
fromNoPath to local XML file(s)/directory to transform
debugNoPrint debug output
tableNoComma-separated table names to transform by table hierarchy (SDK v4.7.0+). Combine with id to transform a specific record and its relationships.
directoryNoPath to "package.json", default to current working directory
workingDirectoryNoAbsolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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-specA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
metadataTypeNoServiceNow metadata type (e.g., business-rule, script-include). Omit to list all available types.

Output Schema

ParametersJSON Schema
NameRequiredDescription
contentYesThe resource content (markdown).
snippetIdNoThe returned snippet id (snippets only).
metadataTypeNoThe ServiceNow metadata type, when a specific resource was returned.
resourceTypeYesResource type: spec | snippet | instruct.
availableTypesNoAll available metadata types (listing mode).
additionalSnippetIdsNoOther available snippet ids (snippets only).

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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-instructA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
metadataTypeYesServiceNow metadata type (e.g., business-rule, script-include)

Output Schema

ParametersJSON Schema
NameRequiredDescription
contentYesThe resource content (markdown).
snippetIdNoThe returned snippet id (snippets only).
metadataTypeNoThe ServiceNow metadata type, when a specific resource was returned.
resourceTypeYesResource type: spec | snippet | instruct.
availableTypesNoAll available metadata types (listing mode).
additionalSnippetIdsNoOther available snippet ids (snippets only).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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

The description uses a specific verb ('Fetch') 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.

Usage Guidelines5/5

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-snippetA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoOptional identifier for specific resource (only for snippets)
metadataTypeYesServiceNow metadata type (e.g., business-rule, script-include)

Output Schema

ParametersJSON Schema
NameRequiredDescription
contentYesThe resource content (markdown).
snippetIdNoThe returned snippet id (snippets only).
metadataTypeNoThe ServiceNow metadata type, when a specific resource was returned.
resourceTypeYesResource type: spec | snippet | instruct.
availableTypesNoAll available metadata types (listing mode).
additionalSnippetIdsNoOther available snippet ids (snippets only).

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
authNoFor conversion only: credential alias for authentication with instance (auto-injected from session if not provided)
fromNoFor conversion: sys_id of the sys_app record or local file path to convert from
debugNoPrint debug output
intentNoSpecify 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.
appNameNoFor creation: The name of the application.
templateNoFor 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.
scopeNameNoFor 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.
packageNameNoFor creation: The NPM package name for the application, usually it's the snake-case of appName in lowercase with company prefix.
workingDirectoryYesThe 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

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the tool's 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.

Usage Guidelines4/5

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_appA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
debugNoPrint debug output
sourceNoPath to the directory that contains package.json configuration
workingDirectoryNoAbsolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_recordsA
Read-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").

ParametersJSON Schema
NameRequiredDescriptionDefault
authNoCredential alias to use for authentication with instance (auto-injected from session if not provided)
viewNoUI view to determine which fields to return (sysparm_view)
debugNoPrint debug output
limitNoMaximum records per page (sysparm_limit). Default 100.
queryYesEncoded query string (sysparm_query), e.g. "active=true^priority<=2"
tableYesServiceNow table name to query (e.g. incident, sys_user)
fieldsNoComma-separated list of fields to return (sysparm_fields), e.g. "number,short_description,priority"
offsetNoStarting offset (sysparm_offset). Default 0.
selectNoDot/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.
noCountNoSkip total count calculation for better performance (sysparm_no_count)
timeoutNoPer-request timeout in milliseconds for each page fetch. Default 30000.
displayValueNoReturn display values (sysparm_display_value): "true", "false", or "all" for both. Default "false".
queryCategoryNoQuery category for extended queries (sysparm_query_category)
queryNoDomainNoIgnore domain separation when querying (sysparm_query_no_domain)
workingDirectoryNoAbsolute path to the Fluent project for this call. Overrides the initialized session and FLUENT_MCP_WORKING_DIR.
excludeReferenceLinkNoExclude reference link metadata (sysparm_exclude_reference_link). Default true.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_infoA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
flagYesSDK flag to execute: -v/--version (SDK version), -h/--help (SDK help)
commandNoSpecific command to get help for (only used with -h/--help flag)

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A4.2/5.0
Disambiguation4/5

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 Consistency3/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityActive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    Not graded
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/modesty/fluent-mcp'

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