Archform について
Archform は、Mermaid、PlantUML、Graphviz、D2 などの図表コードをレンダリング、検証する MCP サーバーです。ローカルの stdio 接続またはリモートの Streamable HTTP エンドポイントで AI アシスタントに提供でき、セルフホストの Kroki も利用できます。
主な機能
- 01図表ソースを SVG または PNG に変換
- 02ソースを検証して解析エラーを報告
- 03対応形式とサンプルの一覧表示
- 04Mermaid、PlantUML、C4、Graphviz などに対応
活用シーン
- 01ソースコードやスキーマから図表を作成
- 02アーキテクチャ図やシーケンス図を作成
- 03図表の構文を検査してエラーを特定
MCP 対応
Archform は MCP クライアントに `list_formats`、`render_diagram`、`validate_diagram` ツールを提供します。レンダリングには Kroki を使い、`KROKI_URL` でセルフホスト環境を指定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 1 週間前に更新
このツールにパラメーターはありません。
詳細
@archform/mcp
AI アシスタントがコードで記述する図(Mermaid、PlantUML、C4-PlantUML、Graphviz、D2、Structurizr、BPMN、Excalidraw)をレンダリングして検証できるMCP サーバーです。
stdio 経由で Claude Desktop、Claude Code、Cursor、VS Code から利用でき、ChatGPT の開発者モードではリモートの Streamable HTTP エンドポイントとして利用できます。
例
アシスタントは、次のような図のソースをD2で記述します。
direction: right
user: User {shape: person}
ai: AI assistant
mcp: Archform MCP
kroki: Kroki {shape: cylinder}
user -> ai: "draw our architecture"
ai -> mcp: render_diagram
mcp -> kroki: diagram source
kroki -> mcp: SVG / PNG
mcp -> ai: image + share link
render_diagram はこれを画像と共有リンクに変換します。以下の画像がそのリンク先です。
お試しください: Archform に接続したら、アシスタントに次のように頼んでください。
URL 短縮サービスの C4 コンテキスト図を描いてください。
または 「schema.prisma を ER 図に変換して」、「ログインフローのシーケンス図を描いて」 と頼んでみてください。
プライバシー: レンダリングはKrokiで行われます。デフォルトでは、図のソースが公開されている kroki.io サービスに送信されます。公開ウェブサイトには貼り付けられない内容を図に含める場合は、Kroki をセルフホストして
KROKI_URLを設定してください。
ツール
すべてのツールは読み取り専用です(readOnlyHint: true、openWorldHint: true)。
| ツール | 入力 | 結果 |
|---|---|---|
list_formats | なし | エイリアス、出力形式、ドキュメントへのリンク、最小限の有効な例を含む、サポートされているすべての形式 |
render_diagram | format、source(≤ 100 KB)、output(デフォルトは svg、または png) | 埋め込み image/svg+xml リソースとしての SVG、または画像コンテンツとしての PNG、および共有可能な kroki.io リンク。ソースが無効な場合は、パーサーのメッセージと行番号とともに isError: true を返します |
validate_diagram | format、source | { valid, errors: [{ line?, message }] }。図が無効でも、ツールエラーではなく通常の結果として返されます |
形式
| 形式 | エイリアス | 出力形式 |
|---|---|---|
mermaid | svg, png | |
plantuml | svg, png | |
c4plantuml | svg, png | |
graphviz | dot | svg, png |
d2 | svg | |
structurizr | svg, png | |
bpmn | svg | |
excalidraw | svg |
ローカルで実行する(stdio)
Node.js 22 以降が必要です。
Claude Desktop:claude_desktop_config.json に追加します。
{
"mcpServers": {
"archform": {
"command": "npx",
"args": ["-y", "@archform/mcp"]
}
}
}
Claude Code:
claude mcp add archform -- npx -y @archform/mcp
Cursor:~/.cursor/mcp.json(またはプロジェクト内の .cursor/mcp.json)に追加します。
{
"mcpServers": {
"archform": { "command": "npx", "args": ["-y", "@archform/mcp"] }
}
}
VS Code:.vscode/mcp.json に追加します。
{
"servers": {
"archform": { "type": "stdio", "command": "npx", "args": ["-y", "@archform/mcp"] }
}
}
独自の Kroki を使用するには、サーバーエントリに "env": { "KROKI_URL": "https://kroki.internal.example.com" } を追加します。
リモートで実行する(Streamable HTTP)
npx -y @archform/mcp --http --port 3000
POST /mcp:MCP トラフィック(ステートレス)GET /health:ヘルスチェック
デフォルトでは、サーバーは 127.0.0.1 にバインドし、Host または Origin が localhost でないリクエストを拒否します(DNS リバインディング保護)。ChatGPT の開発者モードなどで公開するには、すべてのインターフェースにバインドし、公開ホスト名を指定します。
HOST=0.0.0.0 ALLOWED_HOSTS=mcp.example.com TRUST_PROXY=1 RATE_LIMIT_PER_CLIENT=0 PORT=8080 npx -y @archform/mcp --http
その後、ChatGPT のコネクターとして https://mcp.example.com/mcp を認証なしで追加します(設定 → コネクター、開発者モード)。HTTPS 経由で提供してください。
制限
HTTP エンドポイントではリクエストボディが 512 KB に制限され、HTTP リクエストではなくツール呼び出しがカウントされます。セッションの initialize と tools/list リクエストはカウントされません。
- 全体:
RATE_LIMIT(デフォルトは 1 分あたり 120)は、すべてのクライアントからのツール呼び出しを合算して上限を設定します。Kroki バックエンドが処理できる量に合わせて設定してください。デフォルト値は公開されている kroki.io に配慮した値です。セルフホストの Kroki では引き上げてください。 - クライアントごと:
RATE_LIMIT_PER_CLIENT(デフォルトは 1 分あたり 60)は、1 つのクライアントが予算全体を使い切るのを防ぎます。ChatGPT は OpenAI のサーバーからお使いのサーバーを呼び出すため、すべての ChatGPT ユーザーが少数の IP アドレスを共有し、この制限はユーザー全員にまとめて適用されます。主に ChatGPT にサービスを提供するデプロイでは、ChatGPT ユーザーが全体の予算を使えるよう、RATE_LIMIT_PER_CLIENT=0(上記の例と同様)にするか、RATE_LIMITと同じ値に設定してください。 - プロキシ経由の場合: 多くのホスト(Render、Fly.io、Railway、Cloud Run)ではアプリの前にプロキシが置かれるため、すべてのリクエストがプロキシのアドレスから届くように見えます。
TRUST_PROXY=1(サーバーの前にあるプロキシの数)を設定すると、レートリミッターはプロキシがX-Forwarded-Forに追加したアドレスを使用します。クライアントが直接接続する場合は、設定しないでください。クライアントはこのヘッダーに任意の値を記述できるため、TRUST_PROXYが設定されていない限り無視されます。
1 回のツール呼び出しが制限を超えた場合、モデルには isError: true と「Rate limit reached: … Retry in 42s.」のようなメッセージを含む通常のツール結果が返されるため、ユーザーに待つよう伝えることができます。HTTP 429 を返した場合は、一般的なコネクターエラーとして表示されるだけです。制限を超えたバッチリクエストや不正なリクエストには、Retry-After とともに 429 が返されます。
カウンターはメモリ上にあるため、各インスタンスがそれぞれの制限を適用します。
設定
| フラグ/変数 | デフォルト | 説明 |
|---|---|---|
--http | オフ | stdio の代わりに Streamable HTTP でサービスを提供します |
--port、PORT | 3000 | HTTP ポート |
--host、HOST | 127.0.0.1 | HTTP バインドアドレス |
ALLOWED_HOSTS | パブリックバインドで許可する Host 値(カンマ区切り) | |
RATE_LIMIT | 120 | 全クライアントを合わせた 1 分あたりのツール呼び出し数。0 で無効になります |
RATE_LIMIT_PER_CLIENT | 60 | クライアント IP ごとの 1 分あたりのツール呼び出し数。0 で無効になります |
TRUST_PROXY | 0 | X-Forwarded-For のエントリを信頼するリバースプロキシの数(true = 1) |
KROKI_URL | https://kroki.io | レンダリングと共有リンクに使用する Kroki サーバー |
Kroki のセルフホスト
Kroki は Docker イメージとして提供されています。コアイメージは PlantUML、C4-PlantUML、Graphviz、D2、Structurizr に対応しています。Mermaid、BPMN、Excalidraw にはそれぞれ追加のコンテナーが必要です。
# docker-compose.yml
services:
kroki:
image: yuzutech/kroki
ports: ["8000:8000"]
environment:
KROKI_MERMAID_HOST: mermaid
KROKI_BPMN_HOST: bpmn
KROKI_EXCALIDRAW_HOST: excalidraw
mermaid:
image: yuzutech/kroki-mermaid
bpmn:
image: yuzutech/kroki-bpmn
excalidraw:
image: yuzutech/kroki-excalidraw
docker compose up -d
KROKI_URL=http://localhost:8000 npx -y @archform/mcp
共有可能なリンクはお使いの Kroki インスタンスを参照するため、そのインスタンスにアクセスできる人だけが開けます。詳しくはKroki のインストールドキュメントをご覧ください。
開発
pnpm install
pnpm test # unit + in-process integration tests (Kroki stubbed)
KROKI_LIVE=1 pnpm test # also run the live tests against KROKI_URL
pnpm build
npx @modelcontextprotocol/inspector node dist/index.js # stdio
node dist/index.js --http # then point the Inspector at http://127.0.0.1:3000/mcp
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。