MCP サーバー
August 8, 2026 · View on GitHub
D3D12LookDevPT には、実行中の renderer を VS Code、Codex、独自 JSON-RPC client などから参照・操作するための local MCP server が入っています。ImGui UI と同じ validation-oriented action layer を経由します。
English documentation: MCP Server
MCP 経由の操作例
下の screenshot は、MCP 対応 client から camera、quality、denoise の変更を指示したときの renderer 側を示します。D3D12LookDevPT はすべての mutation を検証済み action layer 経由で適用します。

上の viewport は MCP server 起動中の renderer で、local JSON-RPC request の履歴を表示しています。Bearer token の領域は redacted 済みです。実 token は screenshot や project file に入れないでください。
client 側では先に validation を通し、mutation tool を適用し、その後 get_state で renderer state が同じ値になったことを確認します。現在の build では、tools/list または lookdevpt://actions/schema が返す live schema と、この文書の例を正として扱ってください。
利用条件とセキュリティ
- Endpoint:
http://127.0.0.1:<port>/mcp - Default port:
8777 - Bind address:
127.0.0.1のみ - Transport: Streamable HTTP JSON-RPC と subscription SSE over
POST /mcp - 対応 protocol version:
2026-07-28、2025-11-25、2025-06-18 - 認証:
Authorization: Bearer <token>が必須 - modern era(
2026-07-28): request は stateless。initializeとMCP-Session-Idは使用しない - legacy era(
2025-11-25、2025-06-18):initializeでMCP-Session-Idを作成。session は idle 30 分で失効 - Server-Sent Events:
POST subscriptions/listenの response で使用。GET /mcpは引き続き405 Method Not Allowed - HTTP request body の上限: 16 MiB。
Content-LengthとTransfer-Encoding: chunkedの両方に対応 - 上限: 同時 connection 64、同時 subscription 16、legacy session 64
Bearer token と MCP 設定は以下に保存されます。
%APPDATA%\D3D12LookDevPT\settings.json
この file は user-local です。token を .lookdevpt.json、README、screenshot、issue comment、commit 済み VS Code 設定に入れないでください。
Origin header は absent、または parse 後の host が 127.0.0.1、localhost、[::1] の HTTP origin(valid な port は任意)だけ許可します。Origin: null、非 loopback の Host、その他の origin は 403 になります。
サーバーの起動
dockable な MCP Server panel から操作できます。
Start Server/Stop ServerPortRequest TimeoutAccess ModeCopy TokenRegenerate Token- pending approvals と recent request log
server は default disabled です。command line から明示的に起動することもできます。
.\Bin\x64\Debug\D3D12LookDevPT.exe --mcp-server --mcp-port 8777 --mcp-token <token> --mcp-access confirm_mutations
Access mode:
read_only: read tool は使えます。mutation tool は拒否されます。confirm_mutations: mutation tool は ImGui のMCP Serverpanel で Approve されるまで待ちます。allow_mutations: mutation tool を UI 承認なしで実行します。
mutation queue は main thread で処理され、同時に保持できる request は 16 件までです。HTTP server thread から D3D12 / ImGui state を直接触りません。
capture_viewport は read operation ですが、GPU readback を行うため renderer thread の queue を経由します。capture_debug_pack は一時的に debug view を変更し、その関連 temporal history を無効化するため mutation access が必要です(confirm_mutations では承認も必要)。restoreView の default は true です。
Snapshot の更新頻度と鮮度
MCP read は、HTTP thread から renderer / scene data を直接走査せず、mutex で保護した snapshot を使います。server 停止中は snapshot 生成処理も停止します。server 起動時に最初の snapshot を強制生成し、起動中は次の頻度で更新します。
state: 約 33 ms ごと(30 Hz)。statsとdiagnostics: 約 100 ms ごと(10 Hz)。materials、project、scene/summary、material variants、presets: scene / project / catalog revision が変わった場合のみ再生成。- debug-view、render-mode、action-schema resource: 固定 metadata から on demand で生成。
同じ publication point が subscriptions/listen の通知も駆動します。URI と snapshot revision 単位で coalesce するため、state は最大 30 Hz、stats / diagnostics は最大 10 Hz、revision resource は serialized content が変わった場合だけ、capture index / latest は capture 変更時だけ通知します。
mutation 直後の read は、通常 1 回分の refresh interval だけ renderer より遅れることがあります。値を検証する client は、renderer が frame を更新している状態で、その interval 後に get_state をもう一度読んでください。mutation、validation、capture は main-thread queue 上で直列化されますが、通常の snapshot read は renderer state の mutation を block しません。
VS Code 設定
VS Code の MCP server 設定は、workspace の .vscode/mcp.json または user profile の mcp.json に保存します。現在の VS Code MCP configuration reference では、HTTP server に type、url、headers を使い、secret には optional の inputs を使えます。
.vscode/mcp.json の例:
{
"inputs": [
{
"type": "promptString",
"id": "lookdevpt-token",
"description": "D3D12LookDevPT MCP bearer token",
"password": true
}
],
"servers": {
"d3d12LookDevPT": {
"type": "http",
"url": "http://127.0.0.1:8777/mcp",
"headers": {
"Authorization": "Bearer ${input:lookdevpt-token}"
}
}
}
}
編集後は VS Code の MCP: List Servers から server entry を start / restart してください。D3D12LookDevPT を rebuild して tool list が変わった場合は MCP: Reset Cached Tools を実行してください。
注意:
- VS Code 側の server entry を start する前に、D3D12LookDevPT 本体と MCP server を起動しておきます。
- ImGui で token を regenerate した場合は、VS Code 側の MCP server entry を restart し、新しい token を入力します。
- protocol version と MCP routing header は VS Code に生成させます。
mcp.jsonでMCP-Protocol-Versionを固定しないでください。 - subscription stream は
POST subscriptions/listenの response です。deprecated な unsolicitedGETstream は実装していません。
LocalMCPChatClient 設定
LocalMCPChatClient から接続する場合は、config/LocalMCPChatClient.mcp.json を LocalMCPChatClient の「設定」→「MCP接続」→「JSONからインポート」で読み込めます。
- MCP Server panel の
Copy Tokenで token を取得する。 - Windows の user 環境変数
D3D12LOOKDEVPT_MCP_TOKENに token だけを設定する。 - 環境変数を反映するため LocalMCPChatClient を完全に終了して起動し直す。
- JSONをインポートし、「接続テスト」→「保存」→「接続」を実行する。
example 設定は Authorization: Bearer ${env:D3D12LOOKDEVPT_MCP_TOKEN} を LocalMCPChatClient の bearer-token 環境変数設定へ変換し、standalone GET を無効にします。token と MCP-Protocol-Version は Git 管理ファイルへ直接書かないでください。protocol version は MCP C# SDK 2.1.0 とこの server が 2026-07-28 を自動交渉します。
両リポジトリを同じ親 directory に clone している開発環境では、次の script が D3D12LookDevPT の test host を起動し、実際の LocalMCPChatClient client 実装で tools/list と lookdevpt.get_state を検証します。
.\Scripts\TestLocalMcpChatClientIntegration.ps1
JSON-RPC の流れ
推奨経路は 2026-07-28 です。各 request の params._meta に protocol version と client capabilities を入れ、それと一致する MCP-Protocol-Version、Mcp-Method header を送ります。tools/call、resources/read、prompts/get では一致する Mcp-Name も必要です。initialize と session header は使いません。
modern の successful result には resultType: "complete" と _meta["io.modelcontextprotocol/serverInfo"] が入ります。server/discover は対応 version と tools / resources / prompts capability を返します。これらの modern 専用 field は legacy response には追加しません。
PowerShell で discover と read tool を呼ぶ例:
$endpoint = "http://127.0.0.1:8777/mcp"
$token = "<token>"
$baseHeaders = @{
"Authorization" = "Bearer $token"
"Accept" = "application/json, text/event-stream"
"MCP-Protocol-Version" = "2026-07-28"
}
$meta = @{
"io.modelcontextprotocol/protocolVersion" = "2026-07-28"
"io.modelcontextprotocol/clientInfo" = @{ name = "manual-client"; version = "1.0" }
"io.modelcontextprotocol/clientCapabilities" = @{}
}
$discoverHeaders = $baseHeaders.Clone()
$discoverHeaders["Mcp-Method"] = "server/discover"
$discoverBody = @{
jsonrpc = "2.0"
id = 1
method = "server/discover"
params = @{ _meta = $meta }
} | ConvertTo-Json -Depth 10 -Compress
Invoke-RestMethod -Uri $endpoint -Method Post -Headers $discoverHeaders -ContentType "application/json" -Body $discoverBody
$callHeaders = $baseHeaders.Clone()
$callHeaders["Mcp-Method"] = "tools/call"
$callHeaders["Mcp-Name"] = "lookdevpt.get_state"
$body = @{
jsonrpc = "2.0"
id = 2
method = "tools/call"
params = @{
_meta = $meta
name = "lookdevpt.get_state"
arguments = @{}
}
} | ConvertTo-Json -Depth 10 -Compress
Invoke-RestMethod -Uri $endpoint -Method Post -Headers $callHeaders -ContentType "application/json" -Body $body
HTTP field value として安全に表せない header value は MCP の =?base64?<payload>?= sentinel 形式を使います。server は JSON body と比較する前にこの形式を decode します。
legacy client は従来どおり initialize、返された MCP-Session-Id の保持、notifications/initialized、以後の call への session id 付与という順序を利用できます。DELETE /mcp は legacy session を終了し、modern の DELETE は 405 になります。
Resource subscription
server/discover は resources: { "subscribe": true, "listChanged": false } を公開します。subscriptions/listen の notifications.resourceSubscriptions に必要な URI を指定してください。最初の SSE event は必ず notifications/subscriptions/acknowledged で、server が受理した URI だけを含みます。以後の更新は同じ subscription id を持つ notifications/resources/updated です。
response が開いたままになるため、次の PowerShell 例では curl.exe を使います。
$listenBody = @{
jsonrpc = "2.0"
id = 30
method = "subscriptions/listen"
params = @{
_meta = $meta
notifications = @{
resourceSubscriptions = @("lookdevpt://state", "lookdevpt://diagnostics")
}
}
} | ConvertTo-Json -Depth 10 -Compress
curl.exe -N $endpoint `
-H "Authorization: Bearer $token" `
-H "Accept: application/json, text/event-stream" `
-H "Content-Type: application/json" `
-H "MCP-Protocol-Version: 2026-07-28" `
-H "Mcp-Method: subscriptions/listen" `
--data-binary $listenBody
server は 15 秒ごとに comment keepalive を送り、SSE event id は発行せず、Last-Event-ID を使用しません。client 切断時に subscription を破棄し、server の graceful shutdown 時は complete result を送ります。
Tools
Read tools:
lookdevpt.get_stats: adapter、DXR tier、resolution、集約 GPU timing、scene counts、history / resource-memory 状態、active secondary shading rate、denoiser state、MCP queue state を返します。lookdevpt.get_state: scene / project path、quality / ray-budget 設定、camera、lighting、path tracing、ReSTIR / RTXDI 状態、denoise、frame-history revision、view state を返します。lookdevpt.list_materials: material 名、使用数、編集可能な PBR factor、texture slot 状態を返します。lookdevpt.list_debug_views: debug view の id、label、key を返します。lookdevpt.list_render_modes: render mode の label と action value を返します。lookdevpt.get_diagnostics: scene / project / capture / MCP diagnostics を返します。lookdevpt.capture_viewport: 現在の final/debug viewport を PNG として取得し、inlineimage/pngとlookdevpt://captures/latest.pngを返します。
Validation / capture workflow tools:
lookdevpt.validate_action:{ "method": "...", "params": { ... } }を受け取り、同じ action path をvalidateOnly=trueで実行します。lookdevpt.run_actions: 最大 16 個の action-layer call を 1 request で validation / apply します。validation 失敗時は一切 mutation しません。apply は指定順ですが、後段の runtime operation が失敗した場合の rollback transaction ではありません。lookdevpt.capture_debug_pack: 最大 8 個の debug view を PNG capture し、それぞれの resource link を返します。capture 中に debug-view / history state を変更するため mutation として扱います。
Mutation tools:
lookdevpt.reset_accumulationlookdevpt.reset_denoise_historylookdevpt.reset_reservoirslookdevpt.reset_camera_viewlookdevpt.set_camera_speedlookdevpt.fit_camera_to_scenelookdevpt.set_display_resolutionlookdevpt.load_projectlookdevpt.save_projectlookdevpt.save_project_aslookdevpt.set_scenelookdevpt.set_cameralookdevpt.set_materiallookdevpt.set_material_texturelookdevpt.reset_materiallookdevpt.save_material_variantlookdevpt.apply_material_variantlookdevpt.delete_material_variantlookdevpt.set_material_viewlookdevpt.set_color_managementlookdevpt.set_lightinglookdevpt.set_path_tracinglookdevpt.set_qualitylookdevpt.set_restirlookdevpt.set_denoiselookdevpt.set_view
tool result は主に structuredContent を使います。互換用に text summary も含めます。
Resources
lookdevpt://state: 現在の state JSON。lookdevpt://stats: 現在の stats JSON。lookdevpt://diagnostics: scene、project、capture、MCP diagnostics。lookdevpt://materials: material list JSON。lookdevpt://materials/{index}: 1 material の JSON object。lookdevpt://materials/{index}/textures: 1 material の source/current/override texture slot。lookdevpt://material-variants: 保存済み per-material variant snapshot。lookdevpt://material-presets: built-in / user material preset。lookdevpt://debug-views: debug view の id、label、key。lookdevpt://render-modes: render mode とset_path_tracing.modeの value。lookdevpt://project: 現在の project path と dirty flag。lookdevpt://scene/summary: scene counts、bounds、lights、asset paths。lookdevpt://actions/schema: action 名と JSON input schema。lookdevpt://captures/index: memory 上の capture history。lookdevpt://captures/latest.png: 最新の PNG capture。lookdevpt://captures/{id}.png:capture_viewportまたはcapture_debug_packの PNG。
Resource templates:
lookdevpt://captures/{id}.pnglookdevpt://materials/{index}lookdevpt://materials/{index}/textures
modern の discover / list / read result は cacheScope: "private" と ttlMs hint を返します。catalog と immutable capture ID は 3,600,000 ms、state は 33 ms、stats / diagnostics は 100 ms、materials / project / scene / variants / presets は 1,000 ms、capture index / latest は 0 ms です。list は cursor を発行せず、client が cursor を送った場合は拒否します。
Prompts:
lookdevpt.inspect_scene: state / stats / materials / diagnostics を読み、scene を要約します。lookdevpt.tune_denoise: validation を通して安定した denoise 設定を提案・適用します。lookdevpt.setup_camera_shot: scene bounds と state を使って camera shot を作ります。lookdevpt.capture_debug_review: debug pack を capture し、見える問題を要約します。
State、Stats、Benchmark metric
安定化 / 性能 pipeline に関連する主な get_state field は次のとおりです。
quality: 保存または request されたqualityProfile、restirBackend、secondaryShadingRate、完全なrayBudget、finalTaa、sharpenStrength、referenceSppの policy object。profile と availability に依存する実効結果はfinalTaaActive、restir.effective、denoise.activeBackendに分けて公開します。finalTaaActive: 選択 profile と利用可能な pipeline の組み合わせで Final TAA が実際に動作しているか。pathTracing.requestedSecondaryShadingRate、activeSecondaryRate、autoSecondaryHalfActive: request した policy と現在の secondary rate。restir.requestedBackend、effective、rtxdiStatus: request した RTXDI path、build / runtime availability、DI / GI の active 状態、fallback reason。frameState: frame / sample counter、change mask、有効 history-domain mask、camera-cut flag、独立した scene / geometry / material / light / HDRI / backend / profile revision。
主な get_stats group は次のとおりです。
gpuTiming: 最後に完了した aggregate pipeline、Path Trace、ReSTIR reuse、denoise、copy、UI timing、および validity / completion serial。historyDomains: 有効 history mask と最後の change mask。resourceMemory: frame / history の bytes / MiB、512 MiB budget、budget 判定、active allocation profile。secondaryShading: requested / effective rate、active ratio、automatic half-rate state、追加 sample quota、bounce penalty、over / under-budget counter。denoiserとmcp: effective backend / history 状態と server queue state。
より重い per-phase metric(ReSTIR candidate / temporal / spatial / shade / publish、denoise prepare / core / composite、Final TAA、quality counters、history publish、詳細 CPU stage、推定 ray budget、history / contribution diagnostics)は benchmark の CSV / JSON artifact に記録します。get_stats は意図的に低コストな aggregate snapshot のままです。performance benchmark では full-screen quality counter を無効化するため、それらが必要な場合は quality または combined run を使ってください。
resource read 例:
{
"jsonrpc": "2.0",
"id": 3,
"method": "resources/read",
"params": {
"uri": "lookdevpt://actions/schema"
}
}
よく使う操作
camera の取得:
{
"jsonrpc": "2.0",
"id": 10,
"method": "tools/call",
"params": {
"name": "lookdevpt.get_state",
"arguments": {}
}
}
camera の設定:
{
"jsonrpc": "2.0",
"id": 11,
"method": "tools/call",
"params": {
"name": "lookdevpt.set_camera",
"arguments": {
"position": [-14.7075, 7.99065, -11.7407],
"yaw": 0.456,
"pitch": -0.144733,
"historyMode": "auto"
}
}
}
historyMode は、この camera mutation にだけ適用されます。
auto(default): 通常移動では history を再投影して維持し、大きな teleport / turn は camera cut と判定します。preserve: automatic cut threshold を超えても再投影を強制します。変更前後の view が意図的に連続している場合だけ使ってください。reset: 明示的な camera cut として扱い、新しい frame では temporal history を reject します。
Bistro の読み込み:
{
"jsonrpc": "2.0",
"id": 12,
"method": "tools/call",
"params": {
"name": "lookdevpt.set_scene",
"arguments": {
"scenePath": "C:\\Projects\\D3D12LookDevPT\\Bistro_v5_2\\BistroExterior.fbx"
}
}
}
ReSTIR GI + DI に切り替え:
{
"jsonrpc": "2.0",
"id": 13,
"method": "tools/call",
"params": {
"name": "lookdevpt.set_path_tracing",
"arguments": {
"mode": "restir_gi_di",
"samplesPerFrame": 2,
"maxBounces": 4,
"radianceClamp": 8.0
}
}
}
interactive quality profile と automatic secondary shading budget の設定:
{
"jsonrpc": "2.0",
"id": 14,
"method": "tools/call",
"params": {
"name": "lookdevpt.set_quality",
"arguments": {
"qualityProfile": "interactive_game",
"restirBackend": "rtxdi",
"secondaryShadingRate": "auto",
"rayBudget": {
"movingSpp": 1,
"movingBounces": 2,
"staticBaseSpp": 1,
"staticMaxSpp": 2,
"staticBounces": 4,
"settleFrames": 8,
"targetGpuMs": 14.5
},
"finalTaa": true,
"sharpenStrength": 0.0,
"referenceSpp": 4096
}
}
}
secondaryShadingRate は auto、full、adaptive_half を受理します。auto は追加 sample quota、bounce depth の順に削減し、それでも budget 超過が続いた場合に secondary shading を half-rate にします。回復は一定期間 budget を下回った場合だけ行います。adaptive_half は Interactive の secondary path を half-rate に固定し、full は無効化します。Sharp Preview / Reference Still では常に full に解決されます。partial set_quality は未指定値を維持しますが、profile 変更時はその profile の renderer / denoiser default を適用し、対象 history を reset します。
interactive denoise preset の設定:
{
"jsonrpc": "2.0",
"id": 14,
"method": "tools/call",
"params": {
"name": "lookdevpt.set_denoise",
"arguments": {
"preset": "interactive_stable",
"temporalStability": true,
"jitterMode": "stable32",
"movingJitterScale": 0.25,
"resetHistory": true
}
}
}
NRD REBLUR を選択する例。NRD SDKとD3D12 evaluation resourceが利用可能ならactive backendになり、利用できない場合だけinternal denoiserへ安全にfallbackします。実際の経路はlookdevpt.get_stateのdenoise.activeBackendとdenoise.nrd.fallbackReasonを確認してください。setupはOptional NVIDIA NRD Backendを参照してください。
{
"jsonrpc": "2.0",
"id": 15,
"method": "tools/call",
"params": {
"name": "lookdevpt.set_denoise",
"arguments": {
"backend": "nrd_reblur",
"resetNrd": true
}
}
}
DLSS Ray Reconstruction を選択する例。未対応環境では selected backend は保持しつつ internal denoiser に fallback します。詳細理由は lookdevpt.get_state の denoise.dlss.fallbackReason を確認してください。setup は Optional DLSS Ray Reconstruction を参照してください。
{
"jsonrpc": "2.0",
"id": 16,
"method": "tools/call",
"params": {
"name": "lookdevpt.set_denoise",
"arguments": {
"backend": "dlss_rr",
"dlssMode": "quality",
"resetDlss": true
}
}
}
material factor の設定:
{
"jsonrpc": "2.0",
"id": 17,
"method": "tools/call",
"params": {
"name": "lookdevpt.set_material",
"arguments": {
"index": 0,
"baseColor": [0.9, 0.76, 0.54, 1.0],
"roughness": 0.42,
"metallic": 0.0
}
}
}
material texture slot の override / clear:
{
"jsonrpc": "2.0",
"id": 16,
"method": "tools/call",
"params": {
"name": "lookdevpt.set_material_texture",
"arguments": {
"index": 0,
"slot": "baseColor",
"path": "D:\\LookDevTextures\\paint_basecolor.png"
}
}
}
slot override を消す場合は "clear": true、import 元の texture に戻す場合は "resetToSource": true を使います。
material variant の保存と適用:
{
"jsonrpc": "2.0",
"id": 17,
"method": "tools/call",
"params": {
"name": "lookdevpt.save_material_variant",
"arguments": {
"index": 0,
"variant": "warm rough"
}
}
}
{
"jsonrpc": "2.0",
"id": 18,
"method": "tools/call",
"params": {
"name": "lookdevpt.apply_material_variant",
"arguments": {
"index": 0,
"variant": "warm rough"
}
}
}
material focus と final view transform の設定:
{
"jsonrpc": "2.0",
"id": 19,
"method": "tools/call",
"params": {
"name": "lookdevpt.run_actions",
"arguments": {
"actions": [
{
"method": "set_material_view",
"params": { "selectedMaterial": 0, "focusMode": "dim" }
},
{
"method": "set_color_management",
"params": { "toneMapper": "aces", "exposure": 0.0, "gamma": 2.2 }
}
],
"validateOnly": false,
"stopOnError": true
}
}
}
viewport capture:
{
"jsonrpc": "2.0",
"id": 20,
"method": "tools/call",
"params": {
"name": "lookdevpt.capture_viewport",
"arguments": {}
}
}
validation 付き batch 実行:
{
"jsonrpc": "2.0",
"id": 21,
"method": "tools/call",
"params": {
"name": "lookdevpt.run_actions",
"arguments": {
"actions": [
{
"method": "set_path_tracing",
"params": { "mode": "restir_gi_di", "samplesPerFrame": 2 }
},
{
"method": "set_denoise",
"params": { "preset": "interactive_stable", "resetHistory": true }
}
],
"validateOnly": false,
"stopOnError": true
}
}
}
debug review pack の capture:
{
"jsonrpc": "2.0",
"id": 22,
"method": "tools/call",
"params": {
"name": "lookdevpt.capture_debug_pack",
"arguments": {
"views": [
"Final",
"Base Color",
"World Normal",
"Roughness",
"Metallic",
"Direct Signal",
"Indirect Signal",
"History Confidence"
]
}
}
}
dialog なしで project 保存:
{
"jsonrpc": "2.0",
"id": 23,
"method": "tools/call",
"params": {
"name": "lookdevpt.save_project_as",
"arguments": {
"path": "C:\\Projects\\D3D12LookDevPT\\projects\\bistro.lookdevpt.json"
}
}
}
Troubleshooting
401 Unauthorized: token が一致していません。ImGui のMCP Serverpanel から token を copy し、client connection を再起動してください。403 Forbidden: client が許可されていないOriginheader を送っています。400/-32020: modern routing header が不足、malformed、または JSON body と一致していません。protocol / method / name header は MCP client に生成させてください。400/-32022:2026-07-28、2025-11-25、2025-06-18のいずれかを使ってください。対応 version は error data にも入ります。400 MCP-Session-Id is required: legacy traffic だけに該当します。最初にinitializeを呼び、返ってきたMCP-Session-Idを送ってください。404 Unknown MCP session: legacy session が削除された、idle 30 分で失効した、または app/server が再起動されています。再度 initialize してください。GETの405 Method Not Allowed: 想定通りです。modern subscription はPOST subscriptions/listenの SSE response を使います。- modern
DELETEの405 Method Not Allowed: modern request は stateless なので想定通りです。DELETEは legacy session 終了専用です。 confirm_mutationsで mutation request が止まる: timeout 前に ImGui のMCP Serverpanel で Approve / Reject してください。MCP mutation queue is full: pending request が終わるのを待つか、pending mutation を approve/reject するか、server を再起動してください。- mutation 成功直後の state / stats read が古く見える: state は 33 ms、stats / diagnostics は 100 ms 待ってから再度 read してください。
capture_debug_packがread_onlyで拒否される、またはconfirm_mutationsで待つ: debug-view / history state を一時変更するため mutation access / approval が必要です。lookdevpt://captures/latest.pngが読めない: 先にlookdevpt.capture_viewportを 1 回呼んでください。