mcpField
P
promptpack

promptpack

ローカル
github.com/CloudCorpRecordsAI・エージェント01 週間前に更新

promptpack について

promptpack は、呼び出し側が指定したプロンプトテンプレート一式について、プレースホルダーの宣言、バージョン形式、テストレンダリングを検査します。使用前にテンプレートを検証するチーム向けで、入力以外のデータ取得や書き込みは行いません。

主な機能

  1. 01プレースホルダーと宣言の照合
  2. 02バージョン形式と重複の検証
  3. 03決定的なテストレンダリング
  4. 04未宣言・未使用変数の報告
  5. 05テンプレートとレンダリング結果の集計

活用シーン

  1. 01公開前のテンプレート一式の確認
  2. 02未宣言または未使用の変数の発見
  3. 03指定値を使ったレンダリングのテスト

MCP 対応

MCP クライアントに check_prompt_pack ツールを公開します。呼び出し側がテンプレートと任意のテストレンダリングを渡し、検証レポートを受け取ります。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"cloudcorprecords-promptpack": {
"command": "npx",
"args": [
"-y",
"@reneturcios/promptpack"
]
}
}
}
起動コマンドnpx -y @reneturcios/promptpack

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

パッケージ
npm@reneturcios/promptpack0.1.0
ocighcr.io/cloudcorprecords/promptpack:0.1.0

ツール

1

掲載時のツール一覧 · 1 週間前に更新

パラメーター型必須説明
rendersarrayいいえテンプレートパックに対して実行するテストレンダリング(任意)
templatesarrayはい検査するプロンプトテンプレート。パック内の順序で指定します

詳細

promptpack

プロンプトテンプレートのパックは、気付かないうちに少しずつずれていきがちです。 誰かがテンプレート内の変数名を変更して宣言を更新し忘れたり、テンプレートで宣言した変数が使われなくなったり、バージョン文字列に 1.2.0 ではなく 1.2 と入力されたりしても、本番環境でレンダリングが失敗するまで誰も気付きません。promptpack は、そうなる前にパック全体を一度にチェックします。 各テンプレートの名前、バージョン、本文、宣言する変数と、実行したいテストレンダリングを指定してください。promptpack は、本文で実際に使われているプレースホルダーと宣言内容を比較し、すべてのバージョン文字列をチェックし、指定された値でレンダリングを決定論的に実行して、1 つのレポートを返します。公開、書き込み、取得は行いません。入力は、指定したパックのみです。

プレースホルダーは {{name}} の形式で記述します。内側のテキストをトリミングした結果が、英字、数字、アンダースコアのみで構成される単純な名前である場合に限り、その範囲をプレースホルダーとして扱います。つまり、{{ name }} は name のプレースホルダーですが、{{}}、{{first name}}、{{user-name}}、閉じられていない {{ は通常のテキストとして扱われ、レンダリング時にもそのまま残り、レポートにも記載されません。各テンプレートのプレースホルダーは、本文内で最初に出現した順に並ぶ、重複のない名前の一覧です。

レポートでは、各テンプレートについて宣言された変数をそのまま示し、2 種類の問題を一覧表示します。宣言されていないプレースホルダー(missing_declarations、プレースホルダーの順)と、どのプレースホルダーからも使われていない宣言(unused_declarations、宣言の順)です。どちらの問題もないテンプレートは ok となり、問題がある場合は issues となります。バージョンの不備は単なる問題より重大です。バージョンがドットで区切られた 3 つの非負整数と完全に一致しない場合、テンプレート名が重複している場合、または宣言された変数が重複している場合は、問題のあるパスを示すエラーとなり、入力全体が拒否されます。不正な入力に対して部分的な結果は返されません。

テストレンダリングは、指定した順に実行されます。それぞれでテンプレート名と、そのテンプレートの変数に対する値を指定します。テンプレート内の各プレースホルダーは、指定された値に置き換えられます。置換後のテキストは再走査されないため、値に {{other}} が含まれていても、指定したままの状態で保持されます。余分な値は無視されます。プレースホルダーに対応する値が指定されていない場合、そのレンダリングによってチェックが失敗することはありません。該当するエントリーは ok: false となり、値がない重複しない名前がプレースホルダーの順に示されます。残りのテンプレートとレンダリングについても、引き続きレポートされます。パックに含まれていないテンプレートを指定した場合、または文字列以外の値を指定した場合は、不正な入力として、他の検証エラーと同様にエラーになります。

CLI

npx @reneturcios/promptpack check --input args.json
npx @reneturcios/promptpack --version

args.json には、引数オブジェクト全体が含まれます。

{
  "templates": [
    {
      "name": "welcome",
      "version": "1.2.0",
      "body": "Hi {{name}}, welcome to {{ product }}!",
      "variables": ["name", "product"]
    },
    {
      "name": "reminder",
      "version": "0.3.1",
      "body": "Hi {{name}}, your {{plan}} renews soon.",
      "variables": ["name"]
    }
  ],
  "renders": [
    {
      "template": "welcome",
      "values": { "name": "Ada", "product": "Promptpacks" }
    },
    {
      "template": "reminder",
      "values": { "name": "Ada" }
    }
  ]
}

レポートは JSON として出力されます。

{
  "templates": [
    {
      "name": "welcome",
      "version": "1.2.0",
      "placeholders": ["name", "product"],
      "declared": ["name", "product"],
      "missing_declarations": [],
      "unused_declarations": [],
      "status": "ok"
    },
    {
      "name": "reminder",
      "version": "0.3.1",
      "placeholders": ["name", "plan"],
      "declared": ["name"],
      "missing_declarations": ["plan"],
      "unused_declarations": [],
      "status": "issues"
    }
  ],
  "renders": [
    {
      "template": "welcome",
      "ok": true,
      "rendered": "Hi Ada, welcome to Promptpacks!"
    },
    {
      "template": "reminder",
      "ok": false,
      "missing_values": ["plan"]
    }
  ],
  "counts": {
    "templates": 2,
    "with_issues": 1,
    "renders": 2,
    "renders_ok": 1,
    "renders_failed": 1
  }
}

終了コード:成功時は 0、実行時エラー(読み取り不能または無効な入力ファイル、無効な入力を含む)時は 1、使用方法のエラー時は 2 です。

MCP サーバー

npx -y @reneturcios/promptpack mcp

MCP クライアント設定:

{
  "mcpServers": {
    "promptpack": {
      "command": "npx",
      "args": ["-y", "@reneturcios/promptpack", "mcp"]
    }
  }
}
ツール
  • check_prompt_pack — 呼び出し元から提供されたプロンプトテンプレートのパックをチェックします。使用されているプレースホルダーと宣言された変数、バージョン形式、指定された値を使った決定的なテストレンダリングを確認します。

    • templates(配列、必須、1 項目以上) — チェックするプロンプトテンプレート。パック内の順序で指定します。各項目は次のとおりです。
      • name(文字列、必須、空でない) — テンプレート名。パック内で一意である必要があります。
      • version(文字列、必須) — テンプレートのバージョン。ドット区切りの 0 以上の整数がちょうど 3 つ必要です(例:"1.2.0")。
      • body(文字列、必須、空でも可) — テンプレートのテキスト。プレースホルダーは {{name}} の形式で記述します。
      • variables(文字列の配列、任意) — テンプレートで宣言する変数名。省略した場合は [] です。
    • renders(配列、任意) — パックに対して実行するテストレンダリング。省略した場合は [] です。各項目は次のとおりです。
      • template(文字列、必須、空でない) — レンダリングするテンプレートの名前。
      • values(オブジェクト、必須) — レンダリングに使用する値。変数名を置換文字列に対応付けるマップです。

    {templates, renders, counts} を返します。templates には、入力された各テンプレートについて、パック内の順序で {name, version, placeholders, declared, missing_declarations, unused_declarations, status} が 1 つずつ格納されます。renders には、入力された各レンダリングについて、入力順に {template, ok, rendered} または {template, ok, missing_values} が 1 つずつ格納されます。counts は {templates, with_issues, renders, renders_ok, renders_failed} です。

Docker

docker run -i ghcr.io/cloudcorprecords/promptpack
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/promptpack check --input /w/args.json

開発

npm install
npm run build   # tsc -> dist/
npm test        # tsx --test test/*.test.ts (pure local, no network)
npm run dev     # run the CLI from source

ライセンス

MIT — Copyright (c) 2026 Rene Turcios

コメント

MCP は初めてですか?

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

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