Skip to main content
Glama
thehzuo

web-gui-mcp

by thehzuo
README.md
# web-gui-mcp

`web-gui-mcp` is a Python MCP server that compiles compact GUI2
`ArtifactSpec` JSON into design-system-aware HTML artifacts.

The v0.3 pipeline is:

```txt
ArtifactSpec
-> studio model compiler
-> CompilerOutput { strategy, view_tree }
-> validated ViewTree + derived legacy RenderPlan metadata
-> DesignSystemPack resolver
-> deterministic HTML compiler
-> static HTML or ui:// resource
```

The remote model sends compact semantic specs by default. The studio compiler chooses
composition, while the server owns validation, design-system tokens, escaping, CSP,
and deterministic runtime code.

## Setup

```bash
uv sync
uv run pytest
uv run ruff check .
uv run python scripts/render_example.py examples/v0_3/implementation_plan.json /tmp/web-gui-plan.html
uv run python scripts/render_artifact_library_pages.py
```

Without `uv`:

```bash
python -m venv .venv
. .venv/bin/activate
pip install -e ".[dev]"
pytest
ruff check .
python scripts/render_example.py examples/v0_3/implementation_plan.json /tmp/web-gui-plan.html
python scripts/render_artifact_library_pages.py
```

## Run The MCP Server

```bash
uv run web-gui-mcp
```

The server exposes:

- `render_artifact`
- `get_artifact`
- `patch_artifact`
- `list_artifacts`
- `export_artifact`
- `get_artifact_schema`
- `compile_view_tree`
- `lint_view_tree`
- `list_design_systems`
- `get_design_system_summary`
- `get_local_model_status`
- `recommend_studio_model`
- `download_studio_model`
- `cancel_model_download`
- `list_themes`
- `preview_theme`
- `retheme_artifact`
- `rerender_artifact`

It serves:

- `ui://gui2/runtime/v0.3.css`
- `ui://gui2/runtime/v0.3.js`
- `ui://gui2/artifacts/{artifact_id}`

## Render An Artifact

`render_artifact` accepts compact semantic v0.3 specs:

```json
{
  "spec": {
    "v": "0.3",
    "artifact": "implementation_plan",
    "title": "Queue Backpressure Plan",
    "audience": "engineer",
    "density": "compact",
    "sections": [
      {
        "kind": "summary",
        "items": [
          { "label": "Risk", "value": "Medium", "tone": "warning" }
        ]
      },
      {
        "kind": "checklist",
        "title": "Acceptance",
        "items": [
          { "text": "Default response returns a ui:// resource" }
        ]
      }
    ]
  },
  "quality": "studio",
  "delivery": "mcp_app_resource"
}
```

Default delivery returns compact metadata plus a `ui://gui2/artifacts/{artifact_id}`
resource URI. Use `delivery = "static_html"` or `return_html_to_model = true` only
when the caller explicitly needs full HTML in the tool response.

## Studio Compiler

v0.3 is studio-only. The configured model provider receives the compact
`ArtifactSpec` plus a design-system summary and produces `CompilerOutput`:
compact `strategy` metadata plus the authoritative `view_tree`. The server
validates and lints the ViewTree, derives deprecated `RenderPlan` metadata only
for compatibility, then renders deterministic HTML. There is no deterministic
fallback in normal rendering: if the model provider is unavailable or validation
fails after one repair retry, the render fails closed.

Model providers:

- `stub`: test provider that returns known valid CompilerOutput.
- `openai`: default provider; uses `gpt-5.5` with medium reasoning via the OpenAI API.
- `ollama`: optional local provider; posts to `/api/generate` and validates CompilerOutput JSON.
- `auto`: resolves to OpenAI unless `WEB_GUI_RENDERER_PROVIDER` overrides it.

OpenAI configuration:

```bash
export OPENAI_API_KEY=...
```

The server also reads `.env.local` in the repo root. Do not commit that file.

Optional local fallback model:

```bash
ollama pull qwen2.5-coder:14b
```

`recommend_studio_model` also lists larger quality targets for stronger hardware:
`qwen3.6:27b` and `qwen3-coder-next:q4_K_M`.

## Design Systems

The bundled `gui2.default` pack includes:

- light/dark modes
- compact/normal/comfortable/presentation density layers
- `neutral_pro`, `dense_engineering`, `executive_brief`, and `editorial_research` themes
- `editorial_gallery` for reference-library pages with numbered sections and demo cards
- component contracts for the built-in ViewTree nodes
- recipes for plans, reviews, design-variant grids, research, dashboards, and editors

Figma import and Code Connect ingestion are intentionally out of scope for this pass.
The design-system schemas keep provenance fields so those importers can be added later.

## Connect To Codex

```toml
[mcp_servers.web_gui_mcp]
command = "uv"
args = ["run", "web-gui-mcp"]
cwd = "/Users/hzuo/src/gui-mcp"
startup_timeout_sec = 20
tool_timeout_sec = 60
enabled = true
```

Without `uv`:

```toml
[mcp_servers.web_gui_mcp]
command = "python"
args = ["-m", "web_gui_mcp.server"]
cwd = "/Users/hzuo/src/gui-mcp"
startup_timeout_sec = 20
tool_timeout_sec = 60
enabled = true
```

## Safety

- All model-provided text is escaped before rendering.
- ViewTree nodes are allowlisted and validated with Pydantic.
- Props named like raw HTML, CSS, scripts, `srcdoc`, or event handlers are rejected.
- Bind paths must resolve against the validated `ArtifactSpec`.
- Semantic data nodes such as `timeline`, `checklist`, and `summary_strip` must
  bind to compatible non-empty artifact data.
- JSON state embedded in `<script type="application/json">` escapes `<`, `>`, `&`,
  U+2028, and U+2029.
- The renderer never executes model-generated JavaScript.
- The only runtime script is deterministic server-owned code for copy/export and tabs.

TDQS

C2.1/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct action (export, get schema, lint, list, patch, render, search) with no overlap, making it easy for an agent to select the correct one.

Naming Consistency5/5

All tools follow a consistent verb_artifact pattern (e.g., export_artifact, patch_artifact), with minor variations in the second part (artifact_schema, artifact_patterns) that are still clear.

Tool Count5/5

Seven tools is a well-scoped number for managing artifacts in a web GUI context, covering essential operations without being overwhelming.

Completeness3/5

The set includes list, get schema, patch, export, lint, render, and search, but lacks create and delete operations, which are notable gaps in a typical artifact lifecycle.

Maintenance

ActivityInactive
ResponsivenessNo issues