MCP Field Agent
Version 1.0.0
September 7, 2026
First release. Content modelling tools for Craft MCP: create, modify and delete fields, entry types and sections by talking to an AI assistant.
Added
- 16 MCP tools. Create, plan and apply for fields, entry types and sections,
plus
field_agent_list_field_types, which reports whattypeaccepts and what settings each type takes. - Plan/apply for every destructive operation. A read-only
plan_*tool reports what would happen and mints a single-use id; the destructive tool spends it. Plans are fingerprinted against their arguments, single-use, and expire after fifteen minutes, so there is no route to a silent destructive change — a model cannot author a plan id, and getting one puts the impact report in the transcript where a person can see it. - The tools withhold themselves entirely when
allowAdminChangesis off, which is the correct production setting. They never reachtools/list, so an agent cannot call one or be talked into calling one. - An admin check on every writing tool. Craft MCP's own authorization seams are element-typed and schema is not an element, so this is checked deliberately rather than inherited.
- Impact reports that describe what Craft actually does, not what the words suggest: a field type change migrates nothing and the new type reinterprets the stored value; deleting a field leaves its values in place, unreachable, until each entry is next saved with a changed field.
- Field types register through a public event, including the 27 core ones. An unregistered type still works through a best-effort create, with the limitation reported, so third-party field types work with nothing written for them.
- Matrix support with no Matrix-specific tools. A whole Matrix, its block types and their fields, can be created in one call and nested as deep as you like, because a Matrix block type is an entry type in Craft 5.
Known limitations
Gaps in evidence rather than known defects. Read them before pointing this at anything you cannot restore.
- Craft's compatibility check is not a survival check, and this plugin trusts
it anyway.
areFieldTypesCompatible()compares database types and gets it wrong in both directions. Matching Craft's own bar is deliberate — a third-party plugin should not be more restrictive than the CMS it wraps — but a client who loses content will not care whose bar it was. - One Craft version. Everything here has only ever run against Craft 5.11.1.
The
^5.10floor is where every API used exists and behaves, not a version that has been tested. - One dataset, and a small one. Impact reports are accurate at that scale. Counting happens in SQL rather than PHP, so it should hold up, but no report has been checked against a content model of any real size.
- No concurrency testing. Two MCP clients against one install has never been tried. The request boundary is depth-counted within a process; nothing coordinates across processes.