archlang-mcp について
archlang-mcpは、コードで記述した建築平面図の作成、確認、修復を行うstdio MCPサーバーです。ArchLangライブラリをMCPネイティブなホスト向けのツールとして公開し、ArchLang CLIの代替ではなく補完として機能します。
主な機能
- 01平面図をSVG、テキスト、JSON、PNGに変換
- 02部屋、面積、隣接関係を記述
- 03ルール検査と平面図の検証
- 04図面ソースの修復と補完
- 05言語仕様とスキーマを提供
活用シーン
- 01コード化した平面図をレンダリングして確認
- 02設計概要に沿って平面図を検証
- 03レイアウトの問題を修正し図面の詳細を補完
MCP 対応
stdioサーバーはArchLangの操作をMCPツールとして公開し、言語仕様、スキーマ、文法をリソースとして提供します。ツールは平面図ソースを受け取り、構造化された結果を返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
10掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| level | integer | いいえ | 複数階の平面図で、この階のみをレンダリングします。宣言されていない階はエラーとなり、推測されません。 |
| format | enum | いいえ | svg(デフォルト)または txt(依存関係のない ASCII)。svg | txt |
| source | string | いいえ | ArchLang ソース(`plan "…" { … }`)。これか plan_json のいずれかを指定してください。 |
| overlay | enum | いいえ | オプションの動線オーバーレイを描画します(SVG のみ)。circulation |
| plan_json | object | いいえ | Plan JSON(RPLAN 形式)。`source` の代わりに指定でき、.arch に変換してからコンパイルされます。 |
| accessible | boolean | いいえ | アクセシビリティメタデータ <title>/<desc>/role/aria を出力します(SVG のみ)。 |
詳細
@chanmeng666/archlang-mcp
ArchLang 用の Model Context Protocol サーバーです。MCP に対応したホストから、コードで記述された建築の平面図を作成、検査、修復できます。
これは @chanmeng666/archlang ライブラリを薄く包む stdio シムです(サブプロセスも再実装もありません)。各ツールは、エクスポートされた単一の純粋関数をラップします。コアは 依存関係ゼロのままです。MCP SDK はこのパッケージ内でのみ使用されます。
CLI を優先する場合
ArchLang の主なエージェント向けインターフェースは、このサーバーではなく、エージェントネイティブな archlang CLI です。CLI は呼び出されるまでエージェントのコンテキストウィンドウをまったく消費しませんが、MCP ツールのスキーマは常にウィンドウ内にあります。エージェントがすでにシェルを使える場合は、次を優先してください。
npx -y @chanmeng666/archlang context # the whole language + workflow + CLI + errors, one call
npx -y @chanmeng666/archlang compile plan.arch -o out.svg --json
npm i -g @chanmeng666/archlang の後は、同じ呼び出しを archlang context および archlang compile … として実行できます。このパッケージは arch というエイリアスもインストールしますが、Linux、macOS、Git Bash では coreutils に独自の arch が含まれているため、そこで arch をそのまま実行すると別のプログラムが起動します。
この MCP サーバーは、MCP ネイティブのホストがレジストリを通じて ArchLang を検出し、シェルを使わずに操作できるようにするために存在します。公式 MCP レジストリには io.github.ChanMeng666/archlang-mcp として掲載されています。これは検出のための経路であり、置き換えを目的としたものではありません。ADR 0012(ADR 0009 のプロトコルより配布を優先する方針を修正)を参照してください。
サーバーの指示
initialize 時にサーバーは短い instructions 文字列を送信し、対応するホストはこれをモデルのコンテキストに追加します。まず archlang://spec リソースを読み、次に .arch を記述して → compile(および fix)→ describe → strict:true を指定した validate の順に実行し、エクスポートする前に完了させてください。これは SKILL.md のループを簡潔にまとめたもので、テストでは、そこで指定されたコマンドが CLI マニフェストと、そのループの順序に一致することを確認します。
ツール
すべてのツールは ArchLang の source(plan "…" { … } 形式の文字列)を受け取り、構造化 JSON を返します。compile は plan_json(Plan-JSON / RPLAN 形式)も受け付けます。
| ツール | 機能 |
|---|---|
compile | ソース(または plan_json)を SVG、依存関係のない ASCII(format:"txt")、オブジェクト形式の Plan JSON(format:"json"。plan_json が受け取る形式)、または PNG 画像(archlang preview の幅を使用しますが、width で上書きできます。範囲内にクランプされます。オプションの @resvg/resvg-js が必要ですが、.mcpb バンドルには含まれません)にレンダリングします。accessible と overlay:"circulation" はオプトインです。出力と診断情報を返します。複数階のプランではすべての階を pages[] で返し、level を指定すると1階分をレンダリングします。 |
describe | 意味的な情報(部屋、面積、隣接関係、ドア、動線、ゾーン、階、正確な floor_polygon / floor_circle の形状、およびどの位置が手作業で記述され、どの位置がリゾルバーから導出されたかを示す freedom レポート)を返します。画像を使わずに意図を検証できます。 |
lint | 助言的な W_* の健全性警告を返します(間接的なラベルの別名から推測した部屋用途について、修正情報を含む W_ALIAS_MATCH が含まれる場合があります)。profile でルールセットを選択します。 |
validate | 解析、解決、lint を実行する出荷判定ツールです。strict は警告があると失敗し、graph は内部ドアの隣接関係を意図した部屋グラフと照合し、intent は概要の契約条件に照らして判定します(archlang://intent-schema を参照)。 |
score | 継続的な意図 METER です。概要をプランがどの程度満たしているかを示します(satisfied / total / score / subscores)。測定のみを行い、合否判定はしません。 |
repair | 明示的な修正ツールです。壁、出入口、ドアの開閉軌跡からはみ出した家具を修正し、新しい .arch ソースと変更ログを返します。ドアや窓は追加しません。 |
finish | 図面を完成させます。家具のない部屋に家具を配置してから、不足している paper、scale、dims auto、title、schedule rooms、legend を追加し、新しい .arch ソースと変更ログを返します。不足しているものだけを補います。only を指定すると1つの段階(furnish または sheet)のみを実行し、reissue を指定すると paper / scale を置き換える場合があります。 |
fix | プランの診断情報に含まれる、機械的に適用可能な修正を実行します(構文上の修正ツール。上限付きの不動点反復)。unsafe を指定すると maybe-incorrect も対象にします。 |
suggest | 到達不能な部屋や窓のない寝室を解消するための、助言的なドア/窓の記述を返します(それぞれ、安定した参照(記述された ID または一意なカテゴリ)または絶対座標で壁を参照します。再バインド可能な位置 ID は使用しません)。データを返すだけで、適用はしません。 |
complete | ソースのバイトオフセット位置で有効な LSP 補完項目を返します。 |
link | インストール不要でブラウザーからプランを表示できる2つの URL を返します。playground はホストされたエディターでレンダリングされたプランを表示し、embed は iframe 用にプランのみを表示します。さらに、圧縮されたプランのサイズ bytes と ok も返します(プランをコンパイルできない場合は errors の件数も返します。その場合もリンクは生成され、ページには診断情報が表示されます)。プランは URL のフラグメントに格納されます。./link をエクスポートするコアが必要です。古いコアでは ok:false と、必要なバージョンが返されます。 |
compile の accessible がここで行うことと、行わないこと
accessible: true にすると、このシムが公開するオプションのすべてとして、SVG のルートに <title>/<desc> のペアと role="img" が設定されます。v1.36 の要素コントロールは MCP から利用できません。 これらを使うには accessible と合わせて annotate が必要ですが、このツールは format:"txt" の場合にしか annotate を渡しません。また、accessible はブール値として受け取るため、1 つの HTML ページ上に複数のプランを配置しても arch-title/arch-desc が重複しないようにする { idPrefix } 形式も指定できません。
キーボードやスクリーンリーダーで操作できる図を必要とするホストは、各要素に data-arch-primary、role="button"、aria-label を付与するため、ライブラリを呼び出す必要があります。CLI でも生成できません。annotate にフラグがないため、archlang compile --accessible で生成できるのも <title>/<desc> のペアまでです。
import { compile } from "@chanmeng666/archlang";
compile(src, { annotate: true, accessible: { idPrefix: "plan-7" } });
出力の仕様、埋め込み側で引き続き対応が必要な事項、スクリーンリーダーに関する既知の制限については、言語リファレンスをご覧ください。
リソース
| URI | 内容 |
|---|---|
archlang://spec | 言語仕様の全体(1 ページ、spec.llm.md)。 |
archlang://context | エージェント向けの完全なコンテキスト:仕様+ワークフロー+CLI リファレンス+エラーカタログ(llms-full.txt)。 |
archlang://schema | Plan-JSON コンパイル入力用の JSON Schema(2020-12)。 |
archlang://grammar | パース可能な生成を保証する、GBNF 制約付きデコード文法。 |
archlang://intent-schema | brief の Intent 用 JSON Schema(2020-12)。validate の intent と score の brief が受け取る形式です。 |
インストール
Claude Code
claude mcp add archlang -- npx -y @chanmeng666/archlang-mcp
Claude Desktop
claude_desktop_config.json に追加します(Settings → Developer → Edit Config)。
{
"mcpServers": {
"archlang": {
"command": "npx",
"args": ["-y", "@chanmeng666/archlang-mcp"]
}
}
}
Cursor
.cursor/mcp.json(プロジェクト)または ~/.cursor/mcp.json(グローバル)に追加します。
{
"mcpServers": {
"archlang": {
"command": "npx",
"args": ["-y", "@chanmeng666/archlang-mcp"]
}
}
}
VS Code
.vscode/mcp.json に追加します。
{
"servers": {
"archlang": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@chanmeng666/archlang-mcp"]
}
}
}
ライセンス
MIT © Chan Meng
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。