一个用于测试 模型上下文协议 (MCP) 服务器的 k6 扩展。
[!CAUTION] 此扩展是实验性的,并未得到 Grafana Labs 的正式支持。
go install go.k6.io/xk6/cmd/xk6@latest
xk6 build --with github.com/dgzlopes/xk6-mcp
import mcp from 'k6/x/mcp';
./k6 run script.js
⚠️ 此示例依赖于 mcp-example-server
你可以从发布页面下载最新版本。
import mcp from 'k6/x/mcp';
export default function () {
// 使用 stdio 运输方式初始化 MCP 客户端
const client = new mcp.StdioClient({
path: './mcp-example-server',
});
// 检查与 MCP 服务器的连接
console.log('MCP 服务器运行中:', client.ping());
// 列出所有可用工具
console.log('可用工具:');
const tools = client.listAllTools().tools;
tools.forEach(tool => console.log(` - ${tool.name}`));
// 列出所有可用资源
console.log('可用资源:');
const resources = client.listAllResources().resources;
resources.forEach(resource => console.log(` - ${resource.uri}`));
// 列出所有可用提示
console.log('可用提示:');
const prompts = client.listAllPrompts().prompts;
prompts.forEach(prompt => console.log(` - ${prompt.name}`));
// 调用一个示例工具
const toolResult = client.callTool({ name: 'greet', arguments: { name: 'Grafana k6' } });
console.log(`问候工具响应:“${toolResult.content[0].text}”`);
// 读取一个示例资源
const resourceContent = client.readResource({ uri: 'embedded:info' });
console.log(`资源内容:${resourceContent.contents[0].text}`);
// 获取一个示例提示
const prompt = client.getPrompt({ name: 'greet' });
console.log(`提示:${prompt.messages[0].content.text}`);
}
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',
});
该扩展提供了两种列出资源、工具和提示的方式:
// 使用 All:自动处理分页
const allTools = client.listAllTools();
const allResources = client.listAllResources();
const allPrompts = client.listAllPrompts();
// 不使用 All:需要手动分页
const first = client.listTools()
const second = client.listTools({ cursor: first.next_cursor });
该扩展会自动跟踪每项 MCP 操作的 RED 样式指标:
mcp_request_duration(趋势):每次 MCP 请求的持续时间(以毫秒为单位)。mcp_request_count(计数器):发出的 MCP 请求数量。mcp_request_errors(计数器):失败的 MCP 请求数量。每个指标都带有以下标签:
method:调用的 MCP 方法(例如,GetPrompt,ListTools)。