name = "arcrun-mcp"  # 2026-06-06 搬進主庫 arcrun/mcp/，對齊 arcrun-* 命名（SDD mcp-account-source.md §5）
main = "src/index.ts"
compatibility_date = "2024-11-27"
compatibility_flags = [ "nodejs_compat" ]
workers_dev = true   # 對齊 arcrun 部署慣例（rule 05）：deploy 掃描自動啟用 workers.dev URL

# ── 租戶模式（self-hosted fork 必看）─────────────────────────────────────────────
# 官方 SaaS：[vars] 不含 MULTI_TENANT（預設多租戶）→ MCP 走 partner-key 驗證（pk_live）。
# self-hosted 單租戶：acr init/update 部署時 **自動注入** MULTI_TENANT="false" 進此 [vars]
#   （cli/src/lib/deploy.ts injectMultiTenant，依 config.mode='self-hosted'）→ MCP 接受 Bearer =
#   namespace 明碼，不打 KBDB partner 驗證，直接當 org_namespace（與 cypher 的 MULTI_TENANT=false 對齊）。
#   用戶零填寫（不必手動取消註解）。手動 fork 不走 CLI 者，自行在此加 MULTI_TENANT = "false"。
# SDD: sdk-and-website/mcp-account-source.md §5.5；HANDOFF §3b。
[vars]

# Service Bindings（issue #12：用 [[services]] array-of-tables，不用 services=[...] inline）
# ⚠️ 為何不能用 inline `services = [...]`：它在 [vars] table 之後 → TOML 會把它吸成
#   `vars.services`（普通 var 陣列）而非頂層 service bindings → wrangler 看不到 binding。
#   self-hosted 部署注入 MULTI_TENANT 進 [vars] 後此問題暴露（MCP 報 CYPHER_EXECUTOR not configured）。
#   array-of-tables `[[services]]` 是獨立頂層 table，不受 [vars] 影響（對齊官方 cypher-executor/wrangler.toml）。
# 2026-05-07：COMPONENT_REGISTRY 從 inkstone-component-registry 改為 arcrun-registry（現役）。
[[services]]
binding = "COMPONENT_REGISTRY"
service = "arcrun-registry"

[[services]]
binding = "CYPHER_EXECUTOR"
service = "arcrun-cypher-executor"

[[services]]
binding = "KBDB"
service = "arcrun-kbdb"

# ── OAuth 2.1 server（claude.ai 遠端 connector 安全登入，見 mcp/OAUTH.md）──────────────
# 短效認證儲存（authorization code + access token，皆帶 TTL、key 用 SHA-256 hash）。
# id 是占位：
#   • CLI 路徑（acr init / acr update）→ deploy.ts 已把 OAUTH_KV 納入 REQUIRED_KV_NAMESPACES，
#     自動建 namespace + injectWranglerConfig 換成用戶帳號真 id（零手動）。
#   • 手動直推（leo21c wrangler deploy，mistakes #23 codeload 陷阱下的路徑）→ 需自己先建並填 id：
#     wrangler kv namespace create OAUTH_MCP  → 把 id 貼到下面。
# 未設此 binding → OAuth /authorize、/token 回 503（誠實拒絕，不假綠），既有 MCP 路徑不受影響。
[[kv_namespaces]]
binding = "OAUTH_KV"
id = "REPLACE_WITH_REAL_KV_ID"  # CLI 部署會自動換；手動直推才需填（wrangler kv namespace create OAUTH_MCP）

# ── OAuth 相關機密與設定 ───────────────────────────────────────────────────────────
# 機密走 CF Secrets（wrangler secret put，不進 toml、非 KV、非明碼 var）：
#   wrangler secret put MCP_OWNER_SECRET   # /authorize 同意頁把關密碼（只有 owner 知道）
#   wrangler secret put MCP_STATIC_TOKEN   # （選配）本機 CLI/GUI/Claude Code 相容用的真祕密 token
# 非機密設定可放 [vars]（下方 [vars] table）：
#   MCP_OWNER_NAMESPACE     access_token 綁定的資料分區，預設 "leo"
#   MCP_TOKEN_TTL           access_token 存活秒數，預設 2592000（30 天，有意取捨見 OAUTH.md §5；7 天為更保守選項）
#   MCP_ALLOWED_REDIRECT_HOSTS  逗號分隔 redirect host 白名單，預設 claude.ai/claude.com/anthropic.com＋localhost
#   ALLOW_PLAINTEXT_NAMESPACE  【不安全，SUNSET】="true" 恢復舊明碼 namespace 漏洞路徑，僅遷移期，驗收完即刪
#                              （追蹤移除的 issue 見 OAUTH.md §5）

# Route — MCP 搬進 arcrun 主庫後改用 arcrun.dev zone（與其他 worker 一致）。
# 舊的 studio.finally.click 是 inkstone 平台 zone，arcrun 帳號沒有該 zone → 部署 route 失敗。
# 對外正式 MCP URL = mcp.arcrun.dev；對內 / fork 仍可走 workers_dev=true 的 arcrun-mcp.<sub>.workers.dev。
[[routes]]
pattern = "mcp.arcrun.dev/*"
zone_name = "arcrun.dev"

# [alias] 移除：之前是 Zod 4 的 compat shim，但 MCP SDK 1.x 用的是 Zod 3 介面，
# shim 讓 SDK 拿到 Zod 4 內部結構，introspect schema 時報 _zod undefined。
# 降到 Zod 3.x 後不需要 shim（package.json）。
