Files
glances/docs/api/mcp.rst
2026-02-21 20:57:00 +01:00

182 lines
6.8 KiB
ReStructuredText

.. _api_mcp:
MCP (Model Context Protocol) server
=====================================
Glances can expose its system monitoring data through a
`Model Context Protocol <https://modelcontextprotocol.io>`_ (MCP) server,
allowing AI assistants (Claude, Cursor, VS Code Copilot, …) to query
real-time metrics and generate structured analyses directly from their chat
interface.
The MCP server is mounted alongside the standard RESTful API when the web
server is started with the ``--enable-mcp`` flag. It uses **Server-Sent
Events** (SSE) as its transport layer, which means any MCP-compatible client
that supports SSE can connect to it.
Requirements
------------
The ``mcp`` Python package must be installed:
.. code-block:: bash
pip install 'glances[mcp]'
Start the MCP server
--------------------
Add ``--enable-mcp`` to any Glances web-server command:
.. code-block:: bash
glances -w --enable-mcp
The MCP server is then reachable at ``http://localhost:61208/mcp``.
The SSE endpoint used by MCP clients is:
.. code-block:: text
http://localhost:61208/mcp/sse
To change the mount path (default: ``/mcp``):
.. code-block:: bash
glances -w --enable-mcp --mcp-path /monitoring/mcp
Authentication
--------------
The MCP endpoint inherits the authentication policy of the web server.
When Glances is started with ``--password``, every MCP request must carry
valid credentials — either **HTTP Basic Auth** or a **JWT Bearer token**
(see :ref:`api_restful` for how to obtain a JWT token).
When no password is configured the MCP endpoint is open.
Resources
---------
MCP resources are read-only data sources that a client can list and read.
Static resources
~~~~~~~~~~~~~~~~
============================================ ================================================
URI Description
============================================ ================================================
``glances://plugins`` JSON list of all active plugin names
``glances://stats`` JSON object of all plugins' current statistics
``glances://limits`` JSON object of alert thresholds for all plugins
============================================ ================================================
Resource templates (parameterised)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
============================================== =====================================================
URI template Description
============================================== =====================================================
``glances://stats/{plugin}`` Current statistics for one plugin
``glances://stats/{plugin}/history`` Historical time-series for one plugin
``glances://limits/{plugin}`` Alert thresholds for one plugin
============================================== =====================================================
Replace ``{plugin}`` with any name returned by ``glances://plugins``
(e.g. ``cpu``, ``mem``, ``network``, ``processlist``, …).
Prompts
-------
MCP prompts are pre-built analysis templates that embed live Glances data
into a system prompt ready to be sent to an LLM.
+-----------------------------+-----------------------------------------------------+-------------------+
| Prompt name | Description | Parameters |
+=============================+=====================================================+===================+
| ``system_health_summary`` | Overall health report: CPU, memory, swap, | *(none)* |
| | load, filesystems, network | |
+-----------------------------+-----------------------------------------------------+-------------------+
| ``alert_analysis`` | Analysis of active alerts with remediation steps | ``level`` |
| | | (``warning`` / |
| | | ``critical`` / |
| | | ``all``) |
+-----------------------------+-----------------------------------------------------+-------------------+
| ``top_processes_report`` | Report on the most CPU-intensive processes | ``nb`` |
| | | (integer, |
| | | default ``10``) |
+-----------------------------+-----------------------------------------------------+-------------------+
| ``storage_health`` | Disk usage and I/O statistics analysis | *(none)* |
+-----------------------------+-----------------------------------------------------+-------------------+
Connect an MCP client
---------------------
Claude Desktop
~~~~~~~~~~~~~~
Add the following entry to your ``claude_desktop_config.json``
(``~/Library/Application Support/Claude/claude_desktop_config.json`` on macOS,
``%APPDATA%\Claude\claude_desktop_config.json`` on Windows):
.. code-block:: json
{
"mcpServers": {
"glances": {
"url": "http://localhost:61208/mcp/sse"
}
}
}
For a password-protected server, use the ``headers`` field:
.. code-block:: json
{
"mcpServers": {
"glances": {
"url": "http://localhost:61208/mcp/sse",
"headers": {
"Authorization": "Basic <base64(user:password)>"
}
}
}
}
Python MCP client (programmatic access)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
import asyncio
from mcp.client.sse import sse_client
from mcp import ClientSession
async def main():
async with sse_client("http://localhost:61208/mcp/sse") as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# List available resources
resources = await session.list_resources()
print([str(r.uri) for r in resources.resources])
# Read CPU stats
from pydantic import AnyUrl
result = await session.read_resource(AnyUrl("glances://stats/cpu"))
print(result.contents[0].text)
# Run a health-summary prompt
prompt = await session.get_prompt("system_health_summary")
print(prompt.messages[0].content.text[:200])
asyncio.run(main())
.. seealso::
:ref:`api_restful` — RESTful/JSON API documentation
:ref:`cmds` — full command-line reference