- Post History
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
on 05-13-2026 12:37 PM - edited Thursday
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:
I’m going to use the Quickstart Server, which is the baseline MCP server that we ship in the Model Context Protocol Server application:
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:
Once your Tools are situated, set up an OAuth connection for MCP server. Under Server details, select the Set up OAuth button:
Under Inbound Integrations, select New integration:
I’m going to use Authorization code grant for my setup:
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.
Include the useraccount Auth scope:
Under Advanced options, make sure to set the Token Format to JWT.
Save the Application Registry record.
Microsoft Copilot Tool Setup
Open Copilot Studio: https://copilotstudio.microsoft.com/
Under Tools, select New tool:
In the New tool modal, select Custom connector:
This should launch PowerApps (or Power Automate). Select New custom connector:
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:
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:
- 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>
Under Definition > General, set the following:
- Summary: SN MCP Server
- Description: (empty)
- Operation ID: InvokeMCP
- Visibility: none
Under Definition > Request, set the following:
- Verb: POST
- URL: https://<your ServiceNow instance>.service-now.com/sncapps/mcp-server/mcp/{mcp_server_name}
- 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
- Query: (empty)
- Headers: (empty)
- Body: (empty)
Under Definition > Response, add a 200 response for success:
No changes are required under Code, but this is what it shows as the default:
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.
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:
In the popup window, select Allow. The Connection status should change to Connected.
Microsoft Copilot Agent Setup
In Copilot Studio, select Agents:
Select Create blank agent:
Under the agent Tools, search for and add your MCP server:
In the Add tool modal, select Add:
Select your MCP server to view the available tools:
Your MCP server tool page should look similar to this, note the entries for the Tools and Inputs sections:
To finish out the rest of the Copilot Agent configuration, in the Overview tab, here’s what my agent looks like:
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:
Select Microsoft channels > Microsoft 365 and Microsoft Teams. Check the box for Make agent available in Microsoft 365 Copilot:
Don’t forget to Test and Publish your Copilot Agent:
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:
Start a chat with your agent, and verify that the MCP tool calls are being made to the ServiceNow MCP server.
If your MCP server connection is stale or disconnected, you will have to reauthenticate:
You’re all done!
Resources
- ServiceNow MCP server: https://www.servicenow.com/docs/r/intelligent-experiences/connect-mcp-server-client.html
- Copilot Studio documentation: https://learn.microsoft.com/en-us/microsoft-copilot-studio/mcp-add-existing-server-to-agent
- 6,589 Views
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Hi @tim-reid-jpmc ,
I assume you're doing this:
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
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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?
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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?
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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?
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
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!