esm-devkit · Sep – Oct 2026
esm-devkit: an MCP server for a 20-year-old platform
Tooling that lets a coding agent do the work of a Matrix42 ESM platform developer: create and edit pages, widgets, navigation, data queries, workflows, localisation and cards on a live tenant, instead of clicking through the Solution Builder or hand-writing XML.
- Role
- Sole author
- Period
- Sep – Oct 2026
- Stack
- TypeScriptNode@modelcontextprotocol/sdkzodcommander
- MCP tools
- knowledge entries
- tool calls
- live changes, no incident
ESM screens are JSON descriptors stored in a database and rendered by an AngularJS shell. There is no usable OpenAPI spec: the endpoint returns a bare GUID. Writes land in one of three layers depending on two flags, and the third layer answers 200 while making the change visible only to its author. A configuration session can be deleted silently by starting another. Schema writes take a global lock. An agent let loose on this would do damage without ever seeing an error.
One write path
- Exactly one tool writes: esm_apply_plan. Everything else plans. A plan is previewed, applied, read back and journaled; every apply has a rollback and an undo, and rollback never deletes objects that existed before.
- Reads cover apps, navigation, views, data queries, schema, workflows, runs, adaptive cards and audiences, with --json output shaped for an agent.
- A knowledge base of 359 entries records the platform's silent failures and is attached to the plan that would trip over them; about 860 oracle checks verify assumptions against a live tenant before a write.
- An api-map generated from the backend source lists 1,209 routes across 170 controllers and marks the 38 that are contractual.
- The layer is never inferred from flags; the tool states it and checks both directions.
esm-devkit MCP tools (a selection of the 56)
- esm_whoami
- esm_apps
- esm_nav
- esm_read
- esm_schema
- esm_query_data
- esm_data_sources
- esm_dataquery_columns
- esm_workflows
- esm_workflow_show
- esm_workflow_catalog
- esm_workflow_compile
- esm_workflow_runs
- esm_adaptive_cards
- esm_knowledge
- esm_api_search
- esm_api_show
- esm_render_check
- esm_plan_screen
- esm_plan_widget
- esm_plan_nav
- esm_plan_dashboard
- esm_plan_landing_page
- esm_plan_wizard
- esm_plan_action
- esm_plan_ai_function
- esm_plan_prompt_template
- esm_plan_workflow
- esm_plan_workflow_release
- esm_plan_localize
- esm_plan_audience
- esm_plan_record_update
- esm_plan_preview
- esm_apply_plan
- esm_undo
- esm_export_fragments
- esm_export_workflow
Only esm_apply_plan writes. Everything else reads, plans or previews.
What it built
Every live change in the Device Insights app, the self-service portal cards, the Neo adoption flows and the keynote demo tenants went through it: 7,355 calls, 231 live applies on test tenants, no incident, a journal for every one. The same package carries the test rigs, the demo reset scripts and the keynote-recording pipeline, and a Claude skill that teaches an agent the workflow. It is the piece I would point to first for what it means to make a legacy platform agent-ready.