frameforge-mcp
MCP server that renders AI-authored documents to images and returns typed diagnostics for self-correction. It also provides visual QA metrics, raster-to-vector reconstruction, and image-to-draft proposals.
README
frameforge-mcp
The FrameForge MCP server: the agent-facing surface of the FrameForge family. An AI agent authors a document with the SDK, this server renders it, and the agent verifies against the pixels that came back.
pip install frameforge-mcp
frameforge-mcp # stdio MCP server
frameforge-live # local web UI over the same loop
Unlike frameforge-api (the
contract) and frameforge-sdk
(authoring), this package is not a leaf and does not pretend to be one. It
sits at the top of the stack and depends on the engine, because verification
needs something that can actually render.
Two packages, one distribution
| package | what it is | imports MCP? |
|---|---|---|
frameforge_mcp |
the server, its ~33 registered tools, and (nested) live, the local feedback-session web UI |
— |
frameforge_coach |
the Vector Construction Coach — style-as-grammar, layer-order discipline, the silhouette gate | no |
The raster→vector lane is not here: frameforge_vision is its own
distribution, usable without a server or an authoring SDK. This package depends
on it (pip install 'frameforge-mcp[vision]') rather than shipping a second
copy of the same module name.
live is nested inside frameforge_mcp because it genuinely is one of the
server's surfaces: it imports frameforge_mcp.server directly and exists to
put a browser in front of the same validate/render loop.
coach is deliberately not nested. It does not import the MCP, and 6 tests
plus 10 examples reach it directly — routing them through a server package
would assert a dependency that does not exist.
What it does
-
Author → render: run SDK code or FrameForge YAML, get validation issues plus a PNG back in one call.
-
Verification signals: every render result carries the engine's typed diagnostics — text fit, layout overflow, ink collisions, legibility (type below the legible floor, WCAG contrast), paint intent, design-token census. A render that succeeded but produced something unreadable says so.
-
Portable font evidence:
run_sdk_code,run_sdk_client,render_frameforge_yaml, andfit_textaccept a.fpfont_closureplus optionalfont_generics. Validation and rendering share the same strict provider and reportmetrics_mode: closurewith the closure SHA-256. -
Visual QA: real NCC/RMSE/MAE metrics between a reference and a candidate.
-
Raster → vector: a coordinate-aware reconstruction workspace — measure, mark, overlay, fit primitives, vectorize, score.
-
Image → draft: propose documents from images, PDFs, or SVGs. Every proposal is unverified CV/VLM output and is round-tripped through a render before it is shown.
-
Deprecated forms:
list_deprecated_formsreturns the contract's registry — what each retired spelling became, and whether it still validates — andmigrate_deprecated_formsrewrites them, returning the migrated YAML withapply: true.These run before a render, and that ordering is the point. Two of the deprecated forms (the pre-P3 inline
strokebundle, the pre-P4sizeobject) are rejected by the contract, so a document carrying one can never reachrender_frameforge_yamlat all — an agent holding it gets "does not validate" and no route forward. The rewrite is mechanical, so this is that route. Neither tool renders, and neither touches a session; the migration does not mutate its input and is idempotent.
PALS's Law
Every tool in this server treats model output as untrusted. Proposals are labelled unverified, estimate-mode measurements name themselves as estimates, and a signal the server cannot resolve is reported as unresolved rather than scored as a pass. That is the point of the render loop: an agent that cannot see its own output cannot correct it.
Optional extras
pip install 'frameforge-mcp[vision]' # the frameforge-vision lane: measure, vectorize, propose
pip install 'frameforge-mcp[vlm]' # local CPU vision-language describer
pip install 'frameforge-mcp[pdf]' # PDF input for propose_from_document
pip install 'frameforge-mcp[browser]' # headless Chromium raster
The base install includes frameforge-sdk[metrics] and renders through
CairoSVG, so closure metrics and browser-free visual verification work without
another extra.
Provenance
Since the 2026-08-01 cutover this repository is the MCP source of truth. The former extraction script is historical; the monorepo depends on this package in its dev group and no longer owns a second MCP implementation.
See MIGRATION.md and
examples/font_closure_tool_call.json
for the portable closure call shape.
Licence
MIT — see LICENSE.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.