mcpField
X
xk6-mcp

xk6-mcp

本地服务
github.com/dgzlopes开发工具2129 周前更新

关于 xk6-mcp

xk6-mcp 是一个 k6 扩展,用于对 Model Context Protocol (MCP) 服务进行负载和性能测试。它面向需要测试 MCP 服务的开发者,支持 stdio、SSE 和 Streamable HTTP 三种传输方式。该项目为实验性质,不受 Grafana Labs 官方支持。

主要功能

  1. 01支持 stdio、SSE 和 Streamable HTTP 传输
  2. 02自动分页的列表接口
  3. 03记录 MCP 请求的耗时、次数和错误
  4. 04与 k6 脚本集成

适用场景

  1. 01在 k6 脚本中测试 MCP 服务的工具、资源和提示词列表
  2. 02统计 MCP 请求的耗时与错误率
  3. 03对 MCP 服务进行性能测试

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

xk6-mcp

用于测试 Model Context Protocol (MCP) 服务的 k6 扩展。

注意

此扩展处于实验阶段,且未获得 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 () {
  // 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',
});
分页呢?

此扩展提供两种方式来列出资源、工具和提示词:

// 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)。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。