mcpField
S
Skopia

Skopia

リモート
skopia.datatreehaus.comメディア・デザイン06 週間前に更新
リポジトリ公式サイト

Skopia について

Skopiaは、建築図面を作成するエージェント向けのMCPサーバーです。概要や実測データから実寸ミリ単位の平面図、断面図、立面図を生成し、同じ建物ドキュメントから投影します。検証やSVG表示、DXF出力にも対応します。

主な機能

  1. 01実寸ミリ単位の平面図作成
  2. 02同一ドキュメントから断面図と立面図を投影
  3. 03寸法不足やレイアウトの問題を検証
  4. 04標準部材や設備の配置
  5. 05SVGとDXFで出力

活用シーン

  1. 01建物の実測データから図面を作成
  2. 02複数階の図面の整合性を確認
  3. 03部屋にドア、窓、設備を配置
  4. 04CADでの編集用に図面を出力

MCP 対応

Streamable HTTPのMCPサーバーとして、建物ドキュメントの作成、検証、投影、作図機能をクライアントに公開します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://skopia.datatreehaus.com/v1
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

Skopia

建物を説明すると、Skopia が平面図、断面図、立面図を1つのドキュメントから描きます。 概要または実測調査の結果を渡すと、実寸のミリメートル単位で、CAD 用の表現に沿った平面図を描きます。次に、同じドキュメントから同じ建物の断面図と立面図を投影するため、3つの図面に食い違いは生じません。1フロアでも、家全体でも対応します。縮尺どおりのシート、または AutoCAD、Revit、Vectorworks で仕上げられるDXFを作成できます。

各図面は、それぞれ全体を独自の縮尺で描画します。平面図、各断面図、各立面図は、確認できる SVG として出力されます。シートは図面が仕上がってから配置する場所であり、作業の出発点ではありません。

エンジンが描画した現代的な住宅の1階平面図

現代的な住宅の1階。エージェントが呼び出す操作で建築・家具配置を行い、すべての設備はストックから選び、指定した壁に合わせて向きを変え、2本の切断線はどちらもルールに基づいて配置しています。これはドキュメントを描いた図ではなく、エンジン自身がドキュメントをレンダリングしたものです。

平面図から投影した、同じ住宅のA-A断面図

断面図A–A。上の平面図に記された線で切断し、同じドキュメントから投影しています。ここでは何も二度描いていません。窓は平面図にある窓で、キッチンも平面図にあるキッチンです。

https://skopia.datatreehaus.com/v1

MCP レジストリ Cursor に追加 VS Code に追加

すべての呼び出しにキーが必要です。キーは無料ですぐに取得でき、承認も不要です。上記のワンクリックインストールにはキーが含まれていません。Cursor は環境変数 SKOPIA_KEY を読み取り、VS Code はインストール時にキーの入力を求めます。

クイックスタート

# 1. get a key
curl -X POST https://skopia.datatreehaus.com/v1/keys \
  -H 'content-type: application/json' \
  -d '{"label":"my agent","email":"[email protected]"}'

# 2. add the server
claude mcp add --transport http skopia \
  https://skopia.datatreehaus.com/v1 \
  --header "Authorization: Bearer YOUR_KEY"

Cursor、VS Code、Codex、.mcp.json、生の HTTP については、/setupをご覧ください。

ChatGPT、Claude Desktop、claude.ai ではキーは一切必要ありません。 これらのコネクターダイアログは OAuth に対応した MCP サーバーを受け付けており、このサーバーも OAuth に対応しています。https://skopia.datatreehaus.com/v1 を貼り付けると、同意ページがその接続用のキーを発行します。このキーが表示されることはありません。アカウントは作成されず、キーだけで利用でき、ほかのキーと同様に失効させることができます。キーを表示できるクライアント(ChatGPT、または MCP Apps 拡張機能を利用するクライアント)では、平面図やシートが SVG テキストではなく画像として表示されます。

プロトコル: Streamable HTTP 上の MCP。サーバーはリビジョン 2026-07-28(server/discover、initialize なし)をベースに構築されており、initialize 時代のリビジョン(2025-11-25、2025-06-18、2025-03-26、2024-11-05)にも対応しています。そのため、通常のクライアントはそのまま接続できます。initialize で接続を開始し、MCP-Protocol-Version にリビジョンを指定してください。新しいリビジョンに追加された、ミラー形式のヘッダーや _meta フィールドを要求されることはありません。キーなしで呼び出せるのは initialize と ping のみです。

モデルだけではできないこと

平面図を描くようモデルに頼むと、SVGを出力し、見た目はまったく問題ありません。壁はわずかに閉じず、立面図は平面図と一致せず、ドアはヒンジの外側に開きます。何も失敗しません。まさにそれを取り除くために、これがあります。

ここでは、エージェントがドアを間違って描くことはありません。そもそもドアを描かないからです。 ドアの種類を指定するだけです。パネル付き、部分ガラス入り、3段。すると同じコンポーネントが平面図、立面図、断面図のすべてに反映されます。開き方向は一度だけ導き出され、一度だけ確認されるため、火曜日にヒンジから外れてしまうことはありません。

  • 立面図が平面図と食い違うことはありません。 注意深く描くからではありません。立面図の水平位置は、平面図の要素(opening:3.jamb.left)への 参照 なので、誤った数値を格納できるフィールドはどこにもありません。
  • 推測する代わりに、質問します。 測量データを渡すと、missing_dimensions は、もっともらしい数値で輪郭を閉じるのではなく、実際には測定されていない寸法を教えてくれます。ソフトウェアがその数値を作り出した瞬間、測定値との区別がつかなくなります。
  • コンポーネントは描くのではなく、指定します。 {"type": "sash", "panes": [3, 2]} は、上下とも6枚の桟を持つ上げ下げ窓です。同じ窓をSVGのパスデータで表すと、トークン数は約50倍になり、モデルはパスデータを微妙に間違えることがありますが、それを検出するものはありません。
  • 拒否時には問題を明示します。 どのオブジェクトに問題があるかを示す、型付きの恒久的なエラーコードです。エージェントは「無効なレイアウト」では対処できないからです。
  • 助言的な読み取りが判断を下すことはありません。 suggest_joins は、どのテーブル同士をつなげられるかを報告するだけで、何も変更しません。隣接関係が提案し、人が判断します。
  • 規制に関する数値は含まれていません。 通路幅、避難距離、車椅子利用者の比率は、あなたが用意し、その正確さに責任を負うものです。消防担当者が読むソフトウェアに誤った数値が含まれるのは、バグではなく責任問題です。

代替案も作りましたが、3回間違えました

この主張は、断言するのではなく検証する必要がありました。そのため、比較対象はリポジトリ内に実在するファイルです。同じ家を描く手書きのスクリプトです。エンジンのソース、つまり配色、壁の扱い、家のデータを開いた状態で作成し、人が確認しながらレンダリングを見て3回修正しました。何も知らない状態での試行ではなく、そのように見せるつもりもありません。

だからこそ、失敗はより鮮明に浮かび上がります。あらゆる利点を与えたにもかかわらず、それでも3回間違えました。

  1. ドアの開き弧は、扉の先端ではなく ヒンジ から始まっていたため、室内に浮かび、反対側の枠から大きく離れた位置で終わっていました。
  2. 窓は、枠もガラスの線もない白い隙間でした。窓ではなく、壁に開いた穴でした。
  3. 内部の壁には、ドアがまったくありませんでした。部屋は3つあるのに、どの部屋にも入れませんでした。

どのバージョンも問題なくレンダリングされました。欠陥のうち2つは、図面を確認したサイズでは見えず、残る1つも、2回の確認を経てなお、まったく妥当に見えたまま残っていました。無人で実行するエージェントなら、そのまま成果物として出してしまいます。

トークン数は論点ではありません。 単純な数だけを比べれば、エージェントが一度書いたスクリプトのほうが、これを呼び出すより効率的です。図面はファイルに出力され、ツールの結果がコンテキストに戻るからです。私たち自身のベンチマークも、それを隠さず明確に示しています。論点は、手軽な方法では、失敗が気づかれないままもっともらしく見え、人が見つけるか、誰にも見つけられないかのどちらかになることです。

安価な方法は、いつでも間違った方法です。

何も知らないエージェントで、完成までのトークン数は 測定していません。このエンジンのソースを見せずに、実際の要件に対して実行し、図面が本当に正しくなるところまで記録する必要があります。それはまだ実施しておらず、上記の内容も実施済みであるかのように引用してはいません。

そして自分たちで実行してみましたが、やはり間違っていました

エージェント1つ、ブリーフ1つ、このエンジン、2026年9月。費用は約269,000 トークンで、図面は間違っていました。断面の向きが逆、断面B–Bが空白、2つの上下窓が1つではない、1:50の縮尺がシートに対して小さすぎる、そして8つの寸法値が小さすぎて読めない、という結果でした。

  • 見ることが仕事です。 そのうち約100,000トークン、つまり37%は、図面をレンダリングして確認するために使われ、画像1枚あたり約8,000トークンでした。エージェントが自分でSVGを書いても、まったく同じ費用で、まったく同じループが発生します。つまり、作業の最大のコストは両方に共通しており、比較からは完全に相殺されます。私たち独自のベンチマークでは、この費用を一度も計上していませんでした。
  • エンジンを読むだけで、作業を始める前に約65,000トークンかかりました。 MCP経由なら、代わりにツールリストで済みます。これはサーバーを支持する正当な主張であり、私たちは認識を逆にしていました。
  • 拒否は役目を果たしました。 スキーマで保持できないスポットレベルと、使われていない壁厚2つは、黙って破棄されず、報告されました。

つまり、コンポーネントに名前を付けることでなくなるのは、エラーの「種類」であって、エラーそのものではありません。エージェントがまだ間違ったコンポーネントを指定したり、断面の向きを間違えたり、空白の図面を生成したりする可能性はあります。私たちはその3つすべてを経験しました。

そしてENGINEも、2日間で4回間違えました。テストスイートはすべて成功していたのに

これが私たちにとって最も有用な証拠です。ほかの用途が一切ないコードで、680件未満のテストを実施し、そのすべてを通過したにもかかわらず、これらの問題はリリースされ、読める大きさの図面を人が見て初めて発見されました。

  • 断面が壁頭で止まってしまい、立面図では屋根が正しく描かれている一方で、住宅は上に何もない箱として返されました。
  • その後、屋根は正しく描かれたものの、軒先で止まる妻壁の上に浮いていました。壁頭で止まるのは、屋根が壁に向かって下りてくる箇所だけです。
  • 弧を描く1つのセグメントが、すべての断面と立面を拒否しました。両方の投影で共有されるガードが、その位置にあったためです。
  • 座標値が -85.66329565734681 のように呼び出し元へ渡されていました。軸に平行な角はどれも、何もしなくても整数ミリメートルに投影されるため、曲線が現れるまで問題が表面化しませんでした。

テストスイートがあり、仕事が1つだけのコードでさえ間違えるのなら、一度に書いたSVGが正しくなるはずはありません。できるのは、レンダリングすることです。

数値を使った計算。 どれも特殊なものではありません。立面図とはそういうものです。

弧を描く壁にある1,200の窓立面図では1,168で描かれます。900のドアは890です
屋根のコースゲージ × sin(勾配)で描かれます。ゲージ100は勾配39°の屋根で62.5です
実際のゲージのまま描く場合コース間隔が1.6倍広くなり、コース数が3分の1少なくなります
垂直方向に厚さ250の屋根その勾配では垂直に317と表示されます
妻側の端部タイルのコースはまったく表示されません。そこに見えるのはケラバです

どれもきれいにレンダリングされますが、読者が気づくような問題ではありません。

もう片方を予備知識なしで実行したことはありません。ここにA/B比較はなく、比較したかのように示すつもりもありません。

住宅は階で構成されます

同じ住宅の1階平面図

同じ基準面を基にした2つ目の図面となる1階です。階段は、1階の葉がある位置に到達します。両階を通る断面図は、エンジンによって結合され、接合部を検証した1枚の図面です。

階は、新しい種類のものではありません。各階は、共通の基準面に対してそれぞれの高さを持つ通常の図面です。断面図や立面図はすべての階から投影され、結合されて1枚の図面になります。同じ壁を2つの階で表す場合は、床スラブから軒先まで続く1本の帯になり、立面の面は継ぎ目なく階の線を通り、すべての階の切断面が1つの領域に含まれるため、接合部は1つの輪郭として描かれます。位置合わせには、各平面図で指定する2つの固定点(vertex:0.outer — 壁が上階で薄くなっても位置が変わらない外側の角)を使い、調整ではなく検証を行います。回転した測量図、上階より短い階、またはその上の床構造に接しない天井は、差分をミリメートル単位で示して受け付けません。基準位置は数値で報告され、リクエストに応じて各平面図と結合された図面にも描画されるため、誰も結合結果を無条件に信頼する必要はありません。draw_sheet は document の代わりに storeys を受け取り、出力用紙に描画するまでのすべての処理を行います。

断面図に自動で描画される家具

浴槽、ベースキャビネット、WC、階段は、{ "op": "add_fixture", "type": "bath", "at": {x, y} } のように指定すると、標準的な製品寸法で配置されます。部屋の角に入る側の角を基準に配置します。平面図には実際の形状が表示され、断面図では切断面の向こう側にあるものを視線側から見た形で表示し、独自の断面形状で切断します。たとえば浴槽、キャビネット上のワークトップ、階段の鋸歯状の形です。向きによって、どの面と断面形状を表示するかが決まります。断面図での範囲は平面図を参照するため、平面図で配置した位置に表示されます。キッチン、浴室、寝室向けの22種類があり、法規制は含まれません。寸法は製品寸法で、必要なクリアランスは自分で指定します。

家具は配置する向きを認識します

各種類の製品には配置ルールが含まれています。背面を壁に寄せる必要があるか、使用するために各辺にどれだけの空間が必要かが定められています。against: {wall} を指定して配置すると、エンジンが部屋の内側を向くように回転させます。検証ではルールを参照し、壁を向いているWC、宙に浮いた洗面器、壁に座面を向けたソファ、そして妨げになっているものを指摘します。結果は指摘であり、配置を拒否するものではありません。

天窓

{ "op": "add_rooflight", "x", "y", "w", "d" } は屋根に窓を設置します。どの勾配面にあるか、高さがどの程度かは、平面図にすでに含まれている屋根から導き出されます。その勾配面に向いた立面図には、勾配で決まる高さに表示され、それ以外の立面図には表示されません。陸屋根では、断面図が天井面を貫く部分を開き、立ち上がりとガラスを表示します。

heights.construction.roof で厚さを指定すれば、勾配屋根も断面図で切断できます。棟では垂木の線が留め継ぎになり、下面は鉛直ではなく勾配面に対して垂直にオフセットされ、どの切断角度でも正確に描画されます。厚さは指定するものであり、導き出されるものではありません。指定がなければ描画されません。壁は、屋根が接する箇所に限って wall_head で止まるため、妻側の壁や片流れ屋根の高い側の壁は、屋根が何もないところに載った状態にならず、屋根の下面まで伸びます。

エンジンに組み込まれた統一スタイル

すべての図面は同じスタイルで出力されます。切断面は黒く塗りつぶし、内外の地面は白、家具や設備は塗りつぶしのない細い輪郭線で描き、線の太さは3段階です。屋根や、面に対して見える窓台には淡い色調を、ガラスには1色の薄い色を付けます。これは一流の設計事務所が平面図を提示する方法であり、渡すデータではなく描画関数に組み込まれています。同じ住宅の平面図、断面図、立面図がそれぞれ異なるスタイルで出力されることはありません。

規則に基づく断面記号

切断線には、小さな記号ファミリーの先頭記号が付きます。デフォルトはバブルです。見る方向を示す塗りつぶされた三角形、その上の円、そして矢印側の半分に記された参照番号です。点と方向(through と along を指定する add_section)として配置すると、エンジンは線を建物の外側の面から両端とも1.5メートル先まで均等に延長します。2点で指定した線もこの規則に照らして測定され、片端で短すぎたり長すぎたりする場合は、紙の上で見落とされることなく、両方の距離が報告されます。

作業の進め方

  1. 平面図。 edit_layout — 歩く順に角を指定し、close_room を実行してから、開口部、間仕切り、設備、屋根を追加します。ドアは名前で指定し、描画する必要はありません。
  2. 確認します。 バッチごとに validate_layout を実行し、指摘事項に対応します。タイルに向いた便器や、座る場所のないソファも指摘されます。
  3. 表示します。 render_layout。
  4. 断面図と立面図。 project_section と project_elevation。どちらも実寸に忠実なSVG全体を自動生成するため、それぞれを確認します。接合部を読むには scale: 20 を指定します。問題を見つけるのはこの手順です。
  5. その後に、図面シートまたはCAD。 draw_sheet、export_dxf、またはその両方を使います。

手順5が最後なのは意図的です。A3サイズの図面シートで、1:50の縮尺でセルに配置された断面図の幅は200mmです。このサイズでは、誤った窓台や欠けた窓枠を見分けることはできません。図面シートは、図面が正しいと確認できた後に出力するものであり、正しいかどうかを確かめるためのものではありません。

CADへ進む

ここで生成される図面は、誰かが仕上げるためのベース図面であり、発行可能な完成図ではありません — まさにそのためのDXFです。

export_dxf は draw_sheet と同じ内容を受け取り、1つのDXFを出力します。モデル空間、単位はミリメートル、y軸は上向きです。平面図はドキュメント固有の座標に配置されるため、AutoCADで測った壁はドキュメントに保存された壁と同じです。壁は両面とすべての開口部の窓枠で構成され、ドアには開閉軌跡が付き、設備やコンポーネントには図面シートと同じ基本図形が使われます。また、断面で切断される部分は、ソリッドハッチングを施した1つの輪郭領域になります。レイヤー名は役割ごとに付けられます — WALL、DOOR-SWING、CUT-POCHE、EVIDENCE — また、エンジンの3種類の線幅が適用されるため、CADからの印刷結果は図面シートと一致します。レイヤー名は固定なので、事務所独自のテンプレートを対応付けられます。断面図と立面図は同じファイルに、共通の基準線に沿って配置されます。図面シート、タイトルブロック、スケールバーは図面シート上に残ります。DXFはモデル空間です。

AutoCAD、Revit、またはVectorworksで開き、図面をさらに仕上げてください。壁は塗りつぶされた帯ではなく、両面と窓枠として出力されるため、読み込み先でも編集できます。

使用しない場合

一度だけ使うスケッチが必要で、そこから誰かが建築することもないなら、SVGを自分で出力してください。無料で、キーも不要ですし、問題なく使えます。

図面同士の整合性が必要な場合、誰かが図面を計測する場合、または誰もエージェントを見守らない場合に、このツールを使ってください。

ツール

edit_layout操作を適用してレイアウトを作成または変更します
list_operations57 種類の操作語彙
validate_layout問題のあるオブジェクトを示す型付きエラー
render_layout決定論的な SVG
draw_sheet平面図と断面図を 1 枚のシートに縮尺どおりに描画します
export_dxf同じ図面を CAD 用の 1 つの DXF として、1:1 で、役割ごとにレイヤー分けして出力します
project_elevation平面図から投影した立面図
project_section内壁もすべて含め、平面図を通る断面図
suggest_sections断面を設けられる位置と、それぞれの位置で何が見えるかを提案します
join_drawings複数階にわたる 1 つの断面図または立面図を、接合部を確認してきれいに描画します
list_components窓とドアの部材一覧
list_fixtures平面図と断面図で描画された、キッチン、バスルーム、家具の部材一覧
suggest_joinsどのオブジェクトを結合できるかを提案します
suggest_rotationオブジェクトをどの向きにすべきかを提案します
check_rulesあなたが指定したルールに照らして確認します
overhead_report断面図で考慮すべき事項
roof_reportどの屋根の情報がまだ不足しているかを質問として示します
missing_dimensions測量で採寸されていない寸法

18 個のツールが毎回のコンテキストを占めるため、より絞り込んだ構成も用意されています。 /v1/core、/v1/elevation、/v1/advisory があり、組み合わせることもできます (/v1/core+elevation)。代わりに、キーにプロファイルを設定することもできます。

すべてのツールは純粋関数であり、そのことをワイヤ上で示します(readOnlyHint、 idempotentHint)。何も保存されないため、読み取り専用ツールを自動承認する クライアントであれば、これらをすべて承認できます。

プロンプト

MCP プロンプトとして提供される 4 つのワークフローです。クライアントで一覧表示すると、 用語集ではなく、作業の順序が示されます。Claude Code ではスラッシュコマンドとして表示されます。

build_a_room部屋の説明から、検証済みでレンダリングされた平面図を作成します
survey_to_drawings実測調査から平面図、断面図、立面図を作成し、未採寸の箇所を尋ねます
check_a_layout検証した後、あなたが指定した間隔のルールに照らして確認します
seat_a_roomテーブルを配置して番号を付けます。結合箇所は提案として報告し、収容人数は示しません

それぞれで使用するツールを指定しており、必要なツールがすべてマウントされている場合にのみ 一覧に表示されます。そのため、プロンプトによって、エンドポイントが提供していないツールを モデルに使わせることはありません。

ステータスについて、正直に

無料で、需要を探るためのものであり、製品ではありません。誰かがこれを求めているかを 確かめるために存在します。いずれ有料化される予定で、その前に通知します。永久に無料だとは 約束しておらず、状況が変わると困る本番環境向けでもありません。

エンジンのソースは公開されていません。このエンドポイントはインターフェースであり、 実装ではありません。そのため、このリポジトリにはクライアント、例、ドキュメントが含まれ、 エンジンのコードは含まれません。

例

examples/ を参照してください。HTTP 経由でホストされたエンドポイントを呼び出すため、 curl または node 以外にインストールが必要なものはありません。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。