Files
Arcrun/mcp/README.md
T
Leo 5491409003 docs(mcp): README 加「更新 / acr update」段
- acr update:self-hosted 重跑部署、只部署變動 Worker、未變動略過(--force 全部重部)。
- 說明「新裝 vs 更新」差不多同一套流程,拿新零件(如 code)/新版就跑更新。
- 標待核佔位:下載源正從 GitHub codeload 改指 Gitea(Arcrun#4),確切行為待該 PR 定案。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 08:06:28 +00:00

253 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Arcrun MCP Server
> Arcrun 是 **AI 優先(AI-First** 的工作流自動化平台。
> 跟 AI 描述你的意圖,Arcrun 幫你把它變成可重複執行、不需要 AI 的自動化工作流。
Arcrun 是反過來的 n8n。n8n 從手寫程式開始,Arcrun 從 AI 描述開始——你說「去抓銀行匯率,用 Telegram 通知我」,AI 把它拆成三元組,Arcrun 查零件庫、組裝、執行。第一次需要 AI,之後自動跑,不再花 Token。
本目錄是 Arcrun 的 **MCP Server**(已併入 arcrun 主庫 `arcrun/mcp/`),讓 claude.ai、Claude Code、Claude Desktop 等 AI client 直接呼叫 Arcrun 的工作流與零件功能。它是「薄殼」——連哪台 cypher / 哪個帳號由設定決定,與 CLI 共用同一份身份來源。
**這份文件教你怎麼把這個 MCP 裝到你的前端來用。** 想貢獻新零件(投稿 WASM 元件)請見文末的 [貢獻新零件](#貢獻新零件)。
---
## MCP 連線 URL(先搞懂這個)
MCP 的 Streamable HTTP 端點路徑是 **`/mcp`**worker 根路徑 `/` 會 404)。無論哪種前端,你要填的 URL 都是:
| 部署 | MCP URL |
|------|---------|
| **官方託管 SaaS** | `https://mcp.arcrun.dev/mcp` |
| **自架 / 接案(self-hosted** | `https://arcrun-mcp.<你的CF子域>.workers.dev/mcp` |
> `<你的CF子域>` 是你 Cloudflare 帳號的 workers.dev 子域(`acr init --self-hosted` 部署後由 `workers_dev` 產生)。**請依你的實際部署子域調整。**
> 若你自己綁了 custom domain(如 `mcp.example.com`),URL 就是 `https://mcp.example.com/mcp`。
Transport 一律用 **`type: http`Streamable HTTP**。舊版 SSE`type: sse`)已不支援。
---
## 安裝方式
### 1. claude.ai 雲端 connector(遠端)
claude.ai 走 **OAuth 2.1 + PKCE** 認證(見下方[認證](#認證)),適合自架部署的 owner 遠端使用。
1. claude.ai → **Settings → Connectors → Add custom connector(新增自訂 connector**
2. **MCP Server URL** 貼上你的 MCP URL(例:`https://arcrun-mcp.<你的CF子域>.workers.dev/mcp`)。
3. 儲存後點 **Connect**claude.ai 會自動發現 OAuth(透過 `/.well-known/oauth-protected-resource`)並跳到同意頁 `/authorize`
4. 在同意頁**輸入 owner secret**——就是你部署時用 `wrangler secret put MCP_OWNER_SECRET` 設的那組祕密(只有 owner 知道)。祕密正確才發 token,之後 claude.ai 用該 token 呼叫工具。
5. token 有效期預設 30 天(`MCP_TOKEN_TTL`);到期後 claude.ai 會自動重走 OAuth,再輸一次 owner secret 即可。
> 官方 SaaS`mcp.arcrun.dev`)走的是 partner-key 驗證,不是 owner-secret 同意頁;一般接案/自架用戶用的是上面這條 OAuth 路徑。
### 2. Claude CodeCC / IDE
Claude Code 用專案層 `.mcp.json`HTTP transport)掛同一個 URLauth 走 OAuth(首次連線時在瀏覽器完成 owner-secret 同意頁)。
**推薦:用 CLI 自動產生**(依你的 arcrun 設定寫對的 URL,接案切資料夾自動切帳號):
```bash
acr mcp-setup
```
`acr mcp-setup` 依「env > 專案 `.arcrun.yaml` > 全域」解析出的 `mcp_url` 在當前資料夾寫 `.mcp.json`;沒設 `mcp_url` 就 fallback 平台預設 `https://mcp.arcrun.dev/mcp``acr init` 也會自動順帶跑這步。
**手動:** 在專案根建 `.mcp.json`
```json
{
"mcpServers": {
"arcrun": {
"type": "http",
"url": "https://arcrun-mcp.<你的CF子域>.workers.dev/mcp"
}
}
}
```
官方 SaaS 版本把 `url` 換成 `https://mcp.arcrun.dev/mcp` 即可。
也可用 CLI 直接加(HTTP transport):
```bash
claude mcp add --transport http arcrun https://arcrun-mcp.<你的CF子域>.workers.dev/mcp
```
### 3. 本機 Claude Desktop
Claude Desktop 的 `claude_desktop_config.json`macOS`~/Library/Application Support/Claude/`Windows`%APPDATA%\Claude\`)加一組 remote HTTP MCP
```json
{
"mcpServers": {
"arcrun": {
"type": "http",
"url": "https://arcrun-mcp.<你的CF子域>.workers.dev/mcp"
}
}
}
```
> **若你的 Claude Desktop 版本尚不支援 remote HTTP MCP**,改用 `mcp-remote` proxy 把 remote MCP 橋成本機 stdio
>
> ```json
> {
> "mcpServers": {
> "arcrun": {
> "command": "npx",
> "args": ["-y", "mcp-remote", "https://arcrun-mcp.<你的CF子域>.workers.dev/mcp"]
> }
> }
> }
> ```
>
> `mcp-remote` 會自動處理 OAuth 流程(跳瀏覽器完成 owner-secret 同意頁)。
---
## 更新(取得新零件 / 新版)
**更新流程 ≈ 重跑一次部署,已安裝的自動略過。** self-hosted 用戶要拿新零件(例如新增的 `code` 零件)或新版引擎時:
```bash
acr update
```
`acr update` 會下載最新的 Arcrun 部署物,只**部署新增 / 變更的 Worker,未變動的自動跳過**(終端會顯示「N 個未變動已跳過」)。它與 `acr init --self-hosted` 走同一條路(下載 → 注入 KV id → `wrangler deploy`),差別只在:`init` 是首次(建 KV / R2 + 寫 config),`update` 是沿用既有 config 重部署有變動的 Worker。所以「新裝 arcrun」和「更新」其實**差不多同一套流程**——想拿新零件 / 新版就跑更新。
- 只在 **self-hosted 模式**可用(部署在你自己的 Cloudflare);官方 SaaS 用戶由平台自動更新,不需要跑。
- 要強制把**全部** Worker 重部署一遍:`acr update --force`
- 冪等:KV namespace / D1 等基礎設施已存在則重用,不會重建。
> ⚠️ **更新源現況(待核佔位)**:`acr update` 的下載源正從 GitHub codeload 改指 **Gitea 自有真身**(修復追蹤 Arcrun#4)。上面描述以「修好後的 Gitea 版」為準;確切指令與來源行為**待該修復 PR 定案**,屆時再回來校正。
---
## 認證
MCP 打進 arcrun 觸及該租戶 **KBDB 全量讀寫**,必須有真認證。中介層(`src/middleware/partner-auth.ts`)依序嘗試:
1. **OAuth 2.1 access_token**(自架部署的遠端正規路徑)
- claude.ai / Claude Code / Claude Desktop 遠端連線都走這條。
- 唯一的人類祕密閘在 `/authorize` 同意頁:輸入 **`MCP_OWNER_SECRET`**(部署時以 CF Secret 設定,只有 owner 知道)。祕密正確才發 authorization code → 換 access_token。
- 只知道「網址」的人打得開同意頁、能跑 DCR,但**沒有 owner secret 就換不到 token**,打 `/mcp` 一律 401。
2. **`MCP_STATIC_TOKEN`CF Secret,本機 / CLI 相容路徑)**
- 本機 Claude Code / GUI 若不想每次走 OAuth,可設 `MCP_STATIC_TOKEN`(真祕密),把它當 `Authorization: Bearer <此值>` 帶進 `.mcp.json`
- 這是取代**已廢除的「明碼 namespace 當 bearer」**舊路徑的安全做法——用真祕密 token,而非把 namespace 明碼放行。
3. **官方 SaaS`MULTI_TENANT` 未設 / `true`** → KBDB partner-key`pk_live…`)驗證,行為不變。
> ⚠️ **舊的「明碼 namespace bearer」路徑已從預設移除**(送 `Bearer leo` 就能讀 leo 全部資料的洞已補)。只有明確設 `ALLOW_PLAINTEXT_NAMESPACE="true"`(遷移期逃生門,預設關、將 SUNSET)才會恢復,正式環境勿用。
完整安全模型(PKCE、audience 綁定、KV 儲存鐵律、redirect 白名單)見 **[OAUTH.md](./OAUTH.md)**。
---
## 部署前置(self-hosted 用戶)
自架前,先把 OAuth 需要的 KV 與 Secret 就緒(完整清單見 **[OAUTH.md](./OAUTH.md) §7**,此處只摘要):
1. `acr init --self-hosted` 部署 arcrun-mcp worker。
- **CLI 路徑**`OAUTH_KV` namespace 由 `deploy.ts` 自動建立並填入真 id(零手動)。
- **手動直推**`wrangler kv namespace create OAUTH_MCP` → 把 id 貼進 `mcp/wrangler.toml``[[kv_namespaces]] OAUTH_KV`
2. **設 owner secret**`wrangler secret put MCP_OWNER_SECRET`(輸入只有你知道的強祕密)。
3. (選配)**設本機相容 static token**`wrangler secret put MCP_STATIC_TOKEN`
4. (選配)`[vars]` 調整 `MCP_OWNER_NAMESPACE`(預設 `leo`/ `MCP_TOKEN_TTL`(預設 259200030 天)/ `MCP_ALLOWED_REDIRECT_HOSTS`
5. 驗收:`curl <origin>/.well-known/oauth-protected-resource` → 200;未帶 token 打 `/mcp` → 401 帶 `WWW-Authenticate`claude.ai 加 connector 走完 OAuth 能連上。
> KV / secret 未就緒時,OAuth 端點誠實回 503、`/mcp` 回 401(不假綠),既有官方 SaaS partner-key 路徑不受影響。
---
## MCP Tools 總覽
連上後,前端會看到兩組工具:`arcrun_*`(平台功能)與 `kbdb_*`(資料層)。
### `arcrun_*`
**工作流(Workflow**
| Tool | 一句話 |
|------|--------|
| `arcrun_validate_yaml` | 部署前驗證工作流 YAML schema。 |
| `arcrun_push_workflow` | 把工作流 YAML 部署到雲端引擎。 |
| `arcrun_run_workflow` | 觸發已部署的工作流執行(可帶 `input`)。 |
| `arcrun_list_workflows` / `arcrun_get_workflow` / `arcrun_delete_workflow` | 列出 / 取得 / 刪除工作流(直問 cypher-executor 真實狀態)。 |
| `arcrun_search_workflows` | 語意搜尋工作流。 |
| `arcrun_list_recent_executions` / `arcrun_list_paused_executions` / `arcrun_get_execution_trace` | 查最近 / 暫停中的執行、取單次執行 trace。 |
**零件(Component**
| Tool | 一句話 |
|------|--------|
| `arcrun_search_components` | 用自然語言語意搜尋零件庫。 |
| `arcrun_list_components` / `arcrun_get_component` | 列出零件、取單一零件完整合約。 |
| `arcrun_get_component_guide` | 取得 TinyGo 開發指引(**開發新零件前必先呼叫**)。 |
| `arcrun_publish_component` | 提交 WASM 零件(見[貢獻新零件](#貢獻新零件))。 |
**Recipe(配方 · 公庫 / 私庫)**
| Tool | 一句話 |
|------|--------|
| `arcrun_recipe_search` / `arcrun_recipe_list` | 搜尋 / 列出配方。 |
| `arcrun_recipe_pull` / `arcrun_recipe_push` / `arcrun_recipe_delete` | 拉取 / 推送 / 刪除私庫配方。 |
| `arcrun_recipe_submit_p` | 投稿配方到公庫。 |
**Skill / Example**
| Tool | 一句話 |
|------|--------|
| `arcrun_list_skills` / `arcrun_get_skill` | 列出 / 取得技能。 |
| `arcrun_list_examples` / `arcrun_get_example` / `arcrun_search_examples` | 列出 / 取得 / 搜尋範例。 |
**Tag**
| Tool | 一句話 |
|------|--------|
| `arcrun_create_tag` / `arcrun_list_tags` / `arcrun_delete_tag` | 建立 / 列出 / 刪除 tag。 |
| `arcrun_tag_resource` / `arcrun_untag_resource` | 為工作流或零件加上 / 移除 tag。 |
**其他**
| Tool | 一句話 |
|------|--------|
| `arcrun_whoami` | 回報當前身份 / namespace(與 `acr whoami` 對齊)。 |
| `arcrun_report_feedback` | 回報使用回饋。 |
| `arcrun_get_gui_context` | 取 arcrun-gui 畫布上下文。 |
### `kbdb_*`(資料層薄殼)
類 Supabase 萬用表:AI 只有 template + slot 可用,**不提供建表 / SQL tool**(儲存鐵律)。
| Tool | 一句話 |
|------|--------|
| `kbdb_search` | 語意搜尋 KBDB 記錄。 |
| `kbdb_query` | 依條件查詢記錄。 |
| `kbdb_get_record` | 取單一記錄。 |
| `kbdb_create_record` | 建立記錄(依 template + slots)。 |
| `kbdb_list_templates` / `kbdb_create_template` | 列出 / 建立 template。 |
---
## Inspector 測試界面
開啟 `<你的 MCP origin>/mcp/inspector`(官方=`https://mcp.arcrun.dev/mcp/inspector`)即可在瀏覽器互動式測試所有 MCP tools。
---
## 搭配 arcrun-gui 使用
[arcrun-gui](../arcrun-gui) 是 Arcrun 的人類操作介面,與 arcrun-mcp 共享同一個 KBDB 狀態:
- AI 透過 arcrun-mcp 操作(搜尋零件、執行 Workflow)
- 人類透過 arcrun-gui 操作(拖拉畫布、查看零件庫)
- AI 的操作結果即時反映在 arcrun-gui 的畫布上
詳細開發指南請參閱 **[GUIDE.md](./GUIDE.md)**。
---
## 貢獻新零件
想投稿 WASM 零件(TinyGo 開發、本地測試、`arcrun_publish_component` 提交、沙盒驗收)?完整流程見 **[CONTRIBUTING-components.md](./CONTRIBUTING-components.md)**。