xk6-mcp について
xk6-mcp は、Model Context Protocol (MCP) サーバーをテストするための k6 拡張機能です。k6 スクリプトから stdio、SSE、Streamable HTTP の各トランスポートを利用してサーバーを検証する開発者を対象としています。本プロジェクトは実験的なもので、Grafana Labs による公式サポートはありません。
主な機能
- 01stdio、SSE、Streamable HTTP への対応
- 02一覧取得時の自動ページネーション
- 03MCP リクエストごとの所要時間と件数の計測
- 04k6 テストスクリプトとの統合
活用シーン
- 01k6 スクリプトでのツール、リソース、プロンプト一覧のテスト
- 02MCP リクエストの所要時間とエラー率の計測
- 03MCP サーバーに対する負荷テスト
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
xk6-mcp
Model Context Protocol(MCP)サーバーをテストするための k6 拡張機能です。
注意
この拡張機能は実験的なものであり、Grafana Labs による公式サポートはありません。
インストール
- まず、xk6がインストールされていることを確認します:
go install go.k6.io/xk6/cmd/xk6@latest
- xk6-mcp 拡張機能を含む k6 バイナリをビルドします:
xk6 build --with github.com/dgzlopes/xk6-mcp
- テストスクリプトの先頭で、スクリプトに mcp モジュールをインポートします:
import mcp from 'k6/x/mcp';
- ビルドしたバイナリは現在のディレクトリにあります。PATH に移動するか、そのまま使用できます:
./k6 run script.js
例
⚠️ この例は mcp-example-serverに依存しています
最新バージョンはリリースページからダウンロードできます。
import mcp from 'k6/x/mcp';
export default function () {
// Initialize MCP Client with stdio transport
const client = new mcp.StdioClient({
path: './mcp-example-server',
});
// Check connection to MCP server
console.log('MCP server running:', client.ping());
// List all available tools
console.log('Tools available:');
const tools = client.listAllTools().tools;
tools.forEach(tool => console.log(` - ${tool.name}`));
// List all available resources
console.log('Resources available:');
const resources = client.listAllResources().resources;
resources.forEach(resource => console.log(` - ${resource.uri}`));
// List all available prompts
console.log('Prompts available:');
const prompts = client.listAllPrompts().prompts;
prompts.forEach(prompt => console.log(` - ${prompt.name}`));
// Call a sample tool
const toolResult = client.callTool({ name: 'greet', arguments: { name: 'Grafana k6' } });
console.log(`Greet tool response: "${toolResult.content[0].text}"`);
// Read a sample resource
const resourceContent = client.readResource({ uri: 'embedded:info' });
console.log(`Resource content: ${resourceContent.contents[0].text}`);
// Get a sample prompt
const prompt = client.getPrompt({ name: 'greet' });
console.log(`Prompt: ${prompt.messages[0].content.text}`);
}
よくある質問
stdio 以外のトランスポートについて
SSE と Streamable HTTP もサポートされています!
次のように使用できます:
// SSE
const client = new mcp.SSEClient({
base_url: 'http://localhost:3002',
});
// Streamable HTTP
const client = new mcp.StreamableHTTPClient({
base_url: 'http://localhost:3001',
});
ページネーションについて
この拡張機能では、リソース、ツール、プロンプトを一覧表示する方法が 2 つあります:
// With All: Handles pagination automatically
const allTools = client.listAllTools();
const allResources = client.listAllResources();
const allPrompts = client.listAllPrompts();
// Without All: Requires manual pagination
const first = client.listTools()
const second = client.listTools({ cursor: first.next_cursor });
メトリクスについて
この拡張機能は、すべての MCP 操作について RED スタイルのメトリクスを自動的に追跡します:
mcp_request_duration(trend):各 MCP リクエストの所要時間(ミリ秒)。mcp_request_count(counter):実行された MCP リクエストの数。mcp_request_errors(counter):失敗した MCP リクエストの数。
各メトリクスには次のタグが付与されます:
method:呼び出された MCP メソッド(例:GetPrompt、ListTools)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。