mcp2scripts
v0.3.1
Published
Generate JavaScript scripts from MCP Server Tools for Claude Code Skills to use
Maintainers
Readme
mcp2scripts
Generate JavaScript scripts from MCP Server Tools for Claude Code Skills.
mcp2scripts queries your local mcp2rest service and generates executable JavaScript scripts for each MCP tool, packaged as Claude Code skills.
Features
- Zero-config skill generation - Generate skills with a single command
- Full MCP protocol support - Works with any MCP server via mcp2rest
- Type-safe CLI generation - Converts JSON Schema to commander.js options
- Interactive help - Every tool script includes
--helpdocumentation - State management - Scripts share server state through mcp2rest
- Categorized tools - Automatically organizes tools by functionality
Installation
npm install -g mcp2scriptsOr use with npx:
npx mcp2scripts serversPrerequisites
- Node.js >= 18.0.0
- mcp2rest service running (default: http://localhost:28888)
- See mcp2rest documentation for setup
Quick Start
# 1. List available MCP servers
mcp2scripts servers
# 2. Generate skill for a specific server (creates in project folder ./.claude/skills)
mcp2scripts generate chrome-devtools
# 3. Or generate in user folder with --user flag
mcp2scripts generate chrome-devtools --user
# 4. Skills are created in ./.claude/skills/mcp-{server-name}/ or ~/.claude/skills/mcp-{server-name}/
# 5. Claude Code automatically discovers skills in both locationsCLI Usage
List Servers
Show all MCP servers loaded in mcp2rest:
mcp2scripts servers
# Use custom mcp2rest endpoint
mcp2scripts servers --endpoint http://192.168.1.100:28888Output:
Available servers in mcp2rest (http://localhost:28888):
✓ chrome-devtools
Status: connected
Tools: 15
Transport: stdio
Package: @modelcontextprotocol/server-chrome-devtools
✓ filesystem
Status: connected
Tools: 8
Transport: stdio
Package: @modelcontextprotocol/server-filesystemGenerate Skills
Generate a skill for a specific server:
# Generate skill for chrome-devtools (default: project folder)
mcp2scripts generate chrome-devtools
# Generate to user folder
mcp2scripts generate chrome-devtools --user
# Generate to custom directory
mcp2scripts generate chrome-devtools -o ./my-skills
# Generate skills for all connected servers
mcp2scripts generate --all
# Use custom mcp2rest endpoint
mcp2scripts generate chrome-devtools --endpoint http://192.168.1.100:28888Output:
Generating skill for 'chrome-devtools'...
mcp2rest: http://localhost:28888
Output: ./.claude/skills
✓ Generated skill: ./.claude/skills/mcp-chrome-devtools
SKILL.md: ./.claude/skills/mcp-chrome-devtools/SKILL.md
Scripts: 15 tools + 1 shared client
Next steps:
1. Navigate to skill directory and run: npm install
2. Run scripts: node scripts/tool_name.js --help
3. Claude Code will auto-discover skills from project .claude/skills/ or user ~/.claude/skills/List Tools
Show tools available on a server:
mcp2scripts tools chrome-devtoolsOutput:
Tools for 'chrome-devtools' (15 total):
navigate
Navigate to a URL in the current page
Required: url
click
Click an element on the page
Required: selector
screenshot
Take a screenshot of the page
Optional: fullPageGenerated Skill Structure
Default (project folder):
./.claude/skills/mcp-{server-name}/
├── SKILL.md # Skill documentation
└── scripts/
├── package.json # Dependencies (axios, commander)
├── mcp_client.js # Shared REST client
├── tool1.js # Generated script for tool1
├── tool2.js # Generated script for tool2
└── ...With --user flag:
~/.claude/skills/mcp-{server-name}/
├── SKILL.md # Skill documentation
└── scripts/
├── package.json # Dependencies (axios, commander)
├── mcp_client.js # Shared REST client
├── tool1.js # Generated script for tool1
├── tool2.js # Generated script for tool2
└── ...SKILL.md
Contains:
- YAML frontmatter with skill metadata
- Tool categorization (Page Management, Inspection, etc.)
- Usage examples
- Troubleshooting tips
Tool Scripts
Each tool gets an executable JavaScript script with:
#!/usr/bin/env nodeshebang- Commander.js CLI with
--helpsupport - Type-safe argument parsing (JSON Schema → CLI options)
- Required field validation
- JSON parsing for complex types
- Error handling
Example generated script:
#!/usr/bin/env node
import { program } from 'commander';
import { callTool } from './mcp_client.js';
program
.name('navigate')
.description('Navigate to a URL in the current page')
.option('--url <value>', 'URL to navigate to (string)')
.parse();
const options = program.opts();
if (!options.url) {
console.error('Error: --url is required');
process.exit(1);
}
const args = {
url: options.url,
};
const result = await callTool('chrome-devtools', 'navigate', args);
console.log(result);Programmatic API
You can also use mcp2scripts as a library:
import { ScriptGenerator } from 'mcp2scripts';
const gen = new ScriptGenerator('http://localhost:28888');
// List servers
const servers = await gen.listServers();
console.log(servers);
// Get tools for a server
const tools = await gen.getTools('chrome-devtools');
console.log(tools);
// Generate skill (default: ./.claude/skills)
const result = await gen.generateSkill('chrome-devtools');
console.log(`Generated ${result.toolCount} tools at ${result.skillPath}`);
// Generate to user folder
const resultUser = await gen.generateSkill('chrome-devtools', '~/.claude/skills');
// Generate all skills
const results = await gen.generateAllSkills();
console.log(`Generated ${results.length} skills`);API Reference
new ScriptGenerator(mcp2restUrl?: string)
Create a new script generator.
mcp2restUrl- Base URL of mcp2rest service (default:http://localhost:28888)
async listServers(): Promise<ServerInfo[]>
Get all servers from mcp2rest.
Returns array of server info objects:
{
name: string;
status: 'connected' | 'disconnected' | 'error';
toolCount?: number;
transport?: string;
package?: string;
url?: string;
}Throws MCPConnectionError if cannot connect to mcp2rest.
async getTools(serverName: string): Promise<Tool[]>
Get tool schemas for a server.
Returns array of tool objects:
{
name: string;
description?: string;
inputSchema?: JsonSchema;
}Throws Error if server not found.
async generateSkill(serverName: string, outputDir?: string): Promise<GenerateSkillResult>
Generate a Claude Code skill for an MCP server.
serverName- Name of the MCP serveroutputDir- Output directory (default:./.claude/skills)
Returns:
{
skillPath: string; // Path to generated skill directory
serverName: string; // Name of server
toolCount: number; // Number of tools generated
scriptsCreated: string[]; // List of script filenames
}async generateAllSkills(outputDir?: string): Promise<GenerateSkillResult[]>
Generate skills for all connected servers with tools.
Returns array of GenerateSkillResult objects.
Configuration
Environment Variables
MCP_REST_URL- Override mcp2rest endpoint in generated scripts
Example:
# Generate skill with default endpoint
mcp2scripts generate chrome-devtools
# Later, override at runtime
MCP_REST_URL=http://192.168.1.100:28888 node scripts/navigate.js --url https://example.comCustom mcp2rest Endpoint
Use the --endpoint flag with any command:
mcp2scripts servers --endpoint http://custom-host:8080
mcp2scripts generate chrome-devtools --endpoint http://custom-host:8080Using Generated Skills
With Claude Code
Claude Code automatically discovers skills in both ./.claude/skills/ (project) and ~/.claude/skills/ (user):
- Generate skills:
mcp2scripts generate --all(creates in project folder) - Or generate in user folder:
mcp2scripts generate --all --user - Start Claude Code
- Skills are available immediately
Manual Usage
Run tool scripts directly:
cd ./.claude/skills/mcp-chrome-devtools/scripts
# Install dependencies (first time only)
npm install
# Get help
node navigate.js --help
# Navigate to URL
node navigate.js --url https://example.com
# Take screenshot
node screenshot.js --full-page
# Click element
node click.js --selector "#login-button"Chaining Commands
All scripts use the same server instance (via mcp2rest):
# Navigate to page
node navigate.js --url https://github.com
# Fill in search box
node fill.js --selector "input[name=q]" --value "mcp2scripts"
# Submit form
node click.js --selector "button[type=submit]"
# Take screenshot
node screenshot.js --full-pageTroubleshooting
"Cannot connect to mcp2rest"
Check mcp2rest is running:
curl http://localhost:28888/healthVerify correct endpoint:
mcp2scripts servers --endpoint http://localhost:28888Check firewall settings if using remote endpoint
"Server not found"
List available servers:
mcp2scripts serversVerify server name matches exactly (case-sensitive)
Check server is connected (not disconnected)
"No tools available"
Check server status:
mcp2scripts tools server-nameVerify server has initialized properly in mcp2rest
Check server logs for initialization errors
Script Errors
Use
--helpto see required arguments:node scripts/tool-name.js --helpCheck argument types (string, number, boolean, object)
For object arguments, provide valid JSON:
node configure.js --settings '{"theme":"dark","timeout":5000}'
Examples
Example 1: Browser Automation
# Generate chrome-devtools skill
mcp2scripts generate chrome-devtools
cd ./.claude/skills/mcp-chrome-devtools/scripts
# Install dependencies
npm install
# Navigate to page
node navigate.js --url https://example.com
# Take screenshot
node screenshot.js --full-page
# Get console logs
node get_console_logs.jsExample 2: File System Operations
# Generate filesystem skill
mcp2scripts generate filesystem
cd ./.claude/skills/mcp-filesystem/scripts
# Install dependencies
npm install
# List directory
node list_directory.js --path /tmp
# Read file
node read_file.js --path /tmp/test.txt
# Write file
node write_file.js --path /tmp/output.txt --content "Hello World"Example 3: Multi-Server Workflow
# Generate all skills
mcp2scripts generate --all
# Use browser to fetch data
cd ./.claude/skills/mcp-chrome-devtools/scripts
node navigate.js --url https://api.example.com/data.json
node screenshot.js --full-page > data.png
# Save to file
cd ./.claude/skills/mcp-filesystem/scripts
node write_file.js --path /tmp/data.png --content-from-stdin < ~/data.pngDevelopment
# Clone repository
git clone https://github.com/ulasbilgen/mcp2skill-tools.git
cd mcp2skill-tools/packages/mcp2scripts
# Install dependencies
npm install
# Run tests
npm test
# Build
npm run build
# Run CLI locally
node dist/cli.js serversTypeScript
Full TypeScript support with exported types:
import type { ServerInfo, Tool, JsonSchema, GenerateSkillResult } from 'mcp2scripts';Contributing
Contributions welcome! See CONTRIBUTING.md.
License
MIT License - see LICENSE
Related Projects
- mcp2rest - REST API gateway for MCP servers
- Model Context Protocol - Official MCP specification
- Claude Code - AI coding assistant
Changelog
See CHANGELOG.md for release history.
