BotsUP.
服務項目案例研究聯絡我們
BotsUP.

新型態軟體顧問公司。從產品策略、新產品開發、AI Agent 整合到長期維運,一站式交付可用、可維護、可持續的軟體產品。

BotsUP LLC

30 N Gould St Ste N

Sheridan, WY 82801

矽基崛起有限公司

106092 台北市大安區

仁愛路四段34號2樓

快速連結

  • 服務項目
  • 案例
  • 研究
  • 聯絡我們
  • 加入我們

Our Products

產品

  • Agent2PDF
  • BotsUP Visibility Console

框架

  • BotsUP Content Pipeline
  • BotsUP Multi-Agent Framework
其他品牌矽基遊戲工作室矽基崛起出版社矽基時代 [Si]gnals

© 2026 BotsUP LLC. 矽基崛起有限公司 All rights reserved.

隱私政策服務條款
返回研究

用 Claude + MCP 重寫整個公司的 Ops:BotsUP 真實 stack 拆解

2026-04-10 · Vincent Liaw · 9 分鐘閱讀

用 Claude + MCP 重寫整個公司的 Ops:BotsUP 真實 stack 拆解

BotsUP 把整個公司的 Ops(策略、專案、商業、內容)全部重寫成 4 個 MCP server,Claude 是第一公民。這篇透明拆解我們的 stack、tool 設計、AI agent 使用模式與踩過的坑。

用 Claude + MCP 重寫整個公司的 Ops:BotsUP 真實 stack 拆解

我是 Vincent,BotsUP 的 founder。過去 10 個月我把整間公司的內部系統重寫一次,核心決策只有一個:AI Agent 是 first-class user,不是事後加上的 chat bubble。

這篇文章是我們自家 stack 的誠實拆解,不是 demo、不是 marketing,是每天實際在跑的東西。如果你是 CTO、或正在考慮把內部流程 AI 化,這篇應該能省你幾個禮拜的摸索。

TL;DR

  • BotsUP 的 admin backend 掛著 4 個 MCP server(PM / Dev / CMS / Biz),總共約 120 個 tool。
  • MCP 走 OAuth 2.1,Claude.ai、Cursor、我們自研的 agent runner 都接得上。
  • 主網站跑在 App Hosting(Next.js 15 App Router),MCP proxy + OAuth 拆到 Cloud Run,資料層是 Firestore + Firebase Auth。
  • 每個 Agent(Morning briefing、Bookkeeping、PM、Dev)都只是 Claude + 特定幾個 MCP tool 的排列組合,沒有 LangChain、沒有 agent framework。
  • 財務記帳、報價發票、每日 briefing、PR ship 流程,目前 80% 以上由 Claude 操刀,我只做 P0/P1 review 和 scope 決策。

先講結論:Stack at a glance

層級選擇為什麼
前端 + APINext.js 15 App RouterSSR + API Routes 同 repo、RSC、部署彈性
資料庫Firestoremulti-tenant scoped query 原生好用、跟 Firebase Auth 無縫
認證Firebase Auth + 自建 role(admin / developer / editor / viewer)成熟、free tier 夠、role 自己長
主站部署Firebase App Hosting(botsup.cc)和 Firebase stack 最順、build cache 穩定
MCP proxyCloud Run(mcp.botsup.cc)pay-per-request、cold start 可接受、OAuth handler 獨立部署
MCP 協定Model Context Protocol(Anthropic spec)LLM 能 discover / choose / call tool,跨 agent 平台共用
Agent runnerClaude.ai(native MCP)、Cursor、Claude Code CLI沒有自己寫 agent loop,把 orchestration 交給上游
觀測Firestore audit_logs collection + Cloud Logging每個 tool call 都留 trace

注意一個關鍵分工:MCP 工具本體跑在 App Hosting(src/app/api/mcp/*),Cloud Run 只是一層薄 proxy + OAuth handler。這讓我改 tool 邏輯只要 push GitHub,App Hosting 自動部署,不用動到 MCP deployment pipeline。


MCP Server #1:botsup-pm — PM Agent(約 60 tools)

職責:策略(Objective / OKR)→ Milestone → Epic → Backlog Item 的完整管理,加上每日 briefing、Kanban、feedback inbox、scope guard、weekly focus。

Architecture:

Objective (年 / 季 OKR)
  └── (optional) Milestone(成功標準 + due date)
                   └── Epic(有意義的功能模塊,PM 建)
                        └── Backlog Item(可執行 task,Dev Agent 拆)

Project.onePager → strategicLinks: Objective[]

Project 有一份 One-Pager,帶 vision / problem / strategicLinks / non-goals / success metrics。Agent 在做任何 scope 判斷前都會先讀這份,才不會亂答。

主要 tools(節錄):

  • 策略層:create_objective, update_key_result, list_bets, create_bet
  • 執行層:create_milestone, create_epic, break_down_epic, claim_next_item, update_backlog_item
  • 追蹤層:get_milestone_dashboard, get_weekly_focus, close_weekly_focus, log_scope_event
  • Inbox:ingest_feedback, triage_feedback, link_feedback_to_item

實際用法:

  1. 早上我打「今天 P0 能做什麼」→ Claude 連 get_milestone_dashboard 抓最緊急 milestone,再打 list_backlog 過濾 P0/P1,組一張清單給我,順便幫我 recommend 從哪一個開始。
  2. 客戶 email 進來 → 我把內容丟給 Claude → Claude 自動叫 ingest_feedback 寫進 inbox,tag 專案、猜 priority、建議是否要建 backlog item。
  3. 每週五晚上 → close_weekly_focus + get_strategy_dashboard 自動生 retro,我只要補一段文字脈絡。
  4. Scope guard:GitHub push 如果 commit 沒有 [BU-xxx] 或 [EPIC-xxx],webhook 會觸發 log_scope_event,focus score < 60% 我會收到通知。這是 advisory,不阻擋 push,因為有時候就是要打亂一下 scope。

MCP Server #2:botsup-dev — Dev Agent(約 20 tools)

職責:Epic 拆解、自動開發 loop(claim → develop → PR → ship)、GitHub webhook 整合。

Architecture:Dev Agent 跟 PM Agent 共用同一份 Firestore backlog collection,但 tool surface 更小、更動作導向。Agent 不該看到策略層,看到會分心。

主要 tools:

  • get_milestone_dashboard → list_epics({ milestoneId }) → 找未完成 epic
  • break_down_epic → 如果 epic 沒有 child → 拆成 3-8 個 backlog item
  • claim_next_item → 領一個 item,回傳完整 context(description / acceptance criteria / relatedFiles)
  • log_completed_work, ship_backlog_item, flag_for_review
  • get_kanban_board 給 dev standup 用

實際 loop(Cursor + Claude Code):

  1. 我在 Cursor 打「claim 下一個 item」→ Cursor 透過 MCP 叫 claim_next_item
  2. Claude 拿到完整 item spec,開始寫 code,一邊寫一邊更新 update_backlog_item
  3. Push commit,訊息帶 [BU-{backlogItemId}] 或 [EPIC-{epicId}](也支援 closes #{githubIssueNumber})
  4. GitHub webhook 打回 App Hosting /api/webhooks/github,解析 commit、更新 state、同步 PR 狀態
  5. P0/P1 item:必須等我 review PR 才能 ship_backlog_item;P2/P3:CI 綠了自動 ship
  6. Ship 時自動 close linked issue,並 recompute parent epic 的完成度和 milestone %

這套在 .github/workflows/botsup-sync.yml 是一個 reusable workflow,四個 repo(Agent2PDF / OnReel / BotsUP Website / 日本房產觀察室)通用。Dev Agent 跨 repo 拿 task 不用改 code。


MCP Server #3:botsup-cms — CMS Agent

職責:內容管理(article / channel / review queue)、招聘(job posting / application)、媒體資產。

主要 tools:create_article, update_article, submit_for_review, approve_content, publish_article, create_channel, create_job, list_applications, update_application_status。

實際用法:

  • AI 寫 research article:我給 brief(就像你現在讀的這篇),Claude 在背景叫 create_article 建 draft → submit_for_review → 我 review → approve_content → publish_article。整條 pipeline 不用登入 admin UI。
  • 履歷處理:應徵者送表單 → list_applications → Claude 讀 resume + 職缺 JD → 給我一個 ranking 和 summary → 我按鈕 call update_application_status。
  • Content workflow 有 role gating:editor 只能建 draft、developer 以上才能 approve。Role check 在 MCP tool 層做,不是 UI 層,所以 agent 也擋得住。

CMS 的 tool 數量比 PM / Biz 少,因為內容模型本來就沒那麼複雜。不要為了看起來強就硬塞 tool,這是我自己繞過的坑。


MCP Server #4:botsup-biz — Biz Agent(40+ tools,財務最肥)

職責:報價、發票、合約、薪資、費用報銷、銀行對帳、401 營業稅、股東代墊款、journal entry、試算表、財報。

主要 tools:

  • 銷售:create_quotation, create_contract, create_invoice, link_invoice_to_quotation
  • 費用:create_expense_claim, approve_expense_claim, create_cost_record
  • 薪資:calculate_payroll, revert_payroll_to_draft, execute_payroll_run
  • 記帳:create_journal_entry, reconcile_bank_entry, get_trial_balance, get_financial_statement
  • 稅務:query_tax_status, prepare_401_filing

TWD 整數元政策:所有 TWD journal line(debit / credit)必須為整數元。外幣換算(例如 USD → TWD)在 roundTWD() 做一次 Math.round() 寫進 cost_records.amountTWD;建 journal 前還會再 round 一次當防禦。小於 1 元的差額直接吸收進該科目,大於 100 元的差額記到 5502 雜項費用。這條規則是 agent 最容易犯錯的地方,寫在 tool docstring 裡,Claude 會自己守住。

實際用法:

  • Client 付款入帳 → 把銀行對帳單丟給 Claude → 自動 reconcile_bank_entry + create_journal_entry(借:銀行 / 貸:應收帳款)
  • 月底薪資:calculate_payroll(draft)→ 我 review → 如果要改:revert_payroll_to_draft → 重算 → execute_payroll_run 寫進總帳
  • 季報:get_trial_balance + get_financial_statement 直接產表,我不需要打開 admin UI
  • 發票/報價單必須雙向連結(sourceQuotationId / invoiceId / contractId),tool 層強制,不允許孤兒發票

這是 4 個 MCP server 裡最重、最怕 agent 出錯的,但也是 ROI 最高的。過去每月對帳至少花我兩天,現在通常 2 小時內搞定。


AI Agent 使用模式

所有 Agent 都不是自研 loop,就是 Claude + 指定幾個 MCP tool 的 prompt template。

Morning briefing Agent(每日 08:00 自動跑)

讀 milestones / kanban / 未讀 feedback / 過去 24 小時 git activity / calendar / unread email。產出一份 Markdown briefing,pinned 到 Action! App 當天第一筆。我起床先看這個,決定今天工作順序。

Bookkeeping Agent(event-driven)

收到費用報銷表單、發票 OCR、銀行對帳 CSV → 自動叫 biz MCP 建 journal entry。月底跑一次 full reconciliation,有差異的項目 flag 給我。

PM Agent(daily + on-demand)

每日 standup(what's done / in flight / blocked)、scope guard(追 commit 有沒有對齊 milestone)、focus score。每週五自動寫 retro draft。

Dev Agent(Cursor 手動觸發)

Claim 下一個 backlog item → 在 .claude/worktrees/ 開獨立 worktree → 寫 code → PR → ship。Commit message 自動帶 [BU-xxx]。這是我個人生產力漲最多的環節,實際上 Claude 現在處理我 60%+ 的 routine 開發工作。


Stack decisions:為什麼選這些,不選那些

為什麼 Next.js 15 App Router,不用 Remix / SvelteKit:SSR + API Routes 同 repo 一次搞定、RSC 讓 admin page 直接從 Firestore 抓資料免多寫一層、部署到 Vercel / Cloud Run / App Hosting 都能直接跑。重點是 MCP 的 HTTP endpoint 也是 Next.js API route(src/app/api/mcp/pm/route.ts 等),一份 code 同 deploy。

為什麼 Firestore 不用 Postgres:BotsUP 是 multi-tenant,每個 workspace 有自己的 workspaceId,Firestore 的 scoped query(where('workspaceId', '==', ctx.workspaceId))搭 security rules 做 row-level 隔離非常直覺。加上我自己在水滴發票時期就熟,zero learning curve。代價是 join 很醜、aggregate query 要自己 fan-out,但對 ops 系統來說可以接受。

為什麼 GCP 不用 AWS / Vercel-only:Firebase 全家桶、Cloud Run pay-per-request 符合我們流量型態、台灣 region(asia-east1)延遲低到可接受。Secret Manager 管 Firebase config 走 runtime 讀取,NEXT_PUBLIC_* 在 server side 一樣 runtime 拿得到,不會 hardcode 進 bundle。

為什麼 MCP 不是 REST API:REST 要在 prompt 裡寫 curl 指令、LLM 要自己組 headers、出錯 retry 是地獄。MCP 讓 LLM 能直接 discover tool schema、選工具、呼叫、拿到 typed response。我們 tool surface 120 個,用 REST 管理根本不可能,prompt context 會爆。更重要:standard spec 讓 Claude.ai、Cursor、自研 runner 共用同一份 tool,不用 per-agent rewrite。


Production 實務

  • Auth:MCP endpoint 吃 Bearer token(OAuth 2.1 flow by Claude.ai),內部 agent 吃 long-lived JWT。Token issuer 在 Cloud Run 的 mcp-proxy,key 存 Secret Manager。
  • Multi-tenant:每個 workspace 有 workspaceId,tool 層用 ctx.workspaceId 做 scoped query,security rule 再防禦一次。Agent 拿到的 token 已經綁定 workspace,跨 workspace 不可能。
  • Rate limiting:Cloud Run 自帶 concurrency limit,加上 custom middleware 對 expensive tag 的 tool(例如 get_financial_statement)做 per-minute cap,避免 LLM runaway call 把 Firestore 打爆。
  • Audit log:每個 tool call 寫 audit_logs collection,欄位:actorType(human / agent),actorId, toolName, args(redacted),result, ts。debug AI 行為這個 log 是命根子。

給其他團隊的建議

  1. 不要從 chat bubble 開始。那是 demo,不是系統。從一個具體、窄、深的流程(例如「每週報銷記帳」)開始,把它做到 agent 能完全接管。
  2. 第一個 MCP server 先做 read-only。讓 agent 幫你「查」東西,你驗幾週 tool surface 跟 auth 流程都穩了,再加 write。
  3. Tool 設計 idempotent。LLM 會 retry,你要保證 create_invoice 同樣 input 呼叫兩次不會建兩張發票(做 idempotencyKey)。
  4. 每個 tool 都能 dry-run。尤其是會動錢的(journal entry、payroll),一定要有 dryRun: true 模式回 preview。
  5. Docstring 就是 prompt。tool description 寫清楚 constraint(例如「TWD 金額必為整數元」),比你事後在 system prompt 亡羊補牢好十倍。
  6. Scope guard 要 advisory,不 blocking。AI 做錯方向很常見,但硬擋會讓人類抓狂。log + notify 就好,決策權留給 human。

FAQ

Q1:開發這一套花了多久? 核心 4 個 MCP server 從 scratch 到 production 約 10 個月,我一個人主寫(Claude 幫我寫大約 60%)。前 3 個月在 PM + Dev,第 4-7 個月加 Biz(財務最複雜),第 8-10 個月加 CMS + 調 production hardening。

Q2:我公司很小(3-5 人),也適合做 MCP 架構嗎? 適合,而且越小越適合,因為你沒有 legacy system 要遷移。但不要一次做 4 個 server,先選一個最痛的流程(通常是記帳或 PM),做一個 MCP server、5-10 個 tool,跑 1-2 個月驗模式。

Q3:會不會太 vendor lock-in Claude? MCP 是 open spec,Anthropic 主導但 OpenAI / local LLM 都有在 follow。我們 tool layer 跟 Claude 無關,換成 GPT-5 只要換 agent runner 那一層。真正的 lock-in 是 Firebase,不是 Claude。

Q4:成本多少(LLM API + GCP)? 目前 monthly:Claude API 約 USD 400-600(重度使用),GCP(App Hosting + Cloud Run + Firestore)約 USD 150-250。以取代掉的人力(我自己省 15-20 小時/週)來算,payback < 1 個月。

Q5:可以用開源的 MCP framework 嗎? 可以,Anthropic 有 TypeScript / Python SDK(modelcontextprotocol.io)。我一開始用 TS SDK,後來為了跟 Next.js API route 整合順一點,把 transport layer 換成自己寫的 HTTP handler。如果你是獨立 server(不嵌 Next.js),直接用 SDK 就好,不用重造輪子。


延伸閱讀

  • MCP vs REST API:企業 AI 整合該選哪個?
  • Enterprise MCP OAuth security checklist
  • Enterprise AI Agent:四個常見 failure mode 與對策
  • BotsUP 服務內容
  • BotsUP 實作案例

參考資料

  1. Model Context Protocol 官方規範 — https://modelcontextprotocol.io/
  2. Anthropic:Claude.ai native MCP support 公告
  3. Google Cloud Run 官方文件 — https://cloud.google.com/run/docs
  4. Next.js 15 App Router 文件 — https://nextjs.org/docs/app

BotsUP 自己的 admin 就是最強 demo:4 個 MCP server、AI Agent 從 day 1 是第一公民。我們現在用同一套方法幫客戶把他們的內部 ops 也 AI 化。30 分鐘需求診斷,看怎麼在你公司做一套。

Vincent Liaw

BotsUP 創辦人

水滴發票(196 萬用戶、App Store 2021 年度最佳 APP)共同創辦人。現為 BotsUP 創辦人,專注 AI Agent、MCP 整合、Flutter App 與企業自動化。ISO 27001 對齊、矽基崛起有限公司為台灣合作窗口。

延伸閱讀

MCP 標準化如何重塑企業 AI 整合:2026 年的關鍵轉折點

MCP 標準化如何重塑企業 AI 整合:2026 年的關鍵轉折點

企業內部 AI Agent 導入的 4 個失敗模式

企業內部 AI Agent 導入的 4 個失敗模式

整理我們協助客戶與自家 admin 上線後觀察到的 4 個最常見失敗模式:Chat Bubble 症候群、Scope 失控、沒有 Evaluation 基準、沒有 Ops Owner。附反模式與實務作法。

為什麼你的 AI Agent 需要 MCP,不只是 API

為什麼你的 AI Agent 需要 MCP,不只是 API

很多企業以為把 API 接給模型就算完成 AI 整合,但真正可維運、可擴充、可治理的 AI Agent 能力層,通常需要 MCP 而不只是零散 API。