图表生成系统

一个基于Penrose引擎的图表生成系统,支持CLI工具和MCP服务器,可将数学对象和关系的声明式描述转换为SVG图表。

  • by apetrock
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 apetrock/penrose-mcp

使用说明

彭罗斯MCP

基于以下内容构建的图表生成系统 CMU的彭罗斯发动机,作为CLI工具公开 主控程序 服务器。

Penrose通过受约束的数值优化将数学对象和关系的声明性描述转化为漂亮的SVG图。该项目封装了该引擎,以便LLM代理(在Cursor、Claude Desktop、VS Code等中)和命令行用户可以生成图表,而无需直接学习Penrose的三语言系统。

快速开始

安装

npm install

CLI使用情况

列出可用的图表域:

npx tsx src/cli/penrose-render.ts list-domains

获取有关域的详细信息(类型、谓词、样式、示例):

npx tsx src/cli/penrose-render.ts domain-info set-theory

渲染图表:

npx tsx src/cli/penrose-render.ts render \
  -d set-theory \
  -s venn \
  -S "Set A, B, C
Subset(B, A)
Subset(C, A)
Disjoint(B, C)
AutoLabel All" \
  -o diagram.svg

使用不同的变体种子作为替代布局:

npx tsx src/cli/penrose-render.ts render \
  -d set-theory -s venn \
  -S "Set A, B
Subset(B, A)
AutoLabel All" \
  -v "seed42" -o diagram.svg

MCP服务器(用于LLM代理)

通过stdio运行MCP服务器:

npx tsx src/mcp/server.ts

光标配置

添加到光标MCP设置(.cursor/mcp.json 或全局设置):

{
  "mcpServers": {
    "penrose": {
      "command": "npx",
      "args": ["tsx", "src/mcp/server.ts"],
      "cwd": "/path/to/penrose_mcp"
    }
  }
}

Claude桌面配置

添加 claude_desktop_config.json:

{
  "mcpServers": {
    "penrose": {
      "command": "npx",
      "args": ["tsx", "src/mcp/server.ts"],
      "cwd": "/path/to/penrose_mcp"
    }
  }
}

可用域名

域 描述 样式
set-theory 具有子集、不相交和相交关系的集合 venn (维恩图), tree (防护树)
linear-algebra 向量空间、向量、正交性 vectors (箭头从原点)
graphs 具有邻接关系的节点和边 directed (带箭头), undirected
euclidean-geometry 点、线段、三角形、角度 geometry (经典建筑风格)

MCP工具

当作为MCP服务器连接时,LLM可以使用以下工具:

工具 说明
list_domains 列出所有可用的图表域及其样式
get_domain_info 获取域的类型、谓词、样式和示例
render_diagram 编译Penrose图并将其渲染为SVG

服务器还公开了一个 penrose_usage_guide 提示任何MCP客户端都可以获取完整的使用说明。

运作原理

Penrose使用三种声明性语言:

  1. 领域 --定义存在哪些类型的对象以及可能存在的关系
  2. 风格 --定义对象的视觉渲染方式(形状、约束、布局规则)
  3. 物质 --声明特定的对象实例及其关系(每个图的输入)

域+样式对是一个可重用的库。根据图表,物质是唯一会发生变化的东西。该项目捆绑了几个域+样式对,并允许您通过编写(或让LLM编写)Substance程序来生成图表。

创建新域名

要添加新的图表域,请执行以下操作:

  1. 在下面创建一个目录 domains/ 使用您的域名
  2. 写一个 .domain 带有类型和谓词声明的文件
  3. 写一个或多个 .style 定义视觉映射的文件
  4. 添加示例 .substance 文件
  5. 创建一个 meta.json 为文件编制索引

请参阅现有域以供参考。这 彭罗斯文件 有编写域和样式程序的全面指南。

项目结构

src/
  core/
    renderer.ts    -- Penrose compile → optimize → toSVG pipeline
    registry.ts    -- Scans and indexes bundled domain+style pairs
    types.ts       -- Shared TypeScript interfaces
  cli/
    penrose-render.ts  -- CLI entry point
  mcp/
    server.ts          -- MCP server entry point
    tools/             -- MCP tool handlers
    resources/         -- MCP resource handlers
domains/               -- Bundled domain+style libraries

看 建筑.md 详细的技术设计。

路线图

  • []带有HTTP传输的Docker容器,用于远程MCP访问
  • []参数图调整的会话状态(热启动重新优化)
  • []其他领域:软件架构、ER图、网络拓扑
  • []用于高性能集成的gRPC网关
  • []用于交互式图表编辑的Web UI

许可证

麻省理工学院

致谢

建立在 彭罗斯 作者:卡内基梅隆大学的叶嘉欣、倪、克里格、玛扬、怀斯、奥尔德里奇、阳光和克兰。

叶等著,《彭罗斯:从数学符号到美丽的图表》,ACM翻译。图表。39、4(信号图2020)。