Appearance
Manage the Skills Easy MCP AI Serves to AI Clients
Skills are step-by-step instructions that an AI client reads before it starts a multi-step job on your site, so it follows a tested sequence instead of improvising one. Easy MCP AI serves generic, signed skills for common WordPress tasks, and keeps them current by downloading new versions once a day. This guide explains where the skills come from, how to stop the daily download, and how to replace them with skills of your own.
In this article
Where the Skills Come From
The AI client always reads skills from your site, through the wp_get_skill tool, the server instructions and skill:// resources. It never downloads them from anywhere else. The site picks one of three sources:
| Source | When it is used |
|---|---|
| Your own folder | When a developer filter names a folder that holds at least one valid skill. It replaces the other two sources, and nothing is downloaded. See Serve Your Own Skills. |
| The downloaded copy | Fetched from skills.easymcpai.com, used while it is newer than the bundled copy. |
| The bundled copy | Shipped inside the plugin and updated with each plugin release. Used when the download is off, has not run yet, or holds an older copy. |
Both the downloaded and the bundled copy are signed. The plugin checks each signature against a key that ships with the plugin, and a copy that fails the check is never stored or served. If a download fails, the site keeps serving the last copy that passed.
A skill is offered only when the site can carry it out: the plugin version, the active plugins, a block or classic theme, and every tool it names must match. Every AI connection can read every skill, whatever tools it is allowed to use. When a skill names a tool that the connection cannot call, wp_get_skill tells the AI client which tool and why, so it can ask you instead of failing halfway.
What the Daily Download Sends
Nothing is downloaded when you install or activate the plugin. The download starts the first time an AI client connects, then runs at most once a day through WP-Cron.
Each download requests the signature and then the skills file. The request carries only an Accept header and a user agent made of EasyMCPAI-Skills/ and the plugin version. It carries no site address, no cookie, no query string and nothing about your content. Your server's IP address reaches the service as it does with any request, and the service keeps no access logs.
Turn Off the Daily Download
Add this line to wp-config.php, above /* That's all, stop editing! Happy publishing. */:
php
define( 'EASY_MCP_AI_SKILLS_SYNC', false );Or set an environment variable with the same name:
sh
EASY_MCP_AI_SKILLS_SYNC=falseWhile it is off:
- The site makes no request to
skills.easymcpai.com. - A copy downloaded earlier stays in the database but is not served. The bundled copy is served instead, and it changes only when you update the plugin.
- The setting appears in the Deployment-controlled settings list under Easy MCP AI > Settings.
Any value the plugin cannot read, such as 'no' or 'off', also turns the download off, so a typo never leaves it on. The admin then shows a notice naming the constant, and the Deployment-controlled settings list marks it Invalid. To turn the download back on, remove the line. The downloaded copy is served again, and the next AI client connection schedules the daily download.
There is no admin screen for this setting. See wp-config.php Constants for how constants and environment variables are read.
Serve Your Own Skills
A developer can point the plugin at a folder of skills with the easy_mcp_ai_skills_directory filter. When the folder holds at least one valid skill, those skills replace the downloaded and bundled ones, and the daily download stops.
1. Name the folder
Create wp-content/mu-plugins/ai-skills.php:
php
<?php
add_filter( 'easy_mcp_ai_skills_directory', function () {
return WP_CONTENT_DIR . '/ai-skills';
} );A must-use plugin loads on every request and cannot be deactivated from the admin, which suits a setting the site depends on.
2. Add a skill
Each folder under wp-content/ai-skills/ that contains a SKILL.md file is one skill. The skill can sit directly in the folder or inside a group folder such as acme/:
text
wp-content/ai-skills/
└── acme/
└── launch-checklist/
├── SKILL.md
└── references/
└── seo.mdSKILL.md starts with frontmatter between --- lines. The name must equal the skill's folder name, and the description tells the AI client when to use the skill:
markdown
---
name: launch-checklist
description: "Pre-launch checks for an Acme site: settings, plugin updates and SEO."
metadata:
version: "1"
author: acme
---
# Launch checklist
1. Call `wp_get_site_settings` and confirm the site title and tagline are final.
2. Call `wp_list_plugin_updates` and list anything that is out of date.
3. Read `references/seo.md`, then check each published page with `wp_list_pages`.
4. If a tool is not available to you, tell the user what to change instead. Never say a step was done when it was not.The plugin finds every tool name in the skill's files, here wp_get_site_settings, wp_list_plugin_updates and wp_list_pages, and checks them for each connection. The skill is served as skill://acme/launch-checklist/SKILL.md, and references/seo.md is available as one of its files.
3. Check that it is served
Ask your AI client to list the skills on the site. It calls wp_get_skill, which answers with one line per skill:
text
- launch-checklist (version 1): Pre-launch checks for an Acme site: settings, plugin updates and SEO.A skill that breaks one of the rules below is left out of the list. The plugin does not show why in the admin yet, so compare the skill against the rules.
Rules for your own skills
| Rule | Details |
|---|---|
| Names | Every folder in the skill's path uses lowercase letters, digits and single hyphens, up to 64 characters. The last folder name must equal name in the frontmatter. Two skills with the same name are both left out. |
| Description | Required, not empty, up to 1024 characters. |
| File types | Text only: .md, .txt, .json, .yaml, .yml and .csv, in UTF-8. Any other file in the skill's folder, including a file with no extension such as LICENSE, leaves the whole skill out. |
| Size | Up to 512 files and 16 MB per skill. |
| Skipped entries | Files and folders whose name starts with a dot, and every symbolic link, are ignored. A folder the web server cannot read is skipped, with every skill inside it. |
| Frontmatter | key: value lines, plus one level of nesting indented by two spaces, as metadata: uses above. Lists, block values and repeated keys are refused. Quote a value that looks like a number in any form other than a plain integer or decimal, or that contains : . Quoting every value is the safe choice. |
| Updates | Files are read on every request, so an edit takes effect on the next request. |
Skills are readable by every connection
Every AI connection on the site can read every skill, including connections limited to a few tools. Never put passwords, API keys or private customer data in a skill.
What else changes
- Your skills are not signed. Only code running on the site can set the filter, and that code is already fully trusted, so the plugin checks your skills against the format rules but not against a signature.
- They replace ours entirely. The skills that ship with Easy MCP AI are not served while your folder holds a valid skill.
- An empty or broken folder falls back to the bundled copy. If the folder is missing, unreadable or holds no valid skill, the bundled copy is served. The daily download stays off for as long as the filter names a folder.
- On multisite, the filter runs on each site. Return a different folder per site, for example with
get_current_blog_id(), to give each site its own skills.
To return to the published skills, remove the filter.