Some PDIs are currently unavailable, and PDI actions are paused. View the latest updates here. Read More

Ashley Snyder
ServiceNow Employee

 

What are MCP Apps?

MCP Apps are a feature of MCP Server Console that lets you attach a custom HTML interface to a tool. When a compatible MCP client calls that tool, instead of returning plain text, the client renders your HTML in an iframe alongside the response. The data is the same. The experience is completely different.

This article introduces MCP Apps and walks through the setup. Watch the video below to see the full configuration from start to finish, then use the written steps and downloadable HTML file to follow along in your own instance.


Watch

Video Walkthrough

This video covers the complete setup: creating an MCP App in MCP Server Console, attaching it to a tool, connecting to Claude Desktop, and verifying the rendered output.


Before you begin

Prerequisites

Version requirement: MCP Apps requires Model Context Protocol Server (sn_mcp_server) v1.6, available in Australia Patch 4 or Zurich Patch 11.

Earlier patches will not have the Apps tab in MCP Server Console.

Before you begin, you will need:

  • The sn_mcp_server.tools_admin role
  • An existing MCP server with at least one tool configured
  • An HTML file to use as the app interface (see the sample file below)
  • A compatible MCP client to test the rendered output (Claude is shown in the video)
  • OAuth configured on your MCP server — required for any client connection

Concept

How MCP Apps Work

By default, when an MCP client calls a tool on your ServiceNow MCP server, the response comes back as plain text. For a single record or a short answer, that is fine. But when a tool returns a list — a set of open incidents, for example — plain text is hard to work with.

 

MCP Apps change that. When you attach an HTML file to a tool, the MCP client renders it in an iframe whenever that tool runs. Your HTML file uses the MCP Apps SDK to receive the tool response and display it however you choose — a formatted table, a status dashboard, a filtered list.

 

An MCP App on its own does nothing. It must be attached to a specific tool. That association is what tells the client which interface to render when a particular tool runs.


Configuration

Configuration Steps

The video covers each of these steps in detail. This is a summary for reference.

Step 1

Create the MCP App

Navigate to MCP Server Console and select Apps from the left navigation. This tab is new in v1.6. Click Create app.

Fill in the fields:

  • Label — a human-readable name, such as "Incident Table"
  • Description — be specific. This field is exposed to AI clients and used to determine when to invoke the app. Example: "Renders a formatted table of incident records returned by the Look Up Incident Records tool. Displays number, priority, state, and short description."
  • Permissions — declare any browser APIs your HTML needs (microphone, camera, geolocation, clipboard). Leave empty if your interface does not require them.

Step 2

Attach the HTML file

Under App source, click Add file and attach your HTML file. This is the interface that will render in the MCP client when the tool runs. The HTML file must import the MCP Apps SDK, create an App object, and implement an ontoolresult handler to receive and display the tool response. See the sample file below for a working example.

Step 3

Declare external references

If your HTML file imports from any external source, you must declare it. Click Add reference and enter the domain.

For the sample file provided: set Type to External Resources, enter https://esm.sh as the URL, and set Library Name to MCP Apps SDK.

External Resources vs. External Connection: Use External Resources for libraries, fonts, and stylesheets loaded at render time. Use External Connection for domains your HTML makes API requests to at runtime, such as AJAX calls.

Click Create app to save.

Step 4

Attach the app to a tool

Navigate to Tools and open the tool you want to attach this app to. Find the MCP app field and select the app you just created. Save the tool record. The app is now associated — when a compatible client calls this tool, it will render the HTML interface instead of returning a plain text block.

Step 5

Verify in a compatible client

Open your MCP client, connect to your server, and invoke the tool. If MCP Apps is supported, the client will render the HTML interface inline. In Claude Desktop, the app appears as a framed panel directly in the conversation. If the table does not appear, see the compatibility note below.


Download

Sample HTML File

The sample file used in this video renders a formatted incident table. It is designed to work with a Scripted REST tool that returns incident records with number, priority, state, and short_description fields.

 

The file is linked at the bottom of this article.

 

The file uses three key elements of the MCP Apps pattern:

  • SDK import — loads the MCP Apps SDK from esm.sh, the library that handles communication between the HTML and the MCP client
  • App object — creates the connection point between the HTML and the client
  • ontoolresult handler — receives the tool response and builds the table from the returned data

Before attaching this file: Ensure your tool's Scripted REST resource returns number, priority, state, and short_description in the response payload. If your tool only returns number, those columns will appear empty. The fields your table displays depend entirely on what your tool returns.


Note

Client Compatibility

MCP Apps is a relatively new addition to the MCP protocol. Not all clients support it yet. If you connect a client and the HTML interface does not appear, check whether that client supports MCP Apps and whether it is on a current enough version.

 

Claude supports MCP Apps. Other clients may vary — check the client's documentation or release notes to confirm support.


Further reading

Resources

 

Version history
Last update:
an hour ago
Updated by:
Contributors