# Directory Structure
```
├── .gitignore
├── claude_desktop_config_example.json
├── LICENSE
├── package-lock.json
├── package.json
├── README.md
├── src
│ └── index.ts
└── tsconfig.json
```
# Files
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
```
# Dependency directories
node_modules/
# Build output
build/
# Environment variables
.env
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.swp
*.swo
```
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
```markdown
# UUID MCP Provider
A simple Model Context Protocol (MCP) server that provides timestamp-based UUIDs whenever it's called by an LLM.
## Features
- Provides a single tool: `generateUuid`
- Uses UUID v7 for timestamp-based unique identifiers
- Simple interface with no input parameters needed
- Easy integration with Claude and other LLMs
## Installation
```bash
# Install dependencies
npm install
# Build the project
npm run build
```
## Usage
You can run the server directly:
```bash
npm start
```
### Integration with Claude Desktop
To integrate with Claude Desktop, add this to your Claude Desktop configuration file:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"uuid-provider": {
"command": "node",
"args": ["/absolute/path/to/uuid-mcp/build/index.js"]
}
}
}
```
Replace `/absolute/path/to/uuid-mcp/build/index.js` with the absolute path to your built index.js file.
After updating the configuration, restart Claude Desktop to see the UUID generation tool available.
## How It Works
This server uses the official `uuid` package to generate UUID v7 identifiers. UUID v7 is specifically designed to be timestamp-based while maintaining strong uniqueness guarantees:
- Incorporates a Unix timestamp in millisecond precision
- Adds randomized data to ensure uniqueness even when multiple IDs are generated in the same millisecond
- Follows the latest RFC standards for UUID generation
- Provides chronologically sortable identifiers
- Prevents collisions in distributed systems
This approach is more reliable than custom UUID implementations and eliminates the potential for duplicates even under high load.
## Dependencies
- `@modelcontextprotocol/sdk`: For MCP server implementation
- `uuid`: For RFC-compliant UUID generation
- TypeScript and related tools for development
## Example
When called, the tool returns a UUID v7 string that looks like:
```
018e94d2-279b-7bd3-9289-80d1e6619670
```
The first part of the UUID contains the timestamp, making these identifiers chronologically sortable while still maintaining the standard UUID format.
```
--------------------------------------------------------------------------------
/claude_desktop_config_example.json:
--------------------------------------------------------------------------------
```json
{
"mcpServers": {
"uuid-provider": {
"command": "node",
"args": ["/Users/ericwu/projects/doc/claude_working_dir/uuid-mcp/build/index.js"]
}
}
}
```
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
```json
{
"compilerOptions": {
"target": "ES2022",
"module": "Node16",
"moduleResolution": "Node16",
"outDir": "./build",
"esModuleInterop": true,
"strict": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}
```
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
```json
{
"name": "uuid-mcp",
"version": "1.0.0",
"description": "A simple MCP server that provides timestamp-based UUIDs",
"type": "module",
"main": "build/index.js",
"scripts": {
"build": "tsc",
"start": "node build/index.js"
},
"keywords": [
"mcp",
"uuid",
"llm"
],
"author": "",
"license": "MIT",
"dependencies": {
"@modelcontextprotocol/sdk": "^1.8.0",
"uuid": "^11.1.0"
},
"devDependencies": {
"@types/node": "^22.13.17",
"@types/uuid": "^10.0.0",
"typescript": "^5.8.2"
}
}
```
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
```typescript
// Import the required MCP modules
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { v7 as uuidv7 } from 'uuid';
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
// Create the server
const server = new Server({
name: "uuid-mcp-provider",
version: "1.0.0"
}, {
capabilities: {
tools: {} // We're only providing tools functionality
}
});
// Register the tools/list endpoint to advertise our generateUuid tool
server.setRequestHandler(
ListToolsRequestSchema,
async () => {
return {
tools: [
{
name: "generateUuid",
description: "Generate a UUID v7 that's timestamp-based and guaranteed to be unique",
inputSchema: {
type: "object",
properties: {}
}
}
]
};
}
);
// Register the tools/call endpoint to handle tool execution
server.setRequestHandler(
CallToolRequestSchema,
async (request) => {
if (request.params.name === "generateUuid") {
// UUID v7 is timestamp-based with additional random data for uniqueness
const uuid = uuidv7();
return {
content: [
{
type: "text",
text: uuid
}
]
};
}
throw new Error(`Unknown tool: ${request.params.name}`);
}
);
// Start the server
async function main() {
try {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("UUID MCP Provider running on stdio...");
} catch (error) {
console.error("Error starting server:", error);
process.exit(1);
}
}
main();
```