Mlola UI components, tokens and design rules for coding agents, with a markup checker
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Checks HTML or JSX: classes that do not exist, variant classes, data-* values a class does not react to, utility classes, misuse of data-theme or data-mode, and in style attributes, <style> blocks and utility classes (bg-[#fafafa]) hand-written colors, spacing written by hand instead of the --ml-space-* scale, overridden theme tokens and text faded with opacity. Each issue names its line. Run it on markup you wrote before finishing: pass the whole page or file, <style> blocks included, not an excerpt, since it only checks what it is given.
Checks HTML or JSX: classes that do not exist, variant classes, data-* values a class does not react to, utility classes, misuse of data-theme or data-mode, and in style attributes, <style> blocks and utility classes (bg-[#fafafa]) hand-written colors, spacing written by hand instead of the --ml-space-* scale, overridden theme tokens and text faded with opacity. Each issue names its line. Run it on markup you wrote before finishing: pass the whole page or file, <style> blocks included, not an excerpt, since it only checks what it is given.
| Argument | Type | Description |
|---|---|---|
| markup* | string |
{
"type": "object",
"required": [
"markup"
],
"properties": {
"markup": {
"type": "string"
}
},
"additionalProperties": false
}Checks A2UI messages (createSurface, updateComponents, updateDataModel, deleteSurface) against the Mlola Render catalog before they render: components and props that do not exist, values a component does not offer, colors or styles set by hand, fields and controls without a name, a missing root, children that do not exist or form a loop, headings that skip a level, values outside a range. Each error names its JSON Pointer path and the fix. Pass every message of the surface: one object, an array, or JSON Lines.
| Argument | Type | Description |
|---|---|---|
| messages* | any | The A2UI messages: an array of message objects, one message, or their JSON text (JSON Lines works too). |
{
"type": "object",
"required": [
"messages"
],
"properties": {
"messages": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object"
}
},
{
"type": "object"
},
{
"type": "string"
}
],
"description": "The A2UI messages: an array of message objects, one message, or their JSON text (JSON Lines works too)."
}
},
"additionalProperties": false
}Everything needed to use one item: import, every prop with fixed values (variant, tone, size, side…) and its default, the classes it styles and the data-* values each reacts to, dependencies and the install command. Set include_source to read a free component's source.
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| include_source | boolean |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"include_source": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
}The rules for building UI with Mlola: compose first, color by role, measure with the scales, shared state words, touch and focus. Read once before writing UI.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}How to set Mlola up: the commands to run in a project to add components, blocks, pages or templates (with the license step for Mlola Pro items), and the stylesheet link and script for a page with no build step. Leave names out for the setup alone.
| Argument | Type | Description |
|---|---|---|
| names | array | Item names from search_components, for example ["button", "date-picker"]. |
{
"type": "object",
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "Item names from search_components, for example [\"button\", \"date-picker\"]."
}
},
"additionalProperties": false
}The components an agent may compose at runtime with Mlola Render, as A2UI v0.9 messages: each component's props and allowed values, how surfaces, data binding and actions work, and complete examples. Read once before composing a surface. format "schema" returns the A2UI catalog (JSON Schema) instead.
| Argument | Type | Description |
|---|---|---|
| format | string |
{
"type": "object",
"properties": {
"format": {
"enum": [
"guide",
"schema"
],
"type": "string",
"default": "guide"
}
},
"additionalProperties": false
}The --ml-* tokens grouped by purpose (planes and ink, color roles, spacing, type, density, shape, depth, motion, layers…). Filter with a group name or part of a token name.
| Argument | Type | Description |
|---|---|---|
| group | string | For example 'spacing', 'color', 'shadow', 'radius'. |
{
"type": "object",
"properties": {
"group": {
"type": "string",
"description": "For example 'spacing', 'color', 'shadow', 'radius'."
}
},
"additionalProperties": false
}Shows an interface in the conversation: a form, a status card, a table of results. Pass A2UI messages composed from the Mlola Render catalog (read get_render_catalog first); they are checked, and drawn with Mlola components where the host shows MCP Apps. When the person presses a button, their next message carries the A2UI action with what they entered. Where the host shows no apps, this answers with the check's report.
| Argument | Type | Description |
|---|---|---|
| messages* | any | The A2UI messages of the surface: createSurface, updateComponents, updateDataModel. |
{
"type": "object",
"required": [
"messages"
],
"properties": {
"messages": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object"
}
},
{
"type": "object"
},
{
"type": "string"
}
],
"description": "The A2UI messages of the surface: createSurface, updateComponents, updateDataModel."
}
},
"additionalProperties": false
}Find components, blocks, pages and templates by what they do (for example 'date range', 'chat input', 'pricing'). Returns name, tier (free or Mlola Pro) and a one-line description.
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| tier | string | |
| query | string | Words describing what you need. Empty lists everything. |
{
"type": "object",
"properties": {
"kind": {
"enum": [
"component",
"block",
"page",
"template"
],
"type": "string"
},
"tier": {
"enum": [
"free",
"pro"
],
"type": "string"
},
"query": {
"type": "string",
"description": "Words describing what you need. Empty lists everything."
}
},
"additionalProperties": false
}