mcpField
E
Etincel

Etincel

已认证精选远程服务
etincel.ai生产力911 周前更新

关于 Etincel

Étincel 是用于非虚构写作审查与风格辅助的本地工具,提供 CLI、GitHub Action 和 MCP 服务。它通过确定性规则标注机器写作特征而不改写文本,并可根据写作样本训练风格。

主要功能

  1. 01定位写作模式并标注严重程度
  2. 02按文体配置审查规则
  3. 03训练并复用个人写作风格
  4. 04提供 CLI 与 GitHub Action
  5. 05支持仓库级团队配置

适用场景

  1. 01在 CI 中检查文档和 README
  2. 02审查营销文案中的机器写作特征
  3. 03依据作者样本起草非虚构文本
  4. 04在团队仓库共享写作规范

MCP 相关

本地 MCP 服务向客户端提供文本审查和风格相关工具;还可连接托管服务,通过 Streamable HTTP 使用相同工具。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://etincel.ai/api/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
npmetincel0.10.1

工具

20

此工具无需参数。

详细介绍

Étincel:非虚构写作连接器

      ___           ___                       ___           ___           ___           ___
     /\  \         /\  \          ___        /\__\         /\  \         /\  \         /\__\
    /::\  \        \:\  \        /\  \      /::|  |       /::\  \       /::\  \       /:/  /
   /:/\:\  \        \:\  \       \:\  \    /:|:|  |      /:/\:\  \     /:/\:\  \     /:/  /
  /::\~\:\  \       /::\  \      /::\__\  /:/|:|  |__   /:/  \:\  \   /::\~\:\  \   /:/  /
 /:/\:\ \:\__\     /:/\:\__\  __/:/\/__/ /:/ |:| /\__\ /:/__/ \:\__\ /:/\:\ \:\__\ /:/__/
 \:\~\:\ \/__/    /:/  \/__/ /\/:/  /    \/__|:|/:/  / \:\  \  \/__/ \:\~\:\ \/__/ \:\  \
  \:\ \:\__\     /:/  /      \::/__/         |:/:/  /   \:\  \        \:\ \:\__\    \:\  \
   \:\ \/__/     \/__/        \:\__\         |::/  /     \:\  \        \:\ \/__/     \:\  \
    \:\__\                     \/__/         /:/  /       \:\__\        \:\__\        \:\__\
     \/__/                                   \/__/         \/__/         \/__/         \/__/

找出你文章中的 AI 痕迹。以确定性方式在本地和 CI 中运行。

npx etincel lint README.md

无需安装、无需账户、无需调用模型、无需联网。

$ npx etincel lint drafts/announcement.md --register blog
✗ drafts/announcement.md  RED 100/100  (8 findings, 169 words, register: blog)
  Heavy AI styling. Multiple strong tells stacking up, worth a structural
  rewrite, not a word-swap pass.

  Whole-piece rhythm
    medium  uniform-paragraph-length
            6 paragraphs, most running about the same length with little
            variation between them. Vary paragraph length more.
    medium  low-burstiness
            13 sentences averaging 13 words, with little variation in length
            from one sentence to the next. Mix short sentences with long;
            allow fragments.
    medium  mechanical-register-drift
            Fragment rate and structural variety (sentence openers,
            punctuation mix) sit off where blog prose typically lands. Allow
            more sentence fragments and vary openers/punctuation more.

  Vocabulary and phrasing
    high    comprehensive  L3:C30   → thorough, complete
    high    cutting-edge   L3:C109  → newest, latest
    high    leverage       L3:C99   → use
    high    seamless       L3:C150  → smooth, easy
    high    streamline     L3:C70   → simplify, speed up

  strengths  specificity 11.4/1k · concrete:abstract 0.40 · burstiness 0.32

1 file audited, 1 at or above orange.

Étincel 有两项功能:一个确定性审查工具,可找出让文章读起来像机器所写的模式,并以 CLI、GitHub Action 和 MCP 工具的形式提供;以及一个风格层,可根据你自己的写作风格训练 Claude、Cursor 或任何 MCP 客户端,让它们按这种风格起草,从而在你阅读草稿之前就减少问题。

AI 起草的文章有一种容易辨认的特点:段落结构千篇一律、语气谨慎含糊、能用逗号的地方却用了破折号,结尾也收得过于圆满。Étincel 将针对这些特点的规则编码其中;同样重要的是,它会展示发现了什么以及原因,而不是悄悄改写你的风格。在审查流程中完全不会调用模型,你可以决定要修改什么。你始终是作者。

它有效吗?

我们用测量结果说话,而不是空口断言。按文体计算的汇总 AUC,由 assay 根据带标签语料库测得,并使用固定的 bootstrap 种子;因此,任何导致这些数值下降的 PR 都会在 CI 中失败:

文体AUC
备忘录0.909
随笔0.900
博客0.820
通用0.748
文档0.735
电子邮件0.540

电子邮件的结果几乎和抛硬币一样。我们有意不对其进行校准,但仍会追踪,以免意外回归不被发现。general 同样未校准。已校准的文体有 docs、blog、memo 和 essay;如果你在意这个数值,请使用这些文体。有关方法和来源,请参阅 efficacy-baselines.json 和 src/data/SOURCES.md。

对比

与 Vale + vale-ai-tells 对比 Vale 是一款出色的、能识别标记语言的检查工具,而 vale-ai-tells 是一套严谨的 78 条规则包。它们会将词元与模式进行匹配。Étincel 衡量文章的整体特征:句子节奏的变化、段落长度的一致性,以及与作者自己先前草稿的重复情况。这类统计分析正是 vale-ai-tells 自己的 README 所说的、需要超越词元匹配能力的分析。Étincel 还会在起草前向模型提供经过训练的写作风格,这是检查工具做不到的。两者同时使用也很合理;它们的重叠比你想象的少。

与技能文件(stop-slop、avoid-ai-writing、no-slop)对比 这些文件是给模型的指示,而且确实有帮助。但提示词无法验证指示是否生效,无法生成退出代码,也无法阻止合并。可以使用其中一种,并且在 CI 中运行本工具。

与人性化工具(Undetectable.ai、QuillBot、StealthWriter)对比 这些工具会改写你的文本以躲避检测器。Turnitin 现在有专门的 AI 改写检测功能,并于 2025 年扩展了该功能,专门针对人性化工具的输出。Étincel 做的恰恰相反:它绝不会修改你的文本,也不适合用来欺骗任何人。

与检测器(GPTZero、Pangram、Originality.ai、Copyleaks)对比 这些工具会在云端分析整篇文档,以概率形式回答“是否有机器参与?”,并给出作者身份判定。Étincel 则在本地回答“哪些具体模式让文章读起来像机器所写?”,并标出位置和严重程度,且绝不判定内容由谁撰写。

安装

它也列于官方 MCP 注册表,名称为 ai.etincel/etincel-nonfiction。因此,能从该注册表自动发现服务的 MCP 客户端(例如 VS Code 的 @mcp 扩展库)无需使用以下配置即可找到它。

Claude Code
/plugin marketplace add AIStoryHub/etincel
/plugin install etincel-nonfiction

也可以从本地克隆的项目添加:/plugin marketplace add /path/to/etincel。

Claude Desktop / 其他 MCP 宿主
{
  "mcpServers": {
    "etincel-nonfiction": {
      "command": "npx",
      "args": ["etincel", "serve"]
    }
  }
}

如果从本地克隆的项目安装,则运行 npm install && npm run build,然后将 args 指向 ["/path/to/etincel/dist/server.js"],并设置 "command": "node"。

远程(托管、多租户)

也提供托管版本,可通过 etincel.ai 访问。它通过 Streamable HTTP(https://etincel.ai/api/mcp)提供相同的工具,采用按账户进行的身份验证,而非 stdio。将任意 MCP 客户端直接指向它:

{
  "mcpServers": {
    "etincel-nonfiction": {
      "url": "https://etincel.ai/api/mcp"
    }
  }
}

托管服务不属于此仓库;此仓库包含本地/stdio 引擎、CLI 和技能,托管版本正是基于它们构建的。

使用方法

安装后,只需像平常一样提出需求,例如“给团队写封邮件,说明延误情况”“写一篇关于 X 的博客文章”或“润色这份备忘录”,在 Claude Code 或 Claude Desktop 中使用即可。对于有一定长度的非虚构文章,该技能会自动启用。训练你自己的风格:

根据我写的这三封邮件,训练一种叫“me”的风格:[粘贴示例]

然后可以在每次请求中指定它(“用我的风格写这段内容”),也可以将其设为默认风格:

将“me”设为我的默认风格

风格预设

开箱即用地提供 12 种预设:6 种情感基调(直接而温暖、行政简报、反思型随笔作者、创始人备忘录、直白的分析师、诙谐坦率),以及 6 种用途预设(公关审阅、代码注释、Slack 消息、LinkedIn 帖文、网站文案、博客文章)。每种预设都包含正式度、亲和度和直接度的调节项,以及句式节奏和声音风格说明;这些内容会作为起草上下文提供给模型,而不是用于填空的模板。服务会从 src/data/presets.json 读取这些预设。使用 fork_style 将任意预设分叉为经过训练的风格,打造属于自己的风格。

命令行 lint

audit_text 底层是纯函数,因此也提供 CLI,可在聊天客户端之外对文章进行 lint(README、文档、CI 中的 PR 描述):

npx etincel lint 'docs/**/*.md'
npx etincel lint README.md --register docs --threshold yellow

如果任一匹配文件的级别达到或超过 --threshold(默认为 orange),则以非零状态码退出。.md/.mdx 文件默认自动采用 docs 类型(可避免 Markdown 结构造成的误报,因为真正的标题并不代表文本由聊天机器人撰写);传入 --register 可覆盖此设置。添加 --json 可生成机器可读报告。运行 npx etincel lint --help 查看完整选项列表。

GitHub Action 封装了相同的 CLI(请参阅 action.yml,以及此仓库中可运行的示例 .github/workflows/lint.yml):

- uses: AIStoryHub/etincel@main
  with:
    patterns: "docs/**/*.md README.md"
    threshold: orange
仓库本地配置:词典、说明和共享团队风格

团队规则不必只保存在每个人本地的 ~/.etincel/ 中。在仓库根目录放置 .etincelrc(或 .etincelrc.json / etincel.config.json),CLI 和本地(stdio)服务便会自动读取。配置可在代码审查中查看并纳入版本控制,不会像保存在个人账户中那样隐而不见,也不会在有人离开时随之消失:

{
  "bannedWords": ["Acme Cloud Platform"],
  "allowedWords": ["leverage"],
  "register": "docs",
  "threshold": "orange",
  "instructions": "Always include a one-line CTA at the end.",
  "style": {
    "name": "House Voice",
    "dials": {
      "formality": 6,
      "warmth": 4,
      "directness": 7,
      "sentenceLength": 40,
      "sentenceRhythmVariance": 50,
      "paragraphVariance": 30,
      "contractionUse": 20,
      "emDashUse": 0,
      "fragmentTolerance": 10,
      "questionUse": 5,
      "entropy": 60
    }
  }
}
  • bannedWords / allowedWords 会与账户/风格词典中的内容合并;register/threshold 用作整个仓库的默认值,但仍可通过显式的 --register/--threshold 标志覆盖。
  • instructions 是自由文本,会合并到所有风格的 get_style_guide 的 instructions 中,并置于你自己的账户级全局说明之前:这是团队级的 set_style_instructions 等效配置,无需指定 styleId,但会提交到仓库,而非存放在某个人的账户中。
  • style 根据各项调节参数定义共享的“团队风格”,可在任何地方通过 styleId: "team" 使用(用于 get_style_guide;使用 fork_style 将其分叉为实际训练的风格后,也可在其他任何地方使用),让团队从第一天起就拥有一套经过调校的起始风格,而不必让每个人从零开始手动训练或调校自己的风格。如果当前仓库中的 .etincelrc 定义了该风格,list_styles 会自动将其包含在内。

托管服务不会使用上述任何配置(它没有可供查找的本地仓库)。

在不提交配置的情况下与团队共享

.etincelrc 是经过版本控制、可供代码审查的上层配置;其下层是 ETINCEL_HOME,这是一个环境变量,供本地(stdio)服务和 CLI 使用,指向一个替代默认 ~/.etincel/ 的目录。将每位队友的 ETINCEL_HOME 都指向同一个共享、同步或挂载的目录(一个位于仓库外、每个人的机器都可读取的路径,例如由你们常用的文件共享设置同步的目录),这样经过训练的语音、默认风格,以及账户级别的指令和词典也能共享,而不只是 .etincelrc 中已提交的那部分:

{
  "mcpServers": {
    "etincel-nonfiction": {
      "command": "node",
      "args": ["/path/to/etincel/dist/server.js"],
      "env": { "ETINCEL_HOME": "/path/to/shared/etincel-home" }
    }
  }
}

无需导出或导入任何其他内容:将 ETINCEL_HOME 指向同一个目录就是同步,就像单个人使用 ~/.etincel/ 时一样。

此处内容

  • 一个 MCP 服务(src/server.ts),提供二十种工具:
    • list_styles:预制语气预设、你训练过的所有语气,以及(如果仓库本地的 .etincelrc 中定义了)团队共享风格
    • get_style_guide:某种风格的起草说明
    • train_style:从你自己的写作样本中学习语气(句子节奏、缩略形式使用率、破折号习惯、段落变化、反复出现的措辞:通过测量得出,而非猜测)
    • create_style_from_dials:通过明确设置正式程度、亲和度、直接程度及机械性参数来创建风格,而非使用样本
    • update_style:重命名已训练的语气,或就地调整其参数
    • fork_style:将预设的参数和指南复制为新的已训练语气,你可以重新训练或手动微调;也可以在其他安装者将其风格发布到托管图库后进行复制(格式为 handle/slug,例如 jpleblanc/blunt-memo,与其公开页面 etincel.ai/v/handle/slug 上显示的地址相同);复制公开风格时,也会带上其机械性参数,以及源安装者专门为该风格设置的任何词典/说明(绝不会带上他们私有的、适用于整个账户的设置),并会向 etincel.ai 发起一次网络请求来获取这些内容;复制预设则不会离开此安装环境
    • delete_style:永久删除已训练的语气
    • set_default_style:记住要使用的风格,无需每次重复说明
    • check_voice_match:将草稿测得的节奏与已训练语气的基线进行比较。这是节奏/写作机制检查,不是作者身份或 AI 检测;输入较短时置信度较低
    • check_self_repetition:将草稿与某种语气近期自己的训练样本进行比较,检查写作习惯,而非 AI 特征:例如相同的开篇,或某个短语在过去几篇文章中反复出现(“你最近 6 篇文章中有 4 篇以这种方式开篇”)。目前仅适用于本地安装
    • audit_text:基于确定性规则扫描 AI 特征,返回等级、带严重程度的具体发现,以及优势信号(具体性、具体与抽象内容的比例、句子节奏变化),避免修改让文章变得平淡。可选参数 register(email / blog / memo / essay / social / docs / general / personal,默认值为 general),用于根据文本类型调整严格程度:docs 会抑制 Markdown 结构导致的误报(标题、加粗术语),并参照长篇文本而非节奏更鲜明的短文案重新校准节奏/词汇检测。personal 已搭好框架(可接受,但目前尚未额外抑制任何内容),但尚未完成校准:在经过测量之前,不会有专属的术语抑制规则、节奏权重或标注语料。还可选用 sourceFacts(从用户处引出的细节,绝不由系统生成):检查实际写入草稿的细节数量;若实际使用的细节少于两个,或至少没有一个出现在并非用于证明资格的句子中,则标记 elicited-material-unused
    • second_read:通过一次模型调用阅读草稿,并报告细心的人类编辑会注意到的问题;不评分、不分级,绝不改写。仅托管版本可用:此安装始终会失败并给出明确说明,因为模型调用需要账户、固定模型和计费界面,而此安装不具备这些条件。audit_text 仍可完整使用,无需账户
    • add_banned_word / remove_banned_word:维护你自己的禁用词列表;audit_text 会将其与内置语料一并检查
    • add_custom_word / remove_custom_word:维护“绝不标记”列表,适用于组织自身的缩写或内部术语等企业词典场景
    • list_dictionary:查看某个范围内的禁用词/自定义词;对于某种风格,还可查看与全局列表合并后实际生效的内容
    • set_style_instructions / clear_style_instructions / get_style_instructions:为某个范围保存、移除或读取自由文本起草规则(必备要素、禁写主题、格式限制);这些规则会合并到 get_style_guide 中,方式与词典合并到 audit_text 中相同
  • 一个 Claude Code / Claude Desktop 技能(skills/etincel-nonfiction/),在你起草或修改任何有一定篇幅的非虚构文本时使用这些工具。 训练好的语音、词典和默认风格都保存在本地的 ~/.etincel/:不会向任何地方发送数据。audit_text 是纯确定性代码(字符串分析 + 精选的 AI 写作特征语料),不会调用模型。唯一的例外是通过 fork_style 派生公开风格:它会从 etincel.ai 的公开图库获取(绝不发送)该风格的指南;派生预设,或此列表中的任何其他内容,都完全不会访问网络。
自定义词典

除了内置的 AI 特征语料,你还可以维护自己的禁用词和“始终允许”词列表:只需告诉 Claude(或任何 MCP 客户端),例如“将 [word] 添加到我的禁用词列表”或“将 [word] 添加到我的自定义词列表,这是我们自己的词。”每个列表都属于一个范围:global(适用于所有地方,也是未指定风格时的默认范围)或特定的风格 id。针对该风格进行审查时,该风格的列表会合并到 global 列表之上。list_dictionary 会显示某个范围中保存的内容,以及某种风格合并后的有效列表。编辑全局列表就能让某个词在所有风格中保持同步:每次运行 audit_text 或 list_dictionary 时,系统都会实时自动合并。

开发

npm install
npm test        # run the engine/tools test suite (node:test via tsx)
npm run dev     # run the MCP server over stdio via tsx, for local testing
npm run build   # compile to dist/

mcpscore audit MCP Registry CircleCI CI Étincel lint License: MIT Node Last commit

mcpscore 徽章审查的是托管的远程服务(etincel.ai/api/mcp),而不是本仓库中的本地/stdio 引擎;两者提供相同的工具,但作为独立部署运行。

状态与限制

仍处于早期阶段,确实如此。

  • src/data/ 中的审查语料是精选子集,并不全面。关于来源及尚未移植的内容,请参阅 src/data/SOURCES.md。完整语料位于 aistoryhub.co/corpus。
  • email(AUC 0.540)和 general(0.748)尚未校准。social 完全没有带标签的语料,因此未纳入追踪。
  • check_voice_match 检查的是节奏和写作机制,并非作者身份检测;对于较短的输入,其置信度较低。
  • check_self_repetition 目前仅支持本地安装。
  • AI 特征不断变化:OpenAI 于 2025 年 11 月修补了 ChatGPT 的长破折号使用习惯。因此,我们衡量效果,而不作保证:当某个特征不再具有辨识力时,AUC 会发生变化,回归检查也会捕捉到这一点。

评论

支持 Markdown

第一次接触 MCP?

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

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