DevOps MCP Server について
DevOps MCP Serverは、DevOpsチーム向けの読み取り専用Pythonサーバーです。GitHub、Jenkins、Artifactoryのデータを取得でき、リポジトリ確認やビルド障害調査用のプロンプトも設定できます。
主な機能
- 01GitHubのリポジトリ、ファイル、Issue、コード検索
- 02Jenkinsのジョブ、ビルド、ログ、失敗状況の確認
- 03Artifactoryのアーティファクト検索とメタデータ取得
- 04JSONファイルからのカスタムプロンプト読み込み
- 05stdioとstream_httpのトランスポート
活用シーン
- 01リポジトリとCI/CD設定の確認
- 02ログを使ったJenkinsビルド失敗の調査
- 03複数のArtifactoryリポジトリでのアーティファクト検索
MCP 対応
MCPクライアントにDevOpsツールとプロンプトを提供します。stdioとstream_httpに対応し、データを読み取り専用で取得します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
DevOps MCP Server
DevOps ツールと連携機能を提供する、FastMCP ベースの MCP サーバーです。
このサーバーは読み取り専用で動作し、システムを変更することなく、分析や表示のためにデータを取得します。DevOps 環境での安全性を考慮して設計されています。
MCP Review 認定済み
機能
DevOps MCP Server は、さまざまな重要な DevOps プラットフォームと連携します。
GitHub 連携
- リポジトリ管理:リポジトリを検索し、詳細を表示します。
- ファイルアクセス:リポジトリからファイルの内容を取得します。
- イシュートラッキング:イシューを管理、追跡します。
- コード検索:対象を絞ったコード検索を実行します。
- コミット履歴:ブランチのコミット履歴を表示します。
- パブリックおよびエンタープライズ対応:パブリック GitHub と GitHub Enterprise の両方を自動的に検出して接続します(
GITHUB_API_URLで設定可能です)。
Jenkins 連携
- ジョブ管理:Jenkins ジョブの一覧表示と管理を行います。
- ビルドログ:ビルドログを取得し、分析します。
- ビュー管理:Jenkins ビューにアクセスして管理します。
- ビルドパラメーター:ビルドに使用されたパラメーターを調査します。
- 失敗の監視:最近失敗したビルドを特定し、監視します。
Artifactory 連携
- リポジトリの閲覧:Artifactory リポジトリ内の項目(ファイルとディレクトリ)を一覧表示します。
- アーティファクト検索:Artifactory Query Language(AQL)を使用して、複数のリポジトリから名前またはパスでアーティファクトを検索します。
- 項目の詳細:特定のファイルやディレクトリのメタデータとプロパティを取得します。
- 認証:トークン認証とユーザー名/パスワード認証の両方に対応しています。
インストール
pip を使用してパッケージをインストールします。
pip install devops-mcps
使用方法
MCP サーバーを直接実行します。
devops-mcps
トランスポートの設定
サーバーは、次の 2 種類の通信トランスポートに対応しています。
stdio(デフォルト):標準入出力。stream_http:HTTP ストリーミングトランスポート。
ローカルでの使用:
# Default stdio transport
devops-mcps
# stream_http transport (runs HTTP server on 127.0.0.1:3721/mcp by default)
devops-mcps --transport stream_http
UVX の使用:
UVX を使用する場合は、最初にツールをインストールします。
uvx install
次に、実行します。
# Default stdio transport
uvx run devops-mcps
# stream_http transport
uvx run devops-mcps-stream-http
Make の使用
付属の Makefile を使用して、一般的なタスクを効率化できます。
# Discover available targets
make help
# Install dev dependencies (auto-detects uv, falls back to pip)
make install
# One-shot dev setup: install, format, and lint
make dev
# Run MCP server (stdio)
make run
# Run MCP server (stream_http) with optional mount path
make run-http MOUNT_PATH=/mcp
# Test and coverage
make test
make coverage
# Build and publish the package
make build
make publish
# Docker workflows
make docker-build
make docker-run
make docker-push REGISTRY=your.registry.example
設定
環境変数を使用してサーバーを設定します。
必須:
# GitHub
export GITHUB_PERSONAL_ACCESS_TOKEN="your_github_token"
# Optional: For GitHub Enterprise, set your API endpoint
# export GITHUB_API_URL="https://github.mycompany.com"
# Jenkins
export JENKINS_URL="your_jenkins_url"
export JENKINS_USER="your_jenkins_username"
export JENKINS_TOKEN="your_jenkins_api_token_or_password"
# Artifactory
export ARTIFACTORY_URL="https://your-artifactory-instance.example.com"
# Choose ONE authentication method:
export ARTIFACTORY_IDENTITY_TOKEN="your_artifactory_identity_token"
# OR
export ARTIFACTORY_USERNAME="your_artifactory_username"
export ARTIFACTORY_PASSWORD="your_artifactory_password"
任意:
# Jenkins Log Length (default: 5120 bytes)
export LOG_LENGTH=10240
# MCP Server Port for stream_http transport (default: 3721)
export MCP_PORT=3721
# Dynamic Prompts (optional)
export PROMPTS_FILE="example_prompts.json"
注:LOG_LENGTH は取得する Jenkins ログデータの量を制御します。必要に応じて調整してください。
代替方法:.env ファイルを使用する
環境変数を手動で設定する代わりに、プロジェクトのルートディレクトリに .env ファイルを作成することもできます。
# .env file
GITHUB_PERSONAL_ACCESS_TOKEN=your_github_token_here
PROMPTS_FILE=example_prompts.json
# Add other optional environment variables as needed
サーバーは起動時に .env ファイルから環境変数を自動的に読み込みます。
動的プロンプト
サーバーは、JSON ファイルからカスタムプロンプトを読み込むことに対応しています。PROMPTS_FILE 環境変数に、プロンプト設定ファイルのパスを設定します。
プロンプトファイルの形式:
{
"prompts": [
{
"name": "github_repo_analysis",
"description": "Analyze a GitHub repository for DevOps insights",
"template": "Please analyze the GitHub repository {{owner}}/{{repo}} and provide insights on:\n\n1. Repository structure and organization\n2. CI/CD pipeline configuration\n3. Code quality indicators\n4. Security considerations\n5. Documentation quality\n\n{{#include_issues}}Also include analysis of recent issues and their resolution patterns.{{/include_issues}}",
"arguments": [
{
"name": "owner",
"description": "GitHub repository owner",
"required": true
},
{
"name": "repo",
"description": "GitHub repository name",
"required": true
},
{
"name": "include_issues",
"description": "Include analysis of repository issues",
"required": false
}
]
}
]
}
プロンプトの使用方法
DevOps MCP Server は、一般的な DevOps タスクの実行に役立つ動的プロンプトを提供します。利用可能なプロンプトは、次のように使用できます。
利用可能なプロンプト
quick_repo_check- セキュリティ分析を含む、包括的なリポジトリの健全性評価daily_check- Jenkins ジョブの分析とインフラストラクチャの状態確認を含む、包括的な DevOps モニタリングbuild_troubleshoot- 根本原因分析を伴う、高度なビルド失敗の調査
daily_check プロンプトの使用
目的: Jenkins ジョブ分析を含む、包括的な DevOps の監視とインフラストラクチャのステータス報告です。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
time_range | 文字列 | ❌ いいえ | 分析する期間(例:「24h」、「7d」、「1w」) |
include_infrastructure | ブール値 | ❌ いいえ | レポートにインフラストラクチャのステータスを含めるかどうか |
focus_area | 文字列 | ❌ いいえ | 焦点を当てる特定の領域(例:「ビルド」、「デプロイ」、「セキュリティ」) |
使用例:
# Basic daily monitoring
Prompt: daily_check
# Weekly infrastructure review
Prompt: daily_check
Parameters:
- time_range: "7d"
- include_infrastructure: true
# Focus on build failures
Prompt: daily_check
Parameters:
- time_range: "24h"
- focus_area: "builds"
実行内容:
- 🔍 Jenkins ジョブ分析:ジョブのステータスと最近の失敗を包括的に確認します
- 🔧 根本原因の調査:失敗のパターンと傾向を詳しく調査します
- 🏗️ インフラストラクチャのステータス:重要なインフラストラクチャコンポーネントのヘルスチェックを行います
- 📋 実行可能な推奨事項:優先順位を付けたアクション項目と実施方法のガイダンスを提示します
- 📊 エグゼクティブサマリー:主要な指標と傾向を含む概要を提示します
build_troubleshoot プロンプトの使用
目的: 包括的な根本原因分析と実行可能な推奨事項を伴う、高度なビルド失敗の調査です。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
job_name | 文字列 | ✅ はい | Jenkins ジョブ名 |
build_number | 文字列 | ❌ いいえ | 分析するビルド番号(最新のビルドには -1 を使用) |
include_logs | ブール値 | ❌ いいえ | 分析にビルドログを含めるかどうか |
使用例:
# Basic usage (latest build)
Prompt: build_troubleshoot
Parameters:
- job_name: "my-application-build"
# Specific build number
Prompt: build_troubleshoot
Parameters:
- job_name: "my-application-build"
- build_number: "42"
# With build logs
Prompt: build_troubleshoot
Parameters:
- job_name: "my-application-build"
- build_number: "42"
- include_logs: true
実行内容:
- 指定したジョブのビルドステータスと基本情報を取得します
include_logsが true の場合、ビルドログを取得して分析します- ビルドデータに基づいて、失敗の潜在的な原因を特定します
- 実行可能な推奨事項とともに、トラブルシューティングの手順を提案します
quick_repo_check プロンプトの使用
目的: セキュリティ分析と DevOps のベストプラクティス評価を含む、包括的なリポジトリの健全性評価です。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
repo_name | 文字列 | ✅ はい | 「owner/repo」形式のリポジトリ名 |
include_security | ブール値 | ❌ いいえ | 評価にセキュリティ分析を含めるかどうか |
check_ci_cd | ブール値 | ❌ いいえ | CI/CD パイプラインの設定を分析するかどうか |
使用例:
# Basic repository check
Prompt: quick_repo_check
Parameters:
- repo_name: "facebook/react"
# Comprehensive security assessment
Prompt: quick_repo_check
Parameters:
- repo_name: "myorg/myproject"
- include_security: true
- check_ci_cd: true
実行内容:
- 📊 リポジトリの健全性評価:リポジトリのステータスと指標を包括的に評価します
- 🔒 セキュリティ分析:セキュリティ設定の確認と脆弱性評価を行います
- 🏗️ CI/CD パイプラインの評価:ビルドとデプロイの設定を分析します
- 📋 実行可能な推奨事項:優先順位を付けた改善案と実施方法のガイダンスを提示します
- 📈 エグゼクティブサマリー:主な調査結果と戦略的な推奨事項を含む概要を提示します
自然言語のサポート
DevOps MCP サーバーは、プロンプトを呼び出す際に構造化形式と自然言語の両方に対応しています。
構造化形式(明示的):
Use prompt: build_troubleshoot
Parameters:
- job_name: "creole-Automerge-main"
- build_number: 29
- include_logs: true
自然言語形式(推奨):
"Perform daily DevOps monitoring check for the last 24 hours"
"Troubleshoot the Jenkins build failure for job 'creole-Automerge-main' build #29 with detailed logs"
"Check the GitHub repository facebook/react with security analysis"
"Analyze the failed build for my-app-build job number 42 including logs"
"Run weekly infrastructure review with comprehensive monitoring"
"Assess repository health for myorg/myproject including CI/CD pipeline analysis"
自然言語処理の仕組み:
- 意図の認識:AI アシスタントが、リクエストに一致するプロンプトを特定します
- パラメーターの抽出:メッセージから具体的な値(ジョブ名、ビルド番号、リポジトリ名)を抽出します
- 自動マッピング:自然言語を構造化されたプロンプト形式にマッピングします
- コンテキストの認識:不足しているパラメーターを補うため、会話履歴とワークスペースのコンテキストを使用します
自然言語の認識精度を高めるヒント:
- キーワードを使う:「トラブルシューティング」「分析」「リポジトリを確認」「ビルド失敗」などの用語を含めます
- 具体的に記述する:正確なジョブ名、ビルド番号、リポジトリ名を指定します
- 引用符を使う:わかりやすいよう、具体的な値を引用符で囲みます(例:「my-job-name」)
- コンテキストを含める:希望する分析の種類を指定します
自然言語のパターン例:
| 意図 | 自然言語の例 |
|---|---|
| 日次監視 | 「DevOps の日次チェック」、「日次監視を実行」、「インフラストラクチャのステータスレポート」 |
| リポジトリ分析 | 「セキュリティを含めて repo owner/name を確認」、「CI/CD を含めて GitHub リポジトリ X を分析」 |
| ビルドのトラブルシューティング | 「ビルド失敗をデバッグ」、「ジョブ X のビルド Y をトラブルシューティング」、「ビルドの問題を調査」 |
| ログを含める | 「ログ付き」、「詳細なログを含める」、「ビルドログを表示」 |
| 最新のビルド | 「最新のビルド」、「直近のビルド」、「現在のビルド」 |
| 期間 | 「過去 24 時間」、「過去 1 週間」、「7 日間」、「週次レビュー」 |
| 重点分野 | 「ビルドを重点的に確認」、「セキュリティ分析」、「インフラストラクチャのレビュー」 |
前提条件
build_troubleshoot などの Jenkins 関連プロンプトを使用するには、次のものがあることを確認してください。
# Required Jenkins environment variables
export JENKINS_URL="https://your-jenkins-server.com"
export JENKINS_USER="your-username"
export JENKINS_TOKEN="your-api-token"
quick_repo_check などの GitHub 関連プロンプトを使用するには、次のものがあることを確認してください。
# Required GitHub environment variable
export GITHUB_PERSONAL_ACCESS_TOKEN="your_github_token"
テンプレート変数:
- 単純な変数置換には
{{variable_name}}を使用します - 条件ブロック(変数に値がある場合に表示)には
{{#variable_name}}...{{/variable_name}}を使用します - 否定条件ブロック(変数が空または null の場合に表示)には
{{^variable_name}}...{{/variable_name}}を使用します
プロンプトで使用できるツール: プロンプトでは、利用可能な MCP ツールを参照できます。
- GitHub ツール:
search_repositories、get_file_contents、list_commits、list_issuesなど - Jenkins ツール:
get_jenkins_jobs、get_jenkins_build_log、get_recent_failed_jenkins_buildsなど - Azure ツール:
get_azure_subscriptions、list_azure_vms、list_aks_clustersなど - Artifactory ツール:
list_artifactory_items、search_artifactory_items、get_artifactory_item_infoなど
Docker
Docker イメージをビルドします。
docker build -t devops-mcps .
コンテナを実行します。
# Stdio transport (interactive)
docker run -i --rm \
-e GITHUB_PERSONAL_ACCESS_TOKEN="..." \
-e JENKINS_URL="..." \
-e JENKINS_USER="..." \
-e JENKINS_TOKEN="..." \
-e ARTIFACTORY_URL="..." \
-e ARTIFACTORY_IDENTITY_TOKEN="..." \
devops-mcps
# stream_http transport (background, HTTP server on 127.0.0.1:3721/mcp by default)
docker run -d -p 3721:3721 --rm \
-e TRANSPORT_TYPE=stream_http \
-e MCP_PORT=3721 \
-e GITHUB_PERSONAL_ACCESS_TOKEN="..." \
-e JENKINS_URL="..." \
-e JENKINS_USER="..." \
-e JENKINS_TOKEN="..." \
-e ARTIFACTORY_URL="..." \
-e ARTIFACTORY_IDENTITY_TOKEN="..." \
devops-mcps
... を実際の認証情報に置き換えてください。
VSCode との統合
VSCode の settings.json で MCP サーバーを設定します。
例(stdio を使用する UVX):
"devops-mcps": {
"type": "stdio",
"command": "uvx",
"args": ["devops-mcps"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_...",
"GITHUB_API_URL": "https://github.mycompany.com", // Optional for GHE
"JENKINS_URL": "...",
"JENKINS_USER": "...",
"JENKINS_TOKEN": "...",
"ARTIFACTORY_URL": "...",
"ARTIFACTORY_IDENTITY_TOKEN": "cm..." // Or USERNAME/PASSWORD
}
}
例(stream_http を使用する Docker):
Docker コンテナが stream_http を有効にして実行されていることを確認してください(「Docker」セクションを参照)。
{
"type": "stream_http",
"url": "http://127.0.0.1:3721/mcp", // Adjust if Docker host is remote or if MCP_PORT is set differently
"env": {
// Environment variables are set in the container,
// but can be overridden here if needed.
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..."
}
}
他のトランスポート/ランナーの組み合わせ(UVX/stream_http、Docker/stdio)については、README.md の冒頭のセクションを参照してください。
開発
開発環境をセットアップします。
# Install dependencies (using uv)
uv pip install -e ".[dev]"
# Or sync with lock file
# uv sync --all-extras --group dev
Lint とフォーマット(Ruff):
# Check code style
uvx ruff check .
# Format code
uvx ruff format .
テスト(Pytest):
# Run tests with coverage using the provided script
./test.sh
# Or run manually
pytest --cov=src/devops_mcps --cov-report=html:coverage/html --cov-report=xml --cov-fail-under=80 tests/
テストスクリプトの機能:
このプロジェクトには、包括的な test.sh スクリプトが含まれており、次の処理を行います。
uvがインストールされているか自動的に確認します- 開発用の依存関係を同期します
- pytest ですべてのテストを実行します
- HTML と XML の両方のカバレッジレポートを生成します
- HTML カバレッジレポートをブラウザーで自動的に開きます(CI ではスキップされます)
- 最低 80% のテストカバレッジを求めます(プロジェクトでは高いカバレッジを維持しています)
カバレッジレポート:
- HTML レポート:
coverage/html/index.html(自動的に開きます) - XML レポート:
coverage.xml(CI/CD 統合用)
MCP Inspector でのデバッグ:
# Basic run
npx @modelcontextprotocol/inspector uvx run devops-mcps
# Run with specific environment variables
npx @modelcontextprotocol/inspector uvx run devops-mcps -e GITHUB_PERSONAL_ACCESS_TOKEN=... -e JENKINS_URL=... # Add other vars
古くなったパッケージ依存関係の確認
uv pip list --outdated
パッケージ依存関係の更新
uv lock --upgrade
CI/CD
GitHub Actions ワークフロー(.github/workflows/ci.yml)では、次の処理を行います。
- Lint とテスト:プッシュとプルリクエスト時に Ruff と Pytest を実行します。
- 公開:
mainブランチへのプッシュ時に、Python パッケージを PyPI に、Docker イメージを Docker Hub にビルドして公開します。
リポジトリに必要なシークレット:
PYPI_API_TOKEN:パッケージ公開用の PyPI トークン。DOCKER_HUB_USERNAME:Docker Hub のユーザー名。DOCKER_HUB_TOKEN:Docker Hub のアクセストークン。
パッケージ化と公開(手動)
build と twine がインストールされていることを確認します。
pip install -U build twine
- バージョンの更新:
pyproject.tomlのバージョン番号を増やします。 - ビルド:
python -m build - アップロード:
twine upload dist/*(~/.pypircの設定、またはトークンの入力が必要です)。
付録:GitHub 検索クエリの構文
MCP ツールで GitHub の強力な検索構文を活用できます。
リポジトリ検索(gh_search_repositories):
in:name,description,readme:特定のフィールドを検索します。 例:fastapi in:nameuser:USERNAMEまたはorg:ORGNAME:ユーザーまたは組織を指定して検索します。 例:user:tiangolo fastapilanguage:LANGUAGE:言語で絞り込みます。 例:http client language:pythonstars:>N、forks:<N、created:YYYY-MM-DD、pushed:>YYYY-MM-DD:指標や日付で絞り込みます。 例:language:javascript stars:>1000 pushed:>2024-01-01topic:TOPIC-NAME:トピックで絞り込みます。 例:topic:docker topic:pythonlicense:LICENSE-KEYWORD:ライセンスで絞り込みます(例:mit、apache-2.0)。 例:language:go license:mit
コード検索(gh_search_code):
in:file,path:ファイルの内容(デフォルト)またはパスを検索します。 例:"import requests" in:filerepo:OWNER/REPO:特定のリポジトリに絞って検索します。 例:"JenkinsAPIException" repo:your-org/your-repolanguage:LANGUAGE:ファイルの言語で絞り込みます。 例:def main language:pythonpath:PATH/TO/DIR、filename:FILENAME.EXT、extension:EXT:パス、ファイル名、または拡張子で絞り込みます。 例:"GithubException" path:src/devops_mcps extension:py
参考資料:
ライセンス
このプロジェクトは MIT License の下でライセンスされています。詳細は LICENSE ファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。