mcp-glpi
v3.2.0
Published
MCP Server for GLPI - IT Service Management for Claude. Multi-criteria search, pagination, dynamic field resolution, ticket timeline, ITIL coverage (incidents, problems, changes, validations), asset CMDB, reporting.
Downloads
417
Maintainers
Readme
MCP Server for GLPI v3
A Model Context Protocol (MCP) server that exposes GLPI (IT Service Management) to AI assistants like Claude.
v3 is a foundations-and-coverage overhaul on top of v2. See CHANGELOG.md for the full list of changes; the rest of this README documents what's exposed today.
What's in v3
- Solid foundations: unified HTTP layer with auto re-authentication on 401, structured errors, retry on 5xx.
- Real search: multi-criteria with
AND/OR/AND NOT/OR NOT,forcedisplay, pagination,fetch_all, dedicated count probe. - Dynamic field mapping:
/listSearchOptions/{itemtype}is cached sofield_id↔ name translations stay valid across GLPI versions. - High-level reporting:
glpi_search_ticketsaccepts friendly params,glpi_tickets_stats_byventilates counts by status / category / technician / entity / month. - Full ITIL coverage: timeline (followups + tasks + solutions + validations), validations request/approve, ticket linking, document attachment, satisfaction, overdue (SLA) tickets.
- Resolved foreign keys by default: detail views return
users_id_tech: 42and the resolved name, so the LLM doesn't have to guess.
Configuration
| Env var | Required | Description |
|---|---|---|
| GLPI_URL | yes | Base URL of the GLPI instance |
| GLPI_APP_TOKEN | no | Application token (Setup → General → API) |
| GLPI_USER_TOKEN | no* | User API token |
| GLPI_USERNAME | no* | Login (when not using user token) |
| GLPI_PASSWORD | no* | Password (when not using user token) |
| GLPI_TIMEOUT_MS | no | HTTP request timeout in ms (default 15000) |
| GLPI_MAX_RETRIES | no | Max retries on 5xx / 429 / network errors (default 2) |
| GLPI_DEBUG | no | Set to any value to log HTTP retries/re-auth to stderr |
* either GLPI_USER_TOKEN or GLPI_USERNAME+GLPI_PASSWORD is required.
Claude Desktop / Claude Code
{
"mcpServers": {
"glpi": {
"command": "npx",
"args": ["mcp-glpi"],
"env": {
"GLPI_URL": "https://glpi.example.com",
"GLPI_APP_TOKEN": "...",
"GLPI_USER_TOKEN": "..."
}
}
}
}Tool catalogue
Tickets — read
| Tool | Description |
|---|---|
| glpi_list_tickets | List with start/limit/range/sort/order/status |
| glpi_get_ticket | Detail + status/urgency labels + counts of linked items |
| glpi_get_ticket_timeline | Followups + tasks + solutions + validations, chronological |
| glpi_search_tickets | High-level search (status, assigned, requester, dates, ...) |
| glpi_get_ticket_followups | Followups of a ticket |
| glpi_get_ticket_tasks | Tasks |
| glpi_get_ticket_solutions | Solutions |
| glpi_get_ticket_validations | Validations (approvals) |
| glpi_get_ticket_documents | Linked documents |
| glpi_get_ticket_satisfaction | Satisfaction survey result |
| glpi_list_overdue_tickets | Tickets whose SLA deadline has passed |
Tickets — write
| Tool | Description |
|---|---|
| glpi_create_ticket | Create a ticket |
| glpi_update_ticket | Update fields |
| glpi_delete_ticket | ⚠️ Delete (force=true purges) |
| glpi_add_followup | Add a followup |
| glpi_add_task | Add a task with time tracking |
| glpi_add_solution | Add a solution |
| glpi_assign_ticket | Assign to user OR group |
| glpi_link_tickets | link / duplicate / parent |
| glpi_add_ticket_validation | Request a validation |
| glpi_set_validation_status | Approve (2) or refuse (3) |
| glpi_attach_document_to_ticket | Link an uploaded document to a ticket |
Problems & Changes
| Tool | Description |
|---|---|
| glpi_list_problems / glpi_get_problem / glpi_create_problem / glpi_update_problem | Problem management |
| glpi_list_changes / glpi_get_change / glpi_create_change / glpi_update_change | Change management |
Assets
| Tool family | Notes |
|---|---|
| Computer, Software, NetworkEquipment, Printer, Monitor, Phone | list_*, get_*, plus create/update/delete symmetry |
Knowledge base, contracts, suppliers, locations, projects, documents
glpi_list_*, glpi_get_*, and glpi_create_* where the GLPI API allows it.
glpi_search_knowbase performs a free-text search on the title (field id
resolved dynamically — no longer hard-coded).
Users, groups, categories, entities
glpi_list_users filters active users via the search endpoint (not
searchText); glpi_create_user/glpi_create_group/glpi_add_user_to_group
cover provisioning.
Statistics
| Tool | Description |
|---|---|
| glpi_get_ticket_stats | Counts by status (optional entity / date filters) |
| glpi_get_asset_stats | Total counts per asset type |
| glpi_tickets_stats_by | Ventilation by status / category / technician / entity / month, optional period |
Generic / introspection
| Tool | Description |
|---|---|
| glpi_search_v2 | Multi-criteria search (criteria[], forcedisplay, fetch_all, ...) |
| glpi_count | Cheap totalcount probe with criteria |
| glpi_list_search_options | Catalogue of searchable fields for an itemtype |
| glpi_get_session_info | Active profile + available profiles + entities |
| glpi_search | Deprecated: single-criterion alias kept for backward compat |
Resources
glpi://tickets/open, glpi://tickets/recent, glpi://problems/open,
glpi://changes/pending, glpi://computers, glpi://groups,
glpi://categories, glpi://stats/tickets, glpi://stats/assets.
Reference
Ticket status
| ID | Label | |---|---| | 1 | New | | 2 | Processing (assigned) | | 3 | Processing (planned) | | 4 | Pending | | 5 | Solved | | 6 | Closed |
Validation status
| ID | Label | |---|---| | 1 | Waiting | | 2 | Granted | | 3 | Refused |
Urgency / impact / priority
| ID | Label | |---|---| | 1 | Very low | | 2 | Low | | 3 | Medium | | 4 | High | | 5 | Very high |
Change status
| ID | Label | |---|---| | 1 | New | | 2 | Evaluation | | 3 | Approval | | 4 | Accepted | | 5 | Pending | | 6 | Test | | 7 | Qualification | | 8 | Applied | | 9 | Review | | 10 | Closed | | 11 | Refused | | 12 | Canceled |
Development
git clone https://github.com/GMS64260/mcp-glpi.git
cd mcp-glpi
npm install
npm run build
npm test # node --test via tsx, mocked fetchRun locally:
export GLPI_URL="https://glpi.example.com"
export GLPI_USER_TOKEN="..."
npm startLicense
MIT
