MCPプロンプトテスター
エージェントがさまざまなプロバイダーで LLM プロンプトをテストできるようにするシンプルな MCP サーバー。
特徴
- OpenAIとAnthropicモデルによるテストプロンプト
- システムプロンプト、ユーザープロンプト、その他のパラメータを構成する
- フォーマットされた応答またはエラーメッセージを取得する
- .env ファイルのサポートによる簡単な環境設定
インストール
# Install with pip
pip install -e .
# Or with uv
uv install -e .
APIキーの設定
サーバーには、使用するプロバイダーのAPIキーが必要です。APIキーは2つの方法で設定できます。
オプション1: 環境変数
次の環境変数を設定します。
OPENAI_API_KEY
- OpenAI API キーANTHROPIC_API_KEY
- Anthropic APIキー
オプション 2: .env ファイル (推奨)
- プロジェクトディレクトリまたはホームディレクトリに
.env
という名前のファイルを作成します。 - 次の形式で API キーを追加します。
OPENAI_API_KEY=your-openai-api-key-here
ANTHROPIC_API_KEY=your-anthropic-api-key-here
- サーバーはこれらのキーを自動的に検出して読み込みます
便宜上、サンプル テンプレートが.env.example
として含まれています。
使用法
stdio (デフォルト) または SSE トランスポートを使用してサーバーを起動します。
# Using stdio transport (default)
prompt-tester
# Using SSE transport on custom port
prompt-tester --transport sse --port 8000
利用可能なツール
サーバーは、MCP 対応エージェントに対して次のツールを公開します。
1. list_providers
利用可能な LLM プロバイダーとそのデフォルト モデルを取得します。
パラメータ:
応答例:
{
"providers": {
"openai": [
{
"type": "gpt-4",
"name": "gpt-4",
"input_cost": 0.03,
"output_cost": 0.06,
"description": "Most capable GPT-4 model"
},
// ... other models ...
],
"anthropic": [
// ... models ...
]
}
}
2. テスト比較
複数のプロンプトを並べて比較し、さまざまなプロバイダー、モデル、パラメータを同時にテストできます。
パラメータ:
comparisons
(配列): 1 ~ 4 個の比較構成のリスト。各比較構成には次の内容が含まれます。provider
(文字列): 使用する LLM プロバイダー ("openai" または "anthropic")model
(文字列): モデル名system_prompt
(文字列): システムプロンプト(モデルの指示)user_prompt
(文字列): ユーザーのメッセージ/プロンプトtemperature
(数値、オプション): ランダム性を制御するmax_tokens
(整数、オプション): 生成するトークンの最大数top_p
(数値、オプション):核サンプリングによる多様性の制御
使用例:
{
"comparisons": [
{
"provider": "openai",
"model": "gpt-4",
"system_prompt": "You are a helpful assistant.",
"user_prompt": "Explain quantum computing in simple terms.",
"temperature": 0.7
},
{
"provider": "anthropic",
"model": "claude-3-opus-20240229",
"system_prompt": "You are a helpful assistant.",
"user_prompt": "Explain quantum computing in simple terms.",
"temperature": 0.7
}
]
}
3. マルチターン会話のテスト
LLM プロバイダーとのマルチターン会話を管理し、ステートフル会話の作成と維持を可能にします。
モード:
start
: 新しい会話を開始しますcontinue
: 既存の会話を継続しますget
: 会話履歴を取得するlist
: すべてのアクティブな会話を一覧表示しますclose
: 会話を閉じる
パラメータ:
mode
(文字列): 操作モード ("start"、"continue"、"get"、"list"、または "close")conversation_id
(文字列): 会話の一意のID (続行、取得、終了モードで必要)provider
(文字列): LLM プロバイダー (開始モードに必須)model
(文字列): モデル名(開始モードに必須)system_prompt
(文字列): システムプロンプト(開始モードに必須)user_prompt
(文字列): ユーザーメッセージ(開始モードと継続モードで使用)temperature
(数値、オプション):モデルの温度パラメータmax_tokens
(整数、オプション): 生成するトークンの最大数top_p
(数値、オプション): Top-pサンプリングパラメータ
使用例(会話を始める):
{
"mode": "start",
"provider": "openai",
"model": "gpt-4",
"system_prompt": "You are a helpful assistant specializing in physics.",
"user_prompt": "Can you explain what dark matter is?"
}
使用例(会話を続ける):
{
"mode": "continue",
"conversation_id": "conv_12345",
"user_prompt": "How does that relate to dark energy?"
}
エージェントの使用例
MCP クライアントを使用すると、エージェントは次のようなツールを使用できます。
import asyncio
import json
from mcp.client.session import ClientSession
from mcp.client.stdio import StdioServerParameters, stdio_client
async def main():
async with stdio_client(
StdioServerParameters(command="prompt-tester")
) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# 1. List available providers and models
providers_result = await session.call_tool("list_providers", {})
print("Available providers and models:", providers_result)
# 2. Run a basic test with a single model and prompt
comparison_result = await session.call_tool("test_comparison", {
"comparisons": [
{
"provider": "openai",
"model": "gpt-4",
"system_prompt": "You are a helpful assistant.",
"user_prompt": "Explain quantum computing in simple terms.",
"temperature": 0.7,
"max_tokens": 500
}
]
})
print("Single model test result:", comparison_result)
# 3. Compare multiple prompts/models side by side
comparison_result = await session.call_tool("test_comparison", {
"comparisons": [
{
"provider": "openai",
"model": "gpt-4",
"system_prompt": "You are a helpful assistant.",
"user_prompt": "Explain quantum computing in simple terms.",
"temperature": 0.7
},
{
"provider": "anthropic",
"model": "claude-3-opus-20240229",
"system_prompt": "You are a helpful assistant.",
"user_prompt": "Explain quantum computing in simple terms.",
"temperature": 0.7
}
]
})
print("Comparison result:", comparison_result)
# 4. Start a multi-turn conversation
conversation_start = await session.call_tool("test_multiturn_conversation", {
"mode": "start",
"provider": "openai",
"model": "gpt-4",
"system_prompt": "You are a helpful assistant specializing in physics.",
"user_prompt": "Can you explain what dark matter is?"
})
print("Conversation started:", conversation_start)
# Get the conversation ID from the response
response_data = json.loads(conversation_start.text)
conversation_id = response_data.get("conversation_id")
# Continue the conversation
if conversation_id:
conversation_continue = await session.call_tool("test_multiturn_conversation", {
"mode": "continue",
"conversation_id": conversation_id,
"user_prompt": "How does that relate to dark energy?"
})
print("Conversation continued:", conversation_continue)
# Get the conversation history
conversation_history = await session.call_tool("test_multiturn_conversation", {
"mode": "get",
"conversation_id": conversation_id
})
print("Conversation history:", conversation_history)
asyncio.run(main())
MCPエージェント統合
MCP 権限を持つエージェントの場合、統合は簡単です。エージェントが LLM プロンプトをテストする必要がある場合は、次の手順に従ってください。
- 検出: エージェントは
list_providers
を使用して利用可能なモデルとその機能を検出できます。 - シンプルなテスト: 簡単なテストには、単一の構成で
test_comparison
ツールを使用します。 - 比較:エージェントが異なるプロンプトやモデルを評価する必要がある場合、複数の構成で
test_comparison
使用できます。 - ステートフルインタラクション: マルチターンの会話の場合、エージェントは
test_multiturn_conversation
ツールを使用して会話を管理できます。
これにより、エージェントは次のことが可能になります。
- プロンプトのバリエーションをテストして、最も効果的なフレーズを見つけます
- 特定のタスクのさまざまなモデルを比較する
- 複数ターンの会話でコンテキストを維持する
- 温度やmax_tokensなどのパラメータを最適化する
- 開発中のトークンの使用状況とコストを追跡する
構成
環境変数を使用して、API キーとオプションのトレース構成を設定できます。
必要なAPIキー
OPENAI_API_KEY
- OpenAI API キーANTHROPIC_API_KEY
- Anthropic APIキー
オプションのLangfuseトレース
サーバーは、LLM呼び出しのトレースと監視のためにLangfuseをサポートしています。以下の設定はオプションです。
LANGFUSE_SECRET_KEY
- Langfuse の秘密鍵LANGFUSE_PUBLIC_KEY
- Langfuseの公開鍵LANGFUSE_HOST
- LangfuseインスタンスのURL
Langfuse トレースを使用しない場合は、これらの設定を空のままにしておきます。