Replies: 2 comments
-
|
This is a good proposal, and I'd like to see if we can land it. Let me answer your open questions individually, and flag the couple of spots where I'd diverge from the sketch.
I'd avoid minting a full RBAC permission per plugin per verb (plugins:emdash-calendar:write), that's an unbounded surface where every plugin invents its own permissions. The route already declares what capability it needs; the token scope just decides which plugins an agent may reach. I'd also explicitly drop any blanket "caller must be admin" gate, that over-grants and defeats least-privilege agents. Let me know if you want to update your RFC. Otherwise I can draft one and we can get this ready for dev |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Summary
I would like to propose a plugin-extensible MCP surface for EmDash.
The short version: plugins should be able to explicitly declare MCP tools that EmDash exposes through the existing
/_emdash/api/mcpendpoint, alongside core CMS tools.This would make first-party and third-party plugins naturally usable from agents/chat interfaces without every host application needing to write custom wrappers for each plugin.
Problem
EmDash already has a strong core MCP surface for CMS operations such as content, schema, media, settings, and related admin tasks.
However, plugins often introduce new structured domains that are not well represented by core CMS tools alone. Examples:
Today, a host application can call plugin API routes directly, but each host has to build its own AI tool wrappers around those routes. That works, but it duplicates glue code and means plugin authors cannot ship an agent-friendly interface with the plugin itself.
Proposal
Allow plugins to declare MCP tools explicitly.
A rough shape could look like this:
Then EmDash MCP could expose:
content.*,schema.*,media.*,settings.*, etc.calendar.*,forms.*,reservations.*, etc.Important guardrails
I do not think every plugin route should automatically become an MCP tool.
The safer model is explicit opt-in:
Why not automatic route reflection?
Plugin API routes often include admin-only, internal, destructive, or UI-specific operations. Exposing all of them as tools would make the MCP surface noisy and risky.
Explicit MCP declarations let plugin authors provide a smaller, agent-friendly contract while still using the same underlying route handlers/storage.
Example use case: calendar plugin
A site owner says:
An agent could call:
calendar.listCalendarscalendar.bulkCreateEventsThe plugin would own the structured calendar data and admin UI, while the site theme owns rendering.
Example use case: forms plugin
A site owner says:
An agent could call:
forms.listFormsforms.upsertFormThis would remove the need for every host to write a custom
forms.upsertWebsiteFormwrapper.Open questions
plugins:emdash-calendar:write,plugins:emdash-forms:read.Beta Was this translation helpful? Give feedback.
All reactions