NexTool MCP for GLPI
Click on "Deploy 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., "@NexTool MCP for GLPI Create a high-priority ticket for the VPN outage in the Madrid office"
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.
NexTool MCP for GLPI
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 |
The MCP server (stdio and HTTP) and a library to embed it | |
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)
Enable the REST API: Setup → General → API. Turn on "Enable REST API" and "Enable login with external token".
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.
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.
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-glpiFrom 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 base URL, e.g. |
| User API token (step 1.3) |
| App-Token of the API client (step 1.2), optional |
| GLPI 11 API v2 (OAuth). Optional; enables the |
| Tool presets: |
|
|
|
|
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-glpiClaude 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.jsonin 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-glpiShared 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 |
ChatGPT | Add a connector/app with the same URL (developer mode while the app is in review) |
Claude Code |
|
Cursor |
|
VS Code | Server URL |
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=trueblocks 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 |
| wrong or regenerated user token |
| App-Token missing or wrong for that API client |
| the API client restricts IPs: allow the address the MCP connects from |
HTML instead of JSON |
|
"redirect not followed" |
|
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.jsonnames the maintainers; theDockerfileis 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 granular automation token with publish rights on the |
| Ed25519 private key (32-byte seed, hex) for the registry DNS login on |
Development
cd mcp-glpi-core && npm ci && npm run build && npm test
cd ../mcp-glpi && npm ci && npm run build && npm testThis 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 toolsglpi_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 entityADestructiveInspect
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 itemsARead-onlyIdempotentInspect
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 documentBDestructiveIdempotentInspect
Permanently delete a document by ID.
Inputs: reason (required), documentId (required). Returns: data
glpi_delete_document_itemDelete document-item linkCDestructiveIdempotentInspect
Remove a Document_Item link by ID.
Inputs: reason (required), documentItemId (required). Returns: data
glpi_delete_entityDelete entityBDestructiveIdempotentInspect
Permanently delete an entity by ID. WARNING: irreversible action.
Inputs: reason (required), entityId (required). Returns: data
glpi_delete_knowbase_categoryDelete knowledge base categoryBDestructiveIdempotentInspect
Permanently delete a knowledge base category.
Inputs: reason (required), categoryId (required). Returns: data
glpi_delete_knowbase_itemDelete knowledge base itemBDestructiveIdempotentInspect
Permanently delete a knowledge base article.
Inputs: reason (required), knowbaseId (required). Returns: data
glpi_delete_ticket_groupRemove group from ticketADestructiveIdempotentInspect
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 ticketADestructiveIdempotentInspect
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 validationBDestructiveIdempotentInspect
Remove a validation request by ID.
Inputs: reason (required), validationId (required). Returns: data
glpi_delete_webhookDelete webhookADestructiveIdempotentInspect
Delete a webhook. Set purge to remove it permanently instead of trashing it.
Inputs: reason (required), webhookId (required), purge. Returns: data
glpi_get_assetGet assetARead-onlyIdempotentInspect
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 detailsARead-onlyIdempotentInspect
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 changeARead-onlyIdempotentInspect
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 documentCRead-onlyIdempotentInspect
Retrieve a document by ID.
Inputs: documentId (required), fields, format. Returns: data, note, count, format
glpi_get_document_itemGet document-item linkBRead-onlyIdempotentInspect
Retrieve a Document_Item link by ID.
Inputs: documentItemId (required), fields, format. Returns: data, note, count, format
glpi_get_entityGet entityCRead-onlyIdempotentInspect
Retrieve an entity by ID.
Inputs: entityId (required), fields, format. Returns: data, note, count, format
glpi_get_full_sessionGet full session infoARead-onlyIdempotentInspect
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 groupCRead-onlyIdempotentInspect
Retrieve a group by ID.
Inputs: groupId (required), fields, format. Returns: data, note, count, format
glpi_get_itil_categoryGet ITIL categoryBRead-onlyIdempotentInspect
Retrieve an ITIL category by ID.
Inputs: categoryId (required), fields, format. Returns: data, note, count, format
glpi_get_itil_followup_templateGet followup templateBRead-onlyIdempotentInspect
Retrieve a followup template by ID.
Inputs: templateId (required), fields, format, expand_dropdowns. Returns: data, note, count, format
glpi_get_knowbase_categoryGet knowledge base categoryCRead-onlyIdempotentInspect
Retrieve a knowledge base category by ID.
Inputs: categoryId (required), fields, format. Returns: data, note, count, format
glpi_get_knowbase_itemGet knowledge base itemCRead-onlyIdempotentInspect
Retrieve a knowledge base article by ID.
Inputs: knowbaseId (required), fields, format. Returns: data, note, count, format
glpi_get_locationGet locationBRead-onlyIdempotentInspect
Retrieve a location by ID.
Inputs: locationId (required), fields, format. Returns: data, note, count, format
glpi_get_my_entitiesGet my entitiesBRead-onlyIdempotentInspect
Get the list of entities available to the current user.
Inputs: fields, format. Returns: data, note, count, format
glpi_get_my_profilesGet my profilesBRead-onlyIdempotentInspect
Get the list of profiles available to the current user.
Inputs: fields, format. Returns: data, note, count, format
glpi_get_problemGet problemBRead-onlyIdempotentInspect
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 reservationCRead-onlyIdempotentInspect
Retrieve a reservation by ID.
Inputs: reservationId (required), fields, format. Returns: data, note, count, format
glpi_get_rule_ticketGet ticket ruleBRead-onlyIdempotentInspect
Retrieve a ticket business rule (RuleTicket) by ID.
Inputs: ruleId (required), fields, format, expand_dropdowns. Returns: data, note, count, format
glpi_get_ticketGet ticketARead-onlyIdempotentInspect
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 statsARead-onlyIdempotentInspect
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 userCRead-onlyIdempotentInspect
Retrieve a user by ID.
Inputs: userId (required), fields, format. Returns: data, note, count, format
glpi_get_webhookGet webhookARead-onlyIdempotentInspect
Retrieve a webhook definition by ID, including its payload template.
Inputs: webhookId (required), fields, format. Returns: data, note, count, format
glpi_list_assetsList assetsARead-onlyIdempotentInspect
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 followupsBRead-onlyIdempotentInspect
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 changesARead-onlyIdempotentInspect
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 tasksARead-onlyIdempotentInspect
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 linksCRead-onlyIdempotentInspect
List links between documents and other items.
Inputs: range, fields, format. Returns: data, note, count, format
glpi_list_documentsList documentsBRead-onlyIdempotentInspect
List documents with optional pagination.
Inputs: range, fields, format. Returns: data, note, count, format
glpi_list_entitiesList entitiesBRead-onlyIdempotentInspect
List GLPI entities (organizational units) with optional pagination.
Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format
glpi_list_followupsList ticket followupsBRead-onlyIdempotentInspect
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 groupsBRead-onlyIdempotentInspect
List GLPI groups with optional pagination.
Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format
glpi_list_itil_categoriesList ITIL categoriesBRead-onlyIdempotentInspect
List ITIL categories (ticket/change/problem classification).
Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format
glpi_list_itil_followup_templatesList followup templatesBRead-onlyIdempotentInspect
List ITIL followup templates (predefined followup texts).
Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format
glpi_list_knowbase_categoriesList knowledge base categoriesBRead-onlyIdempotentInspect
List knowledge base categories with optional pagination.
Inputs: range, fields, format. Returns: data, note, count, format
glpi_list_knowbase_itemsList knowledge base itemsBRead-onlyIdempotentInspect
List knowledge base articles with optional pagination.
Inputs: range, fields, format. Returns: data, note, count, format
glpi_list_locationsList locationsCRead-onlyIdempotentInspect
List GLPI locations with optional pagination.
Inputs: range, fields, format, expand_dropdowns. Returns: data, note, count, format
glpi_list_my_ticketsList my ticketsARead-onlyIdempotentInspect
"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 followupsBRead-onlyIdempotentInspect
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 problemsARead-onlyIdempotentInspect
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 tasksARead-onlyIdempotentInspect
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 itemsBRead-onlyIdempotentInspect
List items flagged as reservable (the catalogue reservations point at).
Inputs: range, fields, format. Returns: data, note, count, format
glpi_list_reservationsList reservationsCRead-onlyIdempotentInspect
List reservations (bookings) of reservable items.
Inputs: range, fields, format. Returns: data, note, count, format
glpi_list_rule_actionsList rule actions (global)ARead-onlyIdempotentInspect
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)ARead-onlyIdempotentInspect
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 rulesARead-onlyIdempotentInspect
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 actionsBRead-onlyIdempotentInspect
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 criteriaBRead-onlyIdempotentInspect
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 optionsARead-onlyIdempotentInspect
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 groupsARead-onlyIdempotentInspect
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 ticketsARead-onlyIdempotentInspect
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 tasksBRead-onlyIdempotentInspect
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 usersARead-onlyIdempotentInspect
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 validationsARead-onlyIdempotentInspect
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 timelineARead-onlyIdempotentInspect
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 usersBRead-onlyIdempotentInspect
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 deliveriesARead-onlyIdempotentInspect
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 webhooksARead-onlyIdempotentInspect
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 deliveryADestructiveInspect
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_searchSearch itemsARead-onlyIdempotentInspect
Search GLPI items with criteria. itemtype: Ticket, User, Change, Problem, Computer, etc. Each criterion is {field, searchtype, value, link}: field = search option ID, searchtype = contains | equals | notequals | lessthan | morethan | under, link = AND | OR (omit on the first). Rows come keyed by the search option names in the GLPI user's language ('Título', 'ID', 'Status'...); coded columns (status, priority, urgency, impact, type, approval) hold the GLPI label and the code sits beside it as ' (id)' (e.g. 'Status': 'Solucionado', 'Status (id)': 5). named_columns=false returns the raw search keyed by option ID ('1', '2'...). Use glpi_list_search_options to discover the option IDs for criteria, forcedisplay and sort.
Inputs: itemtype (required), sort, order, range, +5 more. Returns: data, note, count, total, +1 more
glpi_search_user_by_emailSearch user by emailARead-onlyIdempotentInspect
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 webhookADestructiveIdempotentInspect
Turn a webhook on or off without touching the rest of its definition.
Inputs: active (required), webhookId (required). Returns: data
glpi_update_assetUpdate assetCDestructiveIdempotentInspect
Update an existing asset by type and ID.
Inputs: input (required), assetId (required), asset_type (required). Returns: data
glpi_update_changeUpdate changeCDestructiveIdempotentInspect
Update an existing change by ID.
Inputs: input (required), changeId (required). Returns: data
glpi_update_entityUpdate entityCDestructiveIdempotentInspect
Update an existing entity by ID.
Inputs: input (required), entityId (required). Returns: data
glpi_update_itil_followup_templateUpdate followup templateCDestructiveIdempotentInspect
Update a followup template by ID.
Inputs: input (required), templateId (required). Returns: data
glpi_update_knowbase_categoryUpdate knowledge base categoryCDestructiveIdempotentInspect
Update a knowledge base category by ID.
Inputs: input (required), categoryId (required). Returns: data
glpi_update_knowbase_itemUpdate knowledge base itemCDestructiveIdempotentInspect
Update a knowledge base article by ID.
Inputs: input (required), knowbaseId (required). Returns: data
glpi_update_problemUpdate problemCDestructiveIdempotentInspect
Update an existing problem by ID.
Inputs: input (required), problemId (required). Returns: data
glpi_update_reservationUpdate reservationCDestructiveIdempotentInspect
Update an existing reservation by ID.
Inputs: input (required), reservationId (required). Returns: data
glpi_update_rule_actionUpdate rule actionBDestructiveIdempotentInspect
Update a rule action by ID. Fields: action_type, field, value.
Inputs: input (required), actionId (required). Returns: data
glpi_update_ticketUpdate ticketCDestructiveIdempotentInspect
Update an existing ticket by ID.
Inputs: input (required), ticketId (required). Returns: data
glpi_update_ticket_validationUpdate ticket validationADestructiveIdempotentInspect
Approve/refuse a validation (status: accepted/refused) or change the approver.
Inputs: input (required), validationId (required). Returns: data
glpi_update_userUpdate userCDestructiveIdempotentInspect
Update an existing user by ID.
Inputs: input (required), userId (required). Returns: data
glpi_update_webhookUpdate webhookCDestructiveIdempotentInspect
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
Scored across 111 tools
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.
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.
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.
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
Related MCP Connectors
Helpdesk tickets from your AI: find, reply, take, hold, complete — within your own role. OAuth.
Connect any AI assistant to Odoo 16–19 via OAuth 2.0 + PKCE. 400 free calls, no local install.
Connect Claude, ChatGPT or any AI assistant to Zendesk tickets, CSAT, macros and Help Center.
Connect any AI agent to 1,000+ apps and 27,000+ actions through one remote MCP server (OAuth).
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to GLPI IT Service Management, enabling ticket management, asset search, and ITIL processes via natural language.11 npm3MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with GLPI (ITSM) through 71 tools covering tickets, assets, problems, changes, knowledge base, projects, users, and more, using SSE or stdio transport.MIT
- AlicenseCqualityDmaintenanceEnables AI assistants to manage GLPI inventory, tickets, and CIA security fields via its REST API.925 npm1ISC
- AlicenseBqualityCmaintenanceEnables 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-