GLPI MCP server
Ask Claude about your IT helpdesk and assets in plain words: what's urgent and who owns it, what a person holds and whether any of it is broken, what a ticket says. Add follow-ups and reassign tickets from the same chat, with a confirmation step before anything changes.
Built by Mojood Connect as a working demo for GLPI. It runs against any GLPI 9.5–12 through its REST API. This repository includes a local GLPI with SAMPLE data for the IT department of a made-up company, Harbor Trading, so you can try it without touching a real instance.
Tools
| Tool | What it does | Changes anything? |
|---|---|---|
find_tickets |
Find tickets, highest priority first: status, requester, technicians, groups, deadline, linked assets | No |
get_ticket |
One ticket with its description and every follow-up in order, private ones marked | No |
person_overview |
The assets a person holds (state, and any open ticket about each) and the tickets they asked for | No |
needs_attention |
Tickets with no owner, past their time to resolve, high priority and above, waiting on the requester | No |
add_followup |
A follow-up on a ticket: private to technicians unless asked otherwise | Yes, after confirmation |
update_ticket |
Reassign to a group, add a technician, or change the priority | Yes, after confirmation |
How changes are made safe. A call to add_followup or update_ticket without a confirmation changes nothing:
it returns a plain summary ("On #1 ("VPN drops every 10 minutes at the Riyadh office"): reassign it to Network team
(from Service desk).") and a one-time code. The change happens only when the same request comes back with that code,
within 10 minutes. A code works once, and only for the request it was issued for. The server's instructions tell
the model to show the summary and wait for the user's yes. Follow-ups carry "via Claude (Mojood Connect demo)", and
GLPI records every change in the ticket's history under the signed-in user.
The server signs in as one GLPI user and acts with that user's profile and rights.
Try it locally
Needs Docker (with Compose), uv and Python 3.13.
scripts/reset.sh # local GLPI on http://localhost:8095, filled with the SAMPLE helpdesk
uv run --env-file .env glpi-mcp # MCP server on http://127.0.0.1:8006/mcp (Streamable HTTP)
docker/compose.yml follows GLPI's own docker-compose.example.yml (glpi-project/docker-images), pinned to GLPI
12.0.1 and MySQL 8.4, on 127.0.0.1 only and in UTC. scripts/up.sh gives GLPI's default accounts (glpi, tech,
normal, post-only) generated passwords, creates the demo's API user and switches the REST API on; every password
stays in the git-ignored files docker/.env and .env, and nothing is printed.
Claude Desktop: add this to claude_desktop_config.json (Settings › Developer), with the path to this folder:
{
"mcpServers": {
"glpi": {
"command": "uv",
"args": ["run", "--directory", "/path/to/glpi-mcp", "--env-file", "/path/to/glpi-mcp/.env", "glpi-mcp", "--stdio"]
}
}
}
Then ask: "What urgent tickets are open, and who owns them?", "What does Sara have, and is any of it broken?", "Add a note to the VPN ticket that the firewall logs point to the IPsec tunnel, and reassign it to the network team."
Your own GLPI: set GLPI_URL, GLPI_LOGIN, GLPI_PASSWORD (a GLPI user; the REST API and login-credential
access switched on in Setup › General › API) and GLPI_SAMPLE=0.
The SAMPLE helpdesk
Harbor Trading's IT: three sites, three groups (Service desk, Network team, Field support), four technicians, eight staff, 16 assets (laptops, monitors, phones, warehouse scanners) and ten tickets. Times are set relative to the moment it is seeded, so there is always a major incident with no owner, two tickets past their deadline, one waiting on the requester and some solved history. Everyone and everything in it is made up.
Tests
uv run --env-file .env pytest # unit tests (a fake GLPI API), plus live tests when the local GLPI runs
What a production version adds
This demo signs in as one user. A production server for GLPI customers would add sign-in through GLPI 11+'s OAuth for each technician, so Claude sees exactly their entities and profile; hosting with an audit log of every tool call; and more of the API (problems and changes, knowledge base, contracts, software and licences). That is what Mojood Connect builds.
License
Apache 2.0. GLPI is a trademark of Teclib'; this project is not made or endorsed by Teclib'.
Metadata
Release files for mojood-glpi-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| mojood_glpi_mcp-0.1.0.tar.gz | 60.9 kB | With provenance | Details for mojood_glpi_mcp-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mojood_glpi_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for mojood_glpi_mcp-0.1.0-py3-none-any.whl |
Total release size: 81.7 kB
Release files / mojood_glpi_mcp-0.1.0.tar.gz
| Download URL | mojood_glpi_mcp-0.1.0.tar.gz |
|---|---|
| Size | 60.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ec21cb9487d5c7e96e77cd7eb6c8550ac523b47ee1563b50ee1925bd83442b3b
|
|
BLAKE2b-256 checksum How to use checksums |
370f5c7f06810b8ea49dc3b158425369170324dbef7d9d8d4ad80d8a4bd4e9c1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / mojood_glpi_mcp-0.1.0-py3-none-any.whl
| Download URL | mojood_glpi_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 20.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
274ae23816517d69643f1173785f251f712664865de3c3dbc22453ffba3d70d7
|
|
BLAKE2b-256 checksum How to use checksums |
841ddcc881c6db94eb7211951752ccbbedda64471348eb6bd7541be575ddd387
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logSecurity for mojood-glpi-mcp 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for mojood_glpi_mcp-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.