@agenttic-ai-dev/skill2mcp
v0.1.0
Published
CLI and library to parse SKILL.md files into MCP-ready tool definitions
Maintainers
Readme
skill2mcp

skill2mcp is a TypeScript CLI/library that converts SKILL.md documents into MCP-ready tool definitions and can generate a minimal deployable MCP Server package from a single file or an entire skills directory.
The generated server uses the official MCP TypeScript SDK (@modelcontextprotocol/sdk) and supports stdio, http, or both transports.
Why this project
SKILL documents are usually semi-structured markdown (frontmatter + prose + tables). MCP tools require strict contracts (name, description, inputSchema).
skill2mcp bridges that gap with a layered pipeline:
- Parse markdown into a stable Intermediate Representation (IR)
- Transform IR into MCP tool definitions
- Generate a deployable MCP server package with handler stubs
Current status
MVP implemented and working:
- Deterministic parser (
strict,tolerant) - Cascading semantic mode (
semantic) for missing metadata fallback - Tool transformation (
SchemaBuilder,ToolMapper,ToolValidator) inspectoutput with MCP-style tool JSONbuildoutput with deployable MCP server package- Generated server supports
stdio+http build --watchfor iterative regeneration
Installation
Requirements
- Node.js 20+
- npm 10+
Local install
npm installInstall from npm
npm install -g @agenttic-ai-dev/skill2mcp
# or without global install
npx @agenttic-ai-dev/skill2mcp parse ./skillsBuild CLI
npm run buildQuick start
1. Parse a single SKILL
npm run parse -- ./fixtures/skills/valid-skill.md --mode strict2. Inspect generated tool definitions
npm run inspect -- ./fixtures/skills --mode tolerant3. Generate deployable MCP server package
npm run gen -- ./fixtures/skills --out ./generated/mcp-server --transport both --mode tolerant4. Run generated server
cd ./generated/mcp-server
npm install
npm run build
npm run start:stdio
# or
npm run start:httpHTTP endpoint:
POST /mcpCLI reference
parse
Converts SKILL markdown to IR JSON.
skill2mcp parse <input> [--mode strict|tolerant|semantic]Arguments:
<input>: path to a.mdfile or directory
Options:
--mode: parser mode (tolerantdefault)--format: currentlyjson
Output:
results[]with parsedSkillDocumentdiagnostics[]per source file
inspect
Converts parsed IR into MCP-like tool definitions.
skill2mcp inspect <input> [--mode strict|tolerant|semantic]Output:
tools[]: generated tool definitions (name,description,inputSchema)results[]: tool + diagnostics per source
build
Generates a deployable MCP server package from one or many skills.
skill2mcp build <input> --out <dir> [--transport stdio|http|both] [--mode strict|tolerant|semantic] [--watch]Arguments:
<input>: path to a.mdfile or directory
Required options:
--out: output directory for generated package
Optional options:
--transport: default generated server transport (bothdefault)--mode: parsing mode (tolerantdefault)--watch: regenerate package on source changes
Output:
- generated package files (
package.json,tools.json,src/server.ts, handlers) - diagnostics summary in JSON
Parse modes
strict
- Fails on required metadata/schema gaps
- Best for CI quality gates
tolerant
- Continues with warnings for missing fields
- Best for batch processing mixed-quality skills
semantic
- Starts from tolerant parse
- Attempts semantic extraction through OpenRouter (when configured)
- Applies deterministic fallback inference for unresolved fields
- Keeps diagnostics trace (
SEMANTIC_*codes)
OpenRouter configuration for semantic
Environment variables:
OPENROUTER_API_KEY: enables remote semantic extractionOPENROUTER_MODEL(optional): defaults toanthropic/claude-3.5-sonnetSKILL2MCP_CACHE_DIR(optional): override cache directoryOPENROUTER_HTTP_REFERER(optional): forwarded as OpenRouter headerOPENROUTER_X_TITLE(optional): forwarded as OpenRouter header
Cache behavior:
- Semantic responses are cached by content hash in
.skill2mcp-cache/semantic-openrouter-cache.json - If cache is present, semantic mode reuses cache and avoids extra remote calls
Canonical SKILL.md format (recommended)
---
name: docx-generator
version: 1.0.0
description: Generate Word docs from structured markdown
tags: [documents, office]
---
## Parameters
| Name | Type | Required | Default | Description |
|------|------|----------|---------|-------------|
| content | string | yes | | Markdown content |
| title | string | yes | | Document title |
## Examples
**Input:** `{ content: "# Hello", title: "Report" }`
**Output:** report.docx generated at /outputs/
## Triggers
- "generate document"
- "create report"Generated package structure
generated/mcp-server/
package.json
tsconfig.json
README.md
tools.json
src/
server.ts
generated-tools.ts
handlers/
index.ts
<tool_name>.tsDevelopment
Scripts
npm run build # compile TypeScript
npm run test # run test suite
npm run parse # parse command entry
npm run inspect # inspect command entry
npm run gen # build command entry
npm run pack:check # verify npm package contentsPublish to npm
# Login with publishing account ([email protected])
npm adduser
# Final verification
npm run prepublishOnly
# Publish public package
npm publish --access publicTest suite
Current automated coverage includes:
- parser behavior (
strict,tolerant,semantic) - schema builder and tool mapping
- inspect command output contract
- end-to-end build artifact generation
Engineering conventions
- Follow repository collaboration rules in
AGENTS.md - Product/business directives are governed by
ROADMAP.md - Commit messages must use
[AI]prefix when AI-generated
Release artifacts
This repo includes:
- Dual-license distribution:
MIT OR Apache-2.0 CHANGELOG.mdCONTRIBUTING.mdRELEASE_CHECKLIST.md
Collaboration model
- Governance and decision rules:
GOVERNANCE.md - Code of conduct:
CODE_OF_CONDUCT.md - Security reporting:
SECURITY.md - Support channels:
SUPPORT.md
Known limitations
- Parameter parsing currently assumes markdown table format in
## Parameters - Semantic mode prioritizes missing metadata and may enrich missing parameters when extraction is available
- Watch mode tracks current tree; if deeply nested folders are added later, restart watch for complete coverage
Roadmap alignment
The active implementation follows phased delivery in ROADMAP.md.
GenAI integration policy (when enabled) prioritizes OpenRouter as default provider strategy, as defined in roadmap directives.
License
Licensed under either of:
- MIT License (
LICENSE-MIT) - Apache License 2.0 (
LICENSE-APACHE)
at your option.
