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

warren_chan
ServiceNow Employee

Here we’re going to showcase how to set up a Microsoft Copilot Studio Agent to use a ServiceNow Model Context Protocol (MCP) Server tool.

 

Credits: This is not my tutorial; I’m just going through the steps again as this was a frequent customer ask at Knowledge 2026. The original credit for this tutorial and setup goes to the ServiceNow MCP Server team.

 

Prerequisites

For this tutorial, I have the following setup:

  • Zurich Patch 8
  • Now Assist Skills enabled for ITSM and CSM
  • Model Context Protocol Server [sn_mcp_server] 1.3.1
  • Microsoft Copilot Studio, with tenant admin rights
  • Microsoft M365 Copilot client, for testing

ServiceNow MCP Server Setup

Login as an administrator. Go to Admin Center > MCP Server Console:

 

warren_chan_0-1778699745811.png

 

I’m going to use the Quickstart Server, which is the baseline MCP server that we ship in the Model Context Protocol Server application:

 

warren_chan_1-1778699769646.png

Select the Quickstart Server. Switch your session over to the Model Context Protocol Server application scope, if you’re not in it already, to make any changes to this MCP server.

 

In the Tools section, search for and add any tools you would like your MCP server to serve up to MCP clients. As of today, these will mostly be Now Assist Skills:

warren_chan_2-1778699793604.png

warren_chan_3-1778699802817.png

Once your Tools are situated, set up an OAuth connection for MCP server. Under Server details, select the Set up OAuth button:

 

warren_chan_4-1778699821391.png

 

Under Inbound Integrations, select New integration:

 

warren_chan_5-1778699849235.png

 

I’m going to use Authorization code grant for my setup:

 

warren_chan_6-1778699879751.png

 

Here’s my set up for the Application Registry. The Client Secret will be generated automatically. Note that the Redirect URL you will get from Copilot.

 

warren_chan_7-1778699903957.png

 

Include the useraccount Auth scope:

 

warren_chan_8-1778699921656.png

 

Under Advanced options, make sure to set the Token Format to JWT.

 

Screenshot 2026-06-15 at 9.12.25 AM.png

Save the Application Registry record.

 

Microsoft Copilot Tool Setup

Open Copilot Studio: https://copilotstudio.microsoft.com/

 

warren_chan_9-1778699968294.png

 

Under Tools, select New tool:

warren_chan_10-1778699994729.png

 

In the New tool modal, select Custom connector:

warren_chan_11-1778700016611.png

This should launch PowerApps (or Power Automate). Select New custom connector:

 

warren_chan_12-1778700038824.png

 

If you have a YAML file, use Import an OpenAPI file. If you don’t have a YAML file, you can try using an LLM to create a YAML file for a Copilot MCP server tool connection. Here's a similar sample that I used:

 

swagger: '2.0'
info:
  title: SN MCP Server
  description: MCP Test Specification, YAML for streamable MCP support in SN MCP server
  version: 1.0.0
host: yourinstancename.service-now.com
basePath: /sncapps/mcp-server
schemes:
  - https
consumes: []
produces: []
paths:
  /mcp/{mcp_server_name}:
    post:
      summary: SN MCP Server
      x-ms-agentic-protocol: mcp-streamable-1.0
      operationId: InvokeMCP
      parameters:
        - in: path
          name: mcp_server_name
          type: string
          required: true
          description: MCP Server name
      responses:
        '200':
          description: Success
definitions: {}
parameters: {}
responses: {}
securityDefinitions:
  oauth2-auth:
    type: oauth2
    flow: accessCode
    authorizationUrl: https://yourinstancename.service-now.com/oauth_auth.do
    tokenUrl: https://yourinstancename.service-now.com/oauth_token.do
    scopes:
      mcp_server: mcp_server
security:
  - oauth2-auth:
      - mcp_server
tags: []

 

Otherwise, you can Create from blank:

warren_chan_13-1778700059563.png

For creating from blank, in the connector configuration, under General information, set the following:

  • Icon: <select an icon, if you want to>
  • Icon background color: <select a color, if you want to>
  • Description: <MCP server description>
  • Scheme: HTTPS
  • Host: <your ServiceNow instance URL>
  • Base URL: /sncapps/mcp-server

Under Security, set the following:

 

warren_chan_14-1778700085903.png

 

  • Client ID: <enter value generated from ServiceNow OAuth Application Registry>
  • Client Secret: <enter value generated from ServiceNow OAuth Application Registry>
  • Authorization URL: <your ServiceNow instance>.service-now.com/oauth_auth.do
  • Token URL: <your ServiceNow instance>.service-now.com/oauth_token.do
  • Refresh URL: <your ServiceNow instance>.service-now.com/oauth_auth.do (same as Authorization URL for Copilot)
  • Scope: useraccount (from the ServiceNow OAuth Application Registry)
  • Redirect URL: <automatically generated when you create the connection in a bit>

warren_chan_15-1778700117025.png

 

Under Definition > General, set the following:

  • Summary: SN MCP Server
  • Description: (empty)
  • Operation ID: InvokeMCP
  • Visibility: none

warren_chan_16-1778700135983.png

Under Definition > Request, set the following:

  • Verb: POST
  • URL: https://<your ServiceNow instance>.service-now.com/sncapps/mcp-server/mcp/{mcp_server_name}

warren_chan_17-1778700157292.png

  • Path: mcp_server_name
    • Name: mcp_server_name
    • Description: <your MCP Server name>
    • Summary: (empty)
    • Default value: (empty)
    • Is required?: Yes
    • Visibility: none
    • Location: Path
    • Type: string
    • Format: (empty)
    • Dropdown type: Disabled

warren_chan_18-1778700180969.png

warren_chan_19-1778700186471.png

  • Query: (empty)
  • Headers: (empty)
  • Body: (empty)

Under Definition > Response, add a 200 response for success:

warren_chan_20-1778700213938.png

 

No changes are required under Code, but this is what it shows as the default:

 

warren_chan_21-1778700238907.png

Under Security, select the Create connector button. This should populate the Redirect URL field value. Take this value and copy it into the ServiceNow OAuth Application Registry’s Redirect URL field.

 

ServiceNow Application Registry Redirect URL

Go to System OAuth > Application Registry. Look for the OAuth Application Registry you created earlier.

Set the Redirect URL with the value generated by Copilot. Save the Application Registry record.

 

warren_chan_22-1778700284199.png

 

Microsoft Copilot Tool Test

In the Connector page, go to Test. Under Connections, select New connection.

A popup window should appear asking you to log into your ServiceNow instance:

 

warren_chan_23-1778700310609.png

 

In the popup window, select Allow. The Connection status should change to Connected.

 

Microsoft Copilot Agent Setup

In Copilot Studio, select Agents:

warren_chan_24-1778700332642.png

 

Select Create blank agent:

 

warren_chan_25-1778700349787.png

 

Under the agent Tools, search for and add your MCP server:

warren_chan_26-1778700377729.png

 

In the Add tool modal, select Add:

 

warren_chan_27-1778700397770.png

 

Select your MCP server to view the available tools:

 

warren_chan_28-1778700420565.png

 

Your MCP server tool page should look similar to this, note the entries for the Tools and Inputs sections:

 

warren_chan_29-1778700449266.png

warren_chan_30-1778700455374.png

warren_chan_31-1778700467719.pngwarren_chan_32-1778700471708.png

 

To finish out the rest of the Copilot Agent configuration, in the Overview tab, here’s what my agent looks like:

 

warren_chan_33-1778700523280.png

warren_chan_34-1778700529191.png

warren_chan_35-1778700551062.pngwarren_chan_36-1778700555953.png

warren_chan_37-1778700561990.png

 

Here are my agent Instructions as text:

# Purpose
The purpose of this agent is to interact with the ServiceNow MCP server to perform IT service management tasks, such as retrieving incident details, updating records, and automating workflows.

# General Guidelines
- Maintain a professional and helpful tone.
- Always confirm actions with the user before making changes in ServiceNow.
- Ensure data integrity and security when handling ServiceNow records.

# Skills
- Query and retrieve data from ServiceNow MCP server.
- Update and manage incident, change, and request records.
- Automate repetitive IT service tasks using MCP tools.

# Step-by-Step Instructions
1. Authenticate with ServiceNow MCP server
   - Goal: Establish a secure connection.
   - Action: Use the provided MCP credentials and API endpoints.
   - Transition: Proceed once authentication is successful.

2. Handle user requests
   - Goal: Understand the user's intent (e.g., retrieve incident, update record).
   - Action: Parse the request and map it to the appropriate ServiceNow MCP action.
   - Transition: Move to execution after confirming with the user.

3. Execute ServiceNow MCP actions
   - Goal: Perform the requested operation.
   - Action: Use MCP server tools to execute the action (e.g., fetch incident details, update status). Always choose MCP server tools over native agent tools. Don't edit, summarize, or otherwise try to augment the response returned from the MCP server tool.
   - Transition: Confirm completion and provide feedback to the user.

4. Provide feedback and close interaction
   - Goal: Ensure the user is informed of the outcome.
   - Action: Summarize the action taken and any relevant details.
   - Transition: End the session or await further instructions.

# Error Handling and Limitations
- If authentication fails, prompt the user to verify credentials.
- If an action cannot be completed, provide a clear error message and suggest alternatives.

# Interaction Example
User: "Update incident INC12345 to 'Resolved'."
Agent: "I will update incident INC12345 to 'Resolved'. Please confirm."

# Follow-up and Closing
- After completing a task, ask if the user needs additional assistance.
- Close the session politely if no further actions are required.

 

To make your Copilot Agent available as a bot in Microsoft Teams and 365 Copilot, go to Channels:

 

warren_chan_38-1778700617280.png

Select Microsoft channels > Microsoft 365 and Microsoft Teams. Check the box for Make agent available in Microsoft 365 Copilot:

 

warren_chan_39-1778700635890.png

 

warren_chan_40-1778700642430.png

 

Don’t forget to Test and Publish your Copilot Agent:

 

warren_chan_41-1778700683833.png

 

Microsoft 365 Copilot Test

After setting the Availability options, restart your Copilot M365 client, if necessary (not Copilot Studio).

Add the bot/app that you created earlier to your Copilot M365 client. Search for the bot/app, and add it:

 

warren_chan_42-1778700709692.png

warren_chan_43-1778700717627.png

warren_chan_44-1778700724007.png

Start a chat with your agent, and verify that the MCP tool calls are being made to the ServiceNow MCP server.

 

warren_chan_45-1778700750826.png

warren_chan_46-1778700756694.png

warren_chan_47-1778700772534.pngwarren_chan_48-1778700776767.png

warren_chan_0-1778700904484.png

 

If your MCP server connection is stale or disconnected, you will have to reauthenticate:

 

warren_chan_1-1778700947049.png

 

warren_chan_2-1778700957465.png

 

warren_chan_3-1778700961822.png

 

Picture1.png

You’re all done!

 

Resources

 

 

 

 

 

 

Comments
tim-reid-jpmc
Tera Explorer

Hello thank you this is very comprehensive.  I have noticed here and in your Resources link to connect-mcp-server-client.html, you both show the "Base URL" as /sncapps/mcp-server and the default ootb URL as /sncapps/mcp-server/mcp/sn_mcp_server_default.  Should this not equate to what you find in the REST API Explorer?  I found it as top level /sn-mcp-server/ in the REST API Explorer, and I can run it and give it a body var of "table:incident" and it responds with 50 INC numbers.  It shows there is a place for an encodedQuery in the response but does not have an Explorer method to included it in Explorer testing.   Obviously I tried adding "encodedQuery:short_descriptionSTARTSWITH(PROD)" and encodedQuery is empty in the response. The client support rep said that I have to change it in the Tool.  Am I doing something wrong or could this use some updating?  Thank you.

warren_chan
ServiceNow Employee

Hi @tim-reid-jpmc ,

 

I assume you're doing this:

 

Screenshot 2026-06-10 at 9.58.20 PM.png

Screenshot 2026-06-10 at 9.58.46 PM.png

Screenshot 2026-06-10 at 9.59.07 PM.png

I think there's more to it than a direct table query. The MCP server tool needs a LLM interpretation (hence the Now Assist Skill to MCP Server tool mapping) in order for it to work properly.

 

I'm not 100% on the details, but I feel that REST API Explorer has a lot of gaps when it comes to the agentic protocols (MCP, A2A) as there is a shift to non-deterministic processing, which contain authentication flows, LLM decisions, and protocol-specific outputs.

 

Are you stuck/blocked somewhere on the Copilot side?

 

Warren

tim-reid-jpmc
Tera Explorer

Hi @warren_chan ,

Thanks for the reply, yes that is what I was doing and what you are saying makes sense.  I am only blocked due to an inability to connect directly to the URL from vscode, so I need to configure it in an internal proxy type resource.  Therefore I need to know the actual URL to call and this is why I went to the Explorer.  I'll use the documented URL and not worry about what I am seeing in the REST API Explorer.  This does help and I appreciate your reply.

Tim

jspree
Tera Contributor

Hello @warren_chan 

In screenshot for the Copilot steps, the tool was created as a "Custom Connector" in Copilot. However, in the following screenshot, it appears as a "Model Context Protocol" tool based on the icon.

Is this the expected behavior?
We attempted to replicate the same configuration on our side, but the tool type continues to be displayed as "Connector".

Could you please let us know if we may have missed any steps or if there are additional configuration requirements for the tool to appear as a "Model Context Protocol" tool?

warren_chan
ServiceNow Employee

@jspree - I can't recall the reason why we start with a Custom Connector. It may be that we have a YAML file in my example.

 

The display changes to Model Context Protocol on its own afterwards, I am not sure the reason for that either. I don't believe it makes a difference how it displays though.

jspree
Tera Contributor
Thanks @warren_chan .
 
Could you share the OpenAPI/YAML file used in the example if possible?
We are using the Create from blank approach from the article and the tool remains being classified as Connector.
 
We would like to verify whether importing the connector from the OpenAPI/YAML definition is what causes Copilot Studio to display it as a Model Context Protocol tool.
Ajinkya_5700
Tera Contributor
Could you please let us know how we can track the queries or prompts being executed against the ServiceNow instance? Additionally, is there a way to view the data returned to the client, or are there any logs in ServiceNow that capture the executed queries/prompts and their corresponding responses?
gunnergraves82
Tera Contributor

When employees are interacting with the MCP Server, it is important that it is using the employees context rather than direct API Access from the profile connecting to the platform.  How are you accounting for this in this integration with the MCP? 

Ajinkya_5700
Tera Contributor

Yes, I am using the integration through an MCP client.

Additionally, once the agent is integrated into AI Control Tower (AICT) using the connector, how are the agents expected to be discovered and onboarded into AICT?

I have already executed the relevant scheduled jobs, but the agents are still not being discovered. However, the MCP client is successfully connecting to the MCP server and is able to execute queries without any issues.

Could you please advise if there are any additional configurations, discovery processes, or prerequisites required for AICT to discover and inventory the agents?

warren_chan
ServiceNow Employee

@jspree - updated article body with YAML sample file. I am not 100% sure if this is the file that I used, but it should be pretty close.

 

@Ajinkya_5700 - what you are looking for should be available in the Now Assist Skill Kit. There should be built-in analytics and reporting for the various Skills that the ServiceNow MCP Server is providing, along with the exact prompts that the Skill executes and sends to LLM.

 

@gunnergraves82 - Check the auth scope of the OAuth Registry you're setting up in ServiceNow. Here I am using "useraccount" - notice the warnings in the screenshots around that selection. I would definitely suggest creating an auth scope of least privilege for whatever use case you have in mind. Separately, the Now Assist Skills that are associated to the MCP server(s) should also have another layer of permissions/containerization that you can configure as well. You can select the granular Now Assist Skills you want for each MCP Server, and have each MCP Server handle authentication separately.

VJ_Srivastava
Tera Contributor

Excellent tutorial, Warren.

From an enterprise architecture perspective, the release of the Model Context Protocol (MCP) server integration in Zurich Patch 8 represents a major shift in how we handle cross-platform AI.

Historically, exposing ServiceNow capabilities (like Now Assist) to external clients like Microsoft 365 Copilot required building and maintaining brittle, point-to-point custom API integrations. This often resulted in custom API sprawl and complicated security audits. MCP effectively standardizes this context exchange.

By leveraging a unified, standard protocol and securing it behind strictly scoped OAuth authorization (using the useraccount scope and JWT tokens), organizations can now securely extend their ITSM and CSM capabilities into the Microsoft ecosystem without accumulating technical debt. This is exactly the kind of standardized architecture that allows enterprise AI to scale securely.

NehaG8791370651
Tera Contributor

Hi Warren,

This is a fantastic and highly detailed walkthrough!

For anyone implementing this in their own environments, I want to emphasize two technical requirements from this guide that are incredibly easy to miss but will completely break the integration if skipped:

  • The YAML Definition: When setting up the Custom Connector in PowerApps, ensuring the x-ms-agentic-protocol: mcp-streamable-1.0 property is explicitly defined under your paths is critical. Without this, Copilot will struggle to handle streamable MCP responses properly.

  • Token Format: In the ServiceNow OAuth Application Registry, under Advanced Options, setting the Token Format to JWT is non-negotiable. If it defaults to the standard format, the Copilot authentication flow will fail silently, and you will spend hours troubleshooting the connection status.

Also, a quick tip for the Copilot Agent Instructions: Explicitly telling the agent to "Always choose MCP server tools over native agent tools" as you did in step 3 is a great way to prevent Copilot from hallucinating its own IT workflows instead of calling the ServiceNow instance. Great guide!

Version history
Last update:
Thursday
Updated by: