Skip to main content
Glama
WenZhimo
by WenZhimo

mcp-font-split

English | API 参考 | English API | 行为说明

AI 生成代码声明

本项目由 AI 编程助理生成并持续维护。作者不对代码做任何保证,也不承担任何使用责任。代码按“原样”提供,不附带任何形式的担保。

NOTE

项目状态:已正式发布 1.0.0。

稳定 MCP 工具、默认值、文档化错误类型和稳定响应字段现在作为兼容性契约维护。诊断字段仍可能增加或变得更精确;实验字段不属于稳定契约。使用或集成时请以当前仓库代码、实时 MCP schema、get_agent_guidance 返回值、API 文档和 release notes 为准。


一个 MCP (Model Context Protocol) 服务器,将 cn-font-split 封装为可由 AI agent 调用的字体分割、批量处理、目录整理和输出审计工具。

WARNING

使用前请先阅读:工具完整行为说明(含高风险 / 非直觉行为)。README 只保留入口、常见工作流和关键风险;字段级细节以 API 参考 为准。

文档导航

你要解决的问题

建议先看

快速了解项目、安装和常见调用方式

当前 README

查 MCP 工具参数、返回字段和字段语义

API 参考;英文版见 API Reference

判断批量去重、目录整理、fallback、输出审计等高风险行为

工具完整行为说明

让 AI agent 选择下一步工具和安全参数

先调用 get_agent_guidance,再检查 inspectFieldssuccessCriteria

维护项目、理解结构并验证改动

维护者结构指南npm run check:compact;涉及行为时再跑 npm run smoke:real-corpus-suite -- <字体语料目录>

Related MCP server: Font Tools MCP

目录结构不匹配速查

如果字体来自多个网站、压缩包解包目录、vendor dump 或混合根目录,先不要直接写入批量输出。推荐顺序是:

  1. inspect_font_inputs 只读预检目录。

  2. 查看 inputDirectoryDecision.directoryOrganizationSafetysourceLayoutMismatchSummary

  3. 如果需要整理,先调用 organize_font_directory + workflowPreset: "safe-preview"

  4. 只有审查计划后才使用 reviewed-write;它仍然只是 copy-only 写入 outputDir,不会移动、删除或重写源字体。

  5. 对整理后的暂存目录重新执行 inspect_font_inputs,再进入 split_font_batch safe-preview 和最终输出审计。

非直觉点:organize_font_directory 的输出是“整理后的源目录暂存”,不是最终 web-font 拆分结果;最终结果仍必须由 split_font_batch 写出,并用 inspect_split_output 审计目录结构。 如果这个暂存目录里有 font-organization-manifest.jsoninspect_split_output 会把它识别为 organized-font-source-staging,这时它仍然是暂存目录,不是最终拆分输出。

功能

  • 将 TTF/OTF/TTC/OTC/WOFF/WOFF2 字体处理为 web-font 输出。

  • 扫描、预检和批量处理字体目录。

  • 在源目录混乱时生成整理计划,或非破坏性复制到暂存源目录。

  • 使用 manifest 支持增量跳过和输出审计。

  • 提供 get_agent_guidance,让 AI agent 用机器可读指南选择安全工作流。

  • 提供 MCP 文档 resources 和 safe-batch-workflow prompt,让客户端可以直接发现项目文档和安全批量流程。

  • 工具响应同时提供 structuredContent 和兼容旧客户端的 JSON 文本内容。

  • 提供真实语料库 smoke suite,用复杂本地字体集合做代表性可靠性验证。

工具列表

工具

用途

get_agent_guidance

返回面向 agent 的工作流指南、工具安全速查表、字段检查清单、目录/identity catalog 和推荐调用模板。

get_runtime_status

只读检查工作区、Node engine、包版本、平台和 WASM 可用性。

inspect_font_inputs

不写输出地扫描输入目录,报告字体计数、坏字体、忽略文件、目录布局和推荐第一步。

organize_font_directory

规划或 copy-only 整理源字体目录;默认 dry-run,不移动、不删除、不重写源字体。

split_font

处理单个字体,可能得到正常分片、单 WOFF2 fallback 或 copy-original 登记。

split_font_batch

批量扫描、去重、命名、跳过已有输出并处理字体。

inspect_split_output

审计生成的拆分输出目录,检查目录角色、manifest 覆盖和结构问题。

MCP 资源和 Prompt

除工具外,服务还通过 MCP resources 暴露 README、API 和行为说明文档;通过 safe-batch-workflow prompt 提供“预检 → safe-preview → reviewed-write → 输出审计”的安全批量流程提示。支持 resources / prompts 的客户端可以直接从 MCP schema 发现这些入口。

常见工作流

1. 先让 agent 自我定位

{
  "tool": "get_agent_guidance",
  "arguments": {
    "workflow": "batch",
    "detailLevel": "compact"
  }
}

当目录形态、写入风险或下一步工具不确定时,先看 recommendedWorkflowPlannextToolDecisionSummarytoolSafetyQuickReferenceresponseFieldsToCheck

2. 预检输入目录

{
  "tool": "inspect_font_inputs",
  "arguments": {
    "inputDir": "fonts",
    "maxFiles": 50000,
    "includeFiles": false
  }
}

先看 inputCountGuideinputDirectoryDecisioninputDirectoryDecision.directoryOrganizationSafetyunsupportedFileDecisionunsupportedFileSummarylayoutmaxFilesHit。压缩包和非字体文件会被报告为忽略项,不会被自动解压、复制或拆分。

3. 批量 safe-preview

{
  "tool": "split_font_batch",
  "arguments": {
    "inputDir": "fonts",
    "outputRoot": "split-output",
    "workflowPreset": "safe-preview",
    "limit": 50000,
    "maxFiles": 50000
  }
}

确认 dryRun: truebatchWarnings[]dedupeDecisionSummarybatchPolicySummarysourceSafetyDecisionrecommendedNextActions[]errors[] 后,再决定是否写入。

4. 审查后写入并审计输出

{
  "tool": "split_font_batch",
  "arguments": {
    "inputDir": "fonts",
    "outputRoot": "split-output",
    "workflowPreset": "reviewed-write",
    "limit": 50000,
    "maxFiles": 50000
  }
}

写入后运行:

{
  "tool": "inspect_split_output",
  "arguments": {
    "outDir": "split-output",
    "maxFiles": 200000,
    "includeFiles": false,
    "includeFamilies": false
  }
}

只有输出目录审计明确通过、没有扫描截断,并且结构诊断确认这是合格的拆分输出时,才把结果视为完成。字段级判定请看 API 参考行为说明

5. 源目录需要整理时

{
  "tool": "organize_font_directory",
  "arguments": {
    "inputDir": "fonts",
    "workflowPreset": "safe-preview",
    "includePlan": true,
    "maxFiles": 50000
  }
}

整理工具默认只返回计划。即使 reviewed-write,也只是 copy-only 写入 outputDir;它的输出是源目录式暂存,不是最终拆分输出。先用 inspect_font_inputs 检查暂存目录,再用 split_font_batch safe-preview。

关键风险

  • ok: true 只表示工具按所选策略完成,不代表一定发生了正常多子集分片;优先看 resultTypeoutputModeperformedSplitusedFallbackskippedwarnings

  • 所有路径都限制在 FONT_SPLIT_ROOT 内;工具响应里用 . 表示工作区根目录。

  • 写入类工具完成后,不要只看 ok;还要看 sourceSafetyDecisionsafetySummaryrecommendedNextActions[] 和必要时的 inspect_split_output 审计结果。

  • inputDirectoryDecision.directoryOrganizationSafety 是判断 organize_font_directory 是否可用、是否可能改动源文件的最短答案。

  • organize_font_directory 不移动、不删除、不重写源字体;它写出的 outputDir 只是 copy-only 暂存源目录。

  • split_font_batch 默认 batchNamingMode: "numeric-suffix":先用裸名,只有真实冲突时才加 -1-2 等稳定数字后缀。

  • batchDedupeMode: "same-path" 只是路径/stem 级去重;batchDedupeMode: "font-identity" 会跨格式比较字体身份。

  • font-identity 会按字体身份跨格式收敛等价 OTF/TTF/WOFF 输入;具体 name table 回退规则和诊断字段请看 API / 行为文档。

  • .woff / .woff2 输入会先解压成 sfnt-like 数据,再进入处理流程。

  • 显式传入的无效配置会被拒绝,而不是静默回退;需要默认行为时请省略该选项。

  • 如果 outputRoot 位于 inputDir 内,真实写入仍会落在输入目录树里;描述“源目录树无写入”前必须检查 writesSourceTreeoutputTreeInsideInputTree

常用参数速览

参数

入口级说明

workflowPreset

safe-previewreviewed-writestructure-firstsource-layoutmetadata-familypreserve-all。只是起点,显式参数仍可覆盖。

batchGroupBy

autosource-dirfont-family。决定家族目录来自源结构还是字体元数据。

batchNamingMode

plainnumeric-suffixsource-suffix。默认 numeric-suffix

batchDedupeMode

nonesame-pathfont-identity。默认 font-identity

batchErrorMode

collectfail-fastfail-after。默认 fail-after

dryRun

true 只预览,false 实际写出。

limit / maxFiles

控制批量规模和扫描上限;大目录通常需要显式调高。

includeResults

大批量只需要摘要、warning 和错误时可设为 false

批量自定义速查

目标

最小参数起点

必须注意

保留每个源字体

workflowPreset: "preserve-all"batchDedupeMode: "none"

不做 identity 去重;同名输出仍可能需要 numeric-suffix 避免互相覆盖。

按源目录分家族

workflowPreset: "source-layout"batchGroupBy: "source-dir"

适合来源目录本身有意义的字体包;目录结构混乱时先做 organize_font_directory safe-preview。

按字体 metadata 分家族

workflowPreset: "metadata-family"batchGroupBy: "font-family"

依赖字体内部 name 表;metadata 错乱时结果也会错。

快速扫大而杂的目录

workflowPreset: "structure-first"includeResults: false

适合先看规模和结构;字体解析被推迟时,identity 去重和坏字体判断会受限。

强制裸输出名

batchNamingMode: "plain"

不自动加后缀,只在确认没有同名冲突或外部已处理冲突时使用。

保留错误报告继续跑

batchErrorMode: "collect"

批量可能仍返回 ok: true;必须检查 errorCounterrors[]

完整参数、返回字段和错误形态请看 API 参考

如何解释返回结果

工具

优先检查

split_font

outputModeresultTypeperformedSplitusedFallbackskipReasonwarnings

inspect_font_inputs

inputCountGuideinputDirectoryDecisioninputDirectoryDecision.directoryOrganizationSafetyunsupportedFileSummarylayout

split_font_batch

batchDecisionbatchWarningsbatchPolicySummarydedupeDecisionSummaryrecommendedNextActionssourceSafetyDecisionsafetySummary

organize_font_directory

layoutDecisionsourceSafetyDecisionstagingDirectoryDecisionrecommendedNextActions

inspect_split_output

输出角色判断、结构审计状态、阻塞原因、manifest 覆盖和输出结构摘要

这些字段是入口级阅读顺序,不替代 API 文档里的字段定义。

输出形态速查

看到的字段

含义

下一步

outputMode: "subset"performedSplit: true

正常生成 web-font 分片。

真实写入后继续用 inspect_split_output 审计结构。

outputMode: "single-woff2"usedFallback: true

没有正常多分片,退化为单个 WOFF2。

向用户说明 fallback,并检查 warnings[]

outputMode: "copy-original"skipped: trueusedFallback: false

没有生成 web-font 分片,只复制/登记原字体。

不要当成正常拆分结果;检查 manifest、resultTypeskipReason

skipped: true 且有 skipReason

单字体处理主动绕过正常多分片,例如小字形 fallback 或 copy-original。

结合 outputModeusedFallback 解释;不要把它误当成批量已有输出跳过。

skippedExisting > 0planned[].wouldProcess: false

批量 skip 逻辑接受了已有输出,或 dry-run 计划跳过该条目。

检查 skipModeskippedByManifestplanned[].skipReason 并审计已有输出。

ok: trueerrorCount > 0

批量按错误策略完成,但仍有单字体失败。

检查 batchErrorModeerrorCounterrors[]

安装

git clone https://github.com/WenZhimo/mcp-font-split.git
cd mcp-font-split
npm install

依赖的 cn-font-split WASM 资源会通过 postinstall 脚本准备;也可以手动运行:

npm run install:wasm

使用方式

作为 MCP Server

claude mcp add font-split -- node "/path/to/mcp-font-split/src/server.js"

独立运行

npm start
npm run batch:run -- . split-output 50000 50000 --dry-run

batch:run 是给 agent 和维护者使用的安全批量入口。默认真实运行走 reviewed-write--dry-runFONT_SPLIT_DRY_RUN=true 会走 safe-preview。需要稳定 JSON 时用 --jsonFONT_SPLIT_JSON=true。无效 preset、环境变量、位置参数或配置值会被拒绝;完整 CLI 参数和错误字段以 API 参考 为准。

验证

npm run check
npm run check:compact
npm run --silent check:compact -- --json
npm run smoke:api-docs
npm run smoke:behavior-docs
npm run smoke:real-corpus-suite -- <字体语料目录>

npm run check 是推荐给 AI agent / CI 的入口。check:compact 用于快速看 syntax + smoke 是否都通过;smoke:real-corpus-suite 用真实语料做代表性可靠性门禁,不是逐字体或逐目录人工验收。真实语料 suite 会区分全库扫描数量和代表性抽样数量,并明确压缩包只作为忽略文件统计,不会被自动解压验证。

环境变量

变量名

说明

FONT_SPLIT_ROOT

字体工作区根目录。未设置时默认使用 MCP Server 进程启动时的当前工作目录。

FONT_SPLIT_WASM_PATH

可选的自定义 libffi-wasm32-wasip1.wasm 运行时路径。

致谢与来源

本项目封装并调用 cn-font-split,核心字体分割能力来自该项目。

许可证

本项目采用 Apache License 2.0。使用依赖项时也请遵守其各自许可证。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides comprehensive color conversion, manipulation, analysis, and WCAG accessibility tools supporting multiple formats (hex, rgb, hsl, oklch, oklab) for design systems and web development.
    28 npm
    2
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to diagnose, modify, and validate OTF/TTF fonts interactively through a set of read-only, write, and validation tools.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with FontLab for font design and manipulation, including querying font metadata, creating/modifying glyphs, applying transformations, and exporting fonts.
    8
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Exposes FontForge as MCP tools for designing, repairing, and building fonts, with PNG previews to visually verify glyphs and compiled fonts.
    1
    MIT