mcpField
S
ShapeWords MCP

ShapeWords MCP

本地服务
shapewords.fun媒体与设计021 周前更新

关于 ShapeWords MCP

ShapeWords MCP 可从文本或带权重的词语生成词云,面向支持 MCP 的客户端。它支持托管渲染和本地 Skia 引擎,并可输出 SVG、PNG 和 JSON。

主要功能

  1. 01从文本或加权词语生成词云
  2. 02渲染 SVG、PNG 或 JSON
  3. 03选择内置形状或自定义形状
  4. 04使用托管渲染或本地 Skia
  5. 05创建并查询异步渲染任务

适用场景

  1. 01将研讨会笔记可视化为词云
  2. 02渲染加权研究关键词
  3. 03使用种子生成可复现的词云布局

MCP 相关

通过 stdio MCP 传输提供词云渲染和任务状态工具。MCP 客户端可生成完整渲染、启动异步任务并查询状态。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"kirrrr-2423-shapewords": {
"command": "npx",
"args": [
"-y",
"shapewords-mcp"
],
"env": {
"SHAPEWORDS_API_BASE_URL": "<SHAPEWORDS_API_BASE_URL>",
"SHAPEWORDS_RENDER_API_KEY": "<SHAPEWORDS_RENDER_API_KEY>",
"SHAPEWORDS_POLL_TIMEOUT_MS": "<SHAPEWORDS_POLL_TIMEOUT_MS>",
"SHAPEWORDS_REQUEST_TIMEOUT_MS": "<SHAPEWORDS_REQUEST_TIMEOUT_MS>"
}
}
}
}
启动命令npx -y shapewords-mcp
需要配置的环境变量
SHAPEWORDS_API_BASE_URLShapeWords Render API base URL. Defaults to the public ShapeWords service.
SHAPEWORDS_RENDER_API_KEY密钥Optional bearer token for protected ShapeWords Render API deployments.
SHAPEWORDS_POLL_TIMEOUT_MSMaximum time to wait for hosted render jobs, in milliseconds.
SHAPEWORDS_REQUEST_TIMEOUT_MSPer-request timeout for ShapeWords API calls, in milliseconds.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmshapewords-mcp0.2.2

工具

3

收录的工具列表 · 更新于 2 周前

参数类型必填说明
seedinteger否用于可复现的无浏览器 ShapeWords 渲染的无符号 32 位布局种子。Canvas 配置文件默认值:0。使用 engine auto 或 browserless;浏览器回退不支持非零种子。
textstring否用于词云的单词、短语、笔记或源文本。提供 words[] 时可省略。
widthinteger否画布宽度,单位为像素。Canvas 配置文件默认值:800。
wordsarray否显式指定带权重的单词。其他系统已对输入进行分词、词形还原或评分时使用。
engineenum否渲染器引擎。auto 使用托管渲染器;skia 使用本地 MCP shared-core + CanvasKit 渲染器,不依赖服务端 Chromium。auto | browser | browserless | skia
formatenum否输出制品格式。Canvas 配置默认值:svg。png | svg | json
heightinteger否画布高度,单位为像素。Canvas 配置默认值:600。
localeenum否ShapeWords UI/渲染区域设置。Canvas 配置默认值:en。en | ru | ar | es | fr | zh
paddinginteger否词语碰撞间距,单位为像素。Canvas 配置默认值:3。
palettearray否
qualityenum否sq 速度更快,hq 会以更高的设备缩放比例渲染。Canvas 配置默认值:hq。sq | hq
fillModeenum否形状填充策略。Canvas 配置默认值:fill。fill | frequency
maxWordsinteger否布局的最大词数。Canvas 配置默认值:700。
colorModeenum否sequential | random | byFrequency
rotationsarray否以度为单位的显式旋转角度。提供后将覆盖 rotationPreset。
shapeTypestring否ShapeWords 形状 ID,例如 circle、rectangle、heart、star、cloud、diamond、custom。Canvas 配置默认值:cloud。
backgroundenum否输出背景样式。Canvas 配置默认值:white。transparent | white | dark
fontFamilystring否ShapeWords 字体系列名称。Canvas 配置默认值:Montserrat。
spiralTypeenum否布局螺旋算法。Canvas 配置默认值:archimedean。archimedean | rectangular
maxFontSizeinteger否
minFontSizeinteger否
returnImageboolean否在客户端支持时,下载制品并将其作为 MCP 图像内容返回。
returnLayoutboolean否在支持时包含布局 JSON。Canvas 配置默认值:false。
pollTimeoutMsinteger否
renderProfileenum否默认选项配置。canvas 与主要的 ShapeWords 画布匹配;api 保留旧版精简 Render API 默认值。canvas | api
pollIntervalMsinteger否
rotationPresetenum否与 ShapeWords 画布匹配的旋转预设。Canvas 配置默认值:orthogonal。horizontal | vertical | orthogonal | crossing | crossingVoids | dancing | positiveSlope | negativeSlope | random | custom | mixed | angled | free
customShapeDefinitionobject否shapeType 为 custom 时使用的自定义 SVG 形状定义。
customShapeDefinition.namestring否
customShapeDefinition.pathstring是
customShapeDefinition.nameEnstring否
customShapeDefinition.viewBoxstring是
customShapeDefinition.fillRuleenum否nonzero | evenodd

详细介绍

ShapeWords MCP

用于生成词云的通用 MCP 服务,使用 ShapeWords。

它通过 Model Context Protocol 提供 ShapeWords 渲染工具,因此任何支持 MCP 的客户端都可以根据文本、研讨会笔记、提示词、研究摘录或 Agent 输出创建 SVG、JSON 或 PNG 词云。默认情况下,它使用托管的 ShapeWords Render API;设置 engine: "skia" 后,则会在 MCP 服务内部使用共享布局核心和 CanvasKit/Skia 进行本地渲染。

工具

所有工具均使用 stdio MCP 传输。

render_word_cloud

创建 ShapeWords 渲染任务,轮询直至任务完成,并返回:

  • 托管渲染的公开资源 URL,或 engine: "skia" 的本地内嵌资源;
  • 任务元数据;
  • 可选的图像内容,适用于支持图像结果的 MCP 客户端。

当调用方需要最终资源时,使用此工具进行一次性生成。

create_word_cloud_job

启动渲染任务,并返回任务、状态和资源 URL,不等待任务完成。

用于客户端稍后轮询的异步工作流。

get_word_cloud_job

按 ID 检查渲染任务。

使用 create_word_cloud_job 或 render_word_cloud 返回的 jobId 调用此工具。

输入架构

render_word_cloud 接受以下所有渲染选项。create_word_cloud_job 仅接受托管选项:engine: "skia" 仅支持本地渲染,且由 render_word_cloud 提供支持。

字段类型默认值限制描述
renderProfileenumcanvascanvas、api默认选项配置。canvas 与 ShapeWords 主画布一致;api 保留较早的精简版 Render API 默认值。
textstring可选1-100,000 个字符词云的源文本。除非提供了 words,否则必填。
wordsobject[]可选1-1000 项显式指定带权重的词语。如果调用方已对文本进行分词、词形还原或评分,请使用此项。
localeenumenen、ru、ar、es、fr、zh传递给 ShapeWords 的渲染/界面区域设置。
formatenumsvgsvg、png、json生成内容的格式。SVG 是最快的默认格式。JSON 返回布局数据。PNG 根据同一共享布局栅格化生成。
widthinteger800240-4096画布宽度,单位为像素。
heightinteger600240-4096画布高度,单位为像素。
backgroundenumwhitetransparent、white、dark输出背景。
qualityenumhqsq、hq标准或高质量渲染。hq 与主画布导出比例一致,但速度较慢。
engineenumautoauto、browser、browserless、skia渲染引擎。skia 使用本地 MCP shared-core 和 CanvasKit 渲染器,不依赖服务器端 Chromium。
returnLayoutbooleanfalsetrue/false在支持时包含布局元数据。
shapeTypestringcloud1-80 个字符形状 ID。使用内置 ID,或将 shapeType 设为 custom 并提供 customShapeDefinition。
customShapeDefinitionobject省略见下文自定义 SVG 路径形状。shapeType 为 custom 时必填。
maxWordsinteger7001-1000最多放置的词数。
seedinteger00-4294967295用于生成可复现的 browserless 渲染结果的无符号 32 位布局种子。输入、选项和种子相同时,会生成相同的 SVG/布局。
fontFamilystringMontserrat1-80 个字符ShapeWords 字体系列名称,例如 Inter、Roboto、Montserrat、Noto Sans。
minFontSizeinteger184-400词语的最小字号。
maxFontSizeinteger968-700词语的最大字号。
paddinginteger30-100碰撞检测使用的像素间距。
rotationPresetenumorthogonal见下文与 ShapeWords 主画布一致的旋转预设。
rotationsinteger[]省略-90 至 90,最多 64 个值显式指定旋转角度。提供此项时,会覆盖 rotationPreset。
spiralTypeenumarchimedeanarchimedean、rectangular放置螺旋算法。
fillModeenumfillfill、frequency形状填充策略。
palettestring[]服务默认值最多 12 种颜色十六进制颜色:#rgb、#rrggbb 或 #rrggbbaa。
colorModeenum服务默认值sequential、random、byFrequency调色板颜色的词语分配方式。
returnImagebooleanfalse仅适用于 render_word_cloud下载生成的 SVG/PNG 内容,并以 MCP 图像内容形式返回。
pollIntervalMsinteger环境变量/默认值250-10,000render_word_cloud 的轮询间隔。
pollTimeoutMsinteger环境变量/默认值1,000-180,000render_word_cloud 的最大等待时间。

get_word_cloud_job 接受:

字段类型限制描述
jobIdstring6-64 个字符ShapeWords 渲染任务 ID。

words 项采用以下结构:

字段类型默认值限制描述
textstring必填1-120 个字符要显示的单词或表情符号。
valueinteger11-100,000用于控制大小的权重/频率。
kindenumwordword、emoji单词类型。渲染器会让表情符号保持水平。
sizeScalenumber省略0.1-5可选的额外大小乘数;ShapeWords 布局核心支持时使用。
repeatbooleantruetrue/false布局是否可以重复此单词,以改善形状填充效果。

旋转预设:

horizontal, vertical, orthogonal, crossing, crossingVoids, dancing,
positiveSlope, negativeSlope, random, custom, mixed, angled, free

renderProfile: "canvas" 会采用与主编辑器画布相同的实用默认值:shapeType: "cloud"、width: 800、height: 600、quality: "hq"、maxWords: 700、seed: 0、fontFamily: "Montserrat"、minFontSize: 18、maxFontSize: 96、padding: 3、rotationPreset: "orthogonal"、spiralType: "archimedean" 和 fillMode: "fill"。

仅当需要较早期的紧凑型 Render API 默认值时,才使用 renderProfile: "api":圆形、1024x640、SQ 质量,以及最多 120 个单词。

文本输入

MCP 服务可以发送原始 text、显式的 words,或两者兼有:

  • 重复的单词会增加频率,例如 cloud cloud cloud render render API;
  • words[] 可保留调用方提供的权重,并避免分词、停用词或词形还原方面的差异;
  • 同时提供 text 和 words[] 时,ShapeWords 会根据 words[] 进行渲染,并将 text 保留为源上下文;
  • 段落、会议记录、研讨会记录、提示词、研究摘录和关键词列表均可使用;
  • 不会通过此 MCP 服务上传 CSV、Excel 或 Google Sheets 等文件;请先粘贴或生成文本内容。

加权文本示例:

{
  "text": "MCP MCP MCP ShapeWords ShapeWords word cloud word cloud render API agents tools",
  "shapeType": "cloud",
  "format": "svg",
  "seed": 12345
}

显式加权单词示例:

{
  "words": [
    { "text": "ShapeWords", "value": 12 },
    { "text": "MCP", "value": 9 },
    { "text": "canvas", "value": 7 },
    { "text": "layout", "value": 6 },
    { "text": "render", "value": 5 }
  ],
  "shapeType": "cloud",
  "format": "svg"
}

形状

使用 shapeType 选择词云遮罩。

生产渲染器接受的稳定内置形状 ID 包括:

rectangle, circle, heart, star, cloud, diamond, tree, triangle, arrow,
square, pentagon, hexagon, octagon, cross, plus, moon, sun, drop,
flame, leaf, flower, mountain, apple, house, book, camera, music,
chat, location, trophy, rocket, plane, car, shield, lightning, check,
infinity, tag

内置品牌形状 ID 包括:

brand-product-hunt, brand-y-combinator, brand-hacker-news,
brand-indie-hackers, brand-github, brand-figma, brand-notion,
brand-stripe, brand-vercel, brand-linear, brand-supabase,
brand-railway, brand-netlify, brand-firebase, brand-cloudflare,
brand-airtable, brand-replit, brand-anthropic

生产渲染器也可能接受其他生成的 ShapeWords ID。为确保自动化流程具有可移植性,请优先使用上述稳定 ID,或传入自定义 SVG 形状。

本地 engine: "skia" 路径目前支持 rectangle、square、circle、diamond、triangle、star、heart、cloud、自定义 SVG 形状,以及 fa-cat 等随附的 Font Awesome 形状 ID。不支持的本地形状 ID 会被拒绝,而不会静默更改所请求的形状。

自定义形状

将 shapeType 设为 custom,并提供 customShapeDefinition:

字段类型必填限制描述
pathstring是1-100,000 个字符用作遮罩的 SVG 路径数据。
viewBoxstring是1-120 个字符SVG viewBox,例如 0 0 100 100。
fillRuleenum否nonzero、evenoddSVG 填充规则。省略时采用渲染器行为。
namestring否1-80 个字符可选的人类可读名称。
nameEnstring否1-80 个字符可选的英文名称。

自定义爱心示例:

{
  "text": "love love design care product community team support",
  "shapeType": "custom",
  "customShapeDefinition": {
    "name": "Heart",
    "path": "M 50 90 C 25 70, 0 50, 0 30 A 25 25 0 0 1 50 30 A 25 25 0 0 1 100 30 C 100 50, 75 70, 50 90 Z",
    "viewBox": "0 0 100 100",
    "fillRule": "nonzero"
  },
  "format": "svg"
}

输出

render_word_cloud 返回:

  • 包含已完成作业 ID 和产物位置的文本内容;
  • 包含规范化作业元数据的 structuredContent.job;
  • 托管渲染的 structuredContent.artifactUrl;
  • engine: "skia" 的 structuredContent.localArtifact;
  • structuredContent.siteUrl;
  • 当 returnImage 为 true,且 format 为 svg 或 png 时,返回可选的 MCP 图像内容。

对于 engine: "skia",由于没有托管产物 URL,当 format 为 png 或 svg 时,render_word_cloud 始终返回内嵌的 MCP 图像内容。

create_word_cloud_job 会在创建作业后立即返回相同的元数据,不会等待作业完成。

get_word_cloud_job 会返回最新的作业状态和产物 URL。

生成的产物 URL 有效时间较短,因为 ShapeWords Render API 会将渲染作业存储在内存中。

格式和引擎说明

  • svg 是推荐的自动化格式:速度快、体积小,并且适用于无浏览器的共享核心渲染器。
  • json 返回来自同一共享核心布局的数据。
  • png 根据同一生成的 SVG/布局进行栅格化,因此对于相同输入和选项,词语位置与 SVG/JSON 一致。
  • 除非需要强制指定特定路径,否则建议使用 engine: "auto"。
  • engine: "browserless" 支持 svg、json 和 png。
  • engine: "browser" 支持 svg 和 png,不支持 json。
  • engine: "skia" 仅支持本地使用,且仅由 render_word_cloud 支持。它不会创建可轮询的托管任务。布局由随附的 ShapeWords 共享核心生成;PNG 直接使用 CanvasKit/Skia 绘制。
  • browserless/共享核心渲染会遵循 seed。如需获得可复现的 API/MCP 输出,请使用 engine: "auto" 或 engine: "browserless"。
  • Render API 会拒绝强制使用 engine: "browser" 时设置的非零 seed,因为浏览器回退路径不使用确定性的共享核心种子路径。

快速开始

直接从 GitHub 运行:

npx -y github:kirrrr-2423/shapewords-mcp

或者克隆到本地:

git clone https://github.com/kirrrr-2423/shapewords-mcp.git
cd shapewords-mcp
npm install
npm start

客户端配置

在任何兼容 MCP 的客户端中使用 stdio 传输。

{
  "mcpServers": {
    "shapewords": {
      "command": "npx",
      "args": ["-y", "github:kirrrr-2423/shapewords-mcp"],
      "env": {
        "SHAPEWORDS_API_BASE_URL": "https://shapewords.fun"
      }
    }
  }
}

对于本地克隆:

{
  "mcpServers": {
    "shapewords": {
      "command": "node",
      "args": ["/absolute/path/to/shapewords-mcp/src/index.js"],
      "env": {
        "SHAPEWORDS_API_BASE_URL": "https://shapewords.fun"
      }
    }
  }
}

环境变量

变量默认值说明
SHAPEWORDS_API_BASE_URLhttps://shapewords.funShapeWords 应用 URL。
SHAPEWORDS_RENDER_API_KEYempty如果你的 Render API 要求提供 bearer token,可选用此变量。
SHAPEWORDS_API_KEYemptySHAPEWORDS_RENDER_API_KEY 的向后兼容别名。
SHAPEWORDS_POLL_INTERVAL_MS1500已完成渲染的轮询间隔。
SHAPEWORDS_POLL_TIMEOUT_MS90000渲染等待超时时间。
SHAPEWORDS_REQUEST_TIMEOUT_MS30000托管 API 和资源请求的单次请求超时时间。
SHAPEWORDS_MAX_IMAGE_BYTES8388608当 returnImage 为 true 时,下载的资源大小上限。

提示词示例

Create a fast SVG word cloud about MCP, universal tools, word cloud generation, AI agents, and ShapeWords. Use the default ShapeWords canvas profile and return the artifact URL.

工具输入示例:

{
  "text": "MCP MCP MCP Model Context Protocol word cloud word cloud ShapeWords tools resources prompts stdio server client universal integration connector API render PNG SVG artifact agents automation context protocol schema",
  "locale": "en",
  "format": "svg",
  "width": 800,
  "height": 600,
  "background": "white",
  "quality": "hq",
  "engine": "auto",
  "returnLayout": false,
  "shapeType": "cloud",
  "seed": 12345,
  "palette": ["#7c3aed", "#ddd6fe", "#14b8a6", "#111827"],
  "returnImage": false
}

更多示例

透明 PNG
{
  "text": "launch launch startup product customers retention growth metrics roadmap",
  "format": "png",
  "engine": "auto",
  "shapeType": "rocket",
  "width": 1200,
  "height": 900,
  "background": "transparent",
  "quality": "hq",
  "returnImage": true
}
本地 Skia PNG
{
  "words": [
    { "text": "MCP", "value": 12 },
    { "text": "ShapeWords", "value": 10 },
    { "text": "Skia", "value": 8 },
    { "text": "CanvasKit", "value": 7 },
    { "text": "local", "value": 6 },
    { "text": "renderer", "value": 5 }
  ],
  "format": "png",
  "engine": "skia",
  "shapeType": "cloud",
  "width": 800,
  "height": 600,
  "quality": "sq",
  "seed": 12345
}
JSON 布局
{
  "text": "design system tokens components variants accessibility contrast typography layout",
  "format": "json",
  "engine": "browserless",
  "shapeType": "diamond",
  "returnLayout": true,
  "seed": 7,
  "maxWords": 80
}
可复现的 SVG
{
  "text": "MCP shared core browserless renderer reproducible seed deterministic layout",
  "format": "svg",
  "engine": "browserless",
  "shapeType": "cloud",
  "returnLayout": true,
  "seed": 12345
}
自定义调色板和字体
{
  "text": "research synthesis interview persona journey insight opportunity experiment",
  "format": "svg",
  "shapeType": "book",
  "fontFamily": "Roboto",
  "palette": ["#111827", "#2563eb", "#14b8a6", "#f59e0b"],
  "colorMode": "byFrequency",
  "maxWords": 160
}

开发

npm install
npm run smoke
npm run smoke:skia
npm run inspect

服务使用 stdio,并将协议消息写入 stdout。诊断信息写入 stderr。

说明

  • 当 MCP 客户端支持图像内容且需要将托管渲染字节内嵌时,在 render_word_cloud 中设置 returnImage: true。本地 Skia 图像渲染会自动内嵌。
  • 对于自动化程度较高的用法,优先使用 SVG 或 JSON 布局资源;仅在调用方需要栅格像素时才请求 PNG。
  • 当调用方需要在多次 MCP 运行中获得可重复的 SVG/JSON/PNG 布局时,设置 seed。engine: "skia" 默认具有确定性。
  • 本地 Skia PNG 输出在质量缩放后最多为 40,000,000 像素,以避免占用过多本地内存。
  • 本地 Skia 字体渲染目前仅支持随附的 Montserrat 和 OpenDyslexic。托管渲染可能支持更多字体系列。
  • MCP 架构目前仅公开渲染和样式选项,不公开 ShapeWords 专属 UI 工作流,例如高级词语编辑器、2D/3D 视图切换、CSV/Excel 上传、Google Sheets 导入或实时房间控制。
  • 提供 padding、rotationPreset、rotations、spiralType 和 fillMode,以便 MCP 调用方更贴近地匹配 ShapeWords 主画布。

捆绑的 Font Awesome 和字体资源声明请参阅 THIRD_PARTY_NOTICES.txt。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。