> For the complete documentation index, see [llms.txt](https://help.glpi-project.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.glpi-project.org/faq/plugins/glpi-ai.md).

# GLPI AI

### How can I understand GLPI AI without the jargon?

Every feature of the plugin is a variation on one of these three ideas.

1. **Conversational AI**: This is the assistant that reads your GLPI instance; it’s the language model. It summarizes, writes, and responds. On its own, it only knows what you show it at that moment. *(chat · summaries · classification · writing)*
2. **RAG**: This feature allows you to view information from the instance and “remember” events from the instance—“this has happened before, and here’s how it was resolved.” *(related tickets · history · semantic search)*
3. **Batch processing**: Repetitive tasks that can be automated

   Translated with DeepL.com (free version)

***

### What features does GLPI AI offer?

* **Chat**: an assistant that can read, search and update GLPI data through MCP tools.
* **Content**: summarize, translation, writing assistant.
* **Classify**: suggest category, impact and urgency.
* **Related content**: find related knowledge base items and related tickets.

***

### What are the prerequisites for using GLPI AI?

GLPI AI requires GLPI 11.0.x with PHP 8.2 minimum (PHP 8.4 recommended) and a GLPI Network BASIC subscription or higher. The plugin is also available for all GLPI Network Cloud instances.

***

### How do I install the plugin?

Go to the marketplace, then download and install the **GLPI AI** plugin.

***

### How much does GLPI AI cost?

The plugin is available to all users with a GLPI Network BASIC (or higher) subscription and to GLPI Network Cloud. It has no price of its own for AI usage: the cost is the one charged by the provider you choose. The usage dashboard shows it per day, per feature and per model, embeddings and batch processing included.

***

### How do I configure the plugin?

A setup wizard guides you step by step: choosing the provider, entering the API key and the model, selecting features, semantic search (optional), permissions, then a summary before you confirm. You can run it again at any time with the button at the top left of the **Provider configuration** tab.

***

### Who can use GLPI AI?

During setup, you choose between three options: **Only me**, **All technicians** or **No one**.

***

### Do I need to create an API token during setup?

This step is optional. If an API token has already been generated (in **Administration** > **Users** > *User* > **API token**, or in **My settings** > **API token**), it is pre-filled. Otherwise, you can generate a new one.

***

### How do I know which provider (LLM) and which model to use, since I have several?

It is not a single choice, but three layers.

* **Layer 1: the default provider.** One, for everything that does not say otherwise. It is the first thing the setup wizard asks for. The star icon lets you set it.
* **Layer 2: the per-action exception.** Each action can pin a different provider and model. "Classify on a cheap model, chat on a strong one, embeddings on Mistral" is a normal configuration, not a workaround. To change the provider of a feature, click the current provider, select **Edit**, then choose the new one.
* **Layer 3: what each provider can actually do.** Not every provider does everything, and this table is what really decides.

<table data-search="false"><thead><tr><th>Provider</th><th align="center">Chat &#x26; actions</th><th align="center">Embeddings (RAG)</th><th align="center">Batch</th><th align="center">Dictation (STT)</th></tr></thead><tbody><tr><td>OpenAI</td><td align="center">✔</td><td align="center">✔</td><td align="center">✔</td><td align="center">✔</td></tr><tr><td>Mistral <em>(European)</em></td><td align="center">✔</td><td align="center">✔</td><td align="center">✔</td><td align="center">✔</td></tr><tr><td>Google Gemini</td><td align="center">✔</td><td align="center">✔</td><td align="center">✔</td><td align="center">✔</td></tr><tr><td>Anthropic</td><td align="center">✔</td><td align="center">—</td><td align="center">✔</td><td align="center">—</td></tr><tr><td>Ollama <em>(self-hosted)</em></td><td align="center">✔</td><td align="center">✔</td><td align="center">—</td><td align="center">—</td></tr><tr><td>DeepSeek</td><td align="center">✔</td><td align="center">—</td><td align="center">—</td><td align="center">—</td></tr><tr><td>OpenRouter</td><td align="center">✔</td><td align="center">—</td><td align="center">—</td><td align="center">—</td></tr></tbody></table>

***

### How do I read this table?

* **Sovereignty, data in Europe:** Mistral covers all four columns on its own. The argument is not "you can use Mistral", it is "you can use Mistral *for everything*".
* **Nothing leaves the building:** Ollama for chat and embeddings. You give up batch and dictation.
* **You want Anthropic for chat:** that works, but embeddings and dictation will come from another provider. The plugin was built to mix providers.

***

### And how do I choose the model within a provider?

The list comes from the provider's own catalog and already flags what each model accepts: images, PDF, audio. The criterion is **volume × complexity**:

* Classification and summaries run *thousands* of times on a simple task: use a small, cheap model.
* Chat and writing run *a few* times on an open-ended task: use a strong model.
* The embedding model is a separate model, and changing it later means re-indexing everything: choose it carefully.

This FAQ deliberately does not list model names or prices: they change every few months. The plugin's usage dashboard shows, per feature and per model, what each choice cost. It is the only number worth trusting.

***

### If I switch providers later, do I lose anything?

No: chat, summaries and settings carry over. Only the RAG index has to be rebuilt, because vectors from different models cannot be compared.

***

### What do I gain with RAG, and why is it optional?

You gain a memory, and it is optional because memory has a cost. Without RAG, the assistant answers only with what is on screen. With RAG, before answering it searches your tickets and articles for the passages that are most **similar in meaning** (not in wording) and brings them along. "Can't log in" finds "password expired in AD".

What you gain:

* **Genuinely related tickets**, with a similarity percentage and a written reason.
* **Suggested category with precedent**: the model sees similar tickets and the category a human actually used on them.
* **Search by meaning** in the chat and for external AIs.

Why it is optional:

* It requires a **second model**, the embedding model, and Anthropic does not offer one.
* It has an **upfront cost**: indexing the history, done once.
* The plugin **works without it**: "related tickets" falls back to keyword search, and the screen warns that precision is lower.

***

### When can I do without RAG for now?

* New or small instance, with no history worth consulting.
* You only want summaries, chat, and urgency and impact classification: none of them depend on RAG.

***

### Is there a simple rule of thumb?

If your instance has years of *solved* tickets, turn it on. That is the moment the plugin stops being "a chat inside GLPI" and starts knowing your operation.

***

### How do I set up semantic search (vectorization)?

It indexes your tickets and knowledge base articles as vectors. You can skip this step during setup and configure it later. You can test the connection with your provider, but **this step consumes credits**.

***

### What does the Embeddings section contain?

* **Engine**: the provider in charge of vectorization, with a customizable model ID.
* **Indexing**: the number of indexed chunks, with the option to re-index or clear the index.
* **Search history depth**: the volume of closed tickets and knowledge base articles analyzed. The higher the value, the more complete the search, but the slower it is.
* **Noise filter**: removes repeated sentences (signatures, disclaimers) before indexing. The `recalibrateBoilerplate` automatic action lets GLPI AI learn the vocabulary used in recent tickets.

***

### Do I need to install a special database for RAG?

No. The vectors are stored in an ordinary table inside GLPI itself.

***

### What is batch processing for, and do I need it?

It does one thing: summarize a lot while paying little. Turning on automatic summaries on an instance with tens of thousands of tickets is the one place where AI cost in a service desk truly bites. Batch bundles up to 2,000 requests into a single file, hands it to the provider and collects the result hours later, for roughly half the price. You trade urgency for money.

***

### When do I need batch processing?

* You want the **entire history summarized**, so the chat and external AIs can understand old tickets without reading everything.
* You have **spikes** of hundreds of tickets a day.

***

### When can I do without it?

* You summarize ticket by ticket, on click.
* Volume is low: the normal mode processes 20 items per cron pass and keeps up.

***

### What should I know before turning batch processing on?

* It only works with **OpenAI, Anthropic, Mistral and Gemini**.
* Today it serves **summaries only**. Nothing else goes through batch.
* Automatic submission is triggered when the queue holds at least 200 pending items. Results are expected within 24 hours, and the `pollBatchJobs` automatic action must be configured in **Setup** > **Automatic actions**.
* If the network drops while fetching results, it resumes on its own: the batch was already paid for and is not lost.

***

### What can the chat assistant do?

If the "Expose MCP tools to chat" option is enabled, it can read, search and update GLPI data. User approval is requested for any action that modifies data (anything that is not a read) and for all external MCP calls.

***

### Can chat responses be displayed as they are generated?

Yes. With the streaming option, the response is displayed as it is generated instead of waiting for the complete answer.

***

### Does GLPI freeze while the AI is thinking?

No. You keep navigating, and the answer is saved even if you refresh the page. For on-premise installations, see the dedicated section below on sizing PHP-FPM.

***

### Can I dictate my messages?

Yes, with speech to text, using the providers that offer it (see the table above). Two options are available: automatic stop after about 1.5 seconds of silence, and automatic sending of the transcribed text to the chat without pressing Send.

***

### How do summaries work?

In automatic mode, the summary is refreshed every time the item is updated or a followup is added. You can also list the tickets that have no summary and process them later through an automatic action, a cheaper process. The `processSummaryQueue` automatic action must then be configured.

***

### Are the category, impact and urgency suggestions risk-free?

With the "Run automatically" option, they run every time an ITIL item is created and **overwrite any pre-filled value**. Item creation can be slowed down if you use a slow AI model.

***

### What are quick actions?

They are the suggestions offered when you open a new chat: explain this ticket, analyze root causes, assess risks, improve this article, suggest a solution, write a reply to the requester. Each one has its own prompt, icon and context (ticket, problem, knowledge base, etc.). You can add your own with **+ Add a quick option**.

***

### What are writing actions?

They are writing aids, grouped by category:

* **Writing**: fix, rephrase, simplify.
* **Tone**: make friendly, make professional.
* **Length**: expand, shorten, key points.
* **Generate**: suggest a reply.

They can be edited or deleted, and you can add your own categories and actions.

***

### What options are available for each writing action?

* **Requires text**: when turned off, the action can run on an empty editor.
* **Include context**: lets the AI read the current item and its followups through MCP tools.
* **Item types**: limits the action to an item type (change, ticket, computer, etc.). Left empty, the action is offered everywhere.

***

### Will the AI see tickets I am not allowed to see?

No. In search by meaning and in the MCP tools alike, the AI acts with the permissions of the logged-in user. The filter runs before any passage reaches the model.

***

### Can I connect other AIs to this plugin? And can I connect any MCP to this AI?

Yes, in both directions. MCP is a standard socket: it defines how an AI "plugs in" tools. The plugin has both the socket **and** the plug.

*"GLPI becomes a tool for the AI you already use, and GLPI's AI becomes a user of the tools you already have."*

***

### How does an external AI access my GLPI?

The plugin is an MCP **server**. Claude Desktop, Copilot in VS Code, or any client that speaks HTTP can connect to it and get tools to work inside your GLPI.

* **Needs:** the GLPI URL, an App-Token and the person's user\_token.
* **The AI gets:** search, read item, read followups, read summaries, search by meaning, create, update, delete.
* **Rights:** the profile must have the "MCP" right, and the AI acts **as that user**, no more and no less.

***

### How do I connect an external client (Claude Desktop, VS Code…) to GLPI?

Configure the client with the URL `https://your-glpi.example.com/plugins/glpiai/mcp` and two headers: `App-Token` and `Authorization: user_token YOUR_TOKEN`. The app token is generated in **Setup** > **General** > **API** (add an API client). The user token is found in **Administration** > **Users** > *your user* > **Remote access keys**.

***

### Which MCP transport should I choose: Streamable HTTP or SSE?

Prefer **Streamable HTTP** (`"type": "http"`), which only uses a worker for the duration of the call. The legacy SSE transport (`"type": "sse"`) keeps a PHP worker busy for as long as the client is connected, even though the server closes the stream every 5 minutes and the client reconnects.

***

### What are the MCP server endpoints?

* `GET /plugins/glpiai/mcp`: legacy SSE stream.
* `POST /plugins/glpiai/mcp`: Streamable HTTP transport (JSON-RPC).
* `POST /plugins/glpiai/mcp/message`: JSON-RPC messages (legacy SSE).
* `GET /plugins/glpiai/mcp/health`: health check.

***

### How does GLPI use external MCP servers?

Through the "Remote MCP servers" tab. Any MCP reachable through an HTTP(S) URL enters the chat with the `glpi_ext_` prefix. They let GLPI retrieve information from external sources, such as a knowledge base or a company's internal documentation.

* **Authentication:** none, Bearer, API key or Basic, plus custom headers.
* **Preconfigured servers:** GLPI's internal server and the **official GLPI documentation**. Once the latter is switched on, the chat answers "how do I do X" questions by citing the manual. You can disable or delete them.
* **Limit:** HTTP only. A local MCP that runs from the command line on your machine cannot be connected.

***

### How do I add an MCP server?

Click **+ Add a server**, then fill in the name, URL, description, authentication and custom headers if needed.

***

### How can I track AI consumption?

The **Usage** tab shows tokens, calls and errors per provider, model, feature and user, with a daily trend and a period filter.

***

### Where can I view the logs?

The **Logs** tab offers a search box and filters by level: Debug, Info, Warning, Error, Exception. The "Deep debug" option records all AI interactions (requests, responses, MCP calls) in `glpiai-debug.log`, in JSON format. The "Clear logs" button empties `glpiai.log` and `glpiai-debug.log`.

***

### Which automatic actions does the plugin use?

* `pollBatchJobs`: polls the provider's AI batch jobs and ingests their results.
* `processSummaryQueue`: processes the queue of pending AI summary generations.
* `processVectorQueue`: processes the queue of pending vector embedding indexing.
* `recalibrateBoilerplate`: recalibrates the repeated-text detection phrase lists from the current ticket corpus.
* `updateModelsDevCatalog`: downloads the latest models.dev model catalog (context windows, capabilities, pricing). It requires an outbound HTTPS connection to models.dev and can be disabled in the GLPI AI configuration.

***

### Why does my GLPI instance freeze or return 502/504 errors since I enabled GLPI AI?

LLM providers can take several seconds, sometimes a minute, to respond. During that time, a PHP-FPM worker stays busy. With the default configuration (`pm.max_children = 5`), a handful of simultaneous AI requests is enough to saturate the instance.

***

### How do I size PHP-FPM?

Increase `pm.max_children` in `www.conf` (for example 40, with `pm.start_servers = 8`, `pm.min_spare_servers = 4` and `pm.max_spare_servers = 12`). To choose the value, consider memory (RAM available to PHP ÷ average memory per worker, usually 40 to 100 MB) and the number of expected simultaneous users. The `server reached pm.max_children setting` message in the FPM log means the pool is too small.

***

### Can I isolate AI traffic from the rest of GLPI?

Yes. On large instances, you can route `/plugins/glpiai/` to a dedicated PHP-FPM pool, so that a burst of AI requests cannot starve the rest of GLPI of resources.

***

### Which web server settings should I check for streaming?

Streaming uses Server-Sent Events (SSE), which must not be buffered.

* **nginx**: `fastcgi_read_timeout 300s;`, `fastcgi_buffering off;` and `gzip off;` for the plugin location.
* **Apache**: `ProxyTimeout 300` and `flushpackets=on`.
* **PHP**: `zlib.output_compression` must be `Off`.
* **Proxy**: no reverse proxy or WAF should buffer `text/event-stream` responses.

***

### Why enable HTTP/2?

With HTTP/1.1, browsers open at most 6 connections per site, shared across all tabs. An open stream uses one of them, so several GLPI tabs streaming at once can block pages from loading in the browser. HTTP/2 removes this limit, but it requires HTTPS and does not add PHP workers.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.glpi-project.org/faq/plugins/glpi-ai.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
