# DingCard (npm · dingcard-mcp)

Make posters, social cards and slide decks from templates, check the layout, render PNG, JPG or PDF

- Trust score: 83/100 (high trust)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `dingcard-mcp`: 83/100 (this document), [markdown](https://verifymcp.io/servers/lottshin-dingcard/dingcard-mcp.md), [page](https://verifymcp.io/servers/lottshin-dingcard/dingcard-mcp)

## Channel facts

- Registry: `npm`
- Package: `dingcard-mcp`
- Version: `0.61.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 41 of 122 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to lottshin/DingCard).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 3 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 76/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 6705 tokens (~231/item across 29 items; 22 tools + 7 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 17/100
  - Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 99/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 98% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 22 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the DingCard MCP server?

DingCard runs locally as an npm package, launched with npx -y dingcard-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add lottshin-dingcard -- npx -y dingcard-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "lottshin-dingcard": {
      "command": "npx",
      "args": [
        "-y",
        "dingcard-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "lottshin-dingcard": {
      "command": "npx",
      "args": [
        "-y",
        "dingcard-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add lottshin-dingcard -- npx -y dingcard-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "lottshin-dingcard": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "dingcard-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add lottshin-dingcard --command npx --arg -y --arg dingcard-mcp
```

### Hermes

```yaml
mcp_servers:
  lottshin-dingcard:
    command: "npx"
    args: ["-y", "dingcard-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "lottshin-dingcard": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "dingcard-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add lottshin-dingcard -t stdio -c npx -a -y dingcard-mcp
```

### Other

```json
{
  "mcpServers": {
    "lottshin-dingcard": {
      "command": "npx",
      "args": [
        "-y",
        "dingcard-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 83, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 82, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-01 (score 81, +16)

- [security regression] Tool safety: pass → unverified
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] Stability: unverified → 0.03
- [functional] Package version: 0.61.0 → 0.61.1

### 2026-10-31 (score 65)

First indexed and scored.

## MCP tools (22)

### `get_guide` (~180 tokens)

按主题读一份使用指南：文档怎么写、每个动作怎么发、content / outline / 海报内容怎么填、HTML 怎么写、模板字段和检查项是什么意思、渲染导出有哪些方式。工具说明里只写了做什么；要动手写参数之前，先来这里读对应主题的完整写法。section 给主题 id（不给就列出全部主题 id 和标题）：document-model 文档模型、actions 动作清单、deck-content 套图内容、outline Markdown 大纲、poster-content 海报内容、html-import 网页转文档、templates 模板清单、check 检查项、render-export 渲染与导出。

Input parameters:

- `section` (string): 主题 id，如 "actions"；不给就列出全部主题

### `list_templates` (~336 tokens)

列出叮卡内置模板，按内容和尺寸挑模板、拿 templateId。默认每个模板一张简卡：id、标题、描述、kind、format（尺寸 id）、uses（用途）、styles（风格）。kind 是 deck（一整套，用 create_document_from_content / create_document_from_outline 生成）或 poster（单页，用 create_poster_from_content 生成）。kind / format / q 只取子集（如 kind: "poster"、format: "xhs"、q: "菜单"）。挑出两三个候选后用 ids 取详情：每页能放多少要点（capacity）、海报有哪些位置（posterCapacity）、颜色、标签和像素尺寸，字段含义见 get_guide("templates")。不同页可以用不同模板：create_document_from_content 的每页可以写自己的 templateId，add_template_pages 把任何模板的某几页加进已有文档。

Input parameters:

- `format` (string): 按页面尺寸 id 筛选（不区分大小写的子串匹配，如 "xhs"、"a4"）
- `ids` (array): 要看详情的模板 id；给了就只返回这几个模板的完整信息，不看 kind / format / q
- `kind` (string): 只列这一类：deck 整套卡片，poster 单页海报
- `q` (string): 关键词，匹配标题、标签、用途、风格和描述（如 "菜单"、"国风"）

### `create_document_from_template` (~142 tokens)

按模板 id 实例化一份完整的可编辑文档：自由画布模板保存在服务端，返回 documentId（之后传给 inspect_document / apply_actions / check_document / render_document 等）和各页 id、名称；Markdown 模板返回 { source, platformId, themeId, fontFamily, radius, profile, images? } 信封（可用 render_markdown 无头渲染）。

Input parameters:

- `includeDocument` (boolean): 同时返回完整文档 JSON（默认只返回 documentId 和 version）
- `templateId` (string, required): list_templates 返回的模板 id，如 "editorial-freeform"

### `add_template_pages` (~407 tokens)

把模板的页面加进一份自由画布文档，和编辑器模板面板里点一页一样：套图模板可以只加某几页（再来一张内页、换个结尾页），单页海报加进来就是新的一页。页面保留模板自己的尺寸和示例文字，之后用 inspect_document 找到图层、apply_actions 改字，check_document 会把没改的示例文字报出来。要直接按内容填好：套图的页用 create_document_from_content 每页的 templateId，海报用 create_poster_from_content 的 documentId。返回加进来的页（slideId、名称、在文档里是第几页），默认附上这些页的缩略图。

Input parameters:

- `afterSlideId` (string): 加在这一页后面；不给就加在最后
- `document`: 完整的 v44（或 v1–43 旧版）文档 JSON，可替代 documentId
- `documentId` (string): 创建或修改文档的工具返回的 documentId（推荐：不必来回传整份文档）
- `documentPath` (string): 文档 JSON 文件的路径，可替代 documentId
- `includeDocument` (boolean): 同时返回完整文档 JSON（默认只返回 documentId 和 version）
- `pages` (array): 加模板的第几页，从 1 起（套图是 1 封面、2 内页、3 结尾），可以重复；不给就加全部
- `previews` (boolean): 是否附上加进来的页的缩略图，默认 true
- `replaceSlideId` (string): 换掉这一页（比如一张空白页），不能和 afterSlideId 同时给
- `templateId` (string, required): list_templates 返回的自由画布模板 id

### `create_document_from_html` (~347 tokens)

把你写的 HTML/CSS 网页转成在叮卡里能逐个修改的自由画布文档（v44）。适合模板排不出来的版式：直接用网页写法排版，叮卡在浏览器里排好后，把每个色块、文字、图片和 SVG 图形读成形状、文字框、图片和图形节点，位置、字号、颜色、圆角、阴影、渐变等全部照网页来，层叠顺序按 CSS（含 z-index）。返回 documentId、每页 id 和尺寸、notes（哪里没转过来），默认附缩略图。之后 check_document 检查、apply_actions 修改、render_document 出图、open_in_editor 交给人。HTML 怎么写（section 分页、内置字体、图片、svg、表格、data-name）见 get_guide("html-import")。

Input parameters:

- `height` (integer): 没写尺寸的页面的高度，也是 100vh，默认 1440
- `html` (string): 网页源码（可以只写 <style> 和若干 <section>）
- `htmlPath` (string): 网页文件路径，可替代 html；里面的相对路径按这个文件所在的目录找
- `includeDocument` (boolean): 同时返回完整文档 JSON（默认只返回 documentId 和 version）
- `previews` (boolean): 是否附上缩略图，默认 true
- `width` (integer): 没写尺寸的页面的宽度，也是 100vw，默认 1080

### `create_document_from_content` (~176 tokens)

按结构化内容生成一整套自由画布卡片（v44）：封面 + 每个 page 一页 + 可选结尾页，风格沿用所选模板。适合已经整理好标题、正文、要点的内容；每页还能配一种数据元素（chart / table / timeline / progress）。content 的完整写法（页面字段、版式选择、数据元素、生成规则）见 get_guide("deck-content")。生成后建议先 check_document，再 render_document 看缩略图。

Input parameters:

- `content` (object, required)
- `includeDocument` (boolean): 同时返回完整文档 JSON（默认只返回 documentId 和 version）
- `templateId` (string, required): list_templates 返回的自由画布模板 id，如 "editorial-freeform"

### `create_poster_from_content` (~370 tokens)

按内容生成一张海报（单页模板：小红书封面、菜单、价目表、证书、九宫格、课程表、各种海报、请柬、贺卡、封面、宣传单、数据盘点、对比表、成长记录等），尺寸跟模板走。模板里的示例文字全部换成内容，没给的连同它的底板、按钮一起删掉。不同模板吃不同的字段（菜单的 details、课程表的 table、数据盘点的 chart、证书的 recipient），content 每个字段的写法和放不下时怎么排见 get_guide("poster-content")；summary.moved / unplaced / shrunk 说明文字放到了哪里、缩了多少。给 documentId 时海报加成那份文档的一页。

Input parameters:

- `afterSlideId` (string): 加进已有文档时放在这一页后面；不给就加在最后
- `content` (object, required)
- `document`: 完整的 v44（或 v1–43 旧版）文档 JSON，可替代 documentId
- `documentId` (string): 给了就把海报加成这份文档的一页（就地更新，海报保留自己的尺寸）；documentId、document、documentPath 都不给就新建一份文档
- `documentPath` (string): 文档 JSON 文件的路径，可替代 documentId
- `includeDocument` (boolean): 同时返回完整文档 JSON（默认只返回 documentId 和 version）
- `templateId` (string, required): list_templates 里 kind 为 poster 的模板 id，如 "talk-poster-freeform"

### `create_document_from_outline` (~193 tokens)

按 Markdown 大纲生成一整套自由画布卡片（v44）：封面 + 每个 "## 小节" 一页 + 可选结尾页，风格沿用所选模板；小节里的 Markdown 表格也变成这一页的表格元素。大纲的完整语法（小节、要点、引文、表格、结尾页）见 get_guide("outline")。生成后建议先 check_document，再 render_document 看缩略图。

Input parameters:

- `includeDocument` (boolean): 同时返回完整文档 JSON（默认只返回 documentId 和 version）
- `outline` (string, required): Markdown 大纲：# 总标题 + 若干 ## 小节（小节下正文行填入该页正文）
- `templateId` (string, required): list_templates 返回的自由画布模板 id，如 "editorial-freeform"

### `list_assets` (~290 tokens)

查内置素材与样式清单，kind 选一类：icons 内置图标（query 中文或英文搜、ids 按 id 取；example 是可直接 node/insert-children 的完整 path 节点）、decorations 装饰素材（手绘线条、贴纸、标签；category 只看一类，用 add_decorations 放置）、styles 配色与字体组合（document/restyle 一键套用）、text_styles 现成花字（patch 直接作为 node/update-style 的补丁）、collages 拼图版式（example 是完整的拼图组节点，格子换图片填充）、filter_presets 照片滤镜预设（patch 同样给 node/update-style）。不给 kind 返回每类的条数和用法。

Input parameters:

- `category` (string): decorations：只看一类
- `ids` (array): icons / decorations：按 id 精确取
- `kind` (string): 素材类别；不给返回各类简介
- `pageHeight` (number): collages：页面高 px（默认 1440）
- `pageWidth` (number): collages：页面宽 px（默认 1080）
- `query` (string): icons / decorations：中文或英文关键词，空格分隔的多个词需同时命中

### `add_decorations` (~373 tokens)

把装饰素材放到一页上（一次可放多个，按顺序叠放；list_assets 的 decorations 查 id）：每项给 decoration、x、y（盒子左上角的页面坐标）、width（不给按页面短边的默认比例），高度按装饰的宽高比算。color（#RRGGBB）换掉装饰本来的主色（手绘线条和贴纸换整体颜色，标签换底色，字色自动取黑或白）；text 换标签上的字；rotation 旋转（度）；below 填同页一个顶层节点的 id 或图层名，装饰就放在它下面一层（荧光笔、胶带、色块垫在文字下面时用），不给则放在最上层。用 documentId 时就地更新这份文档，返回每个装饰的 nodeId、path 和盒子；之后可以用 apply_actions 改，用 check_document 检查有没有压住文字。

Input parameters:

- `document`: 完整的 v44（或 v1–43 旧版）文档 JSON，可替代 documentId
- `documentId` (string): 创建或修改文档的工具返回的 documentId（推荐：不必来回传整份文档）
- `documentPath` (string): 文档 JSON 文件的路径，可替代 documentId
- `includeDocument` (boolean): 同时返回完整文档 JSON（默认只返回 documentId 和 version）
- `items` (array, required): 要放的装饰，按顺序叠放
- `slideId` (string): 放在哪一页，默认文档当前页（activeSlideId）

### `validate_document` (~361 tokens)

校验文档是否为合法的自由画布 v44 文档（v1–43 自动迁移，src 是本机路径的图片读进来嵌入）；合法时保存在服务端并返回 documentId（已有 documentId 的照旧），非法时返回原因：第几页、哪个节点、多了或缺了哪个键，或者该写哪个 documentVersion。
文档速写：{ documentVersion: 44, slides: [{ id, name, width(128–4096), height(128–4096), background, nodes, guides? }], activeSlideId }；节点 11 选一（text / image / shape / line / path / qrcode / chart / table / timeline / progress / group），公共必填键 id, name, locked, hidden, type, x, y, rotation, scale，其余键按节点类型精确匹配（不多不少），全文档节点 id 唯一。每种节点的完整键表见 dingcard://schema/freeform 资源或 get_guide("document-model")，写之前先读；拿不准就先写个大概来校验，按返回的原因改。

Input parameters:

- `document`: 完整的 v44（或 v1–43 旧版）文档 JSON，可替代 documentId
- `documentId` (string): 创建或修改文档的工具返回的 documentId（推荐：不必来回传整份文档）
- `documentPath` (string): 文档 JSON 文件的路径，可替代 documentId
- `includeDocument` (boolean): 同时返回完整文档 JSON（默认只返回 documentId 和 version）

### `inspect_document` (~246 tokens)

检查文档结构：页面摘要（尺寸/背景/节点数）与递归节点树（id、name、type、几何、文本摘要；内置图标标出 icon id，装饰素材标出 decoration id，组成装饰的组也标在组上），以及整套卡片的 style：用到的颜色（按占的面积排序，附 share 和用在 background/fill/text/line/shadow 哪些地方）、字体（texts 用了几段文字、largest 最大字号）和正文字号 bodySize。改文档前先 inspect，拿到节点 id / 路径再发动作。文档怎么写见 dingcard://schema/freeform 资源或 get_guide("document-model")。

Input parameters:

- `document`: 完整的 v44（或 v1–43 旧版）文档 JSON，可替代 documentId
- `documentId` (string): 创建或修改文档的工具返回的 documentId（推荐：不必来回传整份文档）
- `documentPath` (string): 文档 JSON 文件的路径，可替代 documentId

### `apply_actions` (~356 tokens)

对文档应用一串编辑动作（与编辑器 UI 同一归约器，语义完全一致），返回每个动作是否生效（changes）和没生效的原因（reasons，与 changes 一一对应：没改动时是 null，被拒时写清哪个键、哪条规则）。用 documentId 时就地更新这份文档（version 加一），传 document / documentPath 时另存为一份新文档并返回它的 documentId；动作里图片 src 写成本机文件路径的会读进来嵌入。常用：node/insert-children（插入节点）、node/update-content（改字/改数据元素内容）、node/update-style（改样式）、node/update-geometry（改位置尺寸）、slide/*（页的增删换序）、document/find-replace（整套查找替换）、document/restyle（整套换配色字体）。每个动作的完整写法见 get_guide("actions")。文档怎么写见 dingcard://schema/freeform 资源或 get_guide("document-model")。

Input parameters:

- `actions` (array, required): FreeformAction 数组
- `document`: 完整的 v44（或 v1–43 旧版）文档 JSON，可替代 documentId
- `documentId` (string): 创建或修改文档的工具返回的 documentId（推荐：不必来回传整份文档）
- `documentPath` (string): 文档 JSON 文件的路径，可替代 documentId
- `includeDocument` (boolean): 同时返回完整文档 JSON（默认只返回 documentId 和 version）

### `check_document` (~399 tokens)

检查自由画布文档排出来的样子：在与导出相同的页面里排版后，逐页列出读者会注意到的问题——文字放不下、叠住、被挡住或跑出页面，对比度太低，还留着示例文字，图片没加载出来，图形、二维码、表格、图表画坏了，对齐差几 px，标题和正文拉不开层级，页面上一大片空白，该放图片的色块空着。每条带 kind、page、slideId、node（图层名）、path（apply_actions 用的节点路径）和改法，每种 kind 是什么意思见 get_guide("check")。fix: true 时把放不下的文字缩到能放下的字号、把差几 px 的对齐吸齐，并保存（用 documentId 时就地更新，返回 documentId 和 version），附改了哪些（fixed 是缩过的字号，snapped 是挪过的位置）和剩下的问题。文档怎么写见 dingcard://schema/freeform 资源或 get_guide("document-model")。

Input parameters:

- `document`: 完整的 v44（或 v1–43 旧版）文档 JSON，可替代 documentId
- `documentId` (string): 创建或修改文档的工具返回的 documentId（推荐：不必来回传整份文档）
- `documentPath` (string): 文档 JSON 文件的路径，可替代 documentId
- `fix` (boolean): 把放不下的文字缩到能放下的字号、把差几 px 的对齐吸齐（改动保存回这份文档，返回 documentId 和 version）
- `includeDocument` (boolean): 同时返回完整文档 JSON（默认只返回 documentId 和 version）

### `render_document` (~443 tokens)

把自由画布 v44 文档（v1–43 输入自动迁移）无头渲染为图片或 PDF（与编辑器导出同一管线：网页字体按字符子集嵌入、图片就绪等待、逐页导出），默认逐页 PNG 到 outputDir，另附每页小缩略图供你直接查看效果。长图、九宫格、PDF、JPEG、倍率等输出方式见 get_guide("render-export")。仅支持自由画布文档；文档中的图片 src 必须是浏览器可加载的 URL 或 data URL。文档怎么写见 dingcard://schema/freeform 资源或 get_guide("document-model")。

Input parameters:

- `baseName` (string): 输出文件名前缀，默认 "dingcard"
- `document`: 完整的 v44（或 v1–43 旧版）文档 JSON，可替代 documentId
- `documentId` (string): 创建或修改文档的工具返回的 documentId（推荐：不必来回传整份文档）
- `documentPath` (string): 文档 JSON 文件的路径，可替代 documentId
- `format` (string): png（默认，保留透明）、jpeg（白底）或 pdf（所有页在一个文件里）
- `grid` (boolean): png / jpeg：每个正方形页面切成九宫格（九个文件），代替逐页文件
- `long` (boolean): png / jpeg：所有页拼成一张长图，代替逐页文件
- `outputDir` (string, required): 输出目录（不存在会创建）
- `previews` (boolean): 是否附上缩略图，默认 true
- `quality` (number): jpeg 和 pdf 的 JPEG 质量，默认 0.92
- `scale`: 像素倍率，默认 1
- `slideIds` (array): 只渲染这些页（默认全部，按文档页序）；长图和 PDF 也只包含这些页

### `get_document` (~165 tokens)

取回一份文档的完整 JSON：给 path 时写成 JSON 文件（目录不存在会创建）并返回路径，不给时直接返回文档。写成文件的文档可以拖进叮卡「我的项目」，或之后用 documentPath 传回来。

Input parameters:

- `document`: 完整的 v44（或 v1–43 旧版）文档 JSON，可替代 documentId
- `documentId` (string): 创建或修改文档的工具返回的 documentId（推荐：不必来回传整份文档）
- `documentPath` (string): 文档 JSON 文件的路径，可替代 documentId
- `path` (string): 写到这个 .json 文件，而不是直接返回文档

### `open_in_editor` (~298 tokens)

在叮卡编辑器里打开这份自由画布文档，方便人接着手改：服务端把文档放在本机地址上，在浏览器里打开编辑器的导入链接，编辑器读进来存成一个新项目（不登录也行，存在这台设备的浏览器里）。默认打开服务端自带的编辑器 http://127.0.0.1:5390（DINGCARD_APP_PORT 可改端口，被占用时换一个空闲端口）；设了环境变量 DINGCARD_APP_URL 或传 appUrl，就在那个叮卡里打开。open: false 只返回链接（url）不打开浏览器。

Input parameters:

- `appUrl` (string): 在这个叮卡编辑器里打开，如 http://127.0.0.1:5173
- `document`: 完整的 v44（或 v1–43 旧版）文档 JSON，可替代 documentId
- `documentId` (string): 创建或修改文档的工具返回的 documentId（推荐：不必来回传整份文档）
- `documentPath` (string): 文档 JSON 文件的路径，可替代 documentId
- `open` (boolean): 是否打开浏览器，默认 true
- `title` (string): 项目名，默认「导入的设计」

### `share_document` (~416 tokens)

把文档渲染成图片、上传到部署的叮卡服务端，生成一个不用登录就能打开的分享链接：手机扫码或点链接就能看整套卡片、长按存图——「电脑做图、手机发图」的最后一公里。自由画布文档（documentId 或 v44 文档）和 Markdown 卡片信封（source、platformId、themeId 等，与 render_markdown 的 document 相同）都可以。返回 { ok, share: { id, url, expiresAt, imageCount } } 并附上二维码图片，给用户扫即可。expiresInHours 是有效期（小时，1–720，默认 24，最长一个月），过期后链接打不开、图片仍留在账号里。action 另选 list（列出账号已有的分享）、revoke（按 id 撤销：链接立刻打不开、图片等回收清理）。需要环境变量 DINGCARD_SERVER_URL（部署的服务端地址）和账号或令牌环境变量。

Input parameters:

- `action` (string): share 分享（默认）、list 列出已有分享、revoke 撤销一个
- `document`: 完整的 v44（或 v1–43 旧版）文档 JSON，可替代 documentId
- `documentId` (string): 创建或修改文档的工具返回的 documentId（推荐：不必来回传整份文档）
- `documentPath` (string): 文档 JSON 文件的路径，可替代 documentId
- `expiresInHours` (integer): 链接有效期（小时），1–720，默认 24，最长一个月
- `id` (string): revoke：要撤销的分享 id（list 里查）
- `qr` (boolean): 是否附上二维码图片，默认 true
- `title` (string): 分享页标题，默认「叮卡分享」

### `server_projects` (~382 tokens)

管部署的叮卡服务端账号里存的作品（人在编辑器里存的，AI 接着做）：action 选操作——list 列出作品（id、标题、类型 mode、更新时间，query 按标题过滤，这是接着做已有作品的第一步）、open 按 id 载入（自由画布作品返回 documentId，之后 inspect_document / apply_actions / render_document / share_document 都能用；Markdown 作品返回 markdownDocument 信封，交给 render_markdown）、save 把一份文档存回账号（不给 projectId 存成新作品，给 open 返回的 projectId 时覆盖那一份）。需要环境变量 DINGCARD_SERVER_URL 加 DINGCARD_SERVER_TOKEN（带 drafts 权限的 API 令牌）或账号环境变量。

Input parameters:

- `action` (string, required): 要做的操作
- `document`: 完整的 v44（或 v1–43 旧版）文档 JSON，可替代 documentId
- `documentId` (string): 创建或修改文档的工具返回的 documentId（推荐：不必来回传整份文档）
- `documentPath` (string): 文档 JSON 文件的路径，可替代 documentId
- `id` (string): open：要打开的作品 id（list 里查）
- `includeDocument` (boolean): 同时返回完整文档 JSON（默认只返回 documentId 和 version）
- `projectId` (string): save：要覆盖的服务端作品 id（open 返回的 projectId）；不给就存成新作品
- `query` (string): list：按标题关键词过滤，不区分大小写；不给就列全部
- `title` (string): save：作品名；不给时按第一页的名称自动起

### `search_images` (~258 tokens)

搜索在线图库的照片，给卡片配图：返回缩略图和能直接使用的图片地址，把它们填进图片字段（create_poster_from_content 的 image、图片节点的 src、页面的图片背景都接受 http(s) 地址）。配置了 DINGCARD_SERVER_URL（和账号）时走部署服务端的图库代理（Pixabay / Unsplash / Pexels / Openverse，密钥留在服务端），选中的图用 import_stock_image 转存成账号里的稳定地址；没配置时直连 Openverse（免密钥、只搜 CC0 可商用图），结果里的 url 可以直接用、无需转存。搜索词用中英文内容词都行，如 "咖啡馆 内景"、"city night skyline"。

Input parameters:

- `page` (integer): 页码，默认 1；一页约 12 张
- `query` (string, required): 搜索词，如 "咖啡馆 内景"、"city skyline night"
- `source` (string): 图库源 id（服务端模式下可换源，如 pixabay / unsplash / pexels / openverse）；不填用默认源

### `import_stock_image` (~130 tokens)

把 search_images 选中的一张照片通过部署的服务端转存到账号的图片库里，得到稳定的原图地址（比缩略图清晰，也不会因为图库改链接而失效）。返回的 url 直接填进图片字段。需要 DINGCARD_SERVER_URL（和账号）；没配置时不用转存，直接用 search_images 结果里的 url。

Input parameters:

- `id` (string, required): search_images 结果里这一张的 id
- `source` (string, required): search_images 结果里的图库源 id（如 pixabay / openverse）

### `render_markdown` (~253 tokens)

把 Markdown 文档信封无头渲染为一套卡片 PNG（与 Markdown 工作台导出同一管线：DOM 实测分页、平台头部与主题、网页字体按字符子集嵌入、逐页 pixelRatio 3 导出）。输出 <baseName>-01.png、<baseName>-02.png… 到 outputDir；页数由分页决定。
document 为 Markdown 文档信封：{ source: Markdown 文本（--- 为手动分页）, platformId: 'rednote'|'weibo'|'twitter', themeId: 主题 id（如 'light'）, fontFamily, radius: 数字圆角, profile: { nickname, handle, location, avatarColor, avatarImage: dataURL 或 null, verified, headerFirstPageOnly }, images?: { "img:<id>": dataURL } }。

Input parameters:

- `baseName` (string): 输出文件名前缀，默认 "dingcard"
- `document` (required): Markdown 文档信封 JSON
- `outputDir` (string, required): PNG 输出目录（不存在会创建）
- `previews` (boolean): 是否附上缩略图，默认 true

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/lottshin-dingcard/dingcard-mcp#diagnostics

## Score history

- 2026-11-05: 83
- 2026-11-04: 82
- 2026-11-03: 82
- 2026-11-02: 81
- 2026-11-01: 81
- 2026-10-31: 65

## Common questions

### What is the DingCard MCP server?

DingCard is an MCP server listed in the public MCP registry as io.github.lottshin/dingcard. Make posters, social cards and slide decks from templates, check the layout, render PNG, JPG or PDF. This page covers its npm package (dingcard-mcp).

### Is the DingCard MCP server safe to use?

DingCard scores 83 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the DingCard MCP server expose?

DingCard exposes 22 tools: get_guide, list_templates, create_document_from_template, add_template_pages, create_document_from_html, and 17 more. Their descriptions and schemas cost roughly 6,521 tokens of context every time the server is loaded.

### Is the DingCard MCP server still maintained?

DingCard is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the DingCard MCP server under?

DingCard declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/dingcard-mcp
- Socket report: https://socket.dev/npm/package/dingcard-mcp
- Repository: https://github.com/lottshin/DingCard
- Website: https://dingcard.pages.dev/
- Changelog RSS feed: https://verifymcp.io/servers/lottshin-dingcard/dingcard-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/lottshin-dingcard/dingcard-mcp.json
- HTML version of this page: https://verifymcp.io/servers/lottshin-dingcard/dingcard-mcp
