@clancy_lee/mcp-id-generator
Version:
MCP server for generating IDs with different algorithms including Snowflake compatible with MyBatis-Plus
67 lines (66 loc) • 2.09 kB
JavaScript
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { createId } from '@paralleldrive/cuid2';
import { v4 as uuidv4 } from 'uuid';
import { nanoid } from 'nanoid';
import { ulid } from 'ulid';
import { Snowflake } from '@sapphire/snowflake';
import { z } from 'zod';
const version = '0.1.0';
// 初始化雪花算法实例,使用与MyBatis-Plus相同的epoch时间(2010-11-04 01:42:54.657 UTC)
// 这确保生成的ID与MyBatis-Plus兼容
const snowflake = new Snowflake(1288834974657n);
const server = new McpServer({
name: 'id-generator',
version,
});
server.tool('generate-id', {
algorithm: z.enum(['cuid2', 'uuid', 'nanoid', 'ulid', 'snowflake']).default('cuid2'),
quantity: z.number().default(1),
}, async ({ algorithm, quantity }) => {
try {
let ids = [];
for (let i = 0; i < quantity; i++) {
switch (algorithm) {
case 'cuid2':
ids.push(createId());
break;
case 'nanoid':
ids.push(nanoid());
break;
case 'ulid':
ids.push(ulid());
break;
case 'snowflake':
ids.push(snowflake.generate().toString());
break;
case 'uuid':
default:
ids.push(uuidv4());
break;
}
}
if (ids.length === 0) {
return respond('Failed to generate IDs', true);
}
return respond(ids.join(','));
}
catch (err) {
const error = err;
return respond(`Error: ${error.message}`, true);
}
});
function respond(text, isError = false) {
return {
content: [
{
type: 'text',
text
}
],
isError
};
}
const transport = new StdioServerTransport();
await server.connect(transport);