Metalsmith Plugin MCP Server
# Metalsmith Plugin MCP Server
MCP server for scaffolding and validating high-quality Metalsmith plugins.
[![metalsmith:plugin][metalsmith-badge]][metalsmith-url]
[![npm: version][npm-badge]][npm-url]
[![license: MIT][license-badge]][license-url]
[![test coverage][coverage-badge]][coverage-url]
[](https://snyk.io/test/npm/metalsmith-plugin-mcp-server)
This MCP (Model Context Protocol) server gives Claude and other AI
clients a small, opinionated toolkit for creating and maintaining
Metalsmith plugins. Scaffolded plugins are ESM-only (Node 22+), use
Biome for unified lint + format, and run tests via the native
`node:test` runner with native coverage. CommonJS consumers can still
`require()` ESM-only plugins via Node 22's stable `require(esm)`.
Use it two ways: as an MCP server inside Claude Desktop / Claude Code,
or directly from the terminal with `npx`.
## Documentation
- **[docs/tools.md](docs/tools.md)** — per-tool MCP reference (options, examples, validation rules)
- **[docs/cli.md](docs/cli.md)** — full CLI command reference
- **[docs/setup.md](docs/setup.md)** — installing the server in Claude Desktop or Claude Code
- **[MIGRATION.md](MIGRATION.md)** — upgrading existing plugins to the current scaffold
- **[CHANGELOG.md](CHANGELOG.md)** / [GitHub releases](https://github.com/wernerglinka/metalsmith-plugin-mcp-server/releases) — version history
- **[CONTRIBUTING.md](CONTRIBUTING.md)** — contributing guidelines
- **[TESTING.md](TESTING.md)** — testing the server locally
- **[RELEASE.md](RELEASE.md)** — release process
## Installation
```bash
npm install -g metalsmith-plugin-mcp-server
```
Or use directly with npx (no install):
```bash
npx metalsmith-plugin-mcp-server --help
```
## Quick start
**Scaffold a new plugin:**
```bash
npx metalsmith-plugin-mcp-server scaffold metalsmith-my-plugin "Processes markdown files" ./plugins
```
**Validate an existing plugin:**
```bash
npx metalsmith-plugin-mcp-server validate ./metalsmith-my-plugin
```
**Use with Claude Code:**
```bash
claude mcp add metalsmith-plugin npx "metalsmith-plugin-mcp-server@latest" "server"
```
Then in Claude: *"Create a Metalsmith plugin called metalsmith-json-feed
that generates JSON feeds from markdown files."* See
[docs/setup.md](docs/setup.md) for the full setup, including Claude
Desktop config.
## Available tools
| Tool | What it does |
|------|--------------|
| `plugin-scaffold` | Generate a complete plugin (src/, test/, package.json, README.md, CLAUDE.md, GitHub workflows). Use only for new plugins in an empty directory. |
| `validate` | Check an existing plugin against 17 quality checks (structure, tests, docs, package shape, native methods, marketing language, hardcoded values, etc.) |
| `audit-plugin` | Validation + lint + tests + coverage in one health report |
| `configs` | Generate config files (biome.json, .release-it.json, .editorconfig, .gitignore) |
| `show-template` | Display a canonical config template (release-it, package-scripts, biome, etc.) |
| `list-templates` | List every template the server can hand back |
| `get-template` | Retrieve a specific template file verbatim |
| `install-claude-md` | Add or smart-merge a CLAUDE.md into an existing plugin |
| `diff-template` | Detect drift between a plugin and the current scaffold templates |
| `update-deps` | Update dependencies via npm-check-updates |
The CLI adds `batch-audit` for processing every plugin in a directory.
See [docs/tools.md](docs/tools.md) for full options, examples, and the
complete list of validation checks.
## What a scaffolded plugin looks like
A `plugin-scaffold` call produces:
- ESM-only `package.json` (`"type": "module"`, `"exports": "./src/index.js"`) — no build step, no `lib/`, no microbundle
- `src/index.js` using the two-phase plugin factory pattern
- `test/index.test.js` using `node:test` + `node:assert/strict` against a real Metalsmith instance
- `biome.json` for unified lint + format
- Native test coverage via `node --test --experimental-test-coverage`
- `README.md`, `CLAUDE.md`, `docs/THEORY.md` skeletons
- `.github/workflows/test.yml`, `test-matrix.yml`, `claude-code.yml`
- `.github/dependabot.yml`
- `scripts/release.sh` for secure manual releases (`gh auth token` based)
The scaffold enforces use of Metalsmith's native methods
(`metalsmith.debug()`, `metalsmith.match()`, `metalsmith.env()`,
`metalsmith.path()`) over external `debug`, `minimatch`, `process.env`,
or `path.join`.
## Validation philosophy
The `validate` tool returns four categories:
- **Passed** — requirement met
- **Failed** — must-fix
- **Warnings** — quality concern (low coverage, unfilled THEORY.md stub)
- **Recommendations** — optional, with the exact command you can paste
Naming and license are recommendations, never failures — author choice
is respected. Each check lives in its own file under
[`src/tools/validate/checks/`](src/tools/validate/checks/) and is
described in [docs/tools.md](docs/tools.md#available-checks).
## Plugin types
The scaffold supports the three common plugin shapes:
- **Processor** — transforms file contents (markdown rendering, image optimization)
- **Transformer** — reshapes file metadata or structure (permalinks, collections)
- **Validator** — checks files against rules (HTML validation, link checking)
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md). Before any commit:
```bash
npm run lint
npm run format
npm test
```
## Resources
- [Metalsmith Documentation](https://metalsmith.io)
- [Model Context Protocol Specification](https://modelcontextprotocol.io)
## License
MIT © Werner Glinka
---
[metalsmith-badge]: https://img.shields.io/badge/metalsmith-plugin-green.svg?longCache=true
[metalsmith-url]: https://metalsmith.io
[npm-badge]: https://img.shields.io/npm/v/metalsmith-plugin-mcp-server.svg
[npm-url]: https://www.npmjs.com/package/metalsmith-plugin-mcp-server
[license-badge]: https://img.shields.io/github/license/wernerglinka/metalsmith-plugin-mcp-server
[license-url]: LICENSE
[coverage-badge]: https://img.shields.io/badge/test%20coverage-100.0%25-brightgreen
[coverage-url]: https://github.com/wernerglinka/metalsmith-plugin-mcp-server/actions/workflows/test.yml
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose: installing CLAUDE.md, scaffolding new plugins, listing templates, validating, generating configs, diffing against templates, and updating deps. No overlap or ambiguity.
All tool names follow a consistent hyphenated lowercase pattern (e.g., install-claude-md, plugin-scaffold). Verbs are clear and naming conventions are uniform throughout.
Seven tools is a well-scoped set for a plugin development server, covering scaffolding, validation, configuration, dependency updates, and template management without being overwhelming or sparse.
The tool set covers the main plugin creation and maintenance lifecycle: scaffold, validate, diff, update deps, install CLAUDE.md. A minor gap is the lack of a tool for running tests or building, but core workflows are well-supported.