xk6-mcp

xk6-mcp avatar

by dgzlopes

xk6Browser Automation

Test MCP servers with k6

What is xk6-mcp

xk6-mcp

A k6 extension for testing Model Context Protocol (MCP) servers.

Installation

  1. First, ensure you have xk6 installed:
go install go.k6.io/xk6/cmd/xk6@latest
  1. Build a k6 binary with the xk6-mcp extension:
xk6 build --with github.com/dgzlopes/xk6-mcp
  1. Import the mcp module in your script, at the top of your test script:
import mcp from 'k6/x/mcp';
  1. The built binary will be in your current directory. You can move it to your PATH or use it directly:
./k6 run script.js

Example

import mcp from 'k6/x/mcp';

// Initialize MCP Client with stdio transport
const client = new mcp.StdioClient({
  path: 'npx',
  env: [],
  args: ['-y', '@modelcontextprotocol/server-everything', '/tmp'],
});

export default function () {
  console.log('Checking MCP server status...');
  console.log('MCP server running:', client.ping());

  // List available tools
  console.log('Tools available:');
  const tools = client.listTools().tools;
  tools.forEach(tool => console.log(`  - ${tool.name}`));

  // List available resources
  console.log('Resources available:');
  const resources = client.listResources().resources;
  resources.forEach(resource => console.log(`  - ${resource.uri}`));

  // List available prompts
  console.log('Prompts available:');
  const prompts = client.listPrompts().prompts;
  prompts.forEach(prompt => console.log(`  - ${prompt.name}`));

  // Call a sample tool
  const toolResult = client.callTool({
    params: { name: 'echo', arguments: { message: 'Hello, world!' } }
  });
  console.log('Echo tool response:', toolResult.content[0].text);

  // Read a sample resource
  const resourceContent = client.readResource({
    params: { uri: 'test://static/resource/1' }
  });
  console.log('Resource content:', resourceContent.contents[0].text);

  // Get a sample prompt
  const prompt = client.getPrompt({
    params: { name: 'simple_prompt' }
  });
  console.log('Prompt:', prompt.messages[0].content.text);
}

You can also use the SSE transport to connect to an MCP server that supports it:

const client = new mcp.SSEClient({
  baseURL: 'http://localhost:3001/sse',
  headers: { Authorization: 'Bearer abc123' },
  timeout: '30s'
});

Run the SSE server with:

docker run -p 3001:3001 --rm -it tzolov/mcp-everything-server:v1

Leave a Comment

Comments section will be available soon. Stay tuned!

Frequently Asked Questions

What is MCP?

MCP (Model Context Protocol) is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications, providing a standardized way to connect AI models to different data sources and tools.

What are MCP Servers?

MCP Servers are lightweight programs that expose specific capabilities through the standardized Model Context Protocol. They act as bridges between LLMs like Claude and various data sources or services, allowing secure access to files, databases, APIs, and other resources.

How do MCP Servers work?

MCP Servers follow a client-server architecture where a host application (like Claude Desktop) connects to multiple servers. Each server provides specific functionality through standardized endpoints and protocols, enabling Claude to access data and perform actions through the standardized protocol.

Are MCP Servers secure?

Yes, MCP Servers are designed with security in mind. They run locally with explicit configuration and permissions, require user approval for actions, and include built-in security features to prevent unauthorized access and ensure data privacy.