#!/usr/bin/env node
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
const server = new Server({
name: "random-value-server",
version: "1.0.0",
});
async function main() {
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "generate_random_number",
description: "Generate a random integer within a specified range",
inputSchema: {
type: "object",
properties: {
min: {
type: "number",
description: "Minimum value (inclusive)",
},
max: {
type: "number",
description: "Maximum value (inclusive)",
},
},
required: ["min", "max"],
},
},
{
name: "generate_random_string",
description: "Generate a random string of specified length using alphanumeric characters",
inputSchema: {
type: "object",
properties: {
length: {
type: "number",
description: "Length of the string to generate",
minimum: 1,
},
},
required: ["length"],
},
},
],
};
});
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
try {
switch (name) {
case "generate_random_number": {
const { min, max } = args as { min: number; max: number };
if (min > max) {
throw new Error("Minimum value cannot be greater than maximum value");
}
const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
return {
content: [
{
type: "text",
text: `Generated random number: ${randomNumber}`,
},
],
};
}
case "generate_random_string": {
const { length } = args as { length: number };
if (length < 1) {
throw new Error("String length must be at least 1");
}
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let result = "";
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * characters.length));
}
return {
content: [
{
type: "text",
text: `Generated random string: ${result}`,
},
],
};
}
default:
throw new Error(`Tool ${name} not found`);
}
} catch (error) {
return {
content: [
{
type: "text",
text: `Error: ${error instanceof Error ? error.message : String(error)}`,
},
],
isError: true,
};
}
});
const transport = new StdioServerTransport();
await server.connect(transport);
// Log to stderr (stdout is used for MCP communication)
console.error("Random Value MCP Server started successfully");
console.error("Server info: random-value-server v1.0.0");
}
main().catch((error) => {
console.error("Server failed to start:", error);
process.exit(1);
});