Ivanti MCP
Click on "Install 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., "@Ivanti MCPLoad incident INC0012345 and add a note about the user's call."
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.
Ivanti MCP
Production FastMCP server for Ivanti Neurons ITSM. Tools call Ivanti's OData REST API. MCP is only the contract between a client (IDE, gateway, or agent) and this process.
Auth follows the same split used by Azure MCP and Atlassian Rovo:
Inbound — the MCP client authenticates to this server (HTTP only).
Outbound — this server authenticates to Ivanti with a tenant API key.
STDIO is for a local subprocess. HTTP is fail-closed: it will not start without MCP_JWKS_URI or MCP_JWT_SECRET.
Author: Clinton Follette.
Tools
Tool | Access | Notes |
| read | Loads the incident by |
| write | Creates a journal ( |
| write, destructive | Reads |
Structured output is typed. Tool annotations set readOnlyHint / destructiveHint / idempotentHint so clients can skip confirmations on reads.
Related MCP server: ServiceNow-MCP
Install (local STDIO)
Cursor / Claude Desktop / VS Code:
{
"mcpServers": {
"ivanti": {
"command": "mcp-ivanti",
"env": {
"IVANTI_BASE_URL": "https://your-tenant.ivanti.com",
"IVANTI_API_KEY": "<rest-api-key>"
}
}
}
}pip install .
mcp-ivantiRemote HTTP
export MCP_TRANSPORT=http
export MCP_HOST=127.0.0.1
export MCP_PORT=8001
export MCP_JWKS_URI=https://login.example.com/.well-known/jwks.json
export MCP_JWT_ISSUER=https://login.example.com
export MCP_JWT_AUDIENCE=mcp-ivanti
mcp-ivantiEndpoint: http://127.0.0.1:8001/mcp. Health: GET /health.
Internal machine-to-machine can use an HMAC JWT (MCP_JWT_SECRET, HS256) instead of JWKS. Do not put this process on the public internet without TLS in front of it.
Outbound Ivanti configuration
Variable | Required | Purpose |
| yes | Tenant origin |
| yes | REST key. Sent as |
| no | Default |
| no |
|
| if quick action | Quick Action id |
| no | Default |
| no | Hide write tools |
Tokens never go in git. Copy .env.example to .env.
Security
HTTP without inbound JWT configuration refuses to boot.
mask_error_detailsis on. Vendor 401s do not echo keys.RecId values are rejected if they contain path characters.
Prefer binding HTTP to loopback or an internal hostname; set
MCP_ALLOWED_HOSTSto enable Host/Origin protection.
See SECURITY.md.
License
MIT. Copyright (c) 2026 Clinton Follette.
Available Tools
3 toolsadd_noteAdd incident noteA
Create a journal note on an incident. Writes Notes, Summary, and ParentLink_RecID on the journal business object.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | Yes | Journal body shown on the ticket. | |
| rec_id | Yes | Ivanti incident RecId (GUID). | |
| summary | No | Short journal summary. | Note |
Output Schema
| Name | Required | Description |
|---|---|---|
| linked | No | |
| rec_id | Yes | |
| journal_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish that this is a non-read, non-idempotent, non-destructive operation. The description adds meaningful detail by specifying exactly which fields are written on the journal business object, giving the agent a clearer model of the side effect than the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary purpose is front-loaded, and the field-level detail is compact and useful without being redundant with the schema.
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 simple write tool with full schema coverage and an output schema, the description sufficiently explains what the tool does and what it writes. It could be more complete by explicitly mentioning that the rec_id identifies the incident to attach the note to, but the schema already communicates that.
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 each parameter already has a clear description. The description adds marginal value by noting that Notes, Summary, and ParentLink_RecID are written, but it does not elaborate on parameter formats or relationships beyond what the schema provides.
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 uses a specific verb and resource: 'Create a journal note on an incident.' It also names the affected fields (Notes, Summary, ParentLink_RecID), which clearly distinguishes this write tool from the read-oriented get_incident and the state-changing resolve_incident.
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 by the action described: use this tool when you need to add a journal note to an incident. However, there is no explicit guidance about when not to use it or how it compares to resolving an incident beyond the obvious difference in purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_incidentGet incidentARead-onlyIdempotent
Load a full Ivanti incident by RecId. Returns subject (Subject), description (Symptom), category, status, requester, and ownership fields.
| Name | Required | Description | Default |
|---|---|---|---|
| rec_id | Yes | Ivanti incident RecId (GUID). |
Output Schema
| Name | Required | Description |
|---|---|---|
| owner | No | |
| impact | No | |
| rec_id | Yes | |
| source | No | |
| status | No | |
| service | No | |
| summary | No | |
| urgency | No | |
| category | No | |
| priority | No | |
| created_at | No | |
| created_by | No | |
| owner_team | No | |
| resolution | No | |
| updated_at | No | |
| updated_by | No | |
| description | No | |
| ticket_number | No | |
| requester_link | No | |
| requester_name | No | |
| actual_category | No | |
| requester_email | No | |
| requester_login | No | |
| requester_phone | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds value by disclosing exactly what the caller will receive: subject, symptom, category, status, requester, and ownership fields. No behavioral contradictions with the annotations are present.
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?
A single sentence that front-loads the operation and resource, then lists the meaningful returned fields. There is no filler or redundancy; every phrase 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?
With a simple one-parameter input, a full output schema available, and annotations covering safety and idempotency, the description supplies everything an agent needs to invoke the tool correctly. The return-field list is a useful supplement, and no critical behavior is missing.
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 schema already fully documents the sole parameter rec_id as an Ivanti incident RecId (GUID), with 100% coverage. The description merely repeats 'by RecId' and adds no extra semantic detail 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?
The description uses a specific verb ('Load') with a clear resource ('full Ivanti incident') and the lookup key ('RecId'). It also lists the principal returned fields, making the tool's purpose unambiguous and distinct from the sibling mutation tools add_note and resolve_incident.
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 read-oriented verb 'Load' makes it clear this is the retrieval tool, especially alongside the sibling tools that modify or act on incidents. It does not explicitly enumerate when not to use it, but the context and name strongly imply it is for reading incident details rather than taking action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_incidentResolve incidentADestructiveIdempotent
Mark an incident resolved. Reads Status first and no-ops if already closed. Writes Status (or a Quick Action) and an optional close note.
| Name | Required | Description | Default |
|---|---|---|---|
| rec_id | Yes | Ivanti incident RecId (GUID). | |
| resolution_note | No | Close note written to the journal. |
Output Schema
| Name | Required | Description |
|---|---|---|
| detail | No | |
| rec_id | Yes | |
| status | Yes | |
| skipped | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavior: it reads Status first, no-ops if already closed, and may write either Status or a Quick Action. This enriches the idempotentHint and destructiveHint annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the first states the core action, the second covers idempotent preconditions, and the third defines the write side effects. No redundant wording.
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 two-parameter write tool with both schema and output schema present, the description covers the core action, the idempotent edge case, and the write scope. Nothing an agent needs to invoke it correctly is missing.
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 fully documents rec_id and resolution_note. The description only adds the label 'optional close note,' which doesn't materially extend what the schema already says, 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 description opens with a specific verb-resource pair, 'Mark an incident resolved,' and specifies exactly what the tool does: reads Status, conditionally no-ops, writes Status/Quick Action, and optionally writes a close note. This clearly separates it from siblings get_incident and add_note, which read or attach notes rather than change resolution state.
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 context is clear: use this tool when an incident should be marked resolved. It doesn't explicitly name alternatives or say when not to use it, but the read-then-write behavior and optional close-note wording make the intended invocation context obvious.
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. Dates show when Glama detected each change.
3 tool updates
v0.1.0- First observed
add_note - First observed
get_incident - First observed
resolve_incident
TDQS
Each tool has a clearly distinct purpose: get_incident reads incident data, add_note writes to the journal, and resolve_incident changes status. There is no meaningful overlap between read and write operations.
All tool names use lowercase snake_case with a verb-first pattern. However, add_note does not explicitly reference incidents like the other two tools, so using add_incident_note would make the naming more consistent.
Three tools is at the lower end of the typical range but appropriate for a focused incident-handling server. Each tool is essential and earns its place without redundancy.
The set covers the common workflow of viewing an incident, adding a note, and resolving it. However, it lacks create, update, search/list, and other lifecycle operations, so it only partially covers the broader incident management domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
- mttrlyOAuthcom.mttrly
AI-powered incident management and server monitoring via MCP.
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Related MCP Servers
- FlicenseBqualityDmaintenanceAn MCP server that wraps the TeamDynamix (TDX) REST API, enabling AI-assisted IT service management through natural language. It exposes 41 tools for managing tickets, assets, CMDB, knowledge base articles, and other core TDX domains.411-
- AlicenseBqualityBmaintenanceEnables natural language control of ServiceNow from AI clients like Claude and Cursor. Provides 400+ tools for incidents, changes, CMDB, and scripts via MCP protocol.1004341MIT
- FlicenseAqualityCmaintenanceA production-ready MCP server that turns any MCP-compatible AI assistant into an AI-powered ServiceNow Incident Management Assistant, exposing incidents, users, CMDB records, and knowledge articles through validated tools.12-
- AlicenseAqualityCmaintenanceA read-only MCP server that enables AI assistants to query ServiceNow instances—incidents, changes, users, CMDB—with malformed query linting and injection protection.7MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cfollette18/mcp-ivanti'
If you have feedback or need assistance with the MCP directory API, please join our Discord server