mcpField
G
GLPI MCP

GLPI MCP

ローカル
github.comビジネス・マーケティング03 日前に更新

GLPI MCP について

GLPI MCPは、GLPIのITサービス管理データを扱うAIアシスタントや自動化ツール向けのPython製MCPサーバーです。GLPIのOpenAPI仕様からエンドポイントを検出し、読み取り専用、ドライラン、複数のユーザー認証方式に対応します。

主な機能

  1. 01チケット、変更、問題の検索
  2. 02項目の履歴と担当チームの取得
  3. 03資産、ユーザー、ナレッジベース記事の検索・管理
  4. 04OpenAPIによるエンドポイントとスキーマの検出
  5. 05書き込み、読み取り専用、ドライランの各モード

活用シーン

  1. 01チケットの状態と対応履歴の確認
  2. 02資産と財務情報の確認
  3. 03ナレッジベース記事や関連文書の検索

MCP 対応

このMCPサーバーは、チケット、資産、ユーザー、ナレッジベース記事、文書、汎用API操作のツールをMCPクライアントに公開します。STDIO、SSE、HTTPに対応し、ユーザーごとの認証方式も選べます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"mhajder-glpi": {
"command": "uvx",
"args": [
"glpi-mcp-server"
],
"env": {
"GLPI_URL": "<GLPI_URL>",
"GLPI_CLIENT_ID": "<GLPI_CLIENT_ID>",
"GLPI_CLIENT_SECRET": "<GLPI_CLIENT_SECRET>",
"GLPI_USERNAME": "<GLPI_USERNAME>",
"GLPI_PASSWORD": "<GLPI_PASSWORD>",
"GLPI_SCOPES": "<GLPI_SCOPES>",
"GLPI_API_VERSION": "<GLPI_API_VERSION>",
"GLPI_ENTITY": "<GLPI_ENTITY>",
"GLPI_ENTITY_RECURSIVE": "<GLPI_ENTITY_RECURSIVE>",
"GLPI_PROFILE": "<GLPI_PROFILE>",
"GLPI_VERIFY_SSL": "<GLPI_VERIFY_SSL>",
"GLPI_TIMEOUT": "<GLPI_TIMEOUT>",
"READ_ONLY_MODE": "<READ_ONLY_MODE>",
"DRY_RUN_MODE": "<DRY_RUN_MODE>",
"DISABLED_TAGS": "<DISABLED_TAGS>",
"RESPONSE_MAX_SIZE": "<RESPONSE_MAX_SIZE>",
"LOG_LEVEL": "<LOG_LEVEL>",
"RATE_LIMIT_ENABLED": "<RATE_LIMIT_ENABLED>",
"RATE_LIMIT_MAX_REQUESTS": "<RATE_LIMIT_MAX_REQUESTS>",
"RATE_LIMIT_WINDOW_MINUTES": "<RATE_LIMIT_WINDOW_MINUTES>",
"TOOL_SEARCH_ENABLED": "<TOOL_SEARCH_ENABLED>",
"TOOL_SEARCH_STRATEGY": "<TOOL_SEARCH_STRATEGY>",
"TOOL_SEARCH_MAX_RESULTS": "<TOOL_SEARCH_MAX_RESULTS>",
"MCP_HTTP_PORT": "<MCP_HTTP_PORT>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>"
}
}
}
}
起動コマンドuvx glpi-mcp-server
設定が必要な環境変数
GLPI_URLGLPI root URL without /api.php (e.g., https://glpi.example.com); needs GLPI 11.0.6+ or 12
GLPI_CLIENT_IDOAuth client ID from GLPI Setup > OAuth clients
GLPI_CLIENT_SECRETシークレットOAuth client secret from GLPI Setup > OAuth clients
GLPI_USERNAMEGLPI user the tools act as (OAuth password grant)
GLPI_PASSWORDシークレットPassword of the GLPI user
GLPI_SCOPESOAuth scopes to request, space- or comma-separated (add graphql for GraphQL)
GLPI_API_VERSIONHigh-Level API version: auto, 2.3 or 3.0
GLPI_ENTITYEntity ID to work in (GLPI-Entity header)
GLPI_ENTITY_RECURSIVEInclude sub-entities of GLPI_ENTITY
GLPI_PROFILEProfile ID to work with (GLPI-Profile header)
GLPI_VERIFY_SSLVerify SSL certificates
GLPI_TIMEOUTTotal seconds allowed for one request, retries included
READ_ONLY_MODEEnable read-only mode to restrict write operations
DRY_RUN_MODEWrite tools return the request they would send instead of changing GLPI
DISABLED_TAGSComma-separated list of tags to disable tools for
RESPONSE_MAX_SIZEMaximum size of a tool response in bytes (empty = unlimited)
LOG_LEVELLogging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
RATE_LIMIT_ENABLEDEnable rate limiting
RATE_LIMIT_MAX_REQUESTSMaximum requests per rate limit window
RATE_LIMIT_WINDOW_MINUTESRate limit window in minutes
TOOL_SEARCH_ENABLEDEnable FastMCP tool search transform
TOOL_SEARCH_STRATEGYTool search strategy (bm25 or regex)
TOOL_SEARCH_MAX_RESULTSMaximum tool search results returned by search_tools
MCP_HTTP_PORTPort for HTTP server (default: 8000)
MCP_TRANSPORTMCP transport type: stdio, sse, or http (alias: streamable-http)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiglpi-mcp-server0.1.0
ocighcr.io/mhajder/glpi-mcp:0.1.0

ツール

45

掲載時のツール一覧 · 3 日前に更新

このツールにパラメーターはありません。

詳細

GLPI MCP サーバー

Model Context Protocol を通じて、AI エージェントが GLPI のチケット、資産、ナレッジベースを操作できるようにします

PyPI Python License

Pre-commit Checks Docker MCP Registry

インストール · ツール · 設定 · セキュリティ

GLPI MCP Server は、GLPI IT サービス管理プラットフォーム向けの、Python ベースの Model Context Protocol(MCP)サーバーです。GLPI の高レベル API(/api.php、OAuth2)と通信し、AI アシスタントや自動化ツールから、チケット、変更、問題(タイムラインやチームを含む)、資産、ユーザー、グループ、エンティティ、ナレッジベース、ドキュメントにアクセスできます。また、GLPI が公開するすべてのエンドポイントにアクセスできる汎用ツールも備えています。読み取り専用モードやドライランモード、ユーザーごとの GLPI アクセスに対応し、リモート MCP クライアント向けの OAuth ログインも利用できます。

✨ 機能

主な機能
  • ステータス、タイプ、優先度、カテゴリ、エンティティ、日付、テキスト、または任意の RSQL フィルターでチケット、変更、問題を検索
  • アイテムの完全なタイムライン(フォローアップ、タスク、解決策、承認、ドキュメント)を表示
  • 財務情報を含め、あらゆるタイプの資産(カスタム資産を含む)を検索、表示
  • ユーザー、グループ、エンティティ、プロファイルを検索
  • ナレッジベースの記事を検索、表示し、ドキュメントをダウンロード
  • GLPI 独自の OpenAPI ドキュメントからすべてのエンドポイントとスキーマを検出するため、特定の GLPI バージョンにハードコードされません
管理操作
  • チケット、変更、問題の作成、更新、削除(有効化されている場合)
  • フォローアップ、タスク、解決策、承認リクエストの追加
  • 技術者やグループの割り当て、依頼者やオブザーバーの追加
  • 資産やナレッジベースの記事の作成、更新、削除
  • 汎用ツールを使って、任意のエンドポイントのアイテムを作成、更新、削除
高度な機能
  • GLPI 11.0.6 以降(API 2.3)および GLPI 12(API 3.0、または固定した場合は 2.3)に対応。バージョンは検出され、すべてのリクエストで固定されます
  • トークンのキャッシュと更新に対応した OAuth パスワードグラント
  • ユーザーごとのアクセス:トークンの受け渡し、またはリモート MCP クライアント向けに GLPI アカウントでサインイン(OAuth ログイン)
  • 外部 ID プロバイダー経由の OIDC ログイン、または静的ベアラートークン
  • 読み取り専用モード、ドライランモード、タグベースのツールフィルタリング
  • HTML リッチテキストをプレーンテキストに変換してトークンを節約
  • レート制限、レスポンスサイズ上限、任意のツール検索変換
  • 複数のトランスポート方式(STDIO、SSE、HTTP)と任意の Sentry 統合

🚀 インストール

前提条件
  • Python 3.11~3.15
  • GLPI 11.0.6 以降(12.x を含む)。GLPI 10 および GLPI 11.0.0~11.0.5 は、高レベル API 2.3 に対応していないため サポートされません
  • Setup > General > API で API が有効になっていること(「Enable API」)
  • OAuth クライアント(GLPI の設定を参照)
PyPI からのクイックインストール

最も簡単に始めるには、PyPI からインストールします。

# Using UV (recommended)
uvx glpi-mcp-server

# Or using pip
pip install glpi-mcp-server

サーバーを実行する前に、GLPI インスタンスの環境変数を設定してください。

# Create environment configuration
export GLPI_URL=https://glpi.example.com
export GLPI_CLIENT_ID=your-client-id
export GLPI_CLIENT_SECRET=your-client-secret
export GLPI_USERNAME=glpi-mcp
export GLPI_PASSWORD=change-me
ソースからのインストール
  1. リポジトリをクローンします。
git clone https://github.com/mhajder/glpi-mcp.git
cd glpi-mcp
  1. 依存関係をインストールします。
# Using UV (recommended)
uv sync

# Or using pip
pip install -e .
  1. 環境変数を設定します。
cp .env.example .env
# Edit .env with your GLPI URL and OAuth credentials
  1. サーバーを実行します。
# Using UV (recommended)
uv run glpi-mcp

# Or using the installed command directly
glpi-mcp
Docker の使用

簡単にデプロイできるよう、GitHub Packages で Docker イメージを公開しています。HTTP ストリーミング可能トランスポートをポート 8000(/mcp)で実行します。

docker pull ghcr.io/mhajder/glpi-mcp:latest

GLPI ログインまたは OIDCを有効にしている場合は、コンテナーを再作成しても OAuth クライアント登録が維持されるように、/data にボリュームをマウントしてください。

Open WebUI

Open WebUI 0.6.31 以降では、イメージに直接接続できます。Open WebUI で、Admin Settings > Integrations > External Tool Servers に移動し、接続の種類として MCP (Streamable HTTP) を追加して、URL に http://<host>:8000/mcp を指定し、Bearer 認証に MCP_HTTP_BEARER_TOKEN を設定します。

GLPI ログインまたは OIDCを有効にしている場合は、パブリック URL + /mcp を使用し、代わりに OAuth 2.1 認証を選択してください。Open WebUI はクライアントとして自身を登録するため、リダイレクト URI を制限する場合は、Open WebUI の URL を含めてください。

開発環境のセットアップ

追加ツールを使った開発の場合:

# Clone and install with development dependencies
git clone https://github.com/mhajder/glpi-mcp.git
cd glpi-mcp
uv sync --group dev

# Run tests
uv run pytest

# Run with coverage
uv run pytest --cov=src/

# Run linting and formatting
uv run ruff check .
uv run ruff format .

# Run type checking
uv run ty check .

# Setup prek hooks
uv run prek install

🔧 設定

GLPI のセットアップ
  1. API を有効にする:Setup > General > API > "Enable API"。
  2. OAuth クライアントを作成する:Setup > OAuth clients > Add。
    • グラント:Password(GLPI_USERNAME/GLPI_PASSWORD 用)。GLPI ログイン用に Authorization Code を追加します。
    • スコープ:api と user。glpi_graphql_query 用に graphql を追加します。
    • GLPI ログイン用に、リダイレクト URI を GLPI_OAUTH_BASE_URL + GLPI_OAUTH_REDIRECT_PATH に設定します。
    • 生成されたクライアント ID とシークレットをコピーします。
  3. サーバー用の GLPI ユーザー(例:glpi-mcp)を作成し、ツールに必要な権限だけを持つプロファイルを設定します。ユーザーごとのアクセスを有効にしない限り、すべてのツール呼び出しはこのユーザーとして実行されます。
環境変数
# GLPI Connection Details
# GLPI root URL, without /api.php
GLPI_URL=https://glpi.example.com

# OAuth client from Setup > OAuth clients
GLPI_CLIENT_ID=your-client-id
GLPI_CLIENT_SECRET=your-client-secret

# GLPI account the tools act as (OAuth password grant)
GLPI_USERNAME=glpi-mcp
GLPI_PASSWORD=change-me

# OAuth scopes, space- or comma-separated (default: api user)
GLPI_SCOPES=api user

# High-Level API version: auto (default), 2.3 or 3.0
GLPI_API_VERSION=auto

# Optional: entity and profile to work in
# GLPI_ENTITY=0
# GLPI_ENTITY_RECURSIVE=true
# GLPI_PROFILE=4

# SSL Configuration
GLPI_VERIFY_SSL=true
GLPI_TIMEOUT=30

# Per-user GLPI access (HTTP transports only; pick at most one)
# GLPI_TOKEN_PASSTHROUGH=false
# GLPI_OAUTH_LOGIN=false
# GLPI_OAUTH_BASE_URL=https://glpi-mcp.example.com
# GLPI_OAUTH_REDIRECT_PATH=/auth/callback
# GLPI_OAUTH_ALLOWED_REDIRECT_URIS=

# Read-Only Mode
READ_ONLY_MODE=false

# Dry-Run Mode
DRY_RUN_MODE=false

# Disabled Tags
# Example: DISABLED_TAGS=assets,knowledgebase,graphql
DISABLED_TAGS=

# Response Size Limit (bytes; empty = unlimited)
# RESPONSE_MAX_SIZE=500000

# Logging Configuration
LOG_LEVEL=INFO

# Rate Limiting
RATE_LIMIT_ENABLED=false
RATE_LIMIT_MAX_REQUESTS=60
RATE_LIMIT_WINDOW_MINUTES=1

# Tool Search Transform (Optional)
TOOL_SEARCH_ENABLED=false
TOOL_SEARCH_STRATEGY=bm25
TOOL_SEARCH_MAX_RESULTS=5

# Sentry Error Tracking (Optional)
# SENTRY_DSN=https://[email protected]/6789

# MCP Transport Configuration
# 'stdio' (default), 'sse' or 'http' ('streamable-http' is an alias for 'http')
MCP_TRANSPORT=stdio
# MCP_HTTP_HOST=127.0.0.1
# MCP_HTTP_PORT=8000
# MCP_HTTP_BEARER_TOKEN=

# OIDC / OAuth Authentication (optional, for remote hosting)
# OIDC_CONFIG_URL=https://id.example.com/.well-known/openid-configuration
# OIDC_CLIENT_ID=
# OIDC_CLIENT_SECRET=
# OIDC_BASE_URL=https://glpi-mcp.example.com

コメント付きのすべての設定については、.env.example を参照してください。

API バージョン

GLPI は、利用可能な High-Level API のバージョンを GET /api.php/ で一覧表示します。初回の使用時にサーバーはこの一覧を読み取り、すべてのリクエストパスで特定のバージョンを指定します(/api.php/v2.3/... または /api.php/v3.0/...)。これは、GLPI が不明なバージョンを最新バージョンに黙ってルーティングするためです。

GLPI提供されるバージョンGLPI_API_VERSION=auto が選択するバージョン
10.x、11.0.0-11.0.5なし / 2.0-2.2非対応
11.0.6 以降2.32.3
12.x2.3、3.03.0

GLPI 12 で 2.3 のスキーマを使い続ける場合(たとえば、他の連携を移行している間)は、GLPI_API_VERSION=2.3 を設定します。スキーマの差異に依存するツールは両方に対応しています。ナレッジベースの記事は、2.3 では categories、3.0 では親記事(parents)の下に分類されます。

エンティティとプロファイル

GLPI では、すべての API セッションが有効なプロファイルとエンティティにスコープされます。デフォルトでは、ユーザーの既定値が使用されます。GLPI_ENTITY、GLPI_ENTITY_RECURSIVE、GLPI_PROFILE を設定すると、リクエストごとに GLPI-Entity、GLPI-Entity-Recursive、GLPI-Profile ヘッダーが送信され、これらを変更できます。glpi_whoami では有効な設定を確認でき、glpi_get_entity_tree では利用可能なエンティティを一覧表示できます。

🧰 利用可能なツール

サーバーとセッション
  • glpi_server_info:GLPI が提供する API バージョン、固定されたバージョン、認証モード、安全モード
  • glpi_whoami:ツールが操作する GLPI ユーザーと、有効なプロファイルおよびエンティティ
  • glpi_get_entity_tree:現在のユーザーが操作できるエンティティ
チケット、変更、問題

すべてitil_typeを受け取ります。値はTicket(デフォルト)、Change、Problemです。

  • glpi_search_itil:ステータス、タイプ、優先度、カテゴリー、エンティティ、日付、テキスト、またはフィルターで検索します
  • glpi_get_itil:説明とチームを含む項目を1件取得します
  • glpi_get_itil_timeline:フォローアップ、タスク、ソリューション、承認、ドキュメントを確認します
  • glpi_create_itil / glpi_update_itil / glpi_delete_itil:作成、更新、削除します
  • glpi_add_itil_followup:フォローアップを追加します(公開または非公開)
  • glpi_add_itil_task:状態、所要時間、技術者、計画を指定してタスクを追加します
  • glpi_add_itil_solution:ソリューションを追加します
  • glpi_request_itil_validation:チケットまたは変更の承認をユーザーまたはグループに依頼します
  • glpi_list_itil_team:依頼者、担当者、オブザーバーを一覧表示します
  • glpi_add_itil_team_member / glpi_remove_itil_team_member:ユーザー、グループ、サプライヤーを割り当てる、または削除します
資産
  • glpi_list_asset_types:カスタム資産を含む、このGLPIの資産タイプを一覧表示します
  • glpi_search_assets:名前、シリアル番号、インベントリ番号、またはフィルターで、1つの資産タイプまたはすべての資産タイプを検索します
  • glpi_get_asset:財務情報を含めるかどうかを指定して、資産を1件取得します
  • glpi_create_asset / glpi_update_asset / glpi_delete_asset:作成、更新、削除します
ユーザー、グループ、エンティティ、プロファイル
  • glpi_search_users / glpi_get_user:ユーザーを検索し、IDまたはログイン名で1人取得します
  • glpi_search_groups / glpi_get_group:グループを検索し、IDで1つ取得します
  • glpi_search_entities / glpi_get_entity:エンティティを検索し、IDで1つ取得します
  • glpi_list_profiles:プロファイル(権限のセット)を一覧表示します
ナレッジベース
  • glpi_search_kb_articles / glpi_get_kb_article:記事を検索して読み込みます
  • glpi_create_kb_article / glpi_update_kb_article:記事を作成、更新します
  • glpi_list_kb_categories:カテゴリー(API 2.3)、または最上位の記事(API 3.0)を一覧表示します
ドキュメント
  • glpi_search_documents / glpi_get_document:ドキュメントを検索し、メタデータを読み込みます
  • glpi_download_document:ファイルをダウンロードします(テキスト、またはバイナリファイルの場合はbase64)

High-Level APIにはファイルのアップロード機能がないため、ドキュメントはGLPI自体からアップロードします。

汎用
  • glpi_list_endpoints:GLPIのOpenAPIドキュメントにあるすべてのエンドポイントパスとメソッドを一覧表示します
  • glpi_describe_schema:フィルターと書き込みに使用するスキーマのプロパティ、型、列挙値を表示します
  • glpi_list_items:フィルター、並べ替え、ページ指定、フィールド選択を使って、任意のコレクションを一覧表示します
  • glpi_get_item:任意の項目またはリソースを取得します
  • glpi_create_item / glpi_update_item / glpi_delete_item:任意のエンドポイントに書き込みます
  • glpi_graphql_query:読み取り専用のGraphQLクエリを実行します(graphqlスコープが必要です)
フィルタリング

リストツールはfilters(GLPIのRSQLに変換される辞書)と、filter(生のRSQL)を受け取ります。 両方の条件がANDで結合されます。

{
  "filters": {"status.id": [1, 2], "name__ilike": "*printer*", "entity.id": 0},
  "filter": "priority=ge=4"
}

サフィックス:__ne、__in、__out、__lt、__le、__gt、__ge、__like、 __ilike(*はワイルドカード)、__isnull、__isnotnull、__empty、 __notempty。リストは「いずれか」を意味し、Noneは「nullである」を意味します。ネストされたプロパティには ドットパス(status.id、entity.id)を使用します。glpi_describe_schemaには各スキーマの プロパティが一覧表示されます。チケットのteamなどの計算プロパティはフィルターに使用できません。 GLPIはHTTP 500を返します。

🔐 MCP クライアントの認証

MCP クライアントがこのサーバー(HTTPトランスポート)に対して認証する方法と、その後ツールがGLPIでどのユーザーとして動作するかを説明します。次のいずれかを選択してください。

モード設定MCP クライアントが送信するものツールの実行ユーザー
なし-何も送信しないGLPI_USERNAME
静的ベアラートークンMCP_HTTP_BEARER_TOKEN共有トークンGLPI_USERNAME
OIDCOIDC_*IDプロバイダーでのOAuthログインGLPI_USERNAME
GLPIログインGLPI_OAUTH_LOGIN=true自分のGLPIアカウントでのOAuthログイン各ユーザー
トークンパススルーGLPI_TOKEN_PASSTHROUGH=true自分のGLPIアクセストークン各ユーザー

ユーザーごとのモード(GLPIログインとトークンパススルー)は、相互に、またOIDCやMCP_HTTP_BEARER_TOKENと組み合わせることはできません。サーバーは起動を拒否します。

GLPI ログイン:ユーザーが GLPI にサインイン

多くの MCP クライアント(Claude、Open WebUI、リモートコネクター)は、Dynamic Client Registration を使用した OAuth でしか認証できません。GLPI_OAUTH_LOGIN=true にすると、サーバーはこの OAuth インターフェイスを提供し、FastMCP の OAuthProxy を使用して GLPI 独自の OAuth サーバー(/api.php/authorize、/api.php/token)に仲介します。ユーザーはこのサーバーの同意ページで MCP クライアントを承認し、GLPI のログインページでサインインして、GLPI の「GLPI アカウントへのアクセスを要求しています」ページで Accept をクリックします。その後のすべてのツール呼び出しは、そのユーザー自身の GLPI トークン、権限、エンティティを使用して実行されます。アクセストークンの有効期限が切れると、GLPI のリフレッシュトークンが使用されます。

  1. GLPI の OAuth クライアントで、Authorization Code グラントと api および user スコープを許可し、リダイレクト URI に GLPI_OAUTH_BASE_URL + GLPI_OAUTH_REDIRECT_PATH を設定します。例:https://glpi-mcp.example.com/auth/callback。
  2. サーバーを設定します。
MCP_TRANSPORT=http
MCP_HTTP_HOST=0.0.0.0
GLPI_URL=https://glpi.example.com
GLPI_CLIENT_ID=your-client-id
GLPI_CLIENT_SECRET=your-client-secret
GLPI_OAUTH_LOGIN=true
# Public HTTPS URL of this server
GLPI_OAUTH_BASE_URL=https://glpi-mcp.example.com
# Optional
GLPI_OAUTH_REDIRECT_PATH=/auth/callback
GLPI_OAUTH_ALLOWED_REDIRECT_URIS=https://claude.ai/*,https://openwebui.example.com/*

GLPI_USERNAME と GLPI_PASSWORD は不要です。GLPI_OAUTH_ALLOWED_REDIRECT_URIS を設定すると、フローを完了できる MCP クライアントを制限できます。設定しない場合は、クライアントが登録した任意のリダイレクト URI が受け入れられます。

トークンのパススルー

GLPI_TOKEN_PASSTHROUGH=true にすると、各 MCP クライアントは自身の GLPI OAuth アクセストークンを Authorization: Bearer <token> として送信します。サーバーは GLPI(GET /session、1 分間キャッシュ)に対してトークンを確認し、すべての呼び出しでそのトークンを転送するため、各クライアントはそれぞれ自身の GLPI ユーザーとして動作します。サーバー自身の認証情報は一切使用されません。クライアントはトークンの取得と更新を行う必要があります。

OIDC / OAuth 認証(任意)

ツールを 1 つのサービスアカウントとして動作させる必要がある OAuth 専用の MCP クライアント向けに、サーバーは FastMCP の OIDCProxy を使用して、既存の OIDC ID プロバイダー(Authentik、Keycloak、PocketID、Auth0、Entra ID など)の前段で OAuth インターフェイスとして動作できます。GLPI の認証情報がクライアントに渡ることはありません。

ID プロバイダーに機密クライアントを作成し、リダイレクト URI に OIDC_BASE_URL + OIDC_REDIRECT_PATH を設定します。例:https://glpi-mcp.example.com/auth/callback。

MCP_TRANSPORT=http
MCP_HTTP_HOST=0.0.0.0
MCP_HTTP_PORT=8000

# All four are required to enable OIDC
OIDC_CONFIG_URL=https://id.example.com/.well-known/openid-configuration
OIDC_CLIENT_ID=your-client-id
OIDC_CLIENT_SECRET=your-client-secret
# Public URL where this server is reachable (HTTPS except on localhost)
OIDC_BASE_URL=https://glpi-mcp.example.com

# Optional settings
OIDC_REDIRECT_PATH=/auth/callback
OIDC_REQUIRED_SCOPES=openid,profile
OIDC_ALLOWED_REDIRECT_URIS=https://example.com/*
OIDC_VERIFY_ID_TOKEN=false
OIDC_FORWARD_RESOURCE=false

OIDC の設定が不完全な場合は、警告を出して無視されます。OIDC が設定されている場合は、MCP_HTTP_BEARER_TOKEN より優先されます。

  • OIDC_VERIFY_ID_TOKEN=true にすると、不透明なアクセストークンを発行する ID プロバイダー向けに、アクセストークンの代わりに id_token を検証します。
  • OIDC_FORWARD_RESOURCE はデフォルトで無効です。RFC 8707 に対応していない ID プロバイダーは、認可リクエストを invalid_request で拒否するためです。
OAuth 状態の永続化

GLPI ログインまたは OIDC を使用する場合、クライアント登録と暗号化されたトークンは FastMCP のデータディレクトリに保存されます。このディレクトリが永続化されていないと、再起動のたびにすべてのクライアントが再登録してサインインする必要があります。Docker イメージでは FASTMCP_HOME=/data が設定されているため、そこにボリュームをマウントしてください。

docker run -v glpi-mcp-data:/data --env-file .env ghcr.io/mhajder/glpi-mcp:latest
リバースプロキシの背後で実行する

GLPI_OAUTH_BASE_URL / OIDC_BASE_URL は外部からアクセス可能な HTTPS URL にする必要があります。また、プロキシは Host ヘッダーを変更せずに転送する必要があります。そうしないと、このサーバーが公開する OAuth メタデータに誤ったホストが指定されます。

🔒 セキュリティと安全機能

読み取り専用モード

このサーバーでは、すべての書き込みツールを非表示にする読み取り専用モードがサポートされています。

READ_ONLY_MODE=true
ドライランモード

書き込みツールは引き続き利用できますが、送信するリクエスト(メソッド、エンドポイント、本文)だけを返します。GLPI のデータは変更されません。

DRY_RUN_MODE=true
タグベースのツールフィルタリング

無効にするタグを設定することで、特定のカテゴリのツールを無効にできます。

DISABLED_TAGS=assets,knowledgebase,graphql

タグ:session、generic、graphql、itil、tickets、assets、administration、users、groups、entities、profiles、knowledgebase、documents、write、read-only。

安全な書き込み
  • リクエストが送信されたものの応答が届かなかった書き込み(タイムアウト、接続切断)は、適用された可能性があるものとして報告され、盲目的に再試行されることはありません。
  • 作成リクエストへの 5xx 応答は、GLPI が項目を作成した可能性があるため、再試行されません。
  • 書き込みが GET に変わるリダイレクトは、適用されなかったものとして報告されます。
  • 削除すると、force=true が指定されていない限り、項目はゴミ箱に移動します。サーバーエラー後に再試行した削除で項目が見つからなかった場合は、削除済みとして報告されます。
  • GLPI_TIMEOUT は、1 回のリクエスト全体のタイムアウトです。バージョンの確認、トークンの取得、リクエストとその再試行で共有されます。
  • 汎用ツールは、API の範囲外に出るエンドポイントパスや、OAuth エンドポイントを指定するパスを拒否します。
応答サイズの上限
RESPONSE_MAX_SIZE=500000

すべてのツール応答に上限を設けるため、大量の一覧によってモデルのコンテキストがあふれることはありません。

大規模なツールセット向けのツール検索

FastMCP のツール検索を使うと、ツールが多数あるサーバーでプロンプトのサイズを削減できます。 有効にすると、list_tools は次の 2 つの合成ツールを返します。

  • search_tools:条件に一致するツールを検索し、完全なスキーマを返します
  • call_tool:名前を指定して、検索済みのツールを実行します
TOOL_SEARCH_ENABLED=true
TOOL_SEARCH_STRATEGY=bm25      # bm25 or regex
TOOL_SEARCH_MAX_RESULTS=8      # optional, default is 5

ツール検索では、既存の可視性制御(読み取り専用モードと無効化されたタグ)が適用されます。

レート制限

リクエストはスライディングウィンドウ方式でクライアントごとに制限されます。ユーザーごとのアクセスを有効にすると、GLPI の各ユーザーに個別のウィンドウが割り当てられます。

RATE_LIMIT_ENABLED=true
RATE_LIMIT_MAX_REQUESTS=60    # Maximum requests allowed per window (default: 60)
RATE_LIMIT_WINDOW_MINUTES=1   # Window size in minutes
Sentry によるエラー追跡と監視(オプション)

サーバーでは、エラー追跡とパフォーマンス監視に Sentry をオプションで利用できます。オプションの依存関係をインストールしてください。

uv sync --extra sentry
# Required: Sentry DSN for your project
SENTRY_DSN=https://[email protected]/6789

# Optional settings
SENTRY_TRACES_SAMPLE_RATE=1.0
# When true, tool inputs and outputs (ticket contents, users...) are sent to Sentry.
SENTRY_SEND_DEFAULT_PII=false
SENTRY_ENVIRONMENT=production
SENTRY_RELEASE=1.2.3
SENTRY_PROFILE_SESSION_SAMPLE_RATE=1.0
SENTRY_PROFILE_LIFECYCLE=trace
SENTRY_ENABLE_LOGS=true

SENTRY_DSN が設定されていない場合、監視データは収集されません。

SSL/TLS の設定
GLPI_VERIFY_SSL=true    # Verify GLPI's certificate against the system trust store
GLPI_TIMEOUT=30         # Total seconds for one request, retries included
トランスポートの設定
STDIO トランスポート(デフォルト)
MCP_TRANSPORT=stdio
HTTP SSE トランスポート(サーバー送信イベント)
MCP_TRANSPORT=sse
MCP_HTTP_HOST=127.0.0.1
MCP_HTTP_PORT=8000
MCP_HTTP_BEARER_TOKEN=your-secret-token  # Optional authentication token
HTTP Streamable トランスポート
MCP_TRANSPORT=http
MCP_HTTP_HOST=127.0.0.1
MCP_HTTP_PORT=8000
MCP_HTTP_BEARER_TOKEN=your-secret-token  # Optional authentication token
curl -H "Authorization: Bearer your-secret-token" \
     -H "Accept: application/json, text/event-stream" \
     -H "Content-Type: application/json" \
     -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
     http://localhost:8000/mcp
ヘルスエンドポイント

どちらの HTTP トランスポート(sse と http)も GET /health を提供します。このエンドポイントは、サーバーがリクエストを処理している場合に 200 ok を返します。ベアラートークンや OAuth ログインは不要で、GLPI にも接続しないため、GLPI が停止していても MCP サーバーが異常と判断されることはありません。Docker イメージの HEALTHCHECK ではこのエンドポイントを使用します。

curl http://localhost:8000/health

FastMCP のトランスポートの詳細については、FastMCP のドキュメントを参照してください。

🤝 コントリビュート

コントリビュートを歓迎します。開発環境のセットアップ、チェック、コミットメッセージの形式については CONTRIBUTING.md を参照してください。バグや機能リクエストにはイシューテンプレートを使用してください。

セキュリティ上の問題を見つけた場合は、SECURITY.md の説明に従って、非公開で報告してください。

📜 ライセンス

MIT License — 詳細については LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。