{"id":98054,"date":"2026-10-09T10:14:00","date_gmt":"2026-10-09T14:14:00","guid":{"rendered":"https:\/\/overcentral.com\/en\/?p=98054"},"modified":"2026-09-29T08:03:49","modified_gmt":"2026-09-29T12:03:49","slug":"emdas-cms-ai-skills-files-98054","status":"publish","type":"post","link":"https:\/\/overcentral.com\/en\/emdas-cms-ai-skills-files-98054\/","title":{"rendered":"Teach Your AI Agent to Manage EmDash CMS with Skills Files"},"content":{"rendered":"<p>You don\u2019t teach your AI to use EmDash \u2014 EmDash teaches your AI. That flips the usual script. Most CMS platforms bolt AI on as an afterthought: a plugin you install, a prompt you tune, a workflow you hand-craft. EmDash, Cloudflare\u2019s spiritual successor to WordPress, ships with a built-in MCP server and a set of structured skills files. The agent reads them once and knows exactly what it can do. No training. No trial-and-error prompting. The CMS comes with its own instruction manual for machines.<\/p>\n<p>EmDash\u2019s AI Skills Files are markdown documents that describe every operation the CMS exposes \u2014 create a post, upload media, manage plugins, deploy changes. An MCP-compatible agent (Claude, Cursor, GitHub Copilot) connects to the server, reads the skills files, and can perform those operations using natural language. The agent doesn\u2019t need to guess the endpoint or the parameter format. The skills files provide the schema, the permissions, and the expected output. This means a developer can say \u201cbuild me a new content type for case studies with fields for client name, date, and testimonial\u201d and the agent executes it \u2014 no manual admin clicks.<\/p>\n<h2>What Are Skills Files in EmDash?<\/h2>\n<p>Skills files are plain-text documents stored inside the EmDash codebase. Each file describes one capability: how to create a content type, how to import a WordPress export, how to send a test email. They follow the <a href=\"https:\/\/modelcontextprotocol.io\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Model Context Protocol<\/a> (MCP) standard that Anthropic created for <a href=\"https:\/\/overcentral.com\/en\/meta-muse-ai-agent-80441\/\" title=\"Meta Launches Muse AI Agent, Needs User Trust\" data-iacss-internal=\"1\">AI agent<\/a> communication. When an agent connects to EmDash\u2019s MCP server, the server presents these files as available tools. The agent reads the tool definitions, understands the input requirements, and can call them directly.<\/p>\n<p>The files are written in a structured format \u2014 part schema, part example, part human-readable explanation. Here\u2019s a simplified version of what a skills file for \u201ccreate content type\u201d looks like:<\/p>\n<p>&#8220;`<\/p>\n<p>Tool: create_content_type<\/p>\n<p>Description: Creates a new content type with custom fields.<\/p>\n<p>Parameters:<\/p>\n<ul>\n<ul>\n<li>name: string (required, unique)<\/li>\n<li>slug: string (optional, auto-generated)<\/li>\n<li>fields: array of field definitions<\/li>\n<\/ul>\n<\/ul>\n<p>Example:<\/p>\n<p>  name: &#8220;Case Study&#8221;<\/p>\n<p>  fields:<\/p>\n<ul>\n<ul>\n<li>label: &#8220;Client Name&#8221;<\/li>\n<\/ul>\n<\/ul>\n<p>      type: text<\/p>\n<ul>\n<ul>\n<li>label: &#8220;Date&#8221;<\/li>\n<\/ul>\n<\/ul>\n<p>      type: date<\/p>\n<p>&#8220;`<\/p>\n<p>The agent parses this, maps it to the underlying API, and executes. No custom code required.<\/p>\n<h2>Skills Files vs. Traditional CMS Agent Integration<\/h2>\n<p>Most CMS platforms that support <a href=\"https:\/\/overcentral.com\/en\/rogue-ai-agents-liability-vacuum-97898\/\" title=\"Rogue AI agents expose liability vacuum as OpenAI faces claims\" data-iacss-internal=\"1\">AI agents<\/a> require you to either build a custom integration (writing an API wrapper, defining tools yourself) or rely on a plugin that adds a limited set of actions. EmDash\u2019s approach is different: the skills files are part of the core, maintained by the CMS team, and updated as the CMS evolves. The agent always has access to the latest capabilities. The table below shows the tradeoffs:<\/p>\n<table class=\"mw-table\">\n<thead>\n<tr>\n<th>Interaction Mode<\/th>\n<th>Setup Effort<\/th>\n<th>Agent Autonomy<\/th>\n<th>Maintainability<\/th>\n<th>Security Model<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Admin Panel (UI)<\/td>\n<td>None<\/td>\n<td>Low \u2014 manual clicks only<\/td>\n<td>CMS updates handled by host<\/td>\n<td>Role-based access only<\/td>\n<\/tr>\n<tr>\n<td>CLI (Terminal)<\/td>\n<td>Install EmDash CLI, auth<\/td>\n<td>Medium \u2014 scriptable but requires human to run<\/td>\n<td>Must update CLI version manually<\/td>\n<td>Token-based, scoped by role<\/td>\n<\/tr>\n<tr>\n<td>MCP with Skills Files<\/td>\n<td>One connection setup (MCP URL + token)<\/td>\n<td>High \u2014 agent can read, write, deploy autonomously<\/td>\n<td>Skills files ship with EmDash updates<\/td>\n<td>Granular permissions per tool via manifest<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The MCP route gives you the most leverage. Once the connection is configured, the agent can manage the entire CMS \u2014 content, plugins, themes \u2014 without a human in the loop. The skills files are the instruction set that makes that possible.<\/p>\n<h2>Step-by-Step: Connect Your Agent to EmDash Skills Files<\/h2>\n<h3>1. Deploy EmDash (if you haven\u2019t)<\/h3>\n<p>You need a running EmDash instance. Use the playground at <code>emdashcms.com<\/code>codecodecodecode (lasts one hour) or deploy to your own Cloudflare account via the GitHub repo. For production, the paid Cloudflare Workers plan ($5\/month) gives you sandboxed plugins and full MCP access.<\/p>\n<h3>2. Generate an API Token<\/h3>\n<p>In the EmDash admin panel, go to <strong>Settings \u2192 API Tokens<\/strong>. Create a new token with the scopes your agent will need. For full management, select <code>content:read<\/code>codecodecodecode, <code>content:write<\/code>codecodecodecode, <code>plugins:manage<\/code>codecodecodecode, and <code>settings:read<\/code>codecodecodecode. Copy the token.<\/p>\n<h3>3. Configure the MCP Server<\/h3>\n<p>EmDash exposes an MCP server at <code>https:\/\/\/mcp<\/code>codecodecodecode. In your agent\u2019s configuration (Claude Desktop, Cursor settings, or custom app), add a new MCP server:<\/p>\n<p>&#8220;`<\/p>\n<p>{<\/p>\n<p>  &#8220;mcpServers&#8221;: {<\/p>\n<p>    &#8220;emdash&#8221;: {<\/p>\n<p>      &#8220;url&#8221;: &#8220;https:\/\/your-site.emdash.app\/mcp&#8221;,<\/p>\n<p>      &#8220;headers&#8221;: {<\/p>\n<p>        &#8220;Authorization&#8221;: &#8220;Bearer YOUR_API_TOKEN&#8221;<\/p>\n<p>      }<\/p>\n<p>    }<\/p>\n<p>  }<\/p>\n<p>}<\/p>\n<p>&#8220;`<\/p>\n<h3>4. Verify the Connection<\/h3>\n<p>Ask your agent: \u201cWhat can you do with my EmDash CMS?\u201d The agent will read the skills files and list all available tools. You should see actions like <code>create_post<\/code>codecodecodecode, <code>update_media<\/code>codecodecodecode, <code>list_plugins<\/code>codecodecodecode, <code>deploy_site<\/code>codecodecodecode. If the list is empty, check the token scopes and the MCP server URL.<\/p>\n<h3>5. Run Your First Task<\/h3>\n<p>Now give a real instruction:<\/p>\n<blockquote>\n<p>\u201cCreate a new content type called \u2018Projects\u2019 with fields for Title (text), Description (rich text), and Launch Date (date). Set the slug to \u2018projects\u2019. Add it to the main navigation.\u201d<\/p>\n<\/blockquote>\n<p>blockquoteblockquoteblockquoteblockquote<\/p>\n<p>The agent will call <code>create_content_type<\/code>codecodecodecode with the parameters from the skills file, then update the menu via <code>update_menu<\/code>codecodecodecode. No manual admin login required.<\/p>\n<h3>6. Iterate with Confidence<\/h3>\n<p>Because the skills files are versioned with the CMS, you can update EmDash and the agent automatically sees new tools. You don\u2019t need to re-train or re-prompt. This is the core advantage: the CMS stays teachable.<\/p>\n<h2>Real-World Use Case: Bulk Content Migration<\/h2>\n<p>Let\u2019s say you have 500 blog posts in WordPress that you want to move to EmDash. Instead of running the built-in import tool manually (which still requires downloading a WXR file and uploading it), you can instruct the agent:<\/p>\n<blockquote>\n<p>\u201cImport all posts from my WordPress site at example.com. Use the WXR export URL. Map Yoast SEO fields to EmDash\u2019s built-in SEO fields. After import, create a redirect for each old URL to the new path.\u201d<\/p>\n<\/blockquote>\n<p>blockquoteblockquoteblockquoteblockquote<\/p>\n<p>The agent will:<\/p>\n<ol>\n<li>Fetch the WXR file from the WordPress export endpoint.<\/li>\n<li>Call <code>import_wordpress<\/code>codecodecodecode (a skill file tool) with the file URL.<\/li>\n<li>Read the Yoast meta from the export and map it.<\/li>\n<li>Create 500 redirects using <code>create_redirect<\/code>codecodecodecode.<\/li>\n<\/ol>\n<p>The whole process takes minutes. The agent handles the repetitive mapping and redirection \u2014 tasks that would take a developer hours to script.<\/p>\n<h2>Why This Changes How You Build Sites<\/h2>\n<p>Skills files are not just a convenience. They decouple the CMS interface from the user interface. A non-technical client can still use the admin panel. A developer can use the CLI. <a href=\"https:\/\/overcentral.com\/en\/ai-avatar-empire-96590\/\" title=\"Build an AI Avatar Empire Without Showing Your Face\" data-iacss-internal=\"1\">An AI<\/a> agent can use the MCP server. All three paths work because the same capabilities are exposed through separate channels. The skills files are the canonical reference \u2014 the single source of truth that each channel reads.<\/p>\n<p>For agencies and freelancers, this means you can hand a client a site and also give them an AI agent that can make changes on their behalf. No more \u201cI need you to log in and update this field.\u201d The agent does it. The client reviews the output. You retain control over the architecture.<\/p>\n<h2>The Catch: Skills Files Are Only as Good as Their Definitions<\/h2>\n<p>The skills files that ship with EmDash cover the core CMS operations. But if you build custom plugins or themes, you need to write your own skills files for those custom tools. The format is straightforward \u2014 markdown with a JSON schema \u2014 but it\u2019s an extra step. The EmDash team expects the community to contribute skills files for popular plugins, similar to how WordPress plugin developers document hooks.<\/p>\n<p>Right now, the built-in skills files are enough to run a content site. For anything beyond that \u2014 custom e-commerce logic, complex membership workflows \u2014 you either wait for the ecosystem to mature or write the skills file yourself. That\u2019s the tradeoff for being early.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You don\u2019t teach your AI to use EmDash \u2014 EmDash teaches your AI. That flips the usual script. Most CMS platforms bolt AI on as an afterthought: a plugin you install, a prompt you tune, a workflow you hand-craft. EmDash, Cloudflare\u2019s spiritual successor to WordPress, ships with a built-in MCP server and a set of [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":99995,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/98054.png","fifu_image_alt":"Teach Your AI Agent to Manage EmDash CMS with Skills Files","footnotes":""},"categories":[31],"tags":[],"class_list":["post-98054","post","type-post","status-publish","format-standard","has-post-thumbnail","category-technology"],"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/98054.png","fifu_image_alt":"Teach Your AI Agent to Manage EmDash CMS with Skills Files","_links":{"self":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98054","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/comments?post=98054"}],"version-history":[{"count":1,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98054\/revisions"}],"predecessor-version":[{"id":99996,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/98054\/revisions\/99996"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media\/99995"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media?parent=98054"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/categories?post=98054"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/tags?post=98054"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}