Mcp Prompt Manager について
Mcp Prompt Managerは、Gitを基盤にプロンプトテンプレートを管理し、AIエディターへ提供するMCPサーバーです。Handlebarsテンプレート、グループ絞り込み、ホットリロードに対応し、チームでのプロンプト管理に適しています。
主な機能
- 01Gitリポジトリからプロンプトを同期
- 02Handlebarsテンプレートとパーシャル
- 03プロンプトのホットリロード
- 04グループによるプロンプト絞り込み
- 05ローカルキャッシュと期限切れ削除
- 06プロンプトのバージョンと状態管理
活用シーン
- 01Gitでチームのプロンプトを統一管理
- 02Cursorなどのクライアントで動的テンプレートを使用
- 03サーバーを再起動せずにプロンプトを更新
MCP 対応
Gitリポジトリ内のプロンプトテンプレートをMCPクライアントに提供し、一覧表示や利用を可能にします。READMEではCursor、Claude Desktop、VS Codeなどが挙げられています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Prompt Manager(Git 駆動)
📋 はじめに
これは、プロンプトテンプレートの管理と提供を目的とした、Git 駆動の Model Context Protocol(MCP)サーバーです。プロンプトを専用の Git リポジトリに保存し、MCP プロトコルを通じて Cursor、Claude Desktop などの AI エディターで直接利用できます。
主なメリット:
- 🔄 チームコラボレーション:Git のバージョン管理により、チーム全体でプロンプトのバージョンを統一できます
- 🎯 動的テンプレート:Handlebars 構文に対応し、再利用可能な動的プロンプトを作成できます
- 🚀 ダウンタイムなしの再読み込み:ホットリロードに対応し、再起動せずにプロンプトを更新できます
- 🔍 スマートな管理:プロンプトのバージョン管理、状態の追跡、グループによるフィルタリングを標準で備えています
- 📊 包括的なモニタリング:システムの健全性とプロンプトの統計情報を確認できます
✨ 機能
- Git 同期:指定した Git リポジトリからプロンプトを直接同期し、チーム全体で統一されたプロンプトのバージョンを使用できます。
- Handlebars テンプレート:強力な Handlebars 構文に対応し、動的で再利用可能なプロンプトテンプレートを作成できます。
- パーシャル対応:Handlebars パーシャルに対応し、プロンプトの断片(例:ロール設定、出力形式)を分割して再利用できます。
- ローカルキャッシュ:Git リポジトリのコンテンツをローカルの
.prompts_cacheディレクトリに自動的にキャッシュし、読み込みを高速化します。 - キャッシュ有効期限戦略:期限切れのキャッシュ項目を定期的に自動削除し、メモリリークを防いでデータの一貫性を保ちます。
- グループによるフィルタリング:グループでプロンプトをフィルタリングし、必要なものだけを読み込めます。
- エラー処理:問題の追跡に役立つ、包括的なエラー統計とレポート機能を備えています。
- リトライ機構:Git 操作を自動で再試行し、信頼性を高めます。
- 型安全性:Zod を使用して設定とプロンプト定義を検証し、型安全性を確保します。
- プロフェッショナルなロギング:pino ロギングシステムを使用し、構造化ログと複数のログレベルに対応します。
🚀 クイックスタート
オプション 1:マーケットプレイスからインストール(最も簡単)
MCP マーケットプレイス(例:mcp.so)からインストールする場合は、マーケットプレイスのインストール手順に従ってください。通常、次の作業が必要です。
- マーケットプレイスからインストール:マーケットプレイスのインストール画面を使用します
- MCP クライアントを設定:MCP クライアントにサーバー設定を追加します
前提条件
インストールする前に、次のものが揃っていることを確認してください。
- Node.js がインストールされていること(バージョン 18.0.0 以上)
- pnpm パッケージマネージャー(バージョン 8.0.0 以上)
- プロンプトを含む Git リポジトリ(またはプロンプトのローカルパス)
- MCP 対応クライアント(Cursor、Claude Desktop、VS Code など)
インストール手順
-
マーケットプレイスからインストール:
- お好みの MCP マーケットプレイスにアクセスします
- 「mcp-prompt-manager」を検索します
- マーケットプレイスのインストール手順に従います
- サーバーのインストール先のパスをメモします
-
インストール先のパスを確認:
- マーケットプレイスからインストールした後、
dist/index.jsの場所を確認します - 通常は、グローバルの node_modules ディレクトリまたは専用のインストールフォルダー内にあります
- 設定には、このファイルの絶対パスが必要です
- マーケットプレイスからインストールした後、
-
MCP クライアントを設定:
- MCP クライアントの設定ファイルを開きます(ファイルの場所については、設定セクションを参照してください)
- サーバーの設定を追加します(以下の例を参照してください)
- 重要:相対パスではなく、絶対パスを使用してください
設定例
インストール後、次のように MCP クライアント(Cursor、Claude Desktop など)を設定します。
Cursor の場合(~/Library/Application Support/Cursor/User/globalStorage/cursor.mcp/mcp.json):
{
"mcpServers": {
"mcp-prompt-manager": {
"command": "node",
"args": ["/absolute/path/to/mcp-prompt-manager/dist/index.js"],
"env": {
"PROMPT_REPO_URL": "https://github.com/yourusername/your-prompts-repo.git",
"MCP_LANGUAGE": "en",
"MCP_GROUPS": "common",
"LOG_LEVEL": "info"
}
}
}
}
注:
/absolute/path/to/mcp-prompt-manager/dist/index.jsを、マーケットプレイスからサーバーをインストールした実際の絶対パスに置き換えてください。
ヒント:設定テンプレートの全体については、mcp.json.exampleを参照してください。
インストール先のパスを確認する
マーケットプレイスからサーバーをインストールした場所がわからない場合は、以下を確認してください。
macOS/Linux:
# Search for the installed file
find ~ -name "index.js" -path "*/mcp-prompt-manager/dist/index.js" 2>/dev/null
# Or check common installation locations
ls -la ~/.local/share/mcp-prompt-manager/dist/index.js
ls -la /usr/local/lib/node_modules/mcp-prompt-manager/dist/index.js
Windows:
# Search for the installed file
Get-ChildItem -Path $env:USERPROFILE -Filter "index.js" -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.FullName -like "*mcp-prompt-manager\dist\index.js" }
検証
設定後:
- MCP クライアントを完全に再起動します
- サーバーのステータスを確認します:
- Cursor の場合:
Cmd/Ctrl + Shift + Pを押して、「MCP: Show servers」を検索します - Claude Desktop の場合:設定にある MCP サーバーのリストを確認します
- Cursor の場合:
- プロンプトが読み込まれていることを確認します:クライアントの MCP ツールを使用して、利用可能なプロンプトを一覧表示します
MCP クライアントごとの詳しい設定手順については、以下の設定セクションを参照してください。
オプション 2:Docker でのデプロイ(推奨)
Docker を使うのが、最も簡単な始め方です。
# 1. Clone the repository
git clone <project URL>
cd mcp-prompt-manager
# 2. Copy environment variables example
cp .env.docker.example .env
# 3. Edit .env and set your Git repository URL
# PROMPT_REPO_URL=https://github.com/yourusername/your-prompts-repo.git
# 4. Start with Docker Compose
docker-compose up -d
# 5. View logs
docker-compose logs -f
Docker でのデプロイ手順の詳細については、DOCKER.mdを参照してください。
オプション 3:ローカルインストール
開発時、またはインストールを完全に制御したい場合は、このオプションをおすすめします。
前提条件
- Node.js 18.0.0 以上
- pnpm 8.0.0 以上(必須。npm/yarn では失敗します)
- Git(リポジトリのクローンに使用)
インストール手順
- リポジトリをクローン:
git clone https://github.com/CarlLee1983/mcp-prompt-manager.git
cd mcp-prompt-manager
- 依存関係をインストール:
# Use pnpm (required - npm/yarn will fail)
pnpm install
注:インストールには pnpm が必須です。preinstall チェックにより、npm/yarn では失敗します。
- プロジェクトをビルド:
pnpm run build
これにより、TypeScript がコンパイルされ、dist/ディレクトリに JavaScript が生成されます。
- 環境変数を設定:
サンプル設定ファイルをコピーして、.envを作成します。
cp .env.example .env
.envファイルを編集し、Prompt Git Repository のパスまたは URL を設定します。
# Git Repository source (required)
# Local path example
PROMPT_REPO_URL=/Users/yourname/Desktop/my-local-prompts
# Or remote Git URL examples
# PROMPT_REPO_URL=https://github.com/yourusername/my-prompts.git
# [email protected]:yourusername/my-prompts.git
# Output language setting (optional, default: en)
MCP_LANGUAGE=en # or zh
# Group filter setting (optional, defaults to loading only common group when not set)
# Example: MCP_GROUPS="laravel,vue,react"
# Note: When not set, the system will explicitly prompt in logs about using default groups
MCP_GROUPS=laravel,vue
# Custom storage directory (optional, default: .prompts_cache)
STORAGE_DIR=/custom/path
# Git branch (optional, default: main)
GIT_BRANCH=main
# Git retry count (optional, default: 3)
GIT_MAX_RETRIES=3
# Cache cleanup interval (optional, default: 10000 milliseconds)
# Set the interval time (in milliseconds) for periodic cleanup of expired cache items
# Default is 10 seconds (CACHE_TTL * 2) to ensure expired items are cleaned up promptly
# Recommended values: 5000-30000 milliseconds, adjust based on usage frequency
CACHE_CLEANUP_INTERVAL=10000
# Log level (optional)
# Options: fatal, error, warn, info, debug, trace, silent
# Notes:
# - stderr only outputs warn/error/fatal level logs (to avoid being marked as error)
# - info/debug/trace level logs only output to file (if LOG_FILE is set)
# - If LOG_FILE is not set, info level logs are completely suppressed (to avoid confusion)
# - Production environment defaults to warn (only warnings and errors), development defaults to info
# - Setting silent completely disables log output
LOG_LEVEL=info
# Log file path (optional, strongly recommended)
# After setting this variable, all level logs will be written to file (JSON format)
# stderr still only outputs warn/error/fatal (to avoid being marked as error)
# Can be absolute or relative path (relative to project root)
# Examples:
# LOG_FILE=/tmp/mcp-prompt-manager.log
# LOG_FILE=logs/mcp.log
# Note: File is written in append mode, will not overwrite existing content
# Recommendation: Set this variable to view complete logs (including info level)
LOG_FILE=logs/mcp.log
- MCP クライアントを設定:
ビルド後、ローカルにインストールしたサーバーを使用するように MCP クライアントを設定します。パスは次のとおりです。
/path/to/mcp-prompt-manager/dist/index.js
/path/to/mcp-prompt-managerを、リポジトリをクローンした実際の絶対パスに置き換えてください。
クライアントごとの詳しい設定手順については、以下の設定セクションを参照してください。
クイックスタート(開発)
開発時には、次のコマンドを使用できます。
# Install dependencies
pnpm install
# Build the project
pnpm run build
# Start development server with Inspector
pnpm dev
# Run tests
pnpm test:run
# Lint code
pnpm lint
🛠️ 使い方
Inspector でテスト
テスト用に MCP Inspector を起動する便利なコマンドを用意しています。
基本的な使い方
重要:Inspector はコンパイル済みのdist/index.jsを実行するため、ソースコードを変更した場合は、先にコンパイルする必要があります。
# 1. Compile first (if source code was modified)
pnpm run build
# 2. Start Inspector
pnpm run inspector
クイック開発モード
開発時には、Inspector の起動前に自動でコンパイルするコマンドをまとめて実行できます。
pnpm run inspector:dev
これにより、自動的にbuildを実行してから Inspector を起動するため、コンパイル済みの最新コードをテストできます。
Inspector の機能
Inspector を起動すると、以下の操作ができるウェブインターフェースが表示されます。
- 読み込まれたすべてのプロンプトを表示する
- プロンプトの出力をテストする
- エラーメッセージを確認する
- 環境変数の設定を確認する
Cursor での使用
設定ファイルの場所
macOS:
~/Library/Application Support/Cursor/User/globalStorage/cursor.mcp/mcp.json
Windows:
%APPDATA%\Cursor\User\globalStorage\cursor.mcp\mcp.json
Linux:
~/.config/Cursor/User/globalStorage/cursor.mcp/mcp.json
設定手順
-
設定ファイルを見つける:
- 方法 1:Cursor で
Cmd/Ctrl + Shift + Pを押し、「MCP: Add server」を検索します - 方法 2:上記のパスにある
mcp.jsonファイルを直接編集します
- 方法 1:Cursor で
-
設定ファイルを編集する:
{
"mcpServers": {
"mcp-prompt-manager": {
"command": "node",
"args": ["/path/to/mcp-prompt-manager/dist/index.js"],
"env": {
"PROMPT_REPO_URL": "/Users/yourname/Desktop/my-local-prompts",
"MCP_LANGUAGE": "zh",
"MCP_GROUPS": "laravel,vue"
}
}
}
}
-
重要な設定に関する注意事項:
command:コンパイル済みの JavaScript ファイルを実行するにはnodeを使用しますargs:dist/index.jsを指す絶対パスを指定する必要がありますenv:環境変数(任意。すでに.envに設定されている場合は不要です)
-
設定を確認する:
- Cursor を再起動します
- Cursor で
Cmd/Ctrl + Shift + Pを押し、「MCP: Show servers」を検索します mcp-prompt-managerが接続済みと表示されることを確認します
注記:
/path/to/mcp-prompt-managerを、このプロジェクトの実際の絶対パスに置き換えてください- 環境変数がすでに
.envに設定されている場合は、envブロックを省略できますが、通常は JSON に直接指定するほうが確実です- 設定ファイルが存在しない場合は、まず
mcp.jsonファイルを作成する必要があります
Claude Desktop での使用
設定ファイルの場所
macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Windows:
%APPDATA%\Claude\claude_desktop_config.json
Linux:
~/.config/Claude/claude_desktop_config.json
設定手順
- 設定ファイルを作成または編集する:
ファイルが存在しない場合は、まず作成します。
# macOS/Linux
mkdir -p ~/Library/Application\ Support/Claude
touch ~/Library/Application\ Support/Claude/claude_desktop_config.json
- 設定ファイルを編集する:
{
"mcpServers": {
"mcp-prompt-manager": {
"command": "node",
"args": ["/path/to/mcp-prompt-manager/dist/index.js"],
"env": {
"PROMPT_REPO_URL": "/Users/yourname/Desktop/my-local-prompts",
"MCP_LANGUAGE": "zh",
"MCP_GROUPS": "laravel,vue"
}
}
}
}
- 設定を確認する:
- Claude Desktop を完全に終了します(すべてのウィンドウが閉じていることを確認してください)
- Claude Desktop を再起動します
- 会話中に、Claude が定義したプロンプトを使用できることを確認します
注記:
- 設定ファイルは有効な JSON 形式である必要があります
- パスには絶対パスを指定する必要があります
- 設定ファイルを変更した後は、Claude Desktop を完全に再起動する必要があります
VS Code での使用(拡張機能経由)
VS Code では、MCP 拡張機能を通じて MCP サーバーを使用できます。
設定手順
-
MCP 拡張機能をインストールする:
- VS Code の拡張機能マーケットプレースで「MCP」または「Model Context Protocol」を検索します
- 該当する拡張機能をインストールします
-
MCP サーバーを設定する:
- VS Code の設定(
Cmd/Ctrl + ,)を開きます - 「MCP」関連の設定を検索します
- または、
settings.jsonを編集します。
- VS Code の設定(
{
"mcp.servers": {
"mcp-prompt-manager": {
"command": "node",
"args": ["/absolute/path/to/mcp-prompt-manager/dist/index.js"],
"env": {
"PROMPT_REPO_URL": "/path/to/your/repo",
"MCP_LANGUAGE": "zh",
"MCP_GROUPS": "laravel,vue"
}
}
}
}
Continue での使用
Continue は、MCP に対応したオープンソースの AI コードアシスタントです。
設定ファイルの場所
macOS:
~/.continue/config.json
Windows:
%APPDATA%\Continue\config.json
Linux:
~/.config/Continue/config.json
設定手順
config.json を編集します。
{
"mcpServers": {
"mcp-prompt-manager": {
"command": "node",
"args": ["/absolute/path/to/mcp-prompt-manager/dist/index.js"],
"env": {
"PROMPT_REPO_URL": "/path/to/your/repo",
"MCP_LANGUAGE": "zh",
"MCP_GROUPS": "laravel,vue"
}
}
}
}
Aider での使用
Aider は、MCP に対応した AI コードエディターです。
設定方法
Aider の設定ファイル(通常は ~/.aider/config.json)または環境変数で設定します。
{
"mcp_servers": {
"mcp-prompt-manager": {
"command": "node",
"args": ["/absolute/path/to/mcp-prompt-manager/dist/index.js"],
"env": {
"PROMPT_REPO_URL": "/path/to/your/repo"
}
}
}
}
カスタムアプリケーションでの使用(プログラムからの利用)
独自のアプリケーションを開発していて、MCP サーバーを統合する場合は、MCP SDK を使用できます。
TypeScript/JavaScript の例
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"
import { spawn } from "child_process"
// Create MCP Client
const client = new Client(
{
name: "my-app",
version: "1.0.0",
},
{
capabilities: {},
}
)
// Create transport (using stdio)
const transport = new StdioClientTransport({
command: "node",
args: ["/path/to/mcp-prompt-manager/dist/index.js"],
env: {
PROMPT_REPO_URL: "/path/to/repo",
MCP_LANGUAGE: "en",
},
})
// Connect
await client.connect(transport)
// List available prompts
const prompts = await client.listPrompts()
console.log("Available prompts:", prompts)
// Get specific prompt
const prompt = await client.getPrompt({
name: "code-review",
arguments: {
code: "const x = 1",
language: "TypeScript",
},
})
Python の例
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def main():
# Configure server parameters
server_params = StdioServerParameters(
command="node",
args=["/path/to/mcp-prompt-manager/dist/index.js"],
env={
"PROMPT_REPO_URL": "/path/to/repo",
"MCP_LANGUAGE": "en"
}
)
# Create session
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize
await session.initialize()
# List prompts
prompts = await session.list_prompts()
print(f"Available prompts: {prompts}")
# Get prompt
prompt = await session.get_prompt(
name="code-review",
arguments={
"code": "const x = 1",
"language": "TypeScript"
}
)
print(f"Prompt result: {prompt}")
MCP クライアント早見表
| クライアント | 設定ファイルの場所 | 設定形式 | 備考 |
|---|---|---|---|
| Cursor | ~/Library/Application Support/Cursor/User/globalStorage/cursor.mcp/mcp.json (macOS) | mcpServers | UI での設定に対応 |
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) | mcpServers | 完全な再起動が必要です |
| VS Code | settings.json | mcp.servers | MCP 拡張機能が必要です |
| Continue | ~/.continue/config.json | mcpServers | オープンソースの AI アシスタント |
| Aider | ~/.aider/config.json | mcp_servers | AI コードエディター |
注:パス内の
~はユーザーのホームディレクトリを表し、次のように展開されます。
- macOS/Linux:
/Users/usernameまたは/home/username- Windows:
C:\Users\username
共通の設定形式
すべての MCP 対応クライアントで、同じ設定形式が使用されます。
{
"mcpServers": {
"mcp-prompt-manager": {
"command": "node",
"args": ["/absolute/path/to/mcp-prompt-manager/dist/index.js"],
"env": {
"PROMPT_REPO_URL": "your-repo-url-or-path",
"MCP_LANGUAGE": "en",
"MCP_GROUPS": "common",
"LOG_LEVEL": "info"
}
}
}
}
📝 環境変数リファレンス
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
PROMPT_REPO_URL | はい* | - | Git リポジトリのプライマリ URL、またはローカルパスです。(*PROMPT_REPO_URLS が設定されていない場合は必須です) |
PROMPT_REPO_URLS | いいえ | - | 複数のリポジトリ URL をカンマ区切りで指定します(例:url1,url2)。 |
SYSTEM_REPO_URL | いいえ | - | システムレベルのプロンプト(共通プロンプトなど)用の個別のリポジトリ URL です。 |
MCP_LANGUAGE | いいえ | en | 出力言語です。選択肢:en、zh。 |
MCP_GROUPS | いいえ | - | 読み込むプロンプトグループをカンマ区切りで指定します(例:laravel,vue)。未設定の場合、System Repo を確認するか、デフォルトの動作が適用されます。 |
TRANSPORT_TYPE | いいえ | stdio | 通信方式です。選択肢:stdio、http、sse。 |
LOG_LEVEL | いいえ | info | ログの詳細度です。選択肢:debug、info、warn、error、silent。 |
LOG_FILE | いいえ | - | ログファイルの出力先パスです(例:logs/mcp.log)。デバッグ用に強く推奨します。 |
STORAGE_DIR | いいえ | .prompts_cache | クローンしたリポジトリを保存するディレクトリです。 |
GIT_BRANCH | いいえ | main | クローンするデフォルトの Git ブランチです。 |
GIT_MAX_RETRIES | いいえ | 3 | Git 操作が失敗した場合の再試行回数です。 |
GIT_POLLING_INTERVAL | いいえ | 300000 | WATCH_MODE=true の場合に更新を確認する間隔(ミリ秒)です。 |
WATCH_MODE | いいえ | false | リポジトリの変更を検知したときに自動再読み込みを有効にします。 |
CACHE_PROVIDER | いいえ | local | キャッシュ方式です。選択肢:local、redis。 |
CACHE_TTL | いいえ | - | キャッシュ項目の有効期間です(任意)。 |
CACHE_CLEANUP_INTERVAL | いいえ | 10000 | 期限切れのキャッシュ項目をクリーンアップする間隔(ミリ秒)です。 |
セキュリティに関する注意:
.envファイルはバージョン管理に決してコミットしないでください。.env.exampleファイルはテンプレートとしてのみ提供されています。PROMPT_REPO_URLにパスワードやトークンなどの機密情報をハードコードしないでください。- 安全でパスワード不要の認証には、SSH キー(
[email protected]...)を使用してください。- 本番環境では、Docker Secrets またはお使いのプラットフォームのシークレット管理システムを使用してください。
重要な設定上の注意事項
- 絶対パス:Cursor/Claude などのクライアントを設定する場合、
dist/index.jsへのパスは絶対パスで指定する必要があります。 - JSON 形式:設定ファイルが有効な JSON であることを確認してください(末尾にカンマを付けないでください)。
- 優先順位:クライアント設定 JSON で定義された
envは、.envファイルの設定を上書きします。 - 再起動:設定を変更した後は、必ず AI エディター/クライアントを再起動してください。
MCP サーバーが正常に起動していることを確認する
方法 1:MCP Inspector を使用する
cd /path/to/mcp-prompt-manager
# If source code was modified, compile first
pnpm run build
# Start Inspector (or use inspector:dev for auto-compile)
pnpm run inspector
# or
pnpm run inspector:dev
ウェブインターフェースが起動し、次の操作を行えます。
- 読み込まれたすべてのプロンプトを表示する
- プロンプトの出力をテストする
- エラーメッセージを確認する
注:Inspector は
dist/index.jsを実行します。そのため、ソースコードを変更した後、最新の変更を反映するには先にbuildを実行する必要があります。
方法 2:ログを確認する
詳細なログを表示するには、設定ファイルに環境変数を追加します。
{
"mcpServers": {
"mcp-prompt-manager": {
"command": "node",
"args": ["/path/to/mcp-prompt-manager/dist/index.js"],
"env": {
"PROMPT_REPO_URL": "/path/to/repo",
"LOG_LEVEL": "debug"
}
}
}
}
次に、クライアントのログ出力を確認します(Cursor の出力パネル、または Claude Desktop のログ)。
方法 3:ファイルシステムを確認する
Git リポジトリが正常に同期されていることを確認します。
ls -la /path/to/mcp-prompt-manager/.prompts_cache
Git リポジトリからクローンされたファイルが表示されます。
よくある設定上の問題
問題 1:設定ファイルが見つからない
解決方法:
- アプリケーションが少なくとも一度起動されていることを確認します(設定ディレクトリが自動的に作成されます)
- 設定ファイルとディレクトリを手動で作成します
- パスが正しいことを確認します(大文字と小文字、スペースに注意してください)
問題 2:JSON 形式のエラー
解決方法:
- JSON 検証ツール(例:JSONLint)を使用して形式を確認します
- すべての文字列が二重引用符で囲まれていることを確認します
- 最後の項目の後にカンマがないことを確認します
問題 3:サーバーを起動できない
解決方法:
dist/index.jsファイルが存在することを確認します- パスが絶対パスであることを確認します
- Node.js がインストールされており、バージョンが 18 以上であることを確認します
- 環境変数が正しいか確認します
- クライアントのエラーログを確認します
問題 4:プロンプトが見つからない
解決方法:
PROMPT_REPO_URLが正しいことを確認しますMCP_GROUPS設定に必要なグループが含まれているか確認します- 注:
MCP_GROUPSが設定されていない場合、システムはデフォルトでcommonグループのみを読み込みます - デフォルトのグループが使用されているか、ログメッセージを確認します
- 他のグループを読み込むには、
MCP_GROUPS=laravel,vueなどを設定します
- 注:
- Git リポジトリに
.yamlまたは.ymlファイルが含まれていることを確認します - 詳細なログを表示し、読み込まれたグループを確認するには、
LOG_LEVEL=debugを使用します
📂 プロンプトリポジトリの構成
プロンプトリポジトリ(PROMPT_REPO_URL が指すリポジトリ)は、次の構成にしてください。
my-prompts/
├── partials/ # Store Handlebars partials (.hbs)
│ ├── role-expert.hbs
│ └── output-format.hbs
├── common/ # common group (always loaded)
│ ├── common-prompt.yaml
│ └── partials/
│ └── common-partial.hbs
├── laravel/ # laravel group (must be specified in MCP_GROUPS)
│ └── laravel-prompt.yaml
├── vue/ # vue group (must be specified in MCP_GROUPS)
│ └── vue-prompt.yaml
├── root-prompt.yaml # Root directory (always loaded)
└── another-prompt.yml
グループのフィルタリングルール
- ルートディレクトリ(
/):常に読み込まれます - common グループ(
common/):常に読み込まれます - その他のグループ:
MCP_GROUPS環境変数で指定された場合にのみ読み込まれます
デフォルトの動作
MCP_GROUPS が設定されていない場合:
- システムは
commonグループ(およびルートディレクトリのプロンプト)を自動的に読み込みます - 起動ログで、デフォルトのグループを使用していることが明示的に通知されます
- より多くのグループを読み込むために
MCP_GROUPSを設定するよう促すメッセージがログに含まれます
例
MCP_GROUPS=laravel,vue→ ルート、common、laravel、vue を読み込みますMCP_GROUPS=または未設定 → ルートと common のみを読み込みます(システムはデフォルトを使用していることを通知します)
プロンプト定義ファイルの例(.yaml)
id: "code-review"
title: "Code Review"
description: "Help me review code"
args:
code:
type: "string"
description: "Code to review"
language:
type: "string"
description: "Programming language"
template: |
{{> role-expert }}
You are a senior {{language}} engineer.
Please review the following code:
{{ code }}
パラメーターの型
プロンプトは次の 3 種類のパラメーターに対応しています。
string:文字列型(デフォルト)number:数値型boolean:ブール型
レジストリ機能(任意)
プロンプトの公開範囲と非推奨ステータスを一元管理するには、プロンプトリポジトリのルートディレクトリに registry.yaml ファイルを作成できます。
レジストリファイルの形式
prompts:
- id: "code-review"
group: "common"
visibility: "public" # public, private, internal
deprecated: false
- id: "old-prompt"
visibility: "private"
deprecated: true
レジストリフィールドの説明
id:プロンプト ID(必須)group:グループ名(任意)visibility:公開範囲の設定public:公開(デフォルト)private:非公開internal:内部使用
deprecated:非推奨かどうか(デフォルトはfalse)
レジストリの目的
- 一元管理:すべてのプロンプトの公開状態と非推奨状態を1つのファイルで管理します
- デフォルト設定の上書き:プロンプト定義ファイルのデフォルト設定を上書きできます
- バージョン管理:Git を通じてプロンプトのライフサイクルを追跡します
注:
registry.yamlは任意です。存在しない場合、システムはプロンプト定義ファイルのデフォルト値を使用します。
プロンプトのランタイム状態
各プロンプトには、現在の利用可否を示すランタイム状態(runtime_state)があります。
active:アクティブな状態です。プロンプトは正常に動作し、MCP ツールとして使用できますlegacy:レガシー状態です。プロンプトは引き続き利用できますが、旧バージョンとしてマークされており、新しいバージョンの使用が推奨されますinvalid:無効な状態です。プロンプト定義に問題(必須フィールドの不足、テンプレートのエラーなど)があり、使用できませんdisabled:無効化されています。プロンプトは明示的に無効化されています(レジストリで非推奨としてマークされている場合など)warning:警告状態です。プロンプトは動作しますが、警告があります(バージョンが古すぎる場合など)
プロンプトのソース
各プロンプトには、メタデータの取得元を示すソース(source)タグがあります。
embedded:プロンプト定義ファイルに埋め込まれたメタデータ(metadata:ブロックを使用)registry:registry.yamlの設定legacy:レガシーモードです。メタデータがなく、デフォルト値を使用します
プロンプトのステータス
各プロンプトには、開発段階を示すステータス(status)があります。
draft:ドラフトで、開発中ですstable:安定版で、通常どおり使用できますdeprecated:非推奨で、使用は推奨されませんlegacy:レガシーバージョンです。引き続き利用できますが、アップグレードが推奨されます
🔧 MCP ツールとリソース
このプロジェクトでは、プロンプトを管理および照会するための複数の MCP ツールとリソースを提供しています。
MCP ツール
1. mcp.reload / mcp.reload_prompts
サーバーを再起動せずに、すべてのプロンプトを再読み込みします(ホットリロード)。
- 機能:Git リポジトリから最新の変更を取得し、キャッシュをクリアして、すべての Handlebars パーシャルとプロンプトを再読み込みします
- パラメーター:なし
- 使用例:
{ "tool": "mcp.reload", "arguments": {} }
2. mcp.stats / mcp.prompt.stats
プロンプトの統計情報を取得します。
- 機能:ランタイム状態(active、legacy、invalid、disabled、warning)別の件数を含む、すべてのプロンプトの統計情報を返します
- パラメーター:なし
- 戻り値の内容:
total:合計件数active:アクティブ状態の件数legacy:レガシー状態の件数invalid:無効状態の件数disabled:無効化された件数warning:警告状態の件数
3. mcp.list / mcp.prompt.list
複数のフィルターオプションを使って、すべてのプロンプトを一覧表示します。
- 機能:完全なメタデータ情報を含む、すべてのプロンプトランタイムを一覧表示します
- パラメーター(省略可):
status:ステータスでフィルターします(draft、stable、deprecated、legacy)group:グループ名でフィルターしますtag:タグでフィルターします(プロンプトにこのタグが含まれている必要があります)runtime_state:ランタイム状態でフィルターします(active、legacy、invalid、disabled、warning)
- 使用例:
{ "tool": "mcp.list", "arguments": { "group": "laravel", "runtime_state": "active" } }
4. mcp.inspect
特定のプロンプトの詳細なランタイム情報を確認します。
- 機能:プロンプト ID を使って、状態、ソース、バージョン、タグ、ユースケースを含む完全なランタイムメタデータを取得します
- パラメーター:
id:プロンプト ID(必須)
- 使用例:
{ "tool": "mcp.inspect", "arguments": { "id": "code-review" } }
5. mcp.repo.switch
別の Prompt リポジトリに切り替えて、ダウンタイムなしで再読み込みします。
- 機能:新しい Git リポジトリに切り替え、すべてのプロンプトを再読み込みします
- パラメーター:
repo_url:リポジトリの URL(必須)branch:ブランチ名(任意)
- 使用例:
{ "tool": "mcp.repo.switch", "arguments": { "repo_url": "/path/to/new/repo", "branch": "main" } }
6. preview_prompt
プロンプトテンプレートを実行せずに、指定した引数でプレビュー/レンダリングします(デバッグ用ユーティリティ)。
- 機能:指定した引数でプロンプトテンプレートをレンダリングし、LLM に送信せずに最終的なテキストを表示します。テンプレートのロジックを確認する際に使用します。
- パラメーター:
promptId:プロンプト ID(必須。例:'laravel:code-review')args:テンプレートの引数/変数を含む JSON オブジェクト(必須)
- 戻り値:
success:成功または失敗を示すブール値renderedText:レンダリングされたプロンプトテキストhighlightedText:変数を Markdown の太字で強調表示したレンダリング済みテキストstatistics:renderedLength(文字数)とestimatedTokens(推定トークン数)を含むオブジェクトwarnings:スキーマ検証の警告の配列(例:推奨フィールドの不足)
- 使用例:
{ "tool": "preview_prompt", "arguments": { "promptId": "laravel:code-review", "args": { "code": "function test() { return true; }", "language": "php" } } } - 高度な機能:
- スキーマ検証:プロンプトの Zod スキーマに照らして引数を厳密に検証します
- トークン推定:トークン数を推定します(英語と中国語のテキストに対応)
- 変数の強調表示:動的に置換された変数を Markdown の太字書式で強調表示します
- スキーマ警告:不足している必須フィールドや推奨フィールドを検出して報告します
MCP リソース
1. system://health
システムの正常性ステータスを示すリソースです。
- URI:
system://health - MIME タイプ:
application/json - 内容:以下の情報が含まれます:
git:Git リポジトリ情報(URL、パス、HEAD コミット)prompts:プロンプトの統計情報(合計数、状態別の件数、読み込み済み件数、グループ一覧)registry:レジストリのステータス(有効/無効、ソース)cache:キャッシュ情報(サイズ、クリーンアップ間隔)system:システム情報(稼働時間、メモリ使用量)
2. prompts://list
プロンプト一覧のリソースです。
- URI:
prompts://list - MIME タイプ:
application/json - 内容:すべてのプロンプトの完全なメタデータ一覧が含まれます:
id:プロンプト IDtitle:タイトルversion:バージョンstatus:ステータスruntime_state:ランタイム状態source:ソースtags:タグの配列use_cases:ユースケースの配列group:グループ名visibility:公開範囲
ツールの使用に関する推奨事項
- 開発時:
mcp.reloadを使用すると、サーバーを再起動せずにプロンプトをすばやく再読み込みできます - デバッグ時:
mcp.inspectを使用して特定のプロンプトの詳細情報を確認するか、preview_promptを使用してテンプレートのレンダリングをテストします - 監視時:
mcp.statsとsystem://healthリソースを使用してシステムの状態を監視します - 検索時:フィルター条件を指定して
mcp.listを使用し、特定のプロンプトを検索します - テスト時:
preview_promptを使用してテンプレートのロジックを検証し、トークン数を確認し、実際に実行する前に変数の置換結果を確認します
💻 開発ガイド
アーキテクチャの概要
MCP Prompt Manager は、関心事を明確に分離したモジュール型アーキテクチャを採用しています。
コアコンポーネント
-
リポジトリインターフェース(
src/repositories/strategy.ts)- さまざまな種類のリポジトリ(Git、Local)に対応する抽象インターフェースです
- 優先順位に基づく読み込みにより、複数のリポジトリ戦略をサポートします
- リポジトリの同期とファイル監視を処理します
-
ソースマネージャー(
src/services/sourceManager.ts)- プロンプトのライフサイクルを管理するシングルトンパターンです
- プロンプトの読み込み、キャッシュ、登録を処理します
- パフォーマンス向上のため、読み込み時にHandlebarsテンプレートをコンパイルします
- プロンプトの実行時状態とメタデータを管理します
-
キャッシュレイヤー(
src/cache/)- ローカルとRedis(将来対応)をサポートする抽象キャッシュプロバイダーインターフェースです
- LRUによる削除とTTLをサポートするローカルキャッシュです
- 期限切れのキャッシュ項目を自動的にクリーンアップします
プロンプトの保存フロー
┌─────────────────────────────────────────────────────────────┐
│ Git Repository │
│ (Remote URL or Local Path) │
└────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Repository Strategy │
│ • GitRepositoryStrategy: Clone/Pull from remote │
│ • LocalRepositoryStrategy: Watch local file system │
└────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Local Storage (.prompts_cache) │
│ • Cached repository files │
│ • File system cache (TTL-based) │
└────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Source Manager │
│ 1. Scan YAML files │
│ 2. Parse prompt definitions │
│ 3. Compile Handlebars templates │
│ 4. Validate with Zod schemas │
│ 5. Cache compiled templates │
└────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ MCP Server │
│ • Register prompts as MCP Tools │
│ • Provide MCP Resources (health, list) │
│ • Handle tool invocations │
└────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ MCP Clients │
│ (Cursor, Claude Desktop, etc.) │
└─────────────────────────────────────────────────────────────┘
主なモジュール
- リポジトリインターフェース:Gitおよびローカルリポジトリ向けの抽象ストラテジーパターン
- ソースマネージャー:キャッシュを備えた、プロンプトのライフサイクルを一元管理する機能
- キャッシュプロバイダー:プラグイン可能なキャッシュシステム(ローカルメモリまたはRedis)
- ローダー:プロンプトとパーシャルを読み込むための高レベルAPI
- MCP ツール:読み込まれたプロンプトに基づく動的なツール登録
プロジェクト構成
mcp-prompt-manager/
├── src/
│ ├── index.ts # Main entry point
│ ├── config/
│ │ └── env.ts # Environment variable configuration and validation
│ ├── services/
│ │ ├── control.ts # MCP control tool handlers
│ │ ├── git.ts # Git sync service
│ │ ├── health.ts # Health status service
│ │ ├── loaders.ts # Prompt and Partials loader
│ │ └── sourceManager.ts # Core prompt lifecycle manager
│ ├── repositories/
│ │ ├── strategy.ts # Repository interface
│ │ ├── gitStrategy.ts # Git repository strategy
│ │ ├── localStrategy.ts # Local file system strategy
│ │ └── repoManager.ts # Repository manager
│ ├── cache/
│ │ ├── cacheProvider.ts # Cache interface
│ │ ├── localCache.ts # Local memory cache
│ │ └── cacheFactory.ts # Cache factory
│ ├── types/
│ │ ├── prompt.ts # Prompt type definitions
│ │ ├── promptMetadata.ts # Prompt metadata types
│ │ ├── promptRuntime.ts # Prompt runtime types
│ │ └── registry.ts # Registry type definitions
│ └── utils/
│ ├── fileSystem.ts # File system utilities (with cache)
│ ├── logger.ts # Logging utilities
│ ├── errorFormatter.ts # Error formatting utilities
│ └── repoConfig.ts # Repository configuration utilities
├── test/ # Test files
│ ├── config.test.ts
│ ├── loaders.test.ts
│ ├── sourceManager.test.ts
│ ├── cache.test.ts
│ ├── fileSystem.test.ts
│ └── integration.test.ts # Integration tests
├── dist/ # Compiled output
├── package.json
├── tsconfig.json
└── vitest.config.ts
よく使うコマンド
# Compile TypeScript
npm run build
# or
pnpm run build
# Start MCP Inspector for debugging
# Note: Need to run build first, or use inspector:dev for auto-compile
pnpm run build && pnpm run inspector
# or use development mode (auto-compile)
pnpm run inspector:dev
# Run tests
npm run test
# or
pnpm test
# Run tests (once)
npm run test:run
# or
pnpm test:run
# Open test UI
npm run test:ui
# or
pnpm test:ui
# Format code
npm run format
# or
pnpm format
# Check code format
npm run format:check
# or
pnpm format:check
開発ワークフロー
src/ディレクトリ内のコードを変更します。pnpm run buildを実行して再コンパイルします(またはpnpm run inspector:devを使うと、自動コンパイルしてテストできます)。pnpm run testを実行してテストします。pnpm run inspector:devを使って変更を確認します(自動コンパイルしてInspectorを起動します)。- CursorまたはClaude DesktopでMCPサーバーを再起動し、変更を反映します。
重要な注意事項:
inspectorコマンドはdist/index.js(コンパイル済みファイル)を実行します- ソースコードを変更した後、最新の変更を確認するには、まず
buildを実行する必要がありますinspector:devを使うと、自動コンパイルして起動できるため、開発に適しています
プロンプトリポジトリの検証
MCP Prompt Managerにデプロイする前に、@carllee1983/prompt-toolkitを使用してプロンプトリポジトリを検証することをおすすめします。これにより、プロンプトの品質を確保し、開発プロセスの早い段階でエラーを検出できます。
インストール
# Install globally
npm install -g @carllee1983/prompt-toolkit
# or
pnpm add -g @carllee1983/prompt-toolkit
検証を含む開発ワークフロー
- プロンプトの開発:リポジトリ内でプロンプトを作成、編集します
- ローカルでの検証:コミット前にツールキットを使用して検証します
prompt-toolkit validate repo - CI/CDでの検証:CI/CDパイプラインで自動的に検証します
prompt-toolkit validate repo --exit-code --severity error - MCP Prompt Managerへのデプロイ:MCP Prompt Managerが検証済みのプロンプトを読み込みます
すぐに使える検証コマンド
# Validate entire repository
prompt-toolkit validate repo
# Validate with specific severity (show warnings and errors)
prompt-toolkit validate repo --severity warning
# Validate and exit with error code (for CI/CD)
prompt-toolkit validate repo --exit-code
# Validate single prompt file
prompt-toolkit validate file path/to/prompt.yaml
# Validate registry file
prompt-toolkit validate registry --repo-root /path/to/repo
# Validate partials directory
prompt-toolkit validate partials --partials-path partials
CI/CDとの統合
デプロイ前にエラーを検出できるよう、CI/CDパイプラインに検証を追加します。
# .github/workflows/validate-prompts.yml
name: Validate Prompts
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install prompt-toolkit
run: npm install -g @carllee1983/prompt-toolkit
- name: Validate repository
run: prompt-toolkit validate repo --exit-code --severity error
ベストプラクティス
- ✅ コミット前に検証する:変更をプッシュする前に、ローカルで検証を実行します
- ✅ CI/CDを使用する:エラーを検出できるよう、CI/CDパイプラインで自動的に検証します
- ✅ 結果を監視する:リポジトリの健全性を保つため、検証結果を追跡します
- ✅ 重大度で絞り込む:
--severityオプションを使って、重大な問題に絞り込みます - ✅ JSON出力:CI/CDで機械可読な出力を得るには、
--format jsonを使用します
プログラムからの使用
スクリプト内でプログラムからツールキットを使用することもできます。
import { validatePromptRepo } from "@carllee1983/prompt-toolkit"
const result = validatePromptRepo("/path/to/prompt-repo")
if (result.success) {
console.log("Repository validation passed!")
} else {
console.error("Validation errors:", result.errors)
}
詳しくは、prompt-toolkitのドキュメントを参照してください。
🧪 テスト
このプロジェクトには、包括的なテストスイートが含まれています。
- 単体テスト:すべてのコア機能を網羅する複数のテストファイル
- 統合テスト:プロンプトの読み込みとMCPツールのエンドツーエンドテスト
- 合計:107件のテストがすべて成功しています
テストを実行するには:
# Watch mode
pnpm test
# Run once
pnpm test:run
# Open UI
pnpm test:ui
テストカバレッジ
このプロジェクトでは、次のしきい値を設定し、包括的なテストカバレッジによって高いコード品質を維持しています。
- ステートメント:≥ 80%
- 行:≥ 75%
- 関数:≥ 75%
- 分岐:≥ 70%
注:カバレッジレポートでは
@vitest/coverage-v8を使用しており、Node.js 19 以上が必要です。コード品質を維持するため、カバレッジのしきい値を適用しています。カバレッジがしきい値を下回ると、品質基準を満たすようテストが失敗します。
カバレッジレポートの表示
-
ローカル開発:
pnpm test:coverageを実行してカバレッジレポートを生成するか、pnpm test:coverage:viewを実行してブラウザーで HTML カバレッジレポートを自動的に開きます。 -
CI/CD:
pnpm test:coverage:ciを実行してカバレッジレポートを生成し、しきい値を適用します。CI パイプラインは、カバレッジのしきい値が満たされない場合に失敗し、マージやリリースの前にコード品質基準が維持されるようにします。 -
カバレッジレポート:カバレッジレポートは
coverage/ディレクトリに複数の形式で生成されます。coverage/index.html- インタラクティブな HTML レポートcoverage/coverage-final.json- CI 統合用の JSON 形式coverage/lcov.info- カバレッジサービス用の LCOV 形式
カバレッジコマンド
# Generate coverage report (local development)
pnpm test:coverage
# Generate coverage report with threshold enforcement (CI)
pnpm test:coverage:ci
# Generate coverage report and open HTML report
pnpm test:coverage:view
コード品質と CI/CD
このプロジェクトでは、複数のチェックを通じてコード品質を確保しています。
コミット前フック
コミット前フックは、Husky と lint-staged を使用して、各コミットの前にリンティングとフォーマットを自動的に実行します。
- ESLint:TypeScript ファイルのリンティングの問題を自動的に修正します
- Prettier:コードを自動的にフォーマットし、一貫したスタイルを保ちます
- 型安全性:TypeScript の strict モードが有効になっています(
tsconfig.jsonのstrict: true)
コミット前フックはステージング済みのファイルのみを対象とするため、コード品質を維持しながらコミット時間を短縮できます。
継続的インテグレーション(CI)
GitHub Actions の CI ワークフローは、プッシュとプルリクエストのたびに実行されます。
- Node.js の互換性:Node.js 16.x、18.x、20.x でテストします
- リンティング:ESLint でコード品質とスタイルをチェックします
- 型チェック:TypeScript の型チェック(
tsc --noEmit) - テスト:カバレッジレポートを含む全テストスイート
- カバレッジのアップロード:Codecov に自動アップロードします
プルリクエストに必須のチェック
コード品質を確保するため、PR をマージする前に次のチェックに合格する必要があります。
- Lint:すべての ESLint ルールに合格すること
- 型チェック:エラーなしで TypeScript のコンパイルが成功すること
- テスト:カバレッジのしきい値を満たしたうえで、すべてのテストに合格すること
GitHub で必須チェックを設定する方法:
- リポジトリの設定に移動します
- Branches → Branch protection rules に移動します
- メインブランチのルールを追加または編集します
- Require status checks to pass before merging で、次の項目を有効にします。
Test (Node.js 16.x)、Test (Node.js 18.x)、またはTest (Node.js 20.x)(少なくとも 1 つ)- これらのチェックには、リンティング、型チェック、テストの各ステップが自動的に含まれます
これらのチェックのいずれかに失敗すると、CI ワークフローも自動的に失敗し、品質基準を満たさないコードのマージを防ぎます。
🔧 設定
環境変数
| 変数名 | 必須 | デフォルト値 | 説明 |
|---|---|---|---|
PROMPT_REPO_URL | ✅ | - | Git リポジトリの URL またはローカルパス |
MCP_LANGUAGE | ❌ | en | 出力言語(en または zh) |
MCP_GROUPS | ❌ | common | 読み込むグループ(カンマ区切り)。未設定の場合、システムがデフォルトの動作について確認します |
STORAGE_DIR | ❌ | .prompts_cache | ローカルキャッシュディレクトリ |
GIT_BRANCH | ❌ | main | Git ブランチ名 |
GIT_MAX_RETRIES | ❌ | 3 | Git 操作の最大再試行回数 |
CACHE_CLEANUP_INTERVAL | ❌ | 10000 | キャッシュクリーンアップ間隔(ミリ秒)。期限切れのキャッシュ項目を定期的にクリーンアップします |
LOG_LEVEL | ❌ | warn (prod) / info (dev) | ログレベル。本番環境のデフォルトでは警告とエラーのみを出力します |
キャッシュの有効期限戦略
システムは TTL ベースの定期クリーンアップ機構を使用してファイル一覧キャッシュを管理し、メモリ効率を確保します。
キャッシュ機構
- キャッシュ TTL:5 秒(ハードコード)
- クリーンアップ間隔:デフォルトは 10 秒(
CACHE_TTL * 2)。CACHE_CLEANUP_INTERVAL環境変数で調整できます - 自動クリーンアップ:アプリケーションの起動時にクリーンアップ機構が自動的に開始します
- 正常なシャットダウン:アプリケーションの終了時にクリーンアップタイマーが自動的に停止します
動作の仕組み
- キャッシュの作成:
getFilesRecursively()が呼び出されると、スキャン結果は 5 秒間キャッシュされます - 定期クリーンアップ:10 秒ごと(または設定した間隔ごと)に期限切れのキャッシュ項目を自動的にスキャンして削除します
- メモリ管理:キャッシュの無制限な増加を防ぎ、メモリリークを回避します
設定例
# Set shorter cleanup interval (for testing)
CACHE_CLEANUP_INTERVAL=2000 # Cleanup every 2 seconds
# Set longer cleanup interval (for production, reduce cleanup frequency)
CACHE_CLEANUP_INTERVAL=30000 # Cleanup every 30 seconds
キャッシュの状態を監視する
ログからキャッシュのクリーンアップ状態を確認できます(LOG_LEVEL=debug の設定が必要です)。
[DEBUG] Cache cleanup mechanism started { interval: 10000 }
[DEBUG] Cache cleanup completed { cleaned: 2 }
キャッシュ機構を検証する
検証方法とテストガイドの詳細については、CACHE_VERIFICATION.md を参照してください。
セキュリティ
- ✅ 入力検証:すべての環境変数を Zod で検証します
- ✅ パスのセキュリティ:パストラバーサル攻撃を防止します
- ✅ グループ検証:グループ名の形式を検証します(英字、数字、アンダースコア、ハイフンのみ使用できます)
📝 ロギング
このプロジェクトでは、構造化ロギングに対応したロギングシステムとして pino を使用しています。
ログレベル
fatal:プログラムの終了を引き起こす致命的なエラーerror:エラーメッセージwarn:警告メッセージinfo:一般情報debug:デバッグメッセージtrace:トレースメッセージsilent:ログ出力を完全に無効化します
デフォルトの動作:
- 本番環境(
NODE_ENVが未設定、またはdevelopment以外):デフォルトはwarnで、警告とエラーのみを出力します - 開発環境(
NODE_ENV=development):デフォルトはinfoで、infoレベル以上のログを出力します LOG_LEVEL環境変数でデフォルト値を上書きできます
ログレベルの設定
# Set in .env
LOG_LEVEL=debug
# Or set in environment variables
export LOG_LEVEL=debug
❓ FAQ とトラブルシューティング
Q: MCP Prompt Manager はどのようにインストールしますか?
A: インストール方法は 3 つあります。
- マーケットプレイスからインストール(最も簡単):mcp.so などの MCP マーケットプレイスからインストールします
- Docker でデプロイ(本番環境におすすめ):Docker Compose を使用して簡単にデプロイします
- ローカルにインストール(開発向け):リポジトリをクローンし、ローカルでビルドします
詳しい手順については、クイックスタートセクションをご覧ください。
Q: マーケットプレイスからインストールした後、インストール先のパスを確認するにはどうすればよいですか?
A: 次のコマンドを使用して、インストールされたサーバーの場所を確認します。
macOS/Linux:
find ~ -name "index.js" -path "*/mcp-prompt-manager/dist/index.js" 2>/dev/null
Windows:
Get-ChildItem -Path $env:USERPROFILE -Filter "index.js" -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.FullName -like "*mcp-prompt-manager\dist\index.js" }
Q: 設定で絶対パスを使う必要があるのはなぜですか?
A: MCP クライアントはサーバーを別プロセスとして実行するため、実行可能ファイルの場所を特定するには完全なパスが必要です。作業ディレクトリが異なる場合があるため、相対パスは機能しません。
Q: 設定後、MCP クライアントにサーバーが表示されません。
A: 次の手順をお試しください。
- パスが絶対パスであることを確認する:
argsに相対パスではなく、完全な絶対パスが指定されていることを確認します - Node.js がインストールされていることを確認する:
node --versionを実行し、Node.js 18 以降がインストールされていることを確認します - ファイルが存在することを確認する:指定したパスに
dist/index.jsが存在することを確認します - JSON の構文を確認する:設定ファイルが有効な JSON であること(末尾に余分なカンマがないこと)を検証します
- 完全に再起動する:MCP クライアントを完全に終了してから再起動します(再読み込みだけではありません)
- ログを確認する:設定で
LOG_LEVEL=debugを有効にし、詳細なエラーメッセージを確認します
Q: サーバーをローカルで実行するにはどうすればよいですか?
A: 開発時は pnpm dev(インスペクター付き)、本番モードでは pnpm start を使用できます。詳しくは package.json のスクリプトをご覧ください。
Q: Git クローンエラー(終了コード 128)が発生します。
A: 通常は、権限の問題または無効な URL が原因です。
- SSH と HTTPS:SSH(
[email protected]...)を使用する場合は、SSH キーが正しくマウントされているか、利用可能であることを確認します。HTTPS を使用する場合は、トークンが不要であることを確認するか、トークンを指定します。 - 既知のホスト:Docker で実行する場合は、
ssh-keyscanを実行済みであること、またはknown_hostsファイルがマウントされていることを確認します。 - リポジトリの有効性:お使いのマシンで
git clone <URL>を手動で実行し、URL が正しいことを確認します。
問題:Git の同期に失敗する(一般)
解決方法:
PROMPT_REPO_URLが正しいか確認します- ネットワーク接続が正常であることを確認します
- Git の認証情報が正しいか確認します
- 詳細なエラーメッセージをログで確認します
問題:プロンプトが読み込まれない
解決方法:
MCP_GROUPSの設定が正しいか確認します- プロンプトファイルが正しいディレクトリ構成(
prompts/<group>/...)にあることを確認します - YAML ファイルの形式が正しいか確認します
- ログのエラーメッセージを確認します
問題:パーシャルを使用できない
解決方法:
- パーシャルファイルの拡張子が
.hbsであることを確認します - パーシャルが
partials/ディレクトリにあることを確認します - パーシャルファイルの内容が正しいか確認します
- テンプレートで
{{> partial-name }}構文を使用していることを確認します
📦 主な依存関係
- @modelcontextprotocol/sdk:MCP SDK。MCP サーバーのコア機能を提供します
- handlebars:Handlebars テンプレートエンジン。動的なプロンプト生成をサポートします
- simple-git:Git リポジトリの同期に使用する Git 操作ライブラリ
- js-yaml:プロンプト定義ファイルを解析する YAML パーサー
- zod:設定と型の検証に使用する、TypeScript を第一に考えたスキーマ検証ライブラリ
- pino:高性能な構造化ログライブラリ
- dotenv:環境変数の読み込みユーティリティ
📚 関連リソース
- Model Context Protocol 公式ドキュメント
- Handlebars ドキュメント
- Zod ドキュメント
- Simple Git ドキュメント
- Pino ドキュメント
- @carllee1983/prompt-toolkit - MCP 用プロンプトリポジトリ検証ツールキット
📄 ライセンス
ISC
🤝 コントリビューション
Issue と Pull Request の投稿を歓迎します!
バージョン:1.0.0
最終更新日:2024-11-30
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。