返回市场
xk6-mcp

xk6-mcp

作者:grafana14 星标更新:2025-07-16

项目介绍

xk6-mcp

一个用于测试 模型上下文协议 (MCP) 服务器的 k6 扩展。

[!CAUTION] 此扩展是实验性的,并未得到 Grafana Labs 的正式支持。

安装

  1. 首先,确保已安装 xk6
go install go.k6.io/xk6/cmd/xk6@latest
  1. 使用 xk6-mcp 扩展构建 k6 二进制文件:
xk6 build --with github.com/dgzlopes/xk6-mcp
  1. 在测试脚本顶部导入 mcp 模块:
import mcp from 'k6/x/mcp';
  1. 构建的二进制文件将在当前目录中。你可以将其移动到你的 PATH 中或直接使用它:
./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}`);
}

常见问题

关于非 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',
});

关于分页?

该扩展提供了两种列出资源、工具和提示的方式:

// 使用 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 方法(例如,GetPromptListTools)。