glpi-mcp
This GLPI MCP server lets Claude read and explore GLPI data; this schema exposes read-only capabilities.
Check the active GLPI API/version, GLPI URL, and safety modes.
Identify the current GLPI user, profile, and entity.
Search tickets, changes, and problems with filters for text, status, priority, type, category, and assignee/requester (legacy API only).
Get a ticket, change, or problem with its timeline and team.
Search, list, and read any GLPI itemtype, such as assets, users, groups, locations, categories, suppliers, and KB articles.
Search knowledge base articles.
Run read-only raw GET requests against any endpoint of the active GLPI API.
Per the README, write/delete tools can be enabled via configuration, but they are not exposed in this schema.
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., "@glpi-mcp show me open tickets assigned to me"
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.
glpi-mcp
MCP (Model Context Protocol) server that lets Claude work with GLPI: tickets, changes and problems (with their timeline and team), assets, users, groups, the knowledge base and any other itemtype.
It speaks both GLPI APIs and picks one automatically:
GLPI | API used | Auth |
9.x / 10.x | Legacy REST API ( | App-Token (optional) + user token, or login/password |
11.x / 12.x | High-Level API ( | OAuth2 password grant, or user token |
And runs over stdio (Claude Desktop, Claude Code) or Streamable HTTP (remote server for Claude Code, the Claude API MCP connector or your own agents).
Tools
Read (always available):
Tool | What it does |
| Active API and version, GLPI URL, safety modes |
| GLPI user, profile and entity the tools act as |
| Search tickets / changes / problems by status, priority, type, category, text, assignee* |
| One ticket with its timeline (followups, tasks, solutions) and team |
| Find any itemtype by name (Computer, User, Group, Location, ITILCategory...) |
| List or read items of any itemtype |
| Search KB articles |
| Read-only GET on any endpoint of the active API |
Write (only with GLPI_READ_ONLY=false):
glpi_create_ticket, glpi_update_ticket, glpi_add_followup, glpi_add_task, glpi_add_solution,
glpi_assign (requester / assigned / observer, user or group), glpi_create_item, glpi_update_item.
Delete (only with GLPI_READ_ONLY=false and GLPI_ALLOW_DELETE=true): glpi_delete_item.
* Filtering by assignee or requester works on the legacy API only; the High-Level API computes the team per item.
Tools carry MCP annotations (readOnlyHint, destructiveHint) so Claude asks before writing.
Related MCP server: ServiceNow MCP Server
1. Prepare GLPI
Create a dedicated service user (e.g. svc-mcp) with a profile that has only the rights the tools need
(e.g. a technician profile on the entities it should see). Every call runs with that user's rights.
Legacy REST API (any GLPI):
Setup > General > API: enable the REST API and "Enable login with external token".
Optionally add an API client with an App-Token (and restrict it by IP range).
Log in as the service user > My settings > Remote access keys > regenerate the API token.
High-Level API (GLPI 11+):
Setup > General > API: enable the API.
Setup > OAuth clients > Add: grant Password, scope api. Copy the client ID and secret.
2. Install
Requires Node.js 20+.
git clone https://github.com/zylarion-solutions/glpi-mcp.git
cd glpi-mcp
npm ci # also builds dist/
cp .env.example .env # reference for the variables3. Connect it to Claude
Claude Code (stdio)
claude mcp add glpi \
-e GLPI_URL=https://glpi.example.com \
-e GLPI_USER_TOKEN=xxxx \
-e GLPI_APP_TOKEN=yyyy \
-- node /absolute/path/to/glpi-mcp/dist/index.jsClaude Desktop (stdio)
claude_desktop_config.json:
{
"mcpServers": {
"glpi": {
"command": "node",
"args": ["/absolute/path/to/glpi-mcp/dist/index.js"],
"env": {
"GLPI_URL": "https://glpi.example.com",
"GLPI_OAUTH_CLIENT_ID": "...",
"GLPI_OAUTH_CLIENT_SECRET": "...",
"GLPI_USERNAME": "svc-mcp",
"GLPI_PASSWORD": "...",
"GLPI_READ_ONLY": "true"
}
}
}
}Remote (Streamable HTTP)
docker build -t glpi-mcp .
docker run -d --name glpi-mcp -p 8000:8000 --env-file .env \
-e MCP_TRANSPORT=http -e MCP_AUTH_TOKEN=$(openssl rand -hex 32) glpi-mcpPut it behind HTTPS (reverse proxy, Cloudflare Tunnel, Azure Container Apps / App Service...) and connect:
claude mcp add --transport http glpi https://mcp.example.com/mcp \
--header "Authorization: Bearer <MCP_AUTH_TOKEN>"The same URL and token work with the Claude API MCP connector (authorization_token) and with agents.
GET /healthz is an unauthenticated health check.
Custom connectors on claude.ai authenticate with OAuth, not a static header. Using this server as a claude.ai connector needs an OAuth layer in front of
/mcp(on the roadmap).
Configuration
Variable | Default | Description |
| — | GLPI root URL (required) |
|
|
|
| — | Legacy API client App-Token, if defined |
| — | Legacy API user token |
| — | OAuth password grant user (also legacy Basic auth fallback) |
| — | High-Level API OAuth client |
|
| OAuth scope(s) |
|
|
|
|
| Register write tools only when |
|
| Register the delete tool |
|
| Timeout per GLPI request |
|
| Max rows per list/search call |
|
|
|
|
| HTTP listen address ( |
| — | Bearer token required on |
| — | Allowed browser |
How auto chooses
OAuth credentials set and
GET /api.php/lists High-Level API versions → High-Level API, version pinned.Otherwise, a user token (or login/password) is set → legacy REST API.
Ask Claude to run glpi_server_info to see the choice.
Security notes
Read-only by default; deleting needs two explicit switches.
Use a least-privilege service user; GLPI enforces its profile and entities on every call.
Secrets come from the environment only and are never logged.
HTTP mode refuses to start without
MCP_AUTH_TOKEN(unlessMCP_ALLOW_NO_AUTH=truefor local tests), compares tokens in constant time, and binds to127.0.0.1unless told otherwise.Itemtypes and raw paths are validated (no path traversal).
Development
npm run dev # run from source (tsx)
npm test # vitest, HTTP mocked
npm run typecheck
npm run ci # typecheck + tests + build (same as CI)
npx @modelcontextprotocol/inspector node dist/index.js # try the tools interactivelysrc/
index.ts entry point (stdio | http)
http.ts Streamable HTTP transport + bearer auth
server.ts MCP server
tools.ts tool definitions (API-agnostic)
config.ts environment
glpi/
types.ts backend contract
legacy.ts /apirest.php client (session, search engine, sub-items)
hlapi.ts /api.php client (OAuth2, version pinning, RSQL)
factory.ts auto-detectionContributing
Branches, pull requests and commit conventions: CONTRIBUTING.md (Spanish). Report vulnerabilities privately to security@zylarion.io — see SECURITY.md.
Roadmap
OAuth for the HTTP transport (claude.ai custom connectors)
Per-user tokens in HTTP mode (each Claude user acts as their own GLPI user)
Documents (upload/download), validations, SLA/OLA views, statistics
License
MIT
Available Tools
9 toolsglpi_get_itemGet a GLPI itemCRead-onlyIdempotent
Full record of one item of any itemtype (asset, user, group, KB article, ...).
Inputs: id (required), itemtype (required).
glpi_get_ticketGet a ticket, change or problemARead-onlyIdempotent
Full details of one ticket (or change/problem). Optionally include its timeline (followups, tasks, solutions) and its team (requesters, assigned technicians and groups, observers).
Inputs: id (required), itil_type, include_team, include_timeline.
glpi_list_itemsList GLPI itemsBRead-onlyIdempotent
List items of one itemtype (e.g. all Computers), paginated.
Inputs: itemtype (required), limit, start.
glpi_raw_getRaw GET on the GLPI APIARead-onlyIdempotent
Read-only escape hatch: GET any endpoint of the API in use, relative to its root. Legacy examples: 'Ticket/12/Document_Item', 'search/Computer' with query {criteria: [...]}, 'listSearchOptions/Ticket'. High-Level examples: 'Assets/Computer/5', 'Administration/User/Me'. Call glpi_server_info to know which API is active.
Inputs: path (required), query.
glpi_search_itemsSearch GLPI items by nameARead-onlyIdempotent
Find assets, users, groups, locations, categories, suppliers, KB articles or any other itemtype by name (partial match). Returns IDs to use with glpi_get_item or the ticket tools.
Inputs: query (required), itemtype (required), limit, start.
glpi_search_knowledgebaseSearch the knowledge baseARead-onlyIdempotent
Find knowledge base articles whose title matches the text. Read one with glpi_get_item (itemtype KnowbaseItem).
Inputs: query (required), limit, start.
glpi_search_ticketsSearch tickets, changes or problemsARead-onlyIdempotent
List tickets (or changes/problems), newest change first, with a compact summary of each. Status IDs: 1 new, 2 processing (assigned), 3 processing (planned), 4 pending, 5 solved, 6 closed. Priority IDs: 1 very low ... 5 very high, 6 major. Ticket type: 1 incident, 2 request. Use glpi_get_ticket for the description, timeline and team of one item. Filtering by assignee/requester works on the legacy API only.
Inputs: text, limit, start, statuses, +8 more.
glpi_server_infoGLPI server infoARead-onlyIdempotent
Show which GLPI API this server uses (legacy REST or High-Level API and its pinned version), the GLPI URL and the safety modes (read-only, delete allowed). Call it first when a connection problem is suspected.
Inputs: no named parameters.
glpi_whoamiCurrent GLPI userARead-onlyIdempotent
The GLPI user the tools act as, with the active profile and entity. Every call runs with that user's rights.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 9 tools
Most tools have clearly distinct roles: server diagnostics, identity, ticket search/get, generic item search/list/get, KB search, and a raw escape hatch. The main overlap is glpi_search_items and glpi_search_knowledgebase, since the former explicitly claims it can find KB articles by name; glpi_raw_get also overlaps conceptually with everything but is positioned as an explicit last resort.
All tools share a glpi_ prefix and mostly follow a verb_noun pattern (search_tickets, get_ticket, list_items, get_item, search_items). Deviations are minor: glpi_server_info and glpi_whoami are noun phrases, and glpi_raw_get puts the verb last.
Nine tools is well within the sweet spot and each one maps to a distinct need: diagnostics, identity, two ticket readers, three generic item readers, a KB search, and an escape hatch. Nothing looks padded or redundant.
The surface is entirely read-only: there is no way to create or update a ticket, add a followup or task, or modify any item, even though glpi_server_info advertises a 'delete allowed' safety mode implying write capability is expected. An agent can inspect everything but cannot act on the domain, which is a significant lifecycle gap.
Maintenance
Related MCP Connectors
Read tickets, contacts, companies, agents and groups; create, update and reply to tickets.
Connect Claude, ChatGPT or any AI assistant to Zendesk tickets, CSAT, macros and Help Center.
Read and write Sage Intacct from Claude or ChatGPT. Write tools are flagged for approval.
Read tickets, users, orgs, macros and satisfaction ratings; create, update and comment on tickets.
Related MCP Servers
- AlicenseBqualityNot gradedmaintenanceEnables Claude to interact with ServiceNow instances through the ServiceNow API. Supports comprehensive ServiceNow operations including incident management, service catalog management, change requests, user management, and workflow automation through natural language.82MIT
- AlicenseCqualityDmaintenanceEnables Claude to interact with ServiceNow instances through comprehensive API integration. Supports incident management, service catalog operations, change requests, knowledge base management, user administration, and agile project management with multiple authentication methods.82MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to interact with ServiceNow instances through the ServiceNow API, allowing data retrieval, record management, and workflow execution. Supports multiple authentication methods and tool packaging for role-based access control.MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to interact with ServiceNow instances through the ServiceNow API, supporting record management, service catalog operations, change management, and more via natural language.MIT