Etincel について
Étincel は、ノンフィクション向けのローカル文章監査・スタイルツールです。CLI、GitHub Action、MCP サーバーとして利用でき、文章を書き換えずに機械的に見えるパターンを指摘し、執筆サンプルから文体を学習できます。
主な機能
- 01文章パターンの位置と重大度を表示
- 02文体区分に応じたルールで監査
- 03個人の文体を学習して再利用
- 04CLI と GitHub Action に対応
- 05リポジトリ単位の共有設定
活用シーン
- 01CI でドキュメントや README を検査
- 02マーケティング文の機械的な特徴を確認
- 03執筆サンプルに基づいて文章を作成
- 04チームリポジトリで執筆規則を共有
MCP 対応
ローカル MCP サーバーは文章監査とスタイル関連のツールをクライアントに公開します。ホスト型サービスでは同じツールを Streamable HTTP 経由で利用できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://etincel.ai/api/mcpclaude mcp add --transport http etincel-a6346d https://etincel.ai/api/mcp{"mcpServers":{"etincel-a6346d":{"type":"http","url":"https://etincel.ai/api/mcp"}}}Cursor で開く{"servers":{"etincel-a6346d":{"type":"http","url":"https://etincel.ai/api/mcp"}}}VS Code で開く{"mcpServers":{"etincel-a6346d":{"type":"http","url":"https://etincel.ai/api/mcp"}}}{"mcpServers":{"etincel-a6346d":{"serverUrl":"https://etincel.ai/api/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
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には2つの機能があります。文章を機械が書いたように感じさせるパターンを見つける決定論的な監査です。CLI、GitHub Action、MCP ツールとして利用できます。もう1つは文体レイヤーです。あなた自身の文章から測定した文体で下書きを作成できるように、Claude、Cursor、または任意の MCP クライアントをトレーニングします。これにより、下書きを読む前の段階で問題を減らせます。
AIが下書きした文章には、均一な段落、断定を避ける言い回し、コンマで十分な箇所に使われるダッシュ、整いすぎた締めくくりなど、認識しやすい特徴があります。Étincelは、そうした特徴を避けるルールを組み込み、さらに重要なこととして、あなたの文体をひそかに上書きするのではなく、何を見つけたか、その理由は何かを示します。監査の過程でモデルを呼び出すことは一切ありません。変更内容を決めるのはあなたです。著者はあなたです。
効果はありますか?
効果を主張するのではなく、測定しています。ラベル付きコーパスを対象に、固定のブートストラップシードを使ってassayで測定したレジスターごとのプールAUCです。そのため、これらの数値を下げる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として掲載されています。VS Codeの@mcpギャラリーなど、レジストリからMCPサーバーを自動検出する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 で利用できます。stdio の代わりにアカウントごとの認証を使用し、Streamable HTTP(https://etincel.ai/api/mcp)経由で同じツールを提供します。任意の MCP クライアントから直接接続できます。
{
"mcpServers": {
"etincel-nonfiction": {
"url": "https://etincel.ai/api/mcp"
}
}
}
ホスト型サーバーはこのリポジトリには含まれていません。このリポジトリは、ホスト型バージョンの基盤となるローカル/stdio エンジン、CLI、スキルです。
使用方法
インストールしたら、Claude Code または Claude Desktop 内で「遅延についてチームにメールを書く」「X についてブログ記事を書く」「このメモを整える」など、普段依頼するようなことを頼むだけです。このスキルは、ある程度の長さのノンフィクション文章で自動的に有効になります。独自の文体を学習させるには、次のようにします。
私が書いた次の3通のメールから、「me」という文体を学習してください:[サンプルを貼り付け]
その後、リクエストごとに名前を指定する(「私の文体で書いて」)か、デフォルトとして設定します。
デフォルトの文体を「me」に設定してください
文体プリセット
すぐに使えるプリセットが12種類用意されています。感情的なトーンが6種類(率直で温かみのある文体、エグゼクティブ向け概要、内省的なエッセイスト、創業者メモ、平易な分析、辛口で率直な文体)、用途別のプリセットが6種類(PR レビュー、コードコメント、Slack メッセージ、LinkedIn 投稿、ウェブサイトのコピー、ブログ記事)です。それぞれに、フォーマルさ/温かみ/率直さの調整値に加え、文のリズムや文体の説明が含まれます。これらは空欄を埋めるテンプレートではなく、下書き作成時のコンテキストとしてモデルに渡されます。サーバーはこれらを src/data/presets.json から読み込みます。fork_style を使って任意のプリセットを学習済みの文体に複製し、自分用にカスタマイズできます。
コマンドラインのリント
audit_text は内部的には純粋関数なので、チャットクライアント外の文章(README、ドキュメント、CI での PR の説明など)をリントできる CLI としても提供されています。
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 を実行してください。
同じ CLI をラップする GitHub Action も用意されています(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に統合されます。アカウントレベルのグローバルな指示よりも優先されます。これはstyleIdを指定しないset_style_instructionsに相当するチーム全体向けの設定ですが、個人のアカウントではなくリポジトリにコミットされます。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 を同じディレクトリに設定することが、そのまま同期になります。これは、1 人で ~/.etincel/ を使う場合と同じです。
この中にあるもの
- MCP サーバー(
src/server.ts):20 個のツールを提供します。list_styles:事前定義されたトーンのプリセット、トレーニングしたすべての声、そして(リポジトリ内の.etincelrcで定義されている場合は)チームで共有するスタイルを一覧表示しますget_style_guide:指定したスタイルの文章作成ガイドを取得しますtrain_style:自分の文章サンプルから声の特徴を学習します(文のリズム、短縮形の割合、em ダッシュの使い方、段落のばらつき、繰り返し使われる表現を推測ではなく計測します)create_style_from_dials:サンプルを使わず、形式ばり具合・温かみ・率直さ、および機械的な調整項目を明示してスタイルを作成しますupdate_style:トレーニング済みの声の名前を変更するか、調整項目をその場で変更しますfork_style:プリセットの調整項目とガイドをコピーして、新しいトレーニング済みの声を作成します。新しい声は再トレーニングや手動調整が可能です。また、他のインストーラーがホスト型ギャラリーで公開したスタイルもフォークできます(handle/slugで指定します。例:jpleblanc/blunt-memo。公開ページetincel.ai/v/handle/slugに表示されるものと同じアドレスです)。公開スタイルをフォークすると、その機械的な調整項目に加え、元のインストーラーがそのスタイル専用に設定した辞書や指示も引き継がれます(アカウント全体に適用される非公開の設定は引き継がれません)。スタイルの取得にはetincel.aiへのネットワーク呼び出しが 1 回発生しますが、プリセットのフォークではこのインストール環境から外部にアクセスしません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(ユーザーから聞き取った詳細で、生成されたものではありません)も指定できます。これらが実際にどれだけ文章に盛り込まれたかを確認し、使用された情報が 2 つ未満の場合、および資格を証明するためだけの文以外に少なくとも 1 つ含まれていない場合に、elicited-material-unusedを通知しますsecond_read:1 回のモデル呼び出しで文章を読み、注意深い人間の編集者が気づく点を報告します。採点や段階評価は行わず、書き直しもしません。ホスト型のみです。このインストール環境では、アカウント、固定されたモデル、課金機能が必要ですが、いずれも備えていないため、わかりやすい説明を添えて常に失敗します。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:スコープに対する自由記述の文章作成ルール(必須要素、禁止トピック、形式上の制約)を保存、削除、または確認します。辞書がaudit_textに統合されるのと同じ方法で、get_style_guideに統合されます
- Claude Code / Claude Desktop のスキル(
skills/etincel-nonfiction/):ある程度の長さのノンフィクション文章を作成または修正する際に、これらのツールを使用します。 学習済みの音声、辞書、デフォルトのスタイルはローカルの~/.etincel/に保存されます。データが外部に送信されることはありません。audit_textは、文字列分析とAI文章特有の兆候をまとめた厳選コーパスを使う、単純で決定論的なコードであり、モデル呼び出しではありません。唯一の例外は、fork_styleで公開スタイルをフォークする場合です。このとき、そのスタイルのガイドをetincel.aiの公開ギャラリーから取得します(送信はしません)。プリセットをフォークする場合や、このリストのその他の操作では、ネットワークに一切アクセスしません。
カスタム辞書
組み込みのAI特有の兆候コーパスに加えて、独自の禁止語リストと「常に許可する」語のリストを管理できます。「[word]を禁止語リストに追加して」や「[word]をカスタム語リストに追加して。うちで使う言葉だから」のように、Claude(または任意のMCPクライアント)に伝えるだけです。各リストはスコープに属します。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 バッジは、ホストされているリモートサーバー(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 の em ダッシュの多用を修正しました。そのため、有効性は主張するのではなく測定しています。ある兆候が兆候ではなくなれば AUC が変化し、回帰チェックで検出されます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。