NexTool MCP for GLPI
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GLPI_URL | Yes | GLPI base URL, e.g. https://glpi.example.com (REST API v1) | |
| GLPI_V2_URL | No | GLPI 11 API v2 URL (OAuth) | |
| GLPI_TOOLSETS | No | Tool presets: core (recommended start), tickets, itil, assets, kb, documents, users, search, admin, v2. Combine with commas. Default: every tool | |
| GLPI_APP_TOKEN | No | App-Token of the API client, optional | |
| GLPI_READ_ONLY | No | true blocks every write before it reaches GLPI | |
| GLPI_USER_TOKEN | Yes | User API token | |
| GLPI_V2_PASSWORD | No | GLPI 11 API v2 password for password grant | |
| GLPI_V2_USERNAME | No | GLPI 11 API v2 username for password grant | |
| GLPI_ALLOW_DELETE | No | true enables delete tools (default off); they then require a written reason | |
| GLPI_V2_CLIENT_ID | No | GLPI 11 API v2 OAuth client ID | |
| GLPI_V2_CLIENT_SECRET | No | GLPI 11 API v2 OAuth client secret |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| glpi_list_ticketsA | 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. |
| glpi_list_my_ticketsA | "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". |
| glpi_get_ticketA | 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). |
| glpi_create_ticketB | 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. |
| glpi_update_ticketC | Update an existing ticket by ID. |
| glpi_list_changesA | 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. |
| glpi_get_changeA | Retrieve a change by ID, with names beside the IDs and status/priority labels in the GLPI user's language. |
| glpi_create_changeC | Create a new change. Common fields: name, content, entities_id, users_id_requester. |
| glpi_update_changeC | Update an existing change by ID. |
| glpi_list_change_followupsB | List followups (comments) of a change, with the author's name (user_name). |
| glpi_list_problemsA | 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. |
| glpi_get_problemB | Retrieve a problem by ID, with names beside the IDs and status/priority labels in the GLPI user's language. |
| glpi_create_problemC | Create a new problem. Common fields: name, content, entities_id, users_id_requester. |
| glpi_update_problemC | Update an existing problem by ID. |
| glpi_list_problem_followupsB | List followups (comments) of a problem, with the author's name (user_name). |
| glpi_searchA | 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. |
| glpi_add_followupC | Add a comment/followup to a ticket. |
| glpi_list_followupsB | List followups (comments) of a ticket, oldest first, with the author's name (user_name). |
| glpi_add_solutionA | Add a solution to a ticket (status changes to Solved). |
| glpi_list_ticket_validationsA | 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). |
| glpi_create_ticket_validationB | Create an approval request assigning a validator (users_id_validate). |
| glpi_update_ticket_validationA | Approve/refuse a validation (status: accepted/refused) or change the approver. |
| glpi_delete_ticket_validationB | Remove a validation request by ID. |
| glpi_get_userC | Retrieve a user by ID. |
| glpi_search_user_by_emailA | Find users by exact email address (returns the user items: id, login, real name, first name...). |
| glpi_list_usersB | List all users with optional pagination and dropdown expansion. |
| glpi_create_userB | Create a new GLPI user. Required: name (login). Common: realname, firstname, password, email (via _useremails array). |
| glpi_update_userC | Update an existing user by ID. |
| glpi_list_documentsB | List documents with optional pagination. |
| glpi_get_documentC | Retrieve a document by ID. |
| glpi_create_documentB | Create a document (metadata). Fields: name, entities_id, comment, etc. |
| glpi_delete_documentB | Permanently delete a document by ID. |
| glpi_list_document_itemsC | List links between documents and other items. |
| glpi_get_document_itemB | Retrieve a Document_Item link by ID. |
| glpi_create_document_itemB | Create a link between a document and an item (Ticket, KnowbaseItem, etc.). |
| glpi_delete_document_itemC | Remove a Document_Item link by ID. |
| glpi_list_knowbase_itemsB | List knowledge base articles with optional pagination. |
| glpi_get_knowbase_itemC | Retrieve a knowledge base article by ID. |
| glpi_create_knowbase_itemC | Create a new knowledge base article. Fields: name, answer (HTML content), knowbaseitemcategories_id, etc. |
| glpi_update_knowbase_itemC | Update a knowledge base article by ID. |
| glpi_delete_knowbase_itemB | Permanently delete a knowledge base article. |
| glpi_list_knowbase_categoriesB | List knowledge base categories with optional pagination. |
| glpi_get_knowbase_categoryC | Retrieve a knowledge base category by ID. |
| glpi_create_knowbase_categoryC | Create a new knowledge base category. |
| glpi_update_knowbase_categoryC | Update a knowledge base category by ID. |
| glpi_delete_knowbase_categoryB | Permanently delete a knowledge base category. |
| glpi_list_entitiesB | List GLPI entities (organizational units) with optional pagination. |
| glpi_get_entityC | Retrieve an entity by ID. |
| glpi_create_entityB | Create a new entity. Fields: name (required), entities_id (parent, 0=Root), comment, address, etc. |
| glpi_update_entityC | Update an existing entity by ID. |
| glpi_delete_entityB | Permanently delete an entity by ID. WARNING: irreversible action. |
| glpi_get_rule_ticketB | Retrieve a ticket business rule (RuleTicket) by ID. |
| glpi_list_rule_ticket_criteriaB | List criteria (conditions) of a specific ticket rule (sub-items of RuleTicket). |
| glpi_list_rule_ticket_actionsB | List actions of a specific ticket rule (sub-items of RuleTicket). |
| glpi_list_rule_criteriaA | List rule criteria via GET /RuleCriteria. Optionally filter by rules_id (works for any rule type: RuleTicket, RuleChange, RuleMailCollector). |
| glpi_list_rule_actionsA | List rule actions via GET /RuleAction. Optionally filter by rules_id (works for any rule type: RuleTicket, RuleChange, RuleMailCollector). |
| glpi_update_rule_actionB | Update a rule action by ID. Fields: action_type, field, value. |
| glpi_list_rulesA | List all ticket business rules (RuleTicket) with optional pagination. |
| glpi_create_rule_ticketB | Create a new ticket business rule. Fields: name, match (AND/OR), is_active, sub_type, ranking, etc. |
| glpi_create_rule_criteriaC | Create a new criteria for a rule. Fields: rules_id, criteria (field name), condition, pattern. |
| glpi_create_rule_actionB | Create a new action for a rule. Fields: rules_id, action_type (assign/regex_result/append_regex_result), field, value. |
| glpi_list_itil_followup_templatesB | List ITIL followup templates (predefined followup texts). |
| glpi_get_itil_followup_templateB | Retrieve a followup template by ID. |
| glpi_create_itil_followup_templateB | Create a new followup template. Fields: name, content, comment, itemtype (Ticket/Change/Problem). |
| glpi_update_itil_followup_templateC | Update a followup template by ID. |
| glpi_list_search_optionsA | List available search fields for an itemtype. Critical for building search criteria with glpi_search. Returns field IDs, names, and types. |
| glpi_change_active_entitiesA | Change the active entity for the current session. Essential for multi-entity GLPI instances. Use is_recursive=true to include sub-entities. |
| glpi_get_full_sessionA | Get the full session info including active entity, profile, and user details. Useful for debugging and verifying the current session context. |
| glpi_list_ticket_usersA | 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. |
| glpi_add_ticket_userB | Add a user to a ticket as requester, observer, or assigned. type: 1=Requester, 2=Assigned, 3=Observer. |
| glpi_delete_ticket_userA | Remove a user-ticket link by Ticket_User ID (get the ID from glpi_list_ticket_users). |
| glpi_list_ticket_groupsA | 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. |
| glpi_add_ticket_groupB | Add a group to a ticket as requester, observer, or assigned. type: 1=Requester, 2=Assigned, 3=Observer. |
| glpi_delete_ticket_groupA | Remove a group-ticket link by Group_Ticket ID (get the ID from glpi_list_ticket_groups). |
| glpi_list_ticket_tasksB | List tasks (to-do items) for a ticket, with author, technician and group names (user_name, tech_name, tech_group_name). |
| glpi_add_ticket_taskC | 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). |
| glpi_list_change_tasksA | List tasks for a change, with author, technician and group names. |
| glpi_list_problem_tasksA | List tasks for a problem, with author, technician and group names. |
| glpi_list_itil_categoriesB | List ITIL categories (ticket/change/problem classification). |
| glpi_get_itil_categoryB | Retrieve an ITIL category by ID. |
| glpi_list_groupsB | List GLPI groups with optional pagination. |
| glpi_get_groupC | Retrieve a group by ID. |
| glpi_add_change_followupC | Add a comment/followup to a change. |
| glpi_add_problem_followupC | Add a comment/followup to a problem. |
| glpi_add_change_solutionA | Add a solution to a change (status changes to Solved). |
| glpi_add_problem_solutionA | Add a solution to a problem (status changes to Solved). |
| glpi_get_my_entitiesB | Get the list of entities available to the current user. |
| glpi_get_my_profilesB | Get the list of profiles available to the current user. |
| glpi_list_locationsC | List GLPI locations with optional pagination. |
| glpi_get_locationB | Retrieve a location by ID. |
| glpi_list_assetsA | 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. |
| glpi_get_assetA | Retrieve a single asset by type and ID. For hardware detail use glpi_get_asset_details. |
| glpi_get_asset_detailsA | 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. |
| glpi_create_assetB | Create an asset. Common fields: name, entities_id, serial, otherserial, locations_id, states_id, manufacturers_id, users_id, comment. |
| glpi_update_assetC | Update an existing asset by type and ID. |
| glpi_list_reservation_itemsB | List items flagged as reservable (the catalogue reservations point at). |
| glpi_list_reservationsC | List reservations (bookings) of reservable items. |
| glpi_get_reservationC | Retrieve a reservation by ID. |
| glpi_create_reservationA | 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). |
| glpi_update_reservationC | Update an existing reservation by ID. |
| glpi_count_itemsA | Count matching items without transferring them — answers 'how many' in one cheap call. Use glpi_list_search_options to discover criteria field IDs. |
| glpi_get_ticket_statsA | 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). |
| glpi_list_timelineA | 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. |
| glpi_list_webhooksA | List configured webhooks (event, itemtype, target URL, active flag). Requires GLPI 10.0.7 or newer. |
| glpi_get_webhookA | Retrieve a webhook definition by ID, including its payload template. |
| glpi_create_webhookB | Create a webhook. Common fields: name, url, itemtype (e.g. Ticket), event (new, update, delete), is_active, payload, http_method, use_cra_challenge. |
| glpi_update_webhookC | Update a webhook definition by ID. |
| glpi_set_webhook_activeA | Turn a webhook on or off without touching the rest of its definition. |
| glpi_delete_webhookA | Delete a webhook. Set purge to remove it permanently instead of trashing it. |
| glpi_list_webhook_deliveriesA | 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. |
| glpi_retry_webhook_deliveryA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| triage_ticket | Read a ticket and its timeline, then propose category, urgency/impact and the group or technician to assign, justified by what the ticket actually says. |
| investigate_recurrence | Given a ticket, find similar past tickets and their solutions, and judge whether this warrants a Problem record. |
| requester_history | Everything a technician should know before picking up a call from this person: open items, recent history and recurring themes. |
| asset_context | Hardware profile of an asset plus the tickets around it — the picture to have open before touching a machine. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| glpi-entities | Entity tree of this instance (id, name, completename, level). Use to resolve entities_id before creating or filtering items. |
| glpi-itil-categories | Ticket/change/problem categories (id, name, completename). Use to resolve itilcategories_id without a search round-trip. |
| glpi-request-types | Request sources (Helpdesk, Email, Phone…) for requesttypes_id. |
| glpi-code-maps | Numeric codes GLPI returns and expects: ticket status, priority/urgency/impact, ticket type, actor type and validation status. Not queryable through the API. |
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.