
mcp-server-generator
by deve1993
SKILL.md
name: mcp-server-generator description: Generate complete, production-ready MCP (Model Context Protocol) servers with automatic setup, configuration, and Claude Code integration allowed-tools:
- Read
- Write
- Edit
- Bash
- Glob
- Grep
- Task
MCP Server Generator
Expert skill for generating complete, production-ready MCP (Model Context Protocol) servers. Specializes in automated server generation, setup, configuration, and seamless integration with Claude Code.
Core Capabilities
1. Complete Server Generation
- Full TypeScript MCP server with all boilerplate
- Tool implementations (not just templates)
- Type-safe interfaces and schemas
- Error handling and validation
- Logging and debugging support
- Production-ready code quality
2. Automatic Setup & Installation
- Generate server code
- Install dependencies (npm/pnpm/yarn)
- Build TypeScript project
- Configure Claude Code integration
- Test server connection
- Start server automatically
3. Tool Categories Support
- Browser Automation: Playwright, Puppeteer
- Testing: Visual regression, E2E, accessibility
- Development: Live preview, hot reload, DevTools
- Performance: Profiling, metrics, Core Web Vitals
- Utilities: File operations, data processing, API calls
- Custom: Any tool category you need
4. Smart Configuration
- Zero Config: Works out of the box with sensible defaults
- Auto-Detection: Detects project type, framework, tools
- Optional Override: JSON/TypeScript config for customization
- Environment Variables: Support for secrets and configuration
- Multiple Profiles: Dev, staging, production configs
5. Claude Code Integration
- Automatic
.claude/config.jsonconfiguration - Server registration and startup
- Health check and monitoring
- Automatic restart on failure
- Logging to Claude Code console
6. Template Library
- Pre-built server templates for common use cases
- UI Testing Server (Playwright + visual regression)
- API Testing Server (HTTP client + validation)
- File Processing Server (read/write/transform)
- Web Scraping Server (browser automation + parsing)
- Custom template creation
Workflow
Phase 1: Analysis & Planning
-
Understand Requirements
- What tools does the server need to provide?
- What technologies to use? (Playwright, Puppeteer, etc.)
- Integration requirements (APIs, databases, etc.)
- Performance and scalability needs
-
Select Template
- Use pre-built template if available
- Identify closest template and customize
- Create from scratch if needed
-
Plan Architecture
- Tool organization (categories, naming)
- Configuration strategy (zero-config vs explicit)
- Dependencies and external services
- Error handling approach
Phase 2: Generation
-
Generate Server Structure
- Create directory structure
- Generate package.json with dependencies
- Create tsconfig.json for TypeScript
- Set up build scripts
-
Implement Tools
- Generate tool implementations
- Add input validation and schemas
- Implement error handling
- Add logging and debugging
-
Create Configuration
- Auto-detection logic
- Default configuration
- Override mechanism
- Environment variable support
-
Add Documentation
- README with setup instructions
- Tool documentation (inputs, outputs, examples)
- Troubleshooting guide
- API reference
Phase 3: Setup & Integration
-
Install & Build
- Run npm install
- Compile TypeScript
- Run tests (if present)
- Verify build output
-
Configure Claude Code
- Add server to
.claude/config.json - Set up environment variables
- Configure auto-start
- Set up logging
- Add server to
-
Test & Verify
- Start server
- Test connection
- Verify tool registration
- Run sample tool calls
- Check error handling
-
Documentation & Handoff
- Generate usage examples
- Document configuration options
- Provide troubleshooting steps
- Create quick start guide
MCP Server Architecture
Standard Structure
mcp-server-name/
├── package.json # Dependencies and scripts
├── tsconfig.json # TypeScript configuration
├── .env.example # Environment variables template
├── src/
│ ├── index.ts # Server entry point
│ ├── config/
│ │ ├── auto-detect.ts # Auto-detection logic
│ │ ├── defaults.ts # Default configuration
│ │ └── schema.ts # Config validation schema
│ ├── tools/
│ │ ├── category1/
│ │ │ ├── tool1.ts # Tool implementation
│ │ │ └── tool2.ts
│ │ └── category2/
│ │ └── tool3.ts
│ ├── utils/
│ │ ├── logger.ts # Logging utility
│ │ ├── errors.ts # Error handling
│ │ └── validation.ts # Input validation
│ └── types/
│ └── index.ts # TypeScript types
├── scripts/
│ ├── setup.sh # Setup automation
│ └── configure-claude.sh # Claude Code config
├── tests/
│ └── server.test.ts # Server tests
└── README.md # Documentation
Server Entry Point Template
// src/index.ts
import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js'
import { loadConfig } from './config/auto-detect.js'
import { registerTools } from './tools/index.js'
import { logger } from './utils/logger.js'
const server = new Server(
{
name: 'mcp-server-name',
version: '1.0.0',
},
{
capabilities: {
tools: {},
},
}
)
// Load configuration
const config = await loadConfig()
logger.info('Configuration loaded', config)
// Register all tools
const tools = registerTools(config)
logger.info(`Registered ${tools.length} tools`)
// Handle tool list request
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: tools.map(tool => ({
name: tool.name,
description: tool.description,
inputSchema: tool.inputSchema,
})),
}))
// Handle tool execution request
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const tool = tools.find(t => t.name === request.params.name)
if (!tool) {
throw new Error(`Tool not found: ${request.params.name}`)
}
logger.info(`Executing tool: ${tool.name}`, request.params.arguments)
try {
const result = await tool.execute(request.params.arguments)
logger.info(`Tool completed: ${tool.name}`)
return result
} catch (error) {
logger.error(`Tool failed: ${tool.name}`, error)
throw error
}
})
// Start server
const transport = new StdioServerTransport()
await server.connect(transport)
logger.info('MCP Server started')
Tool Implementation Template
// src/tools/category/example-tool.ts
import { z } from 'zod'
import { Tool } from '../../types/index.js'
// Input validation schema
const inputSchema = z.object({
param1: z.string().describe('Description of param1'),
param2: z.number().optional().describe('Optional param2'),
options: z.object({
option1: z.boolean().default(true),
}).optional(),
})
export const exampleTool: Tool = {
name: 'example_tool',
description: 'Does something useful',
inputSchema: {
type: 'object',
properties: {
param1: { type: 'string', description: 'Description of param1' },
param2: { type: 'number', description: 'Optional param2' },
options: {
type: 'object',
properties: {
option1: { type: 'boolean', default: true },
},
},
},
required: ['param1'],
},
async execute(args: unknown) {
// Validate input
const params = inputSchema.parse(args)
// Implement tool logic
try {
const result = await doSomething(params)
return {
content: [
{
type: 'text',
text: JSON.stringify(result, null, 2),
},
],
}
} catch (error) {
throw new Error(`Tool execution failed: ${error.message}`)
}
},
}
async function doSomething(params: z.infer<typeof inputSchema>) {
// Implementation here
return { success: true, data: params }
}
Auto-Detection Example
// src/config/auto-detect.ts
import { existsSync, readFileSync } from 'fs'
import { join } from 'path'
export async function loadConfig() {
const cwd = process.cwd()
// Detect package.json
const packageJsonPath = join(cwd, 'package.json')
const packageJson = existsSync(packageJsonPath)
? JSON.parse(readFileSync(packageJsonPath, 'utf-8'))
: {}
// Detect framework
const framework = detectFramework(packageJson)
// Detect test runner
const testRunner = detectTestRunner(packageJson)
// Detect available ports
const port = await findAvailablePort(3000)
// Load user config (if exists)
const userConfig = loadUserConfig()
// Merge with defaults
return {
port,
framework,
testRunner,
...getDefaults(),
...userConfig,
}
}
function detectFramework(packageJson: any): string {
if (packageJson.dependencies?.react) return 'react'
if (packageJson.dependencies?.vue) return 'vue'
if (packageJson.dependencies?.svelte) return 'svelte'
return 'unknown'
}
function detectTestRunner(packageJson: any): string {
if (packageJson.devDependencies?.vitest) return 'vitest'
if (packageJson.devDependencies?.jest) return 'jest'
return 'unknown'
}
function loadUserConfig() {
// Try .claude/mcp-config.json
const configPath = join(process.cwd(), '.claude', 'mcp-config.json')
if (existsSync(configPath)) {
return JSON.parse(readFileSync(configPath, 'utf-8'))
}
// Try package.json mcp-server field
const packageJsonPath = join(process.cwd(), 'package.json')
if (existsSync(packageJsonPath)) {
const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'))
if (pkg['mcp-server']) {
return pkg['mcp-server']
}
}
return {}
}
Claude Code Integration
Configuration File
// .claude/config.json
{
"mcpServers": {
"server-name": {
"command": "node",
"args": ["./path/to/server/dist/index.js"],
"env": {
"NODE_ENV": "development",
"LOG_LEVEL": "info"
},
"autoStart": true
}
}
}
Setup Script
#!/bin/bash
# scripts/setup.sh
set -e
echo "🚀 Setting up MCP Server..."
# Install dependencies
echo "📦 Installing dependencies..."
npm install
# Build TypeScript
echo "🔨 Building server..."
npm run build
# Configure Claude Code
echo "⚙️ Configuring Claude Code..."
./scripts/configure-claude.sh
# Test server
echo "🧪 Testing server..."
node dist/index.js --test
echo "✅ Setup complete!"
echo "Server is ready to use."
Configure Claude Script
#!/bin/bash
# scripts/configure-claude.sh
CLAUDE_CONFIG=".claude/config.json"
SERVER_NAME="$1"
SERVER_PATH="$(pwd)/dist/index.js"
# Create .claude directory if not exists
mkdir -p .claude
# Add server to config
if [ -f "$CLAUDE_CONFIG" ]; then
# Update existing config
jq ".mcpServers[\"$SERVER_NAME\"] = {
\"command\": \"node\",
\"args\": [\"$SERVER_PATH\"],
\"autoStart\": true
}" "$CLAUDE_CONFIG" > "$CLAUDE_CONFIG.tmp"
mv "$CLAUDE_CONFIG.tmp" "$CLAUDE_CONFIG"
else
# Create new config
cat > "$CLAUDE_CONFIG" << EOF
{
"mcpServers": {
"$SERVER_NAME": {
"command": "node",
"args": ["$SERVER_PATH"],
"autoStart": true
}
}
}
EOF
fi
echo "✅ Claude Code configured"
Pre-built Templates
UI Testing Server
Complete server for UI component testing with:
- Visual regression (screenshot, compare, baseline)
- E2E testing (navigate, click, type, forms)
- Component preview (live server, hot reload)
- Performance monitoring (render time, Core Web Vitals)
- Accessibility auditing (WCAG, keyboard nav, ARIA)
Location: templates/ui-testing-server/
API Testing Server
Server for API testing and validation with:
- HTTP client (GET, POST, PUT, DELETE, etc.)
- Request validation (schema, headers, auth)
- Response assertion (status, body, headers)
- Mock server setup
- Load testing support
File Processing Server
Server for file operations with:
- Read/write operations
- Format conversion (JSON, CSV, YAML, XML)
- Data transformation
- Archive operations (zip, tar)
- File watching
Web Scraping Server
Server for web scraping with:
- Page navigation and rendering
- Element selection and extraction
- Data parsing and cleaning
- Pagination handling
- Anti-bot bypass techniques
Best Practices
Server Design
- Single Responsibility: One server, one domain
- Tool Granularity: Fine-grained tools over monolithic ones
- Input Validation: Always validate and sanitize inputs
- Error Handling: Descriptive errors with context
- Logging: Comprehensive logging for debugging
Configuration
- Zero Config First: Work without configuration
- Smart Defaults: Sensible defaults for common cases
- Easy Override: Simple config file structure
- Env Variables: Support for secrets and sensitive data
- Validation: Validate configuration at startup
Performance
- Lazy Loading: Load dependencies only when needed
- Resource Pooling: Reuse expensive resources (browsers, connections)
- Timeouts: Set reasonable timeouts for all operations
- Cleanup: Properly dispose resources after use
- Caching: Cache when appropriate
Security
- Input Sanitization: Never trust user input
- File System Access: Restrict to safe directories
- Network Calls: Validate URLs and domains
- Secrets: Use environment variables, never hardcode
- Error Messages: Don't leak sensitive information
Tool Naming Conventions
Naming Rules
- Use
snake_casefor tool names - Start with verb (action):
create_,get_,update_,delete_ - Be specific and descriptive
- Group related tools with prefixes
Examples
// Good
'screenshot_component'
'navigate_to_url'
'audit_accessibility'
'measure_performance'
'compare_visual_diff'
// Bad (too vague)
'take_pic'
'go'
'check'
'test'
Category Prefixes
// Visual
'visual_screenshot'
'visual_compare'
'visual_baseline'
// Performance
'perf_measure'
'perf_profile'
'perf_trace'
// Accessibility
'a11y_audit'
'a11y_check_wcag'
'a11y_keyboard_nav'
Troubleshooting
Common Issues
Server Won't Start
# Check Node version (requires 18+)
node --version
# Check dependencies
npm install
# Rebuild
npm run build
# Check logs
tail -f .claude/logs/mcp-server-name.log
Tool Not Found
// Verify tool registration
server.setRequestHandler(ListToolsRequestSchema, async () => {
console.log('Registered tools:', tools.map(t => t.name))
return { tools }
})
Connection Issues
# Test server manually
echo '{"jsonrpc":"2.0","method":"initialize","id":1}' | node dist/index.js
# Check Claude Code config
cat .claude/config.json
Performance Issues
// Add timeouts
const result = await Promise.race([
tool.execute(args),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Timeout')), 30000)
)
])
// Profile execution
console.time('tool-execution')
const result = await tool.execute(args)
console.timeEnd('tool-execution')
When to Use This Skill
Activate this skill when you need to:
- Generate a new MCP server from scratch
- Create custom tools for Claude Code
- Automate server setup and configuration
- Integrate external services with Claude Code
- Build browser automation tools
- Create testing infrastructure
- Implement file processing pipelines
- Set up web scraping capabilities
- Extend Claude Code with new capabilities
Output Format
When generating MCP servers, provide:
- Complete Server Code: Production-ready, type-safe implementation
- Configuration Files: package.json, tsconfig.json, config templates
- Setup Scripts: Automated installation and configuration
- Documentation: README, tool docs, troubleshooting guide
- Usage Examples: How to use each tool
- Integration Guide: How to add to Claude Code
Always generate complete, working code that can be installed and used immediately with minimal configuration.
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon