Skip to main content
Glama

NexTool MCP for GLPI

npm NexTools-Solutions/nextool-mcp-glpi MCP server

Open-source Model Context Protocol server that connects AI assistants (Claude, ChatGPT, Cursor, VS Code, Windsurf…) to your GLPI service desk: tickets, ITIL objects (problems, changes), assets, knowledge base, users, rules and webhooks. It works with GLPI 10 and 11, and supports both the REST API v1 and the GLPI 11 API v2 in one server.

Not affiliated with Teclib'. GLPI is a registered trademark of Teclib'.

Package

What it is

@nextoolsolutions/mcp-glpi

The MCP server (stdio and HTTP) and a library to embed it

@nextoolsolutions/mcp-glpi-core

Shared transport, write policy, idempotency and payload formatting

Two ways to use it:

  • Hosted, early access: nothing to install. Sign in with a NexTool account, then add one URL as a connector in Claude or ChatGPT. Request access at https://nextoolsolutions.com/mcp. How it works, step by step: https://nextoolsolutions.com/en/mcp/como-funciona.

  • Local, open source (this repository): runs on your machine with your GLPI credentials. It is free and also works with GLPI instances that are only reachable on your intranet.


1. Prepare GLPI (both ways)

  1. Enable the REST API: Setup → General → API. Turn on "Enable REST API" and "Enable login with external token".

  2. API client (optional but recommended): in the same screen, add an API client and copy its App-Token. If you restrict it by IP, allow the address the MCP connects from.

  3. User token: Administration → Users → (the user) → Remote access keys. Copy the API token. Every action runs as this user and follows their GLPI profile and entities. Use a dedicated user with only the rights the assistant needs.

  4. GLPI 11 API v2 (optional): create an OAuth client in GLPI 11 and note its client ID and secret. You also need a username and password, for the password grant.

Related MCP server: Hermes GLPI Wave Hub

2. Local install (open source)

Published on npm as @nextoolsolutions/mcp-glpi and listed in the official MCP Registry as com.nextoolsolutions/glpi. Requires Node.js 18+.

GLPI_URL=https://glpi.example.com GLPI_USER_TOKEN=xxx GLPI_APP_TOKEN=yyy npx -y @nextoolsolutions/mcp-glpi

From source instead: clone this repository, then npm ci && npm run build in mcp-glpi-core and in mcp-glpi, and run node mcp-glpi/dist/index.js.

Environment variables

Variable

Meaning

GLPI_URL

GLPI base URL, e.g. https://glpi.example.com (REST API v1)

GLPI_USER_TOKEN

User API token (step 1.3)

GLPI_APP_TOKEN

App-Token of the API client (step 1.2), optional

GLPI_V2_URL, GLPI_V2_CLIENT_ID, GLPI_V2_CLIENT_SECRET, GLPI_V2_USERNAME, GLPI_V2_PASSWORD

GLPI 11 API v2 (OAuth). Optional; enables the glpi_v2_* tools

GLPI_TOOLSETS

Tool presets: core (recommended start), tickets, itil, assets, kb, documents, users, search, admin, v2. Combine with commas. Default: every tool

GLPI_READ_ONLY

true blocks every write before it reaches GLPI

GLPI_ALLOW_DELETE

true enables delete tools (default off); they then require a written reason

All options are listed in mcp-glpi/README.md.

Claude Code

claude mcp add glpi \
  -e GLPI_URL=https://glpi.example.com -e GLPI_USER_TOKEN=xxx -e GLPI_APP_TOKEN=yyy -e GLPI_TOOLSETS=core \
  -- npx -y @nextoolsolutions/mcp-glpi

Claude Desktop

Edit claude_desktop_config.json (Settings → Developer → Edit config) and restart Claude Desktop:

{
  "mcpServers": {
    "glpi": {
      "command": "npx",
      "args": ["-y", "@nextoolsolutions/mcp-glpi"],
      "env": {
        "GLPI_URL": "https://glpi.example.com",
        "GLPI_USER_TOKEN": "xxx",
        "GLPI_APP_TOKEN": "yyy",
        "GLPI_TOOLSETS": "core"
      }
    }
  }
}

Cursor / Windsurf / VS Code

Use the same command/args/env block:

  • Cursor: ~/.cursor/mcp.json (or .cursor/mcp.json in a project).

  • Windsurf: ~/.codeium/windsurf/mcp_config.json.

  • VS Code: .vscode/mcp.json. The top-level key there is "servers" instead of "mcpServers", and each entry also takes "type": "stdio".

Docker

The Dockerfile builds the stdio server from this repository (node:22-alpine, no credentials inside). Without GLPI_* variables it still starts and lists its tools, which is what directories that inspect servers need.

docker build -t nextool-mcp-glpi .
docker run -i --rm -e GLPI_URL=https://glpi.example.com -e GLPI_USER_TOKEN=xxx -e GLPI_TOOLSETS=core nextool-mcp-glpi

Shared HTTP server (optional)

To serve several users or GLPI instances from one machine, run mcp-glpi/dist/http.js (Streamable HTTP, Bearer keys stored as SHA-256 hashes). See "Two ways to run" in the package README.

3. Hosted version (early access)

The hosted NexTool MCP lives at https://mcp.nextoolsolutions.com/mcp. It adds:

  • sign-in through the NexTool portal (OAuth 2.1);

  • one-click connectors for Claude and ChatGPT;

  • GLPI credentials encrypted so that only the connector can use them;

  • per-user rate limits and audit logs, without storing prompts or results.

Your GLPI must be reachable from the internet. If it only accepts known IPs, the portal shows the address to allow when you test the connection.

Request early access: https://nextoolsolutions.com/mcp. Once you are in:

Client

How to connect

Claude (web, desktop, mobile)

Settings → Connectors → Add custom connector → URL https://mcp.nextoolsolutions.com/mcp → sign in with your NexTool account and authorize

ChatGPT

Add a connector/app with the same URL (developer mode while the app is in review)

Claude Code

claude mcp add --transport http nextool https://mcp.nextoolsolutions.com/mcp, then /mcp to sign in. Or use an API key from My account → NexTool MCP: add --header "Authorization: Bearer nxm_…"

Cursor

Add to Cursor (server URL https://mcp.nextoolsolutions.com/mcp, sign-in by OAuth), or the same URL with header Authorization: Bearer nxm_…

VS Code

Server URL https://mcp.nextoolsolutions.com/mcp with header Authorization: Bearer nxm_…

Connect your GLPI once at app.nextoolsolutions.com → My account → NexTool MCP (GLPI URL plus the tokens from step 1). Then click Test connection.

Safety

  • Every tool carries MCP annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint), so clients can ask before changing data.

  • Deletes are refused unless GLPI_ALLOW_DELETE=true (always refused on the hosted free plan).

  • GLPI_READ_ONLY=true blocks every write.

  • Identical create calls within a short window are replayed, not repeated.

  • Redirects are never followed. The API v2 client talks only to the configured GLPI origin.

Troubleshooting

Symptom

Likely cause

ERROR_GLPI_LOGIN_USER_TOKEN / 401

wrong or regenerated user token

ERROR_WRONG_APP_TOKEN_PARAMETER

App-Token missing or wrong for that API client

ERROR_NOT_ALLOWED_IP

the API client restricts IPs: allow the address the MCP connects from

HTML instead of JSON

GLPI_URL points to a login page or proxy, not to the GLPI root

"redirect not followed"

GLPI_URL redirects (e.g. http→https or another host): use the final URL

Directories and release

  • MCP Registry: com.nextoolsolutions/glpi (mcp-glpi/server.json): the npm package (stdio) and the hosted server as a remote.

  • Cursor plugin: .cursor-plugin/plugin.json + mcp.json (hosted server, OAuth). Direct install link: cursor://anysphere.cursor-deeplink/mcp/install?name=nextool-glpi&config=eyJ1cmwiOiJodHRwczovL21jcC5uZXh0b29sc29sdXRpb25zLmNvbS9tY3AifQ==.

  • Glama: glama.json names the maintainers; the Dockerfile is the build they run.

Pushing a tag v<mcp-glpi version> runs release.yml: tests, npm (versions already published are skipped), then the MCP Registry. Repository secrets:

Secret

What it is

NPM_TOKEN

npm granular automation token with publish rights on the @nextoolsolutions scope

MCP_PRIVATE_KEY

Ed25519 private key (32-byte seed, hex) for the registry DNS login on nextoolsolutions.com; its public key is the v=MCPv1; k=ed25519; p=… TXT record on the domain apex

Development

cd mcp-glpi-core && npm ci && npm run build && npm test
cd ../mcp-glpi && npm ci && npm run build && npm test

This repository is a mirror published from NexTool's internal monorepo. Issues and pull requests are welcome here. Security reports: see SECURITY.md.

License

MIT © NexTool Solutions

Available Tools

111 tools
glpi_add_change_followupAdd followup to changeCInspect

Add a comment/followup to a change.

Inputs: content (required), changeId (required), is_private. Returns: data, replayed

glpi_add_change_solutionAdd solution to changeAInspect

Add a solution to a change (status changes to Solved).

Inputs: content (required), changeId (required). Returns: data, replayed

glpi_add_followupAdd followup to ticketCInspect

Add a comment/followup to a ticket.

Inputs: content (required), ticketId (required), users_id, is_private. Returns: data, replayed

glpi_add_problem_followupAdd followup to problemCInspect

Add a comment/followup to a problem.

Inputs: content (required), problemId (required), is_private. Returns: data, replayed

glpi_add_problem_solutionAdd solution to problemAInspect

Add a solution to a problem (status changes to Solved).

Inputs: content (required), problemId (required). Returns: data, replayed

glpi_add_solutionAdd solution to ticketAInspect

Add a solution to a ticket (status changes to Solved).

Inputs: content (required), ticketId (required). Returns: data, replayed

glpi_add_ticket_groupAdd group to ticketBInspect

Add a group to a ticket as requester, observer, or assigned. type: 1=Requester, 2=Assigned, 3=Observer.

Inputs: type (required), groups_id (required), tickets_id (required). Returns: data, replayed

glpi_add_ticket_taskAdd task to ticketCInspect

Add a task to a ticket. Fields: tickets_id, content (required). Optional: is_private (0/1), state (0=Info, 1=To do, 2=Done), actiontime (seconds), users_id_tech (assigned technician).

Inputs: content (required), tickets_id (required), state, actiontime, +2 more. Returns: data, replayed

glpi_add_ticket_userAdd user to ticketBInspect

Add a user to a ticket as requester, observer, or assigned. type: 1=Requester, 2=Assigned, 3=Observer.

Inputs: type (required), users_id (required), tickets_id (required). Returns: data, replayed

glpi_change_active_entitiesChange active entityA
Destructive
Inspect

Change the active entity for the current session. Essential for multi-entity GLPI instances. Use is_recursive=true to include sub-entities.

Inputs: entityId (required), is_recursive. Returns: data

glpi_count_itemsCount itemsA
Read-onlyIdempotent
Inspect

Count matching items without transferring them — answers 'how many' in one cheap call. Use glpi_list_search_options to discover criteria field IDs.

Inputs: itemtype (required), criteria. Returns: data

glpi_create_assetCreate assetBInspect

Create an asset. Common fields: name, entities_id, serial, otherserial, locations_id, states_id, manufacturers_id, users_id, comment.

Inputs: input (required), asset_type (required). Returns: data, replayed

glpi_create_changeCreate changeCInspect

Create a new change. Common fields: name, content, entities_id, users_id_requester.

Inputs: input (required). Returns: data, replayed

glpi_create_documentCreate documentBInspect

Create a document (metadata). Fields: name, entities_id, comment, etc.

Inputs: input (required). Returns: data, replayed

glpi_create_document_itemLink document to itemBInspect

Create a link between a document and an item (Ticket, KnowbaseItem, etc.).

Inputs: items_id (required), itemtype (required), documents_id (required). Returns: data, replayed

glpi_create_entityCreate entityBInspect

Create a new entity. Fields: name (required), entities_id (parent, 0=Root), comment, address, etc.

Inputs: input (required). Returns: data, replayed

glpi_create_itil_followup_templateCreate followup templateBInspect

Create a new followup template. Fields: name, content, comment, itemtype (Ticket/Change/Problem).

Inputs: input (required). Returns: data, replayed

glpi_create_knowbase_categoryCreate knowledge base categoryCInspect

Create a new knowledge base category.

Inputs: input (required). Returns: data, replayed

glpi_create_knowbase_itemCreate knowledge base itemCInspect

Create a new knowledge base article. Fields: name, answer (HTML content), knowbaseitemcategories_id, etc.

Inputs: input (required). Returns: data, replayed

glpi_create_problemCreate problemCInspect

Create a new problem. Common fields: name, content, entities_id, users_id_requester.

Inputs: input (required). Returns: data, replayed

glpi_create_reservationCreate reservationAInspect

Book a reservable item. begin/end use 'YYYY-MM-DD HH:MM:SS'. reservationitems_id comes from glpi_list_reservation_items (not the asset ID).

Inputs: end (required), begin (required), reservationitems_id (required), comment, +1 more. Returns: data, replayed

glpi_create_rule_actionCreate rule actionBInspect

Create a new action for a rule. Fields: rules_id, action_type (assign/regex_result/append_regex_result), field, value.

Inputs: input (required). Returns: data, replayed

glpi_create_rule_criteriaCreate rule criteriaCInspect

Create a new criteria for a rule. Fields: rules_id, criteria (field name), condition, pattern.

Inputs: input (required). Returns: data, replayed

glpi_create_rule_ticketCreate ticket ruleBInspect

Create a new ticket business rule. Fields: name, match (AND/OR), is_active, sub_type, ranking, etc.

Inputs: input (required). Returns: data, replayed

glpi_create_ticketCreate ticketBInspect

Create a new ticket. Common fields: name (title), content (description), entities_id, users_id_requester, itilcategories_id, type (1=Incident, 2=Request), urgency, impact, priority.

Inputs: input (required). Returns: data, replayed

glpi_create_ticket_validationCreate ticket validationBInspect

Create an approval request assigning a validator (users_id_validate).

Inputs: ticketId (required), users_id_validate (required), comment_submission. Returns: data, replayed

glpi_create_userCreate userBInspect

Create a new GLPI user. Required: name (login). Common: realname, firstname, password, email (via _useremails array).

Inputs: input (required). Returns: data, replayed

glpi_create_webhookCreate webhookBInspect

Create a webhook. Common fields: name, url, itemtype (e.g. Ticket), event (new, update, delete), is_active, payload, http_method, use_cra_challenge.

Inputs: input (required). Returns: data, replayed

glpi_delete_documentDelete documentB
DestructiveIdempotent
Inspect

Permanently delete a document by ID.

Inputs: reason (required), documentId (required). Returns: data

glpi_delete_document_itemDelete document-item linkC
DestructiveIdempotent
Inspect

Remove a Document_Item link by ID.

Inputs: reason (required), documentItemId (required). Returns: data

glpi_delete_entityDelete entityB
DestructiveIdempotent
Inspect

Permanently delete an entity by ID. WARNING: irreversible action.

Inputs: reason (required), entityId (required). Returns: data

glpi_delete_knowbase_categoryDelete knowledge base categoryB
DestructiveIdempotent
Inspect

Permanently delete a knowledge base category.

Inputs: reason (required), categoryId (required). Returns: data

glpi_delete_knowbase_itemDelete knowledge base itemB
DestructiveIdempotent
Inspect

Permanently delete a knowledge base article.

Inputs: reason (required), knowbaseId (required). Returns: data

glpi_delete_ticket_groupRemove group from ticketA
DestructiveIdempotent
Inspect

Remove a group-ticket link by Group_Ticket ID (get the ID from glpi_list_ticket_groups).

Inputs: reason (required), groupTicketId (required). Returns: data

glpi_delete_ticket_userRemove user from ticketA
DestructiveIdempotent
Inspect

Remove a user-ticket link by Ticket_User ID (get the ID from glpi_list_ticket_users).

Inputs: reason (required), ticketUserId (required). Returns: data

glpi_delete_ticket_validationDelete ticket validationB
DestructiveIdempotent
Inspect

Remove a validation request by ID.

Inputs: reason (required), validationId (required). Returns: data

glpi_delete_webhookDelete webhookA
DestructiveIdempotent
Inspect

Delete a webhook. Set purge to remove it permanently instead of trashing it.

Inputs: reason (required), webhookId (required), purge. Returns: data

glpi_get_assetGet assetA
Read-onlyIdempotent
Inspect

Retrieve a single asset by type and ID. For hardware detail use glpi_get_asset_details.

Inputs: assetId (required), asset_type (required), fields, format, +1 more. Returns: data, note, count, format

glpi_get_asset_detailsGet asset detailsA
Read-onlyIdempotent
Inspect

Enriched asset view in one request: operating system, processors, memory and disks by default. Ask for sections ['softwares'] or ['networkports'] explicitly — on an inventoried host those are the bulk of the payload. Dropdown IDs come resolved to names.

Inputs: assetId (required), asset_type (required), fields, format, +2 more. Returns: data, note, count, format

glpi_get_changeGet changeA
Read-onlyIdempotent
Inspect

Retrieve a change by ID, with names beside the IDs and status/priority labels in the GLPI user's language.

Inputs: changeId (required), fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_get_documentGet documentC
Read-onlyIdempotent
Inspect

Retrieve a document by ID.

Inputs: documentId (required), fields, format. Returns: data, note, count, format

glpi_get_document_itemGet document-item linkB
Read-onlyIdempotent
Inspect

Retrieve a Document_Item link by ID.

Inputs: documentItemId (required), fields, format. Returns: data, note, count, format

glpi_get_entityGet entityC
Read-onlyIdempotent
Inspect

Retrieve an entity by ID.

Inputs: entityId (required), fields, format. Returns: data, note, count, format

glpi_get_full_sessionGet full session infoA
Read-onlyIdempotent
Inspect

Get the full session info including active entity, profile, and user details. Useful for debugging and verifying the current session context.

Inputs: fields, format. Returns: data, note, count, format

glpi_get_groupGet groupC
Read-onlyIdempotent
Inspect

Retrieve a group by ID.

Inputs: groupId (required), fields, format. Returns: data, note, count, format

glpi_get_itil_categoryGet ITIL categoryB
Read-onlyIdempotent
Inspect

Retrieve an ITIL category by ID.

Inputs: categoryId (required), fields, format. Returns: data, note, count, format

glpi_get_itil_followup_templateGet followup templateB
Read-onlyIdempotent
Inspect

Retrieve a followup template by ID.

Inputs: templateId (required), fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_get_knowbase_categoryGet knowledge base categoryC
Read-onlyIdempotent
Inspect

Retrieve a knowledge base category by ID.

Inputs: categoryId (required), fields, format. Returns: data, note, count, format

glpi_get_knowbase_itemGet knowledge base itemC
Read-onlyIdempotent
Inspect

Retrieve a knowledge base article by ID.

Inputs: knowbaseId (required), fields, format. Returns: data, note, count, format

glpi_get_locationGet locationB
Read-onlyIdempotent
Inspect

Retrieve a location by ID.

Inputs: locationId (required), fields, format. Returns: data, note, count, format

glpi_get_my_entitiesGet my entitiesB
Read-onlyIdempotent
Inspect

Get the list of entities available to the current user.

Inputs: fields, format. Returns: data, note, count, format

glpi_get_my_profilesGet my profilesB
Read-onlyIdempotent
Inspect

Get the list of profiles available to the current user.

Inputs: fields, format. Returns: data, note, count, format

glpi_get_problemGet problemB
Read-onlyIdempotent
Inspect

Retrieve a problem by ID, with names beside the IDs and status/priority labels in the GLPI user's language.

Inputs: problemId (required), fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_get_reservationGet reservationC
Read-onlyIdempotent
Inspect

Retrieve a reservation by ID.

Inputs: reservationId (required), fields, format. Returns: data, note, count, format

glpi_get_rule_ticketGet ticket ruleB
Read-onlyIdempotent
Inspect

Retrieve a ticket business rule (RuleTicket) by ID.

Inputs: ruleId (required), fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_get_ticketGet ticketA
Read-onlyIdempotent
Inspect

Retrieve a single ticket by ID. IDs come with names beside them (recipient_name, category_name, entity_name; status_name, type_name, priority_name in the GLPI user's language). Requesters, technicians and observers are not ticket fields: list them with glpi_list_ticket_users (and groups with glpi_list_ticket_groups).

Inputs: ticketId (required), fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_get_ticket_statsGet ticket statsA
Read-onlyIdempotent
Inspect

Ticket counts per status (New, Processing, Pending, Solved, Closed) plus the total, without listing the tickets. Optional criteria narrow the scope, e.g. one entity: [{field: 80, searchtype: 'equals', value: }] (Ticket search option IDs: 80 = entity, 4 = requester, 5 = technician, 7 = category; same criteria shape as glpi_search).

Inputs: criteria. Returns: data

glpi_get_userGet userC
Read-onlyIdempotent
Inspect

Retrieve a user by ID.

Inputs: userId (required), fields, format. Returns: data, note, count, format

glpi_get_webhookGet webhookA
Read-onlyIdempotent
Inspect

Retrieve a webhook definition by ID, including its payload template.

Inputs: webhookId (required), fields, format. Returns: data, note, count, format

glpi_list_assetsList assetsA
Read-onlyIdempotent
Inspect

List assets of a given type (Computer, Monitor, Printer, NetworkEquipment, Peripheral, Phone, Software, Rack, Enclosure), with location_name, state_name and user_name beside the IDs. Use glpi_search for filtered queries.

Inputs: asset_type (required), range, fields, format, +1 more. Returns: data, note, count, format

glpi_list_change_followupsList change followupsB
Read-onlyIdempotent
Inspect

List followups (comments) of a change, with the author's name (user_name).

Inputs: changeId (required), range, fields, format, +1 more. Returns: data, note, count, format

glpi_list_changesList changesA
Read-onlyIdempotent
Inspect

List change management items, most recently updated first by default, with status_name and priority_name (in the GLPI user's language) and category_name.

Inputs: sort, order, range, fields, +2 more. Returns: data, note, count, format

glpi_list_change_tasksList change tasksA
Read-onlyIdempotent
Inspect

List tasks for a change, with author, technician and group names.

Inputs: changeId (required), range, fields, format. Returns: data, note, count, format

glpi_list_document_itemsList document-item linksC
Read-onlyIdempotent
Inspect

List links between documents and other items.

Inputs: range, fields, format. Returns: data, note, count, format

glpi_list_documentsList documentsB
Read-onlyIdempotent
Inspect

List documents with optional pagination.

Inputs: range, fields, format. Returns: data, note, count, format

glpi_list_entitiesList entitiesB
Read-onlyIdempotent
Inspect

List GLPI entities (organizational units) with optional pagination.

Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_list_followupsList ticket followupsB
Read-onlyIdempotent
Inspect

List followups (comments) of a ticket, oldest first, with the author's name (user_name).

Inputs: ticketId (required), range, fields, format. Returns: data, note, count, format

glpi_list_groupsList groupsB
Read-onlyIdempotent
Inspect

List GLPI groups with optional pagination.

Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_list_itil_categoriesList ITIL categoriesB
Read-onlyIdempotent
Inspect

List ITIL categories (ticket/change/problem classification).

Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_list_itil_followup_templatesList followup templatesB
Read-onlyIdempotent
Inspect

List ITIL followup templates (predefined followup texts).

Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_list_knowbase_categoriesList knowledge base categoriesB
Read-onlyIdempotent
Inspect

List knowledge base categories with optional pagination.

Inputs: range, fields, format. Returns: data, note, count, format

glpi_list_knowbase_itemsList knowledge base itemsB
Read-onlyIdempotent
Inspect

List knowledge base articles with optional pagination.

Inputs: range, fields, format. Returns: data, note, count, format

glpi_list_locationsList locationsC
Read-onlyIdempotent
Inspect

List GLPI locations with optional pagination.

Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_list_my_ticketsList my ticketsA
Read-onlyIdempotent
Inspect

"My tickets": tickets of the connected GLPI user (or of users_id) where they are requester, assigned technician or observer. Defaults: open tickets only (not solved nor closed), most recently updated first. Each row names the people: requesters, assigned and observers as {id, name}, plus status_name and my_roles. Use this for "meus chamados", "my open tickets", "tickets assigned to me".

Inputs: role, sort, order, range, +4 more. Returns: data, note, role, user, +4 more

glpi_list_problem_followupsList problem followupsB
Read-onlyIdempotent
Inspect

List followups (comments) of a problem, with the author's name (user_name).

Inputs: problemId (required), range, fields, format, +1 more. Returns: data, note, count, format

glpi_list_problemsList problemsA
Read-onlyIdempotent
Inspect

List problem management items, most recently updated first by default, with status_name and priority_name (in the GLPI user's language) and category_name.

Inputs: sort, order, range, fields, +2 more. Returns: data, note, count, format

glpi_list_problem_tasksList problem tasksA
Read-onlyIdempotent
Inspect

List tasks for a problem, with author, technician and group names.

Inputs: problemId (required), range, fields, format. Returns: data, note, count, format

glpi_list_reservation_itemsList reservable itemsB
Read-onlyIdempotent
Inspect

List items flagged as reservable (the catalogue reservations point at).

Inputs: range, fields, format. Returns: data, note, count, format

glpi_list_reservationsList reservationsC
Read-onlyIdempotent
Inspect

List reservations (bookings) of reservable items.

Inputs: range, fields, format. Returns: data, note, count, format

glpi_list_rule_actionsList rule actions (global)A
Read-onlyIdempotent
Inspect

List rule actions via GET /RuleAction. Optionally filter by rules_id (works for any rule type: RuleTicket, RuleChange, RuleMailCollector).

Inputs: range, fields, format, rules_id, +1 more. Returns: data, note, count, format

glpi_list_rule_criteriaList rule criteria (global)A
Read-onlyIdempotent
Inspect

List rule criteria via GET /RuleCriteria. Optionally filter by rules_id (works for any rule type: RuleTicket, RuleChange, RuleMailCollector).

Inputs: range, fields, format, rules_id, +1 more. Returns: data, note, count, format

glpi_list_rulesList ticket rulesA
Read-onlyIdempotent
Inspect

List all ticket business rules (RuleTicket) with optional pagination.

Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_list_rule_ticket_actionsList ticket rule actionsB
Read-onlyIdempotent
Inspect

List actions of a specific ticket rule (sub-items of RuleTicket).

Inputs: ruleId (required), range, fields, format, +1 more. Returns: data, note, count, format

glpi_list_rule_ticket_criteriaList ticket rule criteriaB
Read-onlyIdempotent
Inspect

List criteria (conditions) of a specific ticket rule (sub-items of RuleTicket).

Inputs: ruleId (required), range, fields, format, +1 more. Returns: data, note, count, format

glpi_list_search_optionsList search optionsA
Read-onlyIdempotent
Inspect

List available search fields for an itemtype. Critical for building search criteria with glpi_search. Returns field IDs, names, and types.

Inputs: itemtype (required). Returns: data

glpi_list_ticket_groupsList ticket groupsA
Read-onlyIdempotent
Inspect

List all groups linked to a ticket (requester, observer, assigned), with each group's name (group_name) beside groups_id and type_name (in the GLPI user's language). type: 1=Requester, 2=Assigned, 3=Observer.

Inputs: ticketId (required), fields, format. Returns: data, note, count, format

glpi_list_ticketsList ticketsA
Read-onlyIdempotent
Inspect

List GLPI tickets of the whole instance (every ticket the connected user may see), most recently updated first by default. Filter by status (e.g. status: 'open' = not solved nor closed) and choose the sort column and direction. Each row carries status_name, type_name, priority_name (in the GLPI user's language), category_name, and requesters and assigned technicians as {id, name}. For the connected user's OWN tickets ("my tickets") use glpi_list_my_tickets instead.

Inputs: sort, order, range, fields, +3 more. Returns: data, note, count, total, +1 more

glpi_list_ticket_tasksList ticket tasksB
Read-onlyIdempotent
Inspect

List tasks (to-do items) for a ticket, with author, technician and group names (user_name, tech_name, tech_group_name).

Inputs: ticketId (required), range, fields, format. Returns: data, note, count, format

glpi_list_ticket_usersList ticket usersA
Read-onlyIdempotent
Inspect

List all users linked to a ticket (requesters, observers, assigned), with each person's name (user_name) beside users_id and type_name (in the GLPI user's language). type: 1=Requester, 2=Assigned, 3=Observer.

Inputs: ticketId (required), fields, format. Returns: data, note, count, format

glpi_list_ticket_validationsList ticket validationsA
Read-onlyIdempotent
Inspect

List approval/validation requests for a ticket, with requester and approver names (user_name, validator_name) and status_name in the GLPI user's language (status: 1 = not subject to approval, 2 = waiting, 3 = granted, 4 = refused).

Inputs: ticketId (required), range, fields, format. Returns: data, note, count, format

glpi_list_timelineList timelineA
Read-onlyIdempotent
Inspect

Followups, tasks, solutions and validations of a ticket, change or problem, merged into one chronological list (oldest first; order 'desc' for the latest first), with the people's names (user_name, tech_name, validator_name) and the solution type name. Replaces calling the four list tools separately and interleaving them by hand.

Inputs: itemId (required), itemtype (required), order, range, +2 more. Returns: data, note, count, format

glpi_list_usersList usersB
Read-onlyIdempotent
Inspect

List all users with optional pagination and dropdown expansion.

Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_list_webhook_deliveriesList webhook deliveriesA
Read-onlyIdempotent
Inspect

Delivery queue (QueuedWebhook): what was sent, when, and what is still pending, newest first. Filter by webhook name, or only_failed to see what has been retried.

Inputs: range, fields, format, only_failed, +1 more. Returns: data, note, count, format

glpi_list_webhooksList webhooksA
Read-onlyIdempotent
Inspect

List configured webhooks (event, itemtype, target URL, active flag). Requires GLPI 10.0.7 or newer.

Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format

glpi_retry_webhook_deliveryRetry webhook deliveryA
Destructive
Inspect

Queue a failed delivery for another attempt by resetting its send time and retry counter. The GLPI cron does the actual sending — there is no immediate-send endpoint.

Inputs: deliveryId (required). Returns: data

glpi_search_user_by_emailSearch user by emailA
Read-onlyIdempotent
Inspect

Find users by exact email address (returns the user items: id, login, real name, first name...).

Inputs: email (required), range, fields, format. Returns: data, note, count, format

glpi_set_webhook_activeEnable or disable webhookA
DestructiveIdempotent
Inspect

Turn a webhook on or off without touching the rest of its definition.

Inputs: active (required), webhookId (required). Returns: data

glpi_update_assetUpdate assetC
DestructiveIdempotent
Inspect

Update an existing asset by type and ID.

Inputs: input (required), assetId (required), asset_type (required). Returns: data

glpi_update_changeUpdate changeC
DestructiveIdempotent
Inspect

Update an existing change by ID.

Inputs: input (required), changeId (required). Returns: data

glpi_update_entityUpdate entityC
DestructiveIdempotent
Inspect

Update an existing entity by ID.

Inputs: input (required), entityId (required). Returns: data

glpi_update_itil_followup_templateUpdate followup templateC
DestructiveIdempotent
Inspect

Update a followup template by ID.

Inputs: input (required), templateId (required). Returns: data

glpi_update_knowbase_categoryUpdate knowledge base categoryC
DestructiveIdempotent
Inspect

Update a knowledge base category by ID.

Inputs: input (required), categoryId (required). Returns: data

glpi_update_knowbase_itemUpdate knowledge base itemC
DestructiveIdempotent
Inspect

Update a knowledge base article by ID.

Inputs: input (required), knowbaseId (required). Returns: data

glpi_update_problemUpdate problemC
DestructiveIdempotent
Inspect

Update an existing problem by ID.

Inputs: input (required), problemId (required). Returns: data

glpi_update_reservationUpdate reservationC
DestructiveIdempotent
Inspect

Update an existing reservation by ID.

Inputs: input (required), reservationId (required). Returns: data

glpi_update_rule_actionUpdate rule actionB
DestructiveIdempotent
Inspect

Update a rule action by ID. Fields: action_type, field, value.

Inputs: input (required), actionId (required). Returns: data

glpi_update_ticketUpdate ticketC
DestructiveIdempotent
Inspect

Update an existing ticket by ID.

Inputs: input (required), ticketId (required). Returns: data

glpi_update_ticket_validationUpdate ticket validationA
DestructiveIdempotent
Inspect

Approve/refuse a validation (status: accepted/refused) or change the approver.

Inputs: input (required), validationId (required). Returns: data

glpi_update_userUpdate userC
DestructiveIdempotent
Inspect

Update an existing user by ID.

Inputs: input (required), userId (required). Returns: data

glpi_update_webhookUpdate webhookC
DestructiveIdempotent
Inspect

Update a webhook definition by ID.

Inputs: input (required), webhookId (required). Returns: data

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 111 tools

    Disambiguation3/5

    Many tools are clearly distinct by entity, but several overlap: glpi_search can replace many list tools, followup/solution/task tools are duplicated per ITIL type, and glpi_list_rule_criteria vs glpi_list_rule_ticket_criteria are near-identical. Descriptions help, but the sheer volume makes misselection likely.

    Naming Consistency5/5

    All tools use the glpi_ prefix, snake_case, and consistent verb_noun patterns (list_, get_, create_, update_, delete_, add_). Minor irregularities like glpi_change_active_entities and glpi_set_webhook_active are still readable and fit the overall convention.

    Tool Count1/5

    111 tools is extreme for any MCP server; many CRUD operations are repeated per entity and some generic tools overlap with specific ones. This surface is far too large for an agent to select from reliably.

    Completeness3/5

    Broad domain coverage exists across tickets, problems, changes, users, assets, webhooks, and more, but CRUD is asymmetric: no delete for tickets/problems/changes/users/groups/locations, no create/update for groups and locations, and missing child operations like add_change_task or add_problem_task. Agents will hit dead ends for common lifecycle actions.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Connects AI assistants to GLPI IT Service Management, enabling ticket management, asset search, and ITIL processes via natural language.
      11 npm
      3
      MIT
    • A
      license
      C
      quality
      D
      maintenance
      Enables AI assistants to manage GLPI inventory, tickets, and CIA security fields via its REST API.
      9
      25 npm
      1
      ISC
    • A
      license
      B
      quality
      C
      maintenance
      Enables AI assistants to interact with a GLPI instance through its REST API, allowing natural-language consultation, creation, and updating of tickets, followups, tasks, solutions, knowledge base articles, suppliers, contacts, contracts, and statistics.
      52
      -