POPL・プルーフコマンド
公開安全な監査証跡とバリデーションプラン管理
POPLとは?
POPL (Public Observable Proof Ledger) は、MCPセッションから公開安全な監査証跡を生成します。すべての機密情報(パス、シークレット、PII)は自動的にサニタイズされます。
主な特徴
- 🔒 自動サニタイズ: シークレット、パス、PIIを削除
- 📊 セッションメタデータ: セッション構造、タイミング、ステータスを保持
- 🔐 コンテンツハッシュ: RPCペイロードをSHA-256ハッシュに置換
- 📝 再現可能: 生成ログを含む
- 🌐 公開安全: バグレポートや公開共有に安全
用途
| 用途 | 説明 |
|---|---|
| バグレポート | シークレットを露出せずに実行証拠を含める |
| 監査 | ツール使用と権限を追跡 |
| ドキュメント | 再現可能な例を生成 |
| コンプライアンス | 規制環境向けの監査証跡を作成 |
| デバッグ | セキュリティリスクなしでセッション詳細を共有 |
popl - POPL管理
公開安全な監査証跡を作成・管理します。
サブコマンド
popl init
POPLディレクトリを初期化します。
cd /path/to/project
pfscan popl init
これにより以下が作成されます:
.popl/
├── README.md # POPLドキュメント
└── entries/ # POPLエントリの保存場所
popl session
セッションからPOPLエントリを作成します。
# 基本的な使用
pfscan popl session --session <session-id>
# タイトル付き
pfscan popl session --session abc123 --title "Time Server Test"
# 説明付き
pfscan popl session --session abc123 \
--title "Weather API Integration" \
--description "Testing weather forecast tool"
出力例:
✓ POPL entry created: 20260104-abc123
Entry location:
.popl/entries/20260104-abc123/
Files created:
POPL.yml # エントリメタデータ
status.json # セッションサマリー
rpc.sanitized.jsonl # サニタイズ済みRPCイベント
validation-run.log # 生成ログ
popl list
POPLエントリの一覧を表示します。
pfscan popl list
pfscan popl list --json
popl show
POPLエントリの詳細を表示します。
# エントリ詳細
pfscan popl show 20260104-abc123
# 特定のアーティファクト
pfscan popl show 20260104-abc123 status
pfscan popl show 20260104-abc123 popl
pfscan popl show 20260104-abc123 log
POPLエントリの構造
.popl/entries/20260104-abc123/
├── POPL.yml # エントリメタデータと証拠サマリー
├── status.json # セッションサマリー(公開安全)
├── rpc.sanitized.jsonl # サニタイズ済みRPCイベント
└── validation-run.log # 生成ログ
サニタイゼーション
POPLは機密データを保護するために自動サニタイゼーションを適用します。
削除される情報
- シークレット: APIキー、トークン、パスワード
- ファイルパス: 絶対パス、ホームディレクトリ、一時ディレクトリ
- PII: 個人を特定できる情報
- RPCペイロード: SHA-256ハッシュに置換
保持される情報
- セッション構造(コネクタ、タイミング、ステータス)
- RPC メソッド名とID
- ツール名と呼び出し回数
- エラーステータス(詳細メッセージはサニタイズ)
- 機能(tools、resources、prompts)
plans - バリデーションプラン
MCPサーバーのバリデーションプランを管理・実行します。
サブコマンド
plans ls
プランの一覧を表示します。
pfscan plans ls
pfscan plans list
出力例:
Name Source Description Created
----------------------------------------------------------------
basic-mcp manual Basic MCP validation 2026-01-04
full-scan import Full server scan 2026-01-03
plans show
プランの詳細を表示します。
pfscan plans show basic-mcp
pfscan plans show basic-mcp --raw # 生のYAML
pfscan plans show basic-mcp --json # JSON形式
plans add
新しいプランを追加します。
# ファイルから追加
pfscan plans add myplan --file plan.yaml
# 標準入力から追加
cat plan.yaml | pfscan plans add myplan --stdin
プランYAML形式:
version: 1
name: basic-mcp-validation
description: Basic MCP server validation
steps:
- mcp: initialize
- mcp: tools/list
- when: capabilities.resources
mcp: resources/list
- when: capabilities.prompts
mcp: prompts/list
plans run
プランを実行します。
# コネクタに対して実行
pfscan plans run basic-mcp --connector time
# オプション付き
pfscan plans run basic-mcp --connector time --timeout 60
pfscan plans run basic-mcp --connector time --out ./results
# ドライラン(実行せずにステップを表示)
pfscan plans run basic-mcp --connector time --dry-run
出力例:
Running plan 'basic-mcp' against connector 'time'...
Run ID: 01KE4ABCD1234
Status: completed
Duration: 523ms
Steps:
1. [OK] initialize (269ms)
2. [OK] tools/list (12ms)
3. [SKIP] resources/list (when: capabilities.resources)
4. [SKIP] prompts/list (when: capabilities.prompts)
Inventory:
Capabilities: tools
Tools: 2
Artifacts: ~/.config/proofscan/artifacts/01KE4ABCD1234
plans runs
実行履歴を表示します。
pfscan plans runs
pfscan plans runs --plan basic-mcp # プランでフィルタ
pfscan plans runs --limit 50
plans run-show
実行の詳細を表示します。
pfscan plans run-show 01KE4ABCD1234
pfscan plans run-show 01KE4 --json # 部分IDも使用可能
plans delete
プランを削除します。
pfscan plans delete myplan
pfscan plans delete myplan --force # 関連する実行も削除
plans import
プランをインポートします。
# ファイルからインポート(複数ドキュメントYAML対応)
pfscan plans import --file plans.yaml
plans export
プランをエクスポートします。
# ファイルにエクスポート
pfscan plans export myplan --file myplan.yaml
# 標準出力にエクスポート
pfscan plans export myplan --stdout
実行アーティファクト
各プラン実行は ~/.config/proofscan/artifacts/<run-id>/ にアーティファクトを作成します:
meta.json # 実行メタデータ
plan.yaml # 正規化されたプラン定義
plan.original.yaml # 元のYAML
run.log # 人間が読める実行ログ
results.json # ステップごとの結果
inventory.json # 発見された機能/ツール/リソース/プロンプト
archive - データ保持管理
データ保持とクリーンアップを管理します。
サブコマンド
archive status
アーカイブステータスを表示します。
pfscan archive status
archive plan
アーカイブ/削除される内容を表示します(実際には実行しません)。
pfscan archive plan
archive run
アーカイブを実行します。
# ドライラン(何が起こるか表示)
pfscan archive run
# 実際に実行
pfscan archive run --yes
# 実行してディスク領域を回収
pfscan archive run --yes --vacuum
よくあるワークフロー
POPL生成ワークフロー
# 1. POPLディレクトリを初期化
cd /path/to/project
pfscan popl init
# 2. スキャンを実行
pfscan scan start --id time
# 3. セッションIDを取得
pfscan tree
# 4. POPLエントリを作成
pfscan popl session --session abc123 \
--title "Time Server Validation" \
--description "Testing time server tools"
# 5. エントリを確認
pfscan popl list
pfscan popl show 20260104-abc123
バリデーションプランワークフロー
# 1. プランを作成
cat > validation.yaml << 'EOF'
version: 1
name: mcp-validation
description: MCP server validation
steps:
- mcp: initialize
- mcp: tools/list
- mcp: tools/call
tool: get_current_time
args: {}
EOF
# 2. プランを追加
pfscan plans add mcp-validation --file validation.yaml
# 3. プランを実行
pfscan plans run mcp-validation --connector time
# 4. 結果を確認
pfscan plans runs
pfscan plans run-show <run-id>
# 5. POPLエントリを作成
pfscan popl session --session <session-id> \
--title "MCP Validation Run"
メンテナンスワークフロー
# 1. ステータス確認
pfscan status
pfscan archive status
# 2. アーカイブプランを表示
pfscan archive plan
# 3. 古いデータをクリーンアップ
pfscan archive run --yes --vacuum
# 4. ステータス再確認
pfscan status
ベストプラクティス
POPL使用時
- わかりやすいタイトル: エントリに説明的なタイトルを付ける
- バグレポートに含める: POPLエントリをバグレポートに添付
- 定期的なレビュー: POPLエントリを定期的にレビューして古いものを削除
- バージョン管理: 重要なPOPLエントリをGitで管理
バリデーションプラン
- 段階的なテスト: 基本的なステップから始めて徐々に拡張
- 条件付きステップ:
whenを使って機能に応じた実行 - 再利用可能なプラン: 汎用的なプランを作成して複数のコネクタで使用
- CI/CD統合: プランを自動テストパイプラインに組み込む
データ管理
- 定期的なアーカイブ: 週次または月次でアーカイブを実行
- 保持ポリシー: 適切な保持設定を config.json で設定
- ディスク容量監視: データベースサイズを定期的に確認
- 重要なセッションをPOPL化: 削除前に重要なセッションをPOPLエントリとして保存
よくある質問
Q. POPLエントリは本当に公開安全ですか?
A. はい。POPLは以下をすべて削除/ハッシュ化します:
- APIキー、トークン、パスワード
- ファイルパス(絶対パス、ホームディレクトリ)
- 個人を特定できる情報(PII)
- RPCペイロードの内容(SHA-256ハッシュに置換)
ただし、念のため公開前にエントリを確認することをお勧めします。
Q. バリデーションプランの実行が失敗する
A. 以下を確認してください:
- コネクタが有効で動作しているか
- プランのYAML形式が正しいか
- タイムアウト設定が十分か
- 実行ログ(
run.log)を確認
Q. アーカイブでデータが失われないか心配
A. まずドライランで確認してください:
# 何が削除されるか確認
pfscan archive plan
# 重要なセッションをPOPL化
pfscan popl session --session <important-session-id>
# 安全に実行
pfscan archive run --yes