Skip to main content
Glama
cfollette18

Ivanti MCP

by cfollette18

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:

  1. Inbound — the MCP client authenticates to this server (HTTP only).

  2. 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

get_incident

read

Loads the incident by RecId. Maps Subject / Symptom (not Description).

add_note

write

Creates a journal (Notes, Summary, ParentLink_RecID). Hidden when MCP_READ_ONLY=true.

resolve_incident

write, destructive

Reads Status first; no-op if already closed. Hidden when MCP_READ_ONLY=true.

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-ivanti

Remote 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-ivanti

Endpoint: 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

IVANTI_BASE_URL

yes

Tenant origin

IVANTI_API_KEY

yes

REST key. Sent as Authorization: rest_api_key=... (or Bearer if IVANTI_AUTH_SCHEME=bearer)

IVANTI_RESOLVED_STATUS

no

Default Closed

IVANTI_CLOSE_VIA

no

patch_status or quick_action

IVANTI_CLOSE_ACTION_ID

if quick action

Quick Action id

IVANTI_JOURNAL_OBJECT

no

Default journal.notess — confirm in $metadata

MCP_READ_ONLY

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_details is 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_HOSTS to enable Host/Origin protection.

See SECURITY.md.

License

MIT. Copyright (c) 2026 Clinton Follette.

Available Tools

3 tools
add_noteAdd incident noteA

Create a journal note on an incident. Writes Notes, Summary, and ParentLink_RecID on the journal business object.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesYesJournal body shown on the ticket.
rec_idYesIvanti incident RecId (GUID).
summaryNoShort journal summary.Note

Output Schema

ParametersJSON Schema
NameRequiredDescription
linkedNo
rec_idYes
journal_idNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 incidentA
Read-onlyIdempotent

Load a full Ivanti incident by RecId. Returns subject (Subject), description (Symptom), category, status, requester, and ownership fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
rec_idYesIvanti incident RecId (GUID).

Output Schema

ParametersJSON Schema
NameRequiredDescription
ownerNo
impactNo
rec_idYes
sourceNo
statusNo
serviceNo
summaryNo
urgencyNo
categoryNo
priorityNo
created_atNo
created_byNo
owner_teamNo
resolutionNo
updated_atNo
updated_byNo
descriptionNo
ticket_numberNo
requester_linkNo
requester_nameNo
actual_categoryNo
requester_emailNo
requester_loginNo
requester_phoneNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 incidentA
DestructiveIdempotent

Mark an incident resolved. Reads Status first and no-ops if already closed. Writes Status (or a Quick Action) and an optional close note.

ParametersJSON Schema
NameRequiredDescriptionDefault
rec_idYesIvanti incident RecId (GUID).
resolution_noteNoClose note written to the journal.

Output Schema

ParametersJSON Schema
NameRequiredDescription
detailNo
rec_idYes
statusYes
skippedNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 3 tool updatesv0.1.0
    • First observedadd_note
    • First observedget_incident
    • First observedresolve_incident

TDQS

A4.2/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    An 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.
    41
    1
    -
  • A
    license
    A
    quality
    C
    maintenance
    A read-only MCP server that enables AI assistants to query ServiceNow instances—incidents, changes, users, CMDB—with malformed query linting and injection protection.
    7
    MIT

Latest Blog Posts

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