frameforge-mcp

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.

Category
访问服务器

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, and fit_text accept a .fp font_closure plus optional font_generics. Validation and rendering share the same strict provider and report metrics_mode: closure with 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_forms returns the contract's registry — what each retired spelling became, and whether it still validates — and migrate_deprecated_forms rewrites them, returning the migrated YAML with apply: true.

    These run before a render, and that ordering is the point. Two of the deprecated forms (the pre-P3 inline stroke bundle, the pre-P4 size object) are rejected by the contract, so a document carrying one can never reach render_frameforge_yaml at 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.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选