next-ui-mcp
next-ui-mcp helps AI agents build, validate, and safely reuse ServiceNow Next Experience UI Framework components instead of guessing.
Explain and enforce
now-ui.jsonmanifest rules, including keeping declared properties/events in sync with component source.Return framework guidance and workflow contracts, covering
createCustomElement, project structure, Storybook local development/migration, and instance-backed dependency patterns.Generate a minimal component scaffold with JSX, a matching manifest stub, a story,
.storybook/main.mjs, runtime shims, and a separate.scssstylesheet.Discover platform (HDS) components and icons on your own instance so agents pick real tags, props, events, and icon names.
Recommend components for a use case and evaluate whether to use, wrap/compose, or replace an HDS component with custom UI.
Resolve a component tag to its exact npm package (e.g.
now-card→@servicenow/now-card) without guessing.Inspect a component's real API — props, dispatched events, and slots — from live instance metadata rather than stale package docs.
Analyze
package.jsonfor platform packages that should beoptionalDependencieswith version"instance".Validate a
now-ui.jsonagainst the ServiceNow schema and checktileIconpaths on UI Builder components.Support an
sncprofile fallback (macOS Keychain) so credentials need not live in MCP client config.
Provides guidance and scaffolding for using next-ui-storybook as the local preview and development workflow for ServiceNow Next Experience UI Framework components, including Storybook setup and adoption guidance via get_framework_guidance (topic "storybook-local-development"), generated .storybook/main.mjs configuration, and component story stubs returned by get_component_scaffold.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@next-ui-mcpvalidate my now-ui.json and keep it in sync with the component code"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
next-ui-mcp
An MCP server for helping AI coding agents build, evaluate, and validate ServiceNow Next Experience UI Framework components and projects more effectively.
Unofficial, community-maintained project. Not affiliated with, endorsed by, or supported by ServiceNow.
Why
Next Experience UI Framework components have two parts that must stay in sync: the component source (src/<name>/index.js) and the separate manifest (now-ui.json) that declares the component's public properties and dispatched events. AI agents (and humans) routinely edit one without updating the other. That is one important problem this server solves.
But the broader goal is to make AI-assisted development in this framework safer and more reliable across the full workflow:
understand the framework contract and
now-ui.jsonrulesgenerate a correct component scaffold from the start
prefer real platform components before inventing custom UI
choose between direct use, composition, and custom implementation with evidence
validate manifests and dependency setup
inspect live instance API metadata instead of guessing from stale package docs
use
next-ui-storybookas the default local preview workflow, alongside runtime shims and instance-backedoptionalDependenciesreduce the common failure modes that cause AI-generated Next Experience UI Framework code to be structurally wrong or platform-incompatible
This MCP server is meant to act as a practical operating system for working with Next Experience UI Framework projects in AI-assisted development, with manifest sync as one critical piece of that larger workflow.
Related MCP server: ServiceNow MCP Server
Available MCP tools
Guidance and scaffolding
explain_now_ui_manifest— explains whatnow-ui.jsonis and how to keep it in sync with the component code.get_framework_guidance— returns bundled guidance for framework patterns, sample project structure,createCustomElement(...), manifest expectations, Storybook local development and migration, and instance-backed dependency usage. Use topicstorybook-local-developmentfor setup and adoption guidance.get_component_scaffold— returns the minimal stub files for a new component, includingcreateCustomElement(...),.storybook/main.mjs, a component story, and a matchingnow-ui.jsonentry.
Platform component selection
evaluate_platform_component_fit— decides whether an instance-backed HDS component should be used directly, wrapped/composed, or replaced with a custom implementation before scaffolding from scratch.search_instance_components— discovers which platform components exist on the configured instance.search_instance_icons— searches the icon library on the configured instance (the values accepted byiconproperties such asnow-button's) so agents pick real icon names instead of guessing. Names are read from the instance'snow-iconpackage; append-outlineor-fillto use one.recommend_instance_components— finds likely platform-component matches from a use case or desired properties/events.resolve_component_package— resolves a platform component tag to the exact npm package it belongs to without guessing.
Instance API and validation
get_component_api— reads the real API of a platform component from the user's own ServiceNow instance, so an agent works from actual props, events, and slots rather than stale or incomplete public package metadata. Slot names come fromsys_ux_macroponent.root_component_definition.availableSlots, with markup examples showing theslotattribute.analyze_project_dependencies— checks whether a project declares platform packages asoptionalDependencieswith version"instance"when needed.validate_now_ui_manifest— validates anow-ui.jsonfile using the ServiceNow schema validation package and checks that every UI Builder component has a non-emptytileIconpath.
Using an snc profile instead of environment credentials (macOS)
If NEXT_UI_INSTANCE_URL is not set, the server falls back to an snc configure profile profile. Set NEXT_UI_SNC_PROFILE to pick one (default: default). The host and username are read from ~/.snc/config.json and the password from the macOS Keychain (service snc, account = profile name), so no secret has to be stored in your MCP client config. Only basic login-method profiles are supported.
"env": { "NEXT_UI_SNC_PROFILE": "default" }Install
Add to your MCP client config (for example, .mcp.json at your project root for Claude Code or .cursor/mcp.json for Cursor):
{
"mcpServers": {
"next-ui": {
"command": "npx",
"args": ["-y", "next-ui-mcp@latest"],
"env": {
"NEXT_UI_INSTANCE_URL": "https://your-instance.service-now.com",
"NEXT_UI_INSTANCE_USER": "your-user",
"NEXT_UI_INSTANCE_PASSWORD": "your-password"
}
}
}
}Ensure the file is added to your .gitignore since it contains credentials.
Instance requests time out after 20 seconds by default. Set NEXT_UI_INSTANCE_TIMEOUT_MS in the same env block to raise or lower that if your instance is slow or you want to fail faster.
Configure project instructions
Connecting the server makes its tools available, but project instructions tell the agent when to use them. Add these files to the consuming UI project's root, and commit them so the team shares the same policy.
Keep the shared instructions in AGENTS.md:
# ServiceNow UI Development
## HDS Policy
Prefer HDS components over custom equivalents.
Prefer composition or thin wrappers when an HDS component is a partial fit.
Custom UI requires a concrete functional or design gap.
## Required Workflow
For new UI and substantial changes to existing UI:
- Before implementation, use next-ui-mcp get_framework_guidance
with topic "agent-workflow-contract" and follow its guidance.
- Discover HDS candidates using recommend_instance_components
or search_instance_components.
- Evaluate plausible candidates with evaluate_platform_component_fit.
- Inspect selected components with get_component_api before using them.
- Follow MCP guidance for imports and instance-backed dependencies.
- Briefly explain any decision to create a custom equivalent.
- If MCP tools are unavailable or fail, report the limitation.
Do not interpret failed discovery as proof that no HDS component exists.Adjust the HDS policy to match the project:
Strict: Use suitable HDS components; custom equivalents require a concrete capability gap.
Preferred: Start with HDS; allow custom UI for documented functional or design requirements. This is the template's default.
Selective: Specify which controls or areas must use HDS and where custom UI is acceptable. Keep that scope consistent with the required workflow.
For Copilot in VS Code, enable chat.useAgentsMdFile for the Local agent. Start a new chat and confirm AGENTS.md is discovered in Chat: Open Customizations and included in the response's References or instruction diagnostics. Merge this guidance with any existing project instructions instead of adding conflicting policies.
For Claude Code, add a root CLAUDE.md containing this import as a plain Markdown line, not inside a code fence:
@AGENTS.mdClaude Code expands the import automatically, keeping AGENTS.md as the single source of shared instructions. Recent versions can also load AGENTS.md directly, but the import supports older versions and sessions configured to load only CLAUDE.md. If CLAUDE.md already exists, add the import and preserve its existing instructions. Start a new session and use /context to confirm the project instructions loaded.
Configure and enable the MCP server separately in each client; instruction files do not connect it. Choosing a Claude model inside Copilot still uses Copilot's instruction loading, not Claude Code's.
To check the workflow, ask the agent to add a card containing a button. Verify that it calls component-discovery and API-inspection tools before implementing the UI. Instructions guide behavior but do not guarantee compliance.
Development
npm install
npm run build # compile TypeScript -> dist/
npm run dev # run directly from src/ via tsx, for local iterationContributing
PRs adding improvements to the guidance and instance-backed component discovery flow, are the main way this stays useful and current as the framework evolves. This project is meant to be centrally maintained in one place rather than copied into every project.
License
MIT
Available Tools
11 toolsanalyze_project_dependenciesA
Analyzes a Next Experience UI component project package.json for platform components that should be declared as optionalDependencies with the version set to "instance". Use this when adding or changing instance-backed platform dependencies, including preparation for eventual deployment with snc ui-component deploy --fa, regardless of the local preview workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| packageJsonPath | Yes | Path to the target project package.json, absolute or relative to the current working directory. | |
| plannedComponentTags | No | Optional list of planned platform component tags, such as now-button or now-modal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It adds real domain context (optionalDependencies, version "instance", the --fa deploy path), but leaves the most consequential behavioral question open: does it only report findings or also mutate package.json? Read-only is inferable from 'analyzes' but never stated, and there is no mention of return shape or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the what before the when, with no filler. The trailing 'regardless of the local preview workflow' clause is slightly awkward but does eliminate a real mis-selection, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must cover the whole picture. It handles purpose and triggering well, but an agent still cannot tell whether the tool writes to package.json or only recommends changes, nor what the analysis produces. Adequate but with a meaningful gap for a mutation-adjacent tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both packageJsonPath and plannedComponentTags are already documented in the schema; the baseline is 3. The description reinforces the domain meaning of the components involved but adds no syntax, format, or default guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (analyzes) and a precisely bounded resource (a Next Experience UI component project's package.json) plus the exact thing being looked for: platform components that should be declared as optionalDependencies with version "instance". An agent can tell this apart from validate_now_ui_manifest or resolve_component_package without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'Use this when adding or changing instance-backed platform dependencies', and ties it to a concrete downstream action (preparation for snc ui-component deploy --fa). It also clears away a potential false trigger with 'regardless of the local preview workflow'. No sibling alternative is named, 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.
evaluate_platform_component_fitA
Evaluates whether an HDS platform component should be used directly, wrapped/composed, or replaced with a custom component. MUST prefer existing platform components such as now-card before building a custom card or custom primitive. Use this before scaffolding new UI from scratch and before inventing custom wrappers around functionality the instance already exposes. For any styled card, panel, or container, the evaluation must consider the platform component first and then require a separate .scss file plus a styles property on the custom element if custom UI is still necessary. When the chosen platform component is instance-backed, the project should declare it in package.json under optionalDependencies with version "instance".
| Name | Required | Description | Default |
|---|---|---|---|
| useCase | Yes | Short description of the UI need, such as "inline label/value pair with tooltip". | |
| desiredEvents | No | Optional list of dispatched events the component should expose. | |
| desiredProperties | No | Optional list of properties the component should expose. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It reveals process expectations (require a separate .scss file plus a styles property; declare instance-backed components in package.json under optionalDependencies), but says nothing about whether the tool is read-only, what it returns, or how errors surface. These are policy rules for downstream code rather than the tool's own behavior, leaving real gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the description spends several sentences on downstream coding conventions (the .scss/styles property requirement and package.json optionalDependencies declaration) that govern follow-up work rather than how to invoke this evaluation tool. Every sentence is coherent but not all of them earn their place against the tool's job.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description should describe what the evaluation produces (the verdict shape: use-directly vs wrap vs custom). It never does, instead prescribing how to implement a custom component after the fact. For a decision/evaluation tool this is a meaningful omission, though usage context is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters (useCase, desiredEvents, desiredProperties) are well documented in the schema itself. The description adds no extra parameter detail, so the baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific decision verb and resource: it evaluates whether an HDS platform component should be used directly, wrapped, or replaced. This is a clear, distinguishable purpose within the sibling set (search/recommend_instance_components), though it never explicitly names the sibling tools it is meant to precede or replace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit timing cues: “use this before scaffolding new UI from scratch and before inventing custom wrappers,” and states a strong default (“MUST prefer existing platform components such as now-card”). It lacks named alternatives or when-not-to-use conditions, 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.
explain_now_ui_manifestA
Explains what now-ui.json is for in a ServiceNow Now/Next Experience UI Framework component project, and the rule that every property and dispatched event in a component's source must have a matching declaration in now-ui.json. Read this before creating or editing a component if you are unsure whether the manifest needs updating too.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only informational tool but does not state side effects, permissions, or that it returns static explanatory text. Adequate but not rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with purpose front-loaded. Every sentence earns its place: the first defines the tool's scope, the second gives a usage trigger.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description covers what it explains, the underlying rule, and when to consult it. It could mention that the output is a static explanation, but otherwise it is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description appropriately adds no parameter detail because none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Explains') and resource ('now-ui.json'), plus the rule it covers. It is clearly explanatory rather than a validation tool like validate_now_ui_manifest, but does not explicitly name or contrast with any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear trigger: 'Read this before creating or editing a component if you are unsure whether the manifest needs updating too.' Gives context for use but no explicit exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_component_apiA
Looks up the REAL, current API (properties, slots, and dispatched actions/events) of a Now/Next Experience UI Framework component — e.g. now-button, now-input, now-select — as it actually exists on the user's own configured ServiceNow instance. The lookup uses sys_ux_lib_component for the tag and the related sys_ux_macroponent row through root_component to read the component's actual props, dispatched_events, and availableSlots from root_component_definition, which may be newer or richer than what is published to public npm. Call this BEFORE writing custom markup/logic that duplicates something a platform component already provides, so the real component and its actual props/events/slots get used instead of a hand-rolled equivalent. Use search_instance_components first if you do not already know the exact tag. Requires the target instance to be configured via environment variables (NEXT_UI_INSTANCE_URL and credentials).
| Name | Required | Description | Default |
|---|---|---|---|
| componentTag | Yes | The component's HTML tag name, e.g. "now-button" or "now-input". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so: it names the backing tables (sys_ux_lib_component, root_component, root_component_definition), warns results may be newer/richer than public npm, and states the environment/auth prerequisite (NEXT_UI_INSTANCE_URL plus credentials). It also enumerates what comes back (props, dispatched_events, availableSlots).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is longer than typical, but front-loaded with purpose and each sentence contributes (source tables, npm caveat, pre-call guidance, prerequisite). The dense em-dash clause is slightly heavy but no sentence is disposable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must convey return content — it does by listing props, dispatched events, and slots and their source. Combined with the auth prerequisite and the alternative-tool routing, an agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is fully documented in the schema with an example value. The description adds marginal context by explaining the tag is resolved against sys_ux_lib_component, but the schema already does the substantive work, so the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: looks up the live API (props, slots, dispatched events) of a Now/Next Experience UI component, with concrete tag examples. It distinguishes itself from siblings search_instance_components and resolve_component_package by emphasizing the instance-resident source of truth rather than published package metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('Call this BEFORE writing custom markup/logic that duplicates something a platform component already provides') and a named alternative with a clear selection condition ('Use search_instance_components first if you do not already know the exact tag'). Both the positive trigger and the pre-requisite routing are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_component_scaffoldA
Returns a minimal Now/Next Experience UI Framework component scaffold that uses Storybook with @dylanlindgren/next-ui-storybook-addon as its default local preview workflow. Include a matching now-ui.json stub, .storybook/main.mjs, a component story, and a separate component stylesheet in .scss imported and assigned via the createCustomElement styles property. Runtime shims MUST import servicenowUiCore and servicenowUiRendererSnabbdom from @servicenow/ui-mega, exactly as shown in the returned scaffold. Neither component source nor runtime shim files may import or re-export from @servicenow/ui-core or @servicenow/ui-renderer-snabbdom; wrapping those original packages in local files does not satisfy this requirement. For new components without an existing repo style, MUST prefer the JSX scaffold and MUST NOT hand-write low-level createElement trees. Agents must assess existing project configuration and preserve compatible Storybook setup, scripts, stories, examples, lockfiles, and custom instructions rather than replacing them wholesale. Agents must prefer existing platform components such as now-card before inventing a custom card or primitive when a suitable HDS component already exists. Any HDS component used in JSX must also include the matching package import (for example import "@servicenow/now-card"), and all JSX class names must use className instead of class. If the component is instance-backed, the generated package.json should declare the platform package in optionalDependencies with version "instance".
| Name | Required | Description | Default |
|---|---|---|---|
| scopeName | No | Scope name from the project now-ui.json, such as x_snc_abc123. Read the existing manifest and pass its scopeName when available. Preserved in the manifest and converted to kebab-case for the default component tag prefix, e.g. x-snc-abc123-my-component. | |
| componentName | No | Optional kebab-case component folder name, such as my-component. Defaults to my-component. | |
| elementPrefix | No | Optional explicit custom element prefix override. Defaults to the kebab-case scopeName, or my-scope when no scope is supplied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it enumerates the returned artefacts (now-ui.json stub, .storybook/main.mjs, a story, an .scss stylesheet wired via createCustomElement), the mandatory runtime shim imports, and the instance-backed optionalDependencies convention. It stops short of stating whether anything is written to disk, what the response envelope looks like, or prerequisites/failure modes, but the output content is unusually well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, which is good, but the remainder is an unstructured run-on block of MUST clauses that mixes scaffold-output constraints with general agent policy (prefer now-card, use className, don't hand-write createElement trees). Much of that content is relevant yet verbose and would be tighter as explicit bullets.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is the only source of return-value information and covers the scaffold's constituent files and hard import constraints thoroughly. It is complete enough for an agent to call and use the result, with only the mechanical details of the response shape left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% at three parameters, so the schema already documents scopeName, componentName and elementPrefix with defaults and formatting rules. The description adds no parameter-level detail beyond what the schema states, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource: it returns a minimal Now/Next Experience UI Framework component scaffold built on Storybook with a named addon. An agent can distinguish this from sibling tools like get_framework_guidance or validate_now_ui_manifest, though the description never explicitly names or contrasts those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is conditional guidance about preferring the JSX scaffold for new components without an existing repo style, and about preserving existing project configuration, but these are behavioural rules for the generated output rather than explicit when-to-call-this-tool-vs-alternatives instructions. Nothing tells the agent when to reach for get_component_scaffold instead of get_framework_guidance or recommend_instance_components.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_framework_guidanceA
MANDATORY workflow guidance for ServiceNow Now/Next Experience UI Framework projects. MUST use next-ui-storybook with @dylanlindgren/next-ui-storybook-addon as the default local development and preview workflow. For existing projects, inspect their Storybook configuration, package scripts, stories, lockfile, and instructions before migrating; preserve compatible setup and make targeted changes rather than overwriting project files. For new components with no existing local style, MUST prefer the JSX scaffold returned by get_component_scaffold and MUST NOT hand-write low-level createElement trees unless the repo already uses that pattern. MUST prefer platform components such as now-card, now-button, and similar instance-backed HDS components before creating custom equivalents. MUST import the corresponding package for any HDS component used in JSX or markup, for example import "@servicenow/now-card" or import "@servicenow/now-button". MUST declare instance-backed platform packages in package.json under optionalDependencies with version "instance" rather than leaving them implicit. MUST also use the local runtime shims at src/runtime/ui-core.js and src/runtime/snabbdom.js for createCustomElement and the renderer. Runtime shims MUST import servicenowUiCore and servicenowUiRendererSnabbdom from @servicenow/ui-mega. Neither component source nor runtime shim files may import or re-export from @servicenow/ui-core or @servicenow/ui-renderer-snabbdom; wrapping those original packages in local files does not satisfy this requirement. JSX must use className instead of class, and styles must live in a separate .scss file per component, imported and declared on the component definition via the styles property. This tool includes the createCustomElement stub pattern, the agent workflow contract, the sample project structure, Storybook local-development and migration guidance, manifest rules, instance-backed dependency patterns, and the platform-component-first decision flow. When called without arguments, it defaults to create-custom-element guidance.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | Optional guidance topic to retrieve directly. | |
| question | No | Optional free-text question used to choose the closest bundled guidance topic. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does meaningfully disclose return content and default behavior ('When called without arguments, it defaults to create-custom-element guidance'), which is exactly the kind of behavior an agent needs. It never states that the tool is a non-mutating read of bundled guidance, but for a knowledge-retrieval tool this is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, but the body is a long wall of prescriptive framework rules (className vs class, optionalDependencies 'instance' versioning, shim import paths) that largely restate what the tool returns rather than describing the tool. Several sentences could be folded into the returned content without loss to tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain what comes back, and it does so explicitly by enumerating the bundled topics and the no-arg default. Combined with the two optional selector params documented at 100% coverage, an agent has enough to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value beyond the schema: it explains the default when both optional params are omitted, and frames both params as retrieval selectors (direct topic vs. closest bundled topic). That default behavior is not derivable from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description establishes a specific purpose: retrieving MANDATORY workflow guidance for ServiceNow Now/Next Experience UI Framework projects, and enumerates the bundled content (scaffold pattern, workflow contract, manifest rules, decision flow). It implicitly separates itself from siblings by naming get_component_scaffold as the source of the actual JSX scaffold, but it never explicitly contrasts itself with guidance-adjacent siblings like explain_now_ui_manifest or get_component_api.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It is emphatic about compliance ('MUST use', 'MUST prefer', 'MUST NOT hand-write') and discloses the no-argument default of create-custom-element guidance, which tells the agent how the call behaves. However, it never says when to invoke this tool versus get_component_api, explain_now_ui_manifest, or evaluate_platform_component_fit; the usage context is only implied by the domain framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_instance_componentsA
Recommends likely HDS platform components from a curated registry, using live ServiceNow instance metadata when available for props and dispatched events. Use this before inventing a custom component when an existing platform component may already fit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of recommendations to return. Defaults to 5. | |
| useCase | No | Short description of the UI need, such as "button for launching a modal". | |
| desiredEvents | No | Dispatched event names the component should expose. | |
| desiredProperties | No | Property names that the component should expose. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It usefully explains that props/events are enriched from live instance metadata when available, which tells the agent results may vary by instance. It does not cover auth needs, what happens when metadata is unavailable, or how recommendations are ranked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the capability statement is front-loaded and the usage directive follows. Nothing is redundant, though it stops just short of the density a top score would require.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, zero-required-param recommendation tool with full schema coverage and no output schema, the description covers purpose, data source, and usage trigger adequately. The main gap is that result shape and fallback behavior when live metadata is missing are left unstated, but no output schema means return values need not be explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents limit, useCase, desiredEvents, and desiredProperties with examples and a default. The description adds no parameter-level syntax or format beyond restating that props and events come from instance metadata, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (recommends) and resource (HDS platform components) and names its data sources: a curated registry plus live ServiceNow instance metadata for props and dispatched events. It is clearly distinct from the search/validate siblings, though it never explicitly names them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use guidance: 'Use this before inventing a custom component when an existing platform component may already fit.' No explicit when-not or named alternative (e.g. evaluate_platform_component_fit), but the trigger condition is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_component_packageA
Returns the exact npm package that a ServiceNow HDS component tag belongs to. Examples: now-card -> @servicenow/now-card and now-card-header -> @servicenow/now-card. Never guesses from the tag name; if the tag is not in the curated registry, returns an explicit "unknown" result instead of inventing a package.
| Name | Required | Description | Default |
|---|---|---|---|
| componentTag | Yes | The component tag to resolve, such as "now-card" or "now-card-header". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and does well: it explicitly states the tool 'Never guesses from the tag name' and returns an 'unknown' result rather than inventing a package. That failure-mode disclosure is exactly what an agent needs; it only lacks detail on the exact shape of the unknown return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core purpose, followed by an illustrative example and the failure contract. No filler, though the example sentence is close to restating the schema's own example values.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter lookup with no output schema, the description covers purpose, the sub-component resolution rule, and the unknown fallback. It stops just short of describing the exact returned value in the unknown case, which is the only meaningful remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real semantics beyond the schema: the example pair now-card / now-card-header -> @servicenow/now-card shows that sub-component tags collapse to a base package, which is non-obvious from the parameter definition alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource: 'Returns the exact npm package that a ServiceNow HDS component tag belongs to.' The tag-to-package mapping is distinct from sibling tools like get_component_api or get_component_scaffold, so an agent can tell what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the triggering scenario clear (you have a component tag and need its npm package) and illustrates it with concrete inputs. It does not name an alternative tool or state when NOT to use this one, but the context is unambiguous for a single-purpose lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_instance_componentsA
Searches a curated HDS component registry and enriches matches with live ServiceNow instance metadata when available. Use this when an agent needs to discover likely platform components before choosing a dependency or writing custom UI code.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Defaults to 25. | |
| query | No | Free-text query to match against component tags and known properties/events. | |
| actionName | No | Require components that dispatch a specific event/action name. | |
| propertyName | No | Require components that expose a specific property name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that results come from a curated registry and are enriched with live instance metadata only 'when available' (i.e., graceful degradation), but it says nothing about ranking, permissions, rate limits, or what happens when no instance connection exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with the core behavior front-loaded and no filler. The only mild redundancy is the adjective 'curated', which does not change how the agent invokes it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description partly compensates by indicating what comes back (registry matches enriched with live instance metadata). All parameters are optional and documented, so an agent has enough to call it; only result ordering/emptiness behavior is unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (query, actionName, propertyName, limit) is already documented in the schema, and the description adds no syntax, matching behavior, or combination semantics beyond that. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Searches') and a well-defined resource ('curated HDS component registry'), plus a secondary behavior (enriching matches with live ServiceNow instance metadata). It does not explicitly differentiate itself from close siblings like recommend_instance_components or evaluate_platform_component_fit, but the 'search/lookup' framing is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a concrete when-to-use condition: 'when an agent needs to discover likely platform components before choosing a dependency or writing custom UI code.' That is a clear context, but no when-not guidance and no alternative tools (e.g., the recommender or fit-evaluator siblings) are named, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_instance_iconsA
Searches the icon library (the icon property of now-icon, now-button, now-alert, now-pill and other HDS components) on the user's configured ServiceNow instance. Icon names are read from the instance's now-icon package, so results are the real icons available there. Use this BEFORE picking an icon name instead of guessing. Results are base names in dash-case (e.g. "star", "address-book"); append "-outline" or "-fill" to get the value for an icon property (e.g. "star-outline"). Passing a full name such as "star-outline" also validates that the base icon exists. Requires NEXT_UI_INSTANCE_URL and credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of icons to return. Defaults to 50. | |
| query | No | Free-text search, e.g. "user", "arrow right", or "star-outline". Omit to list icons alphabetically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and mostly does: it discloses the auth/configuration requirement (NEXT_UI_INSTANCE_URL and credentials) and that results are drawn from the instance's real now-icon package. Read-only semantics and any rate/limit behavior are left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then usage guidance and result-format details. The sentence about reading from the now-icon package is somewhat redundant with the opening claim but still reinforces authenticity; otherwise every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain return shape, and it does: base names in dash-case with suffix conventions. Combined with disclosed auth prerequisites and validation behavior, an agent has enough to call it correctly, though no pagination/limit guidance is offered beyond the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description goes further by explaining what `query` values match and how the returned base names map back to an `icon` property via -outline/-fill suffixes. It adds retrieval semantics rather than merely restating parameter types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (searches) and resource (the icon library on the configured ServiceNow instance), and scopes it to the `icon` property of named HDS components. An agent can distinguish it from search_instance_components, which deals with components rather than icons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this BEFORE picking an icon name instead of guessing" gives explicit timing guidance, and the note that passing a full name also validates the base icon adds a clear secondary use case. No when-not condition or named alternative sibling is offered, 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.
validate_now_ui_manifestA
Validates a now-ui.json manifest using the ServiceNow component-schema-validation package and checks that each uiBuilder object has a non-empty tileIcon path. Accepts either the raw manifest object or a JSON string. Returns whether the manifest is valid and any schema or tileIcon issues found.
| Name | Required | Description | Default |
|---|---|---|---|
| manifest | Yes | The now-ui.json object or its raw JSON string to validate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does reasonably well: it discloses the validation rules applied (schema package + tileIcon non-empty check), that it accepts either an object or a JSON string, and what the result conveys. It does not state that the operation is side-effect-free, whether it requires instance connectivity, or how validation errors are structured, so it falls short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: what it validates, what it accepts, what it returns. Zero filler and the core purpose is front-loaded in the first clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter validation tool with no output schema, the description covers the essential gaps by summarizing the return value (validity plus schema/tileIcon issues). It omits error-shape or failure-mode detail, which is minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'manifest' parameter and the schema already documents the anyOf object/string acceptance. The description restates that dual input format, adding only marginal value beyond the structured field, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (validates) and resource (now-ui.json manifest), and names the exact mechanism (ServiceNow component-schema-validation package) plus a second check (non-empty tileIcon on uiBuilder objects). This is clearly distinguishable from the sibling explain_now_ui_manifest, which explains rather than validates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — you call this when you have a manifest that needs checking before use — but the description never states when to prefer it over explain_now_ui_manifest or what to do with the result. No prerequisites, no when-not conditions, no explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v1.2.0- First observed
analyze_project_dependencies - First observed
evaluate_platform_component_fit - First observed
explain_now_ui_manifest - First observed
get_component_api - First observed
get_component_scaffold - First observed
get_framework_guidance - First observed
recommend_instance_components - First observed
resolve_component_package - First observed
search_instance_components - First observed
search_instance_icons - First observed
validate_now_ui_manifest
TDQS
Scored across 11 tools
Several tools cluster around component discovery: search_instance_components ('group likely platform components') and recommend_instance_components ('recommend likely HDS components from a curated registry') are nearly indistinguishable, and resolve_component_package/evaluate_platform_component_fit/get_component_api further overlap in the same decision space. Most other tools (guidance, scaffold, manifest validate vs explain, icon search) are clearly distinct, so descriptions help but boundaries are fuzzy.
Every tool follows a clean snake_case verb_noun pattern (get_framework_guidance, validate_now_ui_manifest, search_instance_icons, evaluate_platform_component_fit, etc.). No mixed conventions or vague bare verbs.
11 tools is a sensible, well-scoped set for a component-development assistant. Slightly heavy on overlapping discovery/decision helpers, but each has a plausible place.
Covers the lifecycle well: guidance, scaffolding, manifest explain/validate, icon lookup, component discovery, API inspection, dependency analysis, and platform-fit decisions. Minor gap in that manifest authoring is only indirectly handled via the scaffold stub rather than a dedicated create/update tool.
Maintenance
Related MCP Connectors
Live React design-system APIs, patterns, and code validation so AI agents build real UI, not slop.
Find UI components and themes, retrieve code, and generate with hosted 21st AI when enabled.
Serves your design system and coding standards to coding agents, so they stop guessing.
Debug, build, and manage Power Automate cloud flows with AI agents
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables AI agents to query component governance rules, validate component props, and generate development prompts for questionnaire editors.4-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants and development tools to interact with ServiceNow instances through a standardized interface, supporting comprehensive API coverage for incident, change, CMDB, and more.MIT
- AlicenseAqualityAmaintenanceEnables natural language interaction with ServiceNow Fluent SDK commands, API specifications, and development resources for AI-assisted environments.17132 npm31MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants and development tools to interact with ServiceNow instances through the Model Context Protocol, supporting incident, change, problem, CMDB, service catalog, knowledge base, and custom table operations.MIT