DEV Community

Cover image for Show DEV: I built a code generator that turns a plain-English tool description into a working MCP server
Opportunity Biz
Opportunity Biz

Posted on

Show DEV: I built a code generator that turns a plain-English tool description into a working MCP server

The problem

Every time I build an MCP server I write the same scaffolding: JSON-RPC schema, Pydantic models, transport wiring, pyproject.toml. None of that is the actual tool — it's just the protocol layer you have to get through before writing any logic.

What I built

skill-to-mcp reads a SKILL.md file — a plain-English description of what your tool does, its inputs and outputs — and scaffolds a complete MCP server from it.

Example SKILL.md:

# invoice-parser

Extracts structured fields from a PDF invoice.

## Input
- file_url: string — URL of the PDF to parse

## Output
- vendor: string
- amount: float
- date: string (ISO 8601)
Enter fullscreen mode Exit fullscreen mode

Running skillmd-to-mcp generate on that produces:

  • JSON-RPC schema (tool_name, description, inputSchema, outputSchema)
  • Pydantic v2 models for type-safe I/O
  • MCP server boilerplate (stdio or HTTP SSE transport)
  • pyproject.toml ready to pip install
  • Auto-generated README

Why SKILL.md

A plain-English description is more readable, versionable, and composable than a hand-written JSON-RPC schema. If you can describe what your tool does in a few sentences, you have enough to generate the server.

Install & run

pip install skillmd-to-mcp
skillmd-to-mcp generate
Enter fullscreen mode Exit fullscreen mode

Or use the Apify Actor if you want to run it without a local setup — takes the same inputs via a web form.

Feedback welcome

Curious whether anyone else has been hitting the boilerplate problem and how you've been handling it. Happy to hear what edge cases the generator misses.

Top comments (0)