8 EmDash Commands Every Developer Should Know

Move beyond the admin panel and master the CLI, MCP server, and plugin sandbox with these eight essential EmDash commands.

By Central
Eight EmDash commands that go beyond the visual interface to unlock the CMS's full potential.
Highlights
  • The starter command npm create m-dash@latest locks in your entire schema based on the template you choose.
  • Every EmDash instance includes a built-in MCP server that lets AI agents manage content without touching the UI.
  • The playground URL spins up a full EmDash instance in your browser for one hour with no install or credit card required.

Everyone says the same thing about EmDash: learn the admin panel first. Master the dashboard, understand the UI, get comfortable with the block editor. That advice comes from years of WordPress training. It’s also almost useless for this CMS.

EmDash is not WordPress. The admin panel is deliberately familiar, but the real power lives in places WordPress never had. The CLI. The MCP server. The plugin sandbox manifest. If you only learn the visual interface, you’re using 20% of what this system does.

The MCP server means you never have to touch the UI for bulk operations.

Here are eight commands that matter. Some will be obvious. A few will not. That’s the point.

1. npm create m-dash@latest — But Not With the Default Template

The starter command everyone runs. Type it, pick a template, get a site. What the tutorials skip: the template choice locks in your entire schema.

Pick “blog” and you get posts, pages, and a comments system. Pick “portfolio” and you get projects with client fields and year metadata. Pick “marketing” and you get landing page sections. There is no “generic” template. Choose carefully from the start, or you’ll spend the next hour deleting content types you don’t need.

The command itself is straightforward. The decision it forces is not.

“`

npm create m-dash@latest

“`

2. The MCP Server — No Command Needed, But You Must Know It Exists

Every EmDash instance ships with a built-in MCP server. No plugin. No configuration. It just works.

Connect Claude, Cursor, or any MCP-compatible agent to http://localhost:4321/mcpcodecodecode (or your deployed URL). The agent can then query content, create posts, update metadata, and even generate plugins. No custom API wrappers. No authentication headaches beyond the passkey you already set up.

This is the feature WordPress developers miss entirely. They open the admin panel and start clicking. The MCP server means you never have to touch the UI for bulk operations. Ask the agent to “find all posts mentioning ‘legacy’ and add a ‘needs-update’ tag.” Done in one sentence.

3. m-dash migrate:wordpress — The Import Command That Does More Than You Think

The WordPress migration tool is not just a content dumper. Point it at your WXR export file, and it maps Yoast SEO fields to EmDash’s native SEO fields. It reads custom post types. It preserves media associations.

But here’s what the docs don’t emphasize: it does not migrate plugins, themes, or custom functionality. Your WooCommerce store does not come with you. Your Elementor layouts do not survive. The migration imports the data layer only. Everything else is a rebuild.

“`

m-dash migrate:wordpress –input=export.xml

“`

Plan for that rebuild before you run the command, not after.

4. The Plugin Sandbox Manifest — capabilities: [...]

This is not a command. It’s a code pattern that defines everything about plugin security. Every EmDash plugin declares its permissions in a manifest. No manifest, no access.

“`typescript

definePlugin({

id: “my-plugin”,

version: “1.0.0”,

capabilities: [“read:content”, “email:send”],

hooks: {

“content:published”: async (context) => {

const email = context.get(“email”);

await email.send({

to: “[email protected]”,

subject: “New post published”,

});

},

},

});

“`

The plugin can read content and send email. It cannot write to the database. It cannot access the file system. It cannot make external network calls. The runtime enforces this at the V8 isolate level.

Most developers coming from WordPress write their plugin code first and think about security later. EmDash forces the opposite order. Declare first. Build second.

5. m-dash content-type:create — Schema as Code, Not Click-Ops

In the admin panel, you can create a new content type in under a minute. Name it, add fields, set slugs. Done.

The problem: that content type lives only in your database. It is not version-controlled. It is not repeatable. If you tear down your local instance and rebuild, that content type is gone.

The CLI equivalent is better:

“`

m-dash content-type:create

–name=”Project”

–slug=”project”

–fields=”title,description,client,year,url”

“`

But even that is a stopgap. What you actually want is to define your schema in code, stored in your repository, deployed alongside your theme. EmDash supports this through its configuration file in astro.config.mjscodecodecode. Define content types there, and they become infrastructure-as-code.

The admin panel is convenient. The code-based approach is correct.

6. m-dash deploy — The Command That Reveals the Lock-In

Deploy to Cloudflare Workers with one command. It provisions D1 for the database, R2 for media storage, and KV for sessions. It creates the worker routes. It sets up the CDN. The whole process takes about two minutes.

The catch: this deployment path is the only path that gives you sandboxed plugins. Self-host on a Node.js server, and plugins run in-process without isolation. The security model that justifies EmDash’s existence requires Cloudflare’s paid runtime.

“`

m-dash deploy –provider=cloudflare

“`

The code is MIT-licensed. The infrastructure is not portable. Know this before you commit to the tool, not after you’ve built your entire site on it.

7. m-dash agent:skill --add — The Hidden Developer Multiplier

EmDash ships with “agent skills” files — structured documentation that tells AI agents exactly how to operate the CMS. These are not user-facing docs. They are machine-readable instructions that live in the repository.

When you run an MCP agent against your EmDash instance, the agent reads the skills file and immediately knows: how to create content types, how to write plugins, how to manage users, how to deploy changes. No prompting. No trial and error.

The command to add a custom skill:

“`

m-dash agent:skill –add=./my-custom-skill.md

“`

Write a skill file that teaches your agent your specific workflow. This is the feature beginners ignore and experienced developers build entire systems around.

8. The Playground URL — The Most Underrated “Command”

Not a terminal command. A URL. https://emdashcms.com/playgroundcodecodecode. It spins up a full EmDash instance in your browser that lasts one hour. No install. No Cloudflare account. No credit card.

This is how you test plugin manifests, experiment with content types, and verify migrations without risking anything. The playground instance is sandboxed, ephemeral, and nobody else can see it.

Bookmark it. Use it before every real deployment.

What the Common Advice Gets Wrong

The standard advice — “learn the admin panel first” — treats EmDash like a reskinned WordPress. It’s not. The admin panel is deliberately familiar to ease migration, but the system’s real differentiation lives in the CLI, the MCP server, and the plugin sandbox architecture.

A developer who only knows the visual interface cannot:

  • Write a sandboxed plugin with a capability manifest
  • Use AI agents to manage content at scale
  • Define content types as code in version control
  • Understand why their deployed instance behaves differently from their local one

The eight items above are not a complete list. They are a filter. If you can run all of them comfortably, you understand EmDash. If you cannot, you are still treating it like WordPress with better hosting.

That framing will cost you.

Questions answered
  • What is the first EmDash command every developer should know?The starter command npm create m-dash@latest creates a new EmDash site, but the template choice locks in your entire schema, so choose carefully.
  • How does the MCP server work in EmDash?Every EmDash instance ships with a built-in MCP server at http://localhost:4321/mcp, allowing AI agents like Claude or Cursor to query content, create posts, and generate plugins without authentication headaches.
  • What does the WordPress migration command m-dash migrate:wordpress do?It imports content from a WXR export file, mapping Yoast SEO fields to EmDash's native SEO fields and preserving custom post types and media, but it does not migrate plugins, themes, or custom functionality.
Share This Article