[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-crewform-agents-act-like-mcp-tools-zh":3,"tags-crewform-agents-act-like-mcp-tools-zh":34,"related-lang-crewform-agents-act-like-mcp-tools-zh":51,"related-posts-crewform-agents-act-like-mcp-tools-zh":55,"series-ai-agent-7ddbbf8f-d0ea-49fd-9104-771f0aa0f77e":92},{"id":4,"title":5,"content":6,"summary":7,"source":8,"source_url":9,"author":10,"image_url":11,"keywords":12,"language":22,"translated_content":10,"views":23,"is_premium":24,"created_at":25,"updated_at":25,"cover_image":11,"published_at":26,"rewrite_status":27,"rewrite_error":10,"rewritten_from_id":28,"slug":29,"category":30,"related_article_id":31,"status":32,"google_indexed_at":33,"x_posted_at":10,"tweet_text":10,"title_rewritten_at":10,"title_original":10,"key_takeaways":10,"topic_cluster_id":10,"embedding":10,"is_canonical_seed":24},"7ddbbf8f-d0ea-49fd-9104-771f0aa0f77e","CrewForm 讓 Agent 直接變 MCP 工具","\u003Cp>說真的，這功能很實用。\u003Ca href=\"https:\u002F\u002Fdev.to\u002Fvincent_grobler_776512b17\u002Fhow-we-turned-crewform-agents-into-mcp-tools-4lc2\" target=\"_blank\" rel=\"noopener\">CrewForm\u003C\u002Fa> 讓已發布的 agent 直接變成 \u003Ca href=\"https:\u002F\u002Fmodelcontextprotocol.io\" target=\"_blank\" rel=\"noopener\">MCP\u003C\u002Fa> 工具。\u003Ca href=\"https:\u002F\u002Fclaude.ai\u002Fdownload\" target=\"_blank\" rel=\"noopener\">Claude Desktop\u003C\u002Fa> 和 \u003Ca href=\"https:\u002F\u002Fcursor.com\" target=\"_blank\" rel=\"noopener\">Cursor\u003C\u002Fa> 都能直接呼叫。只要一份設定檔，不用再自己包一層 API。\u003C\u002Fp>\u003Cp>這件事的重點，不是多了一個按鈕。重點是，agent 還是照原本的模型、system prompt、知識庫和工具跑。MCP 只是把它包成外部 app 能叫的 tool。講白了，就是把內部 agent 變成可插拔元件。\u003C\u002Fp>\u003Cp>對開發者來說，這很省事。你不用為每個 agent 寫一套 wrapper。你只要發布，然後把設定貼進 client。這種做法很對味，因為 AI 編排最煩的，常常不是模型本身，是那些接線工作。\u003C\u002Fp>\u003Ch2>CrewForm 到底改了什麼\u003C\u002Fh2>\u003Cp>CrewForm 原本就支援 MCP client。也就是說，它自己的 agents 可以去呼叫外部工具。像是 GitHub、Brave Search、Postgres 這些都能接。這次更新則是反過來，讓 CrewForm 也能當 MCP server。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1775131437845-4zm2.png\" alt=\"CrewForm 讓 Agent 直接變 MCP 工具\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>這個方向很關鍵。以前是 agent 去找工具。現在是外部 client 直接把 agent 當工具叫。兩邊都通了之後，整個系統就比較像一個通用編排層，而不是單一產品功能。\u003C\u002Fp>\u003Cp>技術上，這次實作很小。作者提到核心檔案是 \u003Ccode>mcpServer.ts\u003C\u002Fcode>，大約 300 行。它掛在 \u003Ccode>POST \u002Fmcp\u003C\u002Fcode>。而且和 A2A、AG-UI 這些 protocol handler 放在同一個服務裡。這種設計很務實，沒有再拆一個獨立服務出來。\u003C\u002Fp>\u003Cul>\u003Cli>Protocol 用 JSON-RPC 2.0 over HTTP\u003C\u002Fli>\u003Cli>工具發現靠 \u003Ccode>tools\u002Flist\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>工具執行靠 \u003Ccode>tools\u002Fcall\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>Transport 用 streamable HTTP\u003C\u002Fli>\u003Cli>發布開關是 \u003Ccode>is_mcp_published\u003C\u002Fcode>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>我覺得這裡最聰明的地方，是沒有自創格式。它老老實實走 MCP 現有方法。這樣相容性高，client 端也比較不會卡住。\u003C\u002Fp>\u003Ch2>Agent 怎麼變成 Tool\u003C\u002Fh2>\u003Cp>當 MCP client 發出 \u003Ccode>tools\u002Flist\u003C\u002Fcode>，CrewForm 會去 workspace 裡找已發布的 agents。每個 agent 都會變成一個 tool entry。裡面有名稱、簡短描述，還有 input schema。這個 schema 很單純，只吃一個 \u003Ccode>message\u003C\u002Fcode> 欄位。\u003C\u002Fp>\u003Cp>名稱正規化也很重要。MCP tool 名稱要小寫、只能用英數和底線，長度不能超過 64 字元。像 \u003Ccode>Blog Content Writer v2\u003C\u002Fcode> 會變成 \u003Ccode>blog_content_writer_v2\u003C\u002Fcode>。這看起來只是格式整理，但實務上很有用。因為 client 自動探索工具時，不會被奇怪命名搞死。\u003C\u002Fp>\u003Cp>當 client 呼叫 \u003Ccode>tools\u002Fcall\u003C\u002Fcode>，CrewForm 會找到對應 agent，建立 task record，然後交給既有的 runner 執行。也就是說，UI 用的執行路徑，和 MCP 用的是同一條。\u003C\u002Fp>\u003Cp>這點很值得講。MCP 呼叫不是單純轉 prompt。agent 還是帶著自己的 model、system prompt、工具權限和知識庫跑。這代表你不是把能力縮水後再外包出去，而是把完整 agent 暴露成一個標準化入口。\u003C\u002Fp>\u003Cul>\u003Cli>每個已發布 agent 對應一個 MCP tool\u003C\u002Fli>\u003Cli>任務會寫進 \u003Ccode>tasks\u003C\u002Fcode> 資料表\u003C\u002Fli>\u003Cli>執行來源標記為 \u003Ccode>mcp\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>輪詢 timeout 是 120,000 ms\u003C\u002Fli>\u003Cli>完成後回 JSON-RPC response\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這對團隊很友善。像 code reviewer、研究助理、內容生成器，都能保留自己的規則。外部 client 看到的只是工具清單。背後怎麼做，交給 agent 自己。\u003C\u002Fp>\u003Ch2>驗證、傳輸，還有 HTTP 為什麼合理\u003C\u002Fh2>\u003Cp>驗證部分，CrewForm 沿用既有 API key 系統。MCP client 送 Bearer token，後端去資料庫找加密後的 key，然後對應到 workspace。只有那個 workspace 裡已發布的 agents 會被曝光。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1775131444956-qo1m.png\" alt=\"CrewForm 讓 Agent 直接變 MCP 工具\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>這個邊界很實際。不是一把 key 開全部。它只開你有權限的 workspace。對多團隊共用平台的人來說，這種分層很重要，因為沒人想把內部 agent 全部攤平給外部 client 看。\u003C\u002Fp>\u003Cblockquote>“The Protocol is not the product.” — \u003Ca href=\"https:\u002F\u002Fmodelcontextprotocol.io\" target=\"_blank\" rel=\"noopener\">Anthropic\u003C\u002Fa>\u003C\u002Fblockquote>\u003Cp>傳輸層的選擇也很務實。MCP 支援 stdio、SSE、streamable HTTP。CrewForm 選 HTTP，原因很簡單。它原本的 runner 就是 HTTP 架構，而且這種方式比較好放在 proxy、load ba\u003Ca href=\"\u002Fnews\u002Fsolanas-2026-push-institutions-ai-and-fixes-zh\">lan\u003C\u002Fa>cer 和 CDN 後面。\u003C\u002Fp>\u003Cp>這也符合現在 client 的走向。\u003Ca href=\"\u002Fnews\u002Fclaude-code-source-map-leak-zh\">Clau\u003C\u002Fa>de Desktop 和 Cursor 都支援 HTTP 型 MCP 流程。使用者不用自己架 local bridge，也不用維持一個長跑 socket process。這對落地很重要，因為部署越簡單，團隊越願意試。\u003C\u002Fp>\u003Cp>講白了，HTTP 很無聊，但很穩。它容易除錯，也容易接現有基礎設施。對企業內部系統來說，這通常比「很酷的傳輸方式」更有價值。\u003C\u002Fp>\u003Ch2>使用體驗才是成敗關鍵\u003C\u002Fh2>\u003Cp>後端改動雖然小，但產品體驗才是重點。CrewForm 在 agent 詳細頁加了 \u003Cstrong>MCP Publish\u003C\u002Fstrong> 切換。打開後，agent 就會出現在工具清單裡。關掉後，就消失。\u003C\u002Fp>\u003Cp>他們也在 Settings &gt; MCP Servers 加了一個產生 API key 的按鈕。Key 前綴是 \u003Ccode>cf_mcp_\u003C\u002Fcode>，只顯示一次，讓你複製到 client 設定檔。這種設計很懂痛點，因為最煩的往往不是核心功能，而是那 10% 的設定細節。\u003C\u002Fp>\u003Cp>更方便的是，它還會幫你產生 MCP config snippet。你不用自己手寫 JSON。這件事看似小，卻很影響採用率。很多工具死在設定文件，不是死在功能本身。\u003C\u002Fp>\u003Cul>\u003Cli>每個 agent 都能單獨發布\u003C\u002Fli>\u003Cli>Key 可一鍵產生\u003C\u002Fli>\u003Cli>Client 設定可自動產生\u003C\u002Fli>\u003Cli>支援 \u003Ccode>claude_desktop_config.json\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>啟用後要重啟 MCP client\u003C\u002Fli>\u003C\u002Ful>\u003Cp>對開發者來說，這就是 demo 跟真實工具的差別。五分鐘能接起來，大家才會想玩。要是卡半天，最後就只會躺在 GitHub 上吃灰。\u003C\u002Fp>\u003Cp>文章裡舉的例子也很直白。你可以做一個 \u003Ca href=\"\u002Fnews\u002Fopencode-mcp-servers-oauth-support-zh\">Code\u003C\u002Fa> Reviewer agent，用 \u003Ca href=\"https:\u002F\u002Fopenai.com\u002Findex\u002Fhello-gpt-4o\u002F\" target=\"_blank\" rel=\"noopener\">GPT-4o\u003C\u002Fa>、一個 code-quality prompt，外加 GitHub 工具。發布之後，Claude 就能直接把 review 任務丟給它。\u003C\u002Fp>\u003Ch2>跟其他 agent 整合方式比起來\u003C\u002Fh2>\u003Cp>現在能暴露 agent 的方式很多。大致上有兩種。第一種是自訂 API wrapper。第二種是 app-specific plugin。前者彈性高，但你要自己維護 schema 和 endpoint。後者接起來快，但可攜性差。\u003C\u002Fp>\u003Cp>CrewForm 這次走 MCP，剛好卡在中間。它用的是大家都能理解的標準。這不會讓 agent 變神，但會少掉很多 glue code。對團隊來說，少寫一堆接口黏土，通常就是好事。\u003C\u002Fp>\u003Cp>如果直接比，差異很清楚。下面這幾種做法，各有代價。你會發現，MCP 的價值不在炫技，而在標準化。\u003C\u002Fp>\u003Cul>\u003Cli>自訂 REST wrapper：每個 agent 都要自己包一次\u003C\u002Fli>\u003Cli>App-specific plugin：接單一產品很快，但搬不走\u003C\u002Fli>\u003Cli>CrewForm MCP publish：一份 agent 定義，多個 client 可用\u003C\u002Fli>\u003Cli>直接 prompt forwarding：最省事，但會丟掉 agent runtime\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這次更新還透露出一個方向。CrewForm 現在同時扮演 MCP client、MCP server、A2A 協調者、AG-UI 前端串流端。這代表同一套 runtime 可以往不同方向輸出。\u003C\u002Fp>\u003Cp>如果你在做內部 AI 基礎設施，這種架構很香。今天先讓 agent 去呼叫別人，明天再讓別人呼叫它，後天再讓 agent 跟 agent 對話。你不用重寫核心邏輯。\u003C\u002Fp>\u003Ch2>這背後的產業脈絡\u003C\u002Fh2>\u003Cp>MCP 會紅，不是沒原因。它解決的是一個老問題：AI app 怎麼用一致方式找工具、叫工具、回傳結果。對開發者來說，標準一出來，整個整合成本就會掉很多。\u003C\u002Fp>\u003Cp>這也解釋了為什麼 Claude Desktop、Cursor 這類產品很快跟上。它們不是只想做聊天介面，而是想變成工作流入口。當工具呼叫變標準化，client 端就能把外部能力接進來，像 IDE、知識庫、內部服務都能串。\u003C\u002Fp>\u003Cp>從平台角度看，CrewForm 這次不是只加一個功能。它是在說，agent 不是只能在自己的 UI 裡跑。它可以被別的 app 叫，也可以去叫別的工具。這種雙向能力，對企業內部整合很重要。\u003C\u002Fp>\u003Cp>如果你關心這個領域，接下來要看的是權限和觀測。當一家公司開始發布十幾個 agent 時，誰能叫、誰不能叫、叫了什麼、輸入了什麼，都會變成管理問題。這些東西比 demo 更無聊，但更重要。\u003C\u002Fp>\u003Ch2>下一步該看什麼\u003C\u002Fh2>\u003Cp>我覺得最值得注意的，不是 toggle，也不是 config snippet。是這種模式讓 agent 平台可以用同一個 runtime，對外變成工具，對內維持原本能力。這會讓很多內部系統少掉重工。\u003C\u002Fp>\u003Cp>如果 CrewForm 接下來把權限控管、audit log、使用統計做完整，這套玩法就會更像正式基礎設施，而不是單次整合。對台灣團隊來說，這很值得試。尤其是已經有內部 agent 的公司。\u003C\u002Fp>\u003Cp>我的建議很直接。先挑一個 agent，先發布一次，先接到 Claude Desktop 或 Cursor。你會很快知道，哪些步驟是必要的，哪些只是多餘的包裝。這種實測，比看規格書有用多了。\u003C\u002Fp>\u003Cp>接下來真正的問題不是「能不能接」。而是「哪個 agent 值得公開」，還有「你要怎麼管它」。這才是 MCP 進到實戰後，大家一定會碰到的題目。\u003C\u002Fp>","CrewForm 把已發布的 agents 直接暴露成 MCP tools，Claude Desktop 和 Cursor 只要一份設定檔就能呼叫。這篇拆解它怎麼做、為何重要，以及和其他 agent 整合方式的差別。","dev.to","https:\u002F\u002Fdev.to\u002Fvincent_grobler_776512b17\u002Fhow-we-turned-crewform-agents-into-mcp-tools-4lc2",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1775131437845-4zm2.png",[13,14,15,16,17,18,19,20,21],"CrewForm","MCP","Claude Desktop","Cursor","agent","AI工具","Model Context Protocol","JSON-RPC","HTTP","zh",1,false,"2026-04-02T12:03:40.231248+00:00","2026-04-02T12:03:40.165+00:00","done","9f1f54ea-8c4e-437f-b8f5-38b5826ec124","crewform-agents-act-like-mcp-tools-zh","ai-agent","51e2d621-4c94-4b3d-b2aa-1087d78a6705","published","2026-04-08T09:00:52.546+00:00",[35,37,39,41,43,45,47,49],{"name":36,"slug":17},"Agent",{"name":16,"slug":38},"cursor",{"name":21,"slug":40},"http",{"name":13,"slug":42},"crewform",{"name":19,"slug":44},"model-context-protocol",{"name":14,"slug":46},"mcp",{"name":18,"slug":48},"ai工具",{"name":15,"slug":50},"claude-desktop",{"id":31,"slug":52,"title":53,"language":54},"crewform-agents-act-like-mcp-tools-en","CrewForm Agents Can Now Act Like MCP Tools","en",[56,62,68,74,80,86],{"id":57,"slug":58,"title":59,"cover_image":60,"image_url":60,"created_at":61,"category":30},"38406a12-f833-4c69-ae22-99c31f03dd52","switch-ai-outputs-markdown-to-html-zh","怎麼把 AI 輸出改成 HTML","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778743243861-8901.png","2026-05-14T07:20:21.545364+00:00",{"id":63,"slug":64,"title":65,"cover_image":66,"image_url":66,"created_at":67,"category":30},"c7c69fe4-97e3-4edf-a9d6-a79d0c4495b4","anthropic-cat-wu-proactive-ai-assistants-zh","Cat Wu 談 Claude 的主動式 AI","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778735455993-gnw7.png","2026-05-14T05:10:30.453046+00:00",{"id":69,"slug":70,"title":71,"cover_image":72,"image_url":72,"created_at":73,"category":30},"e1d6acda-fa49-4514-aa75-709504be9f93","how-to-run-hermes-agent-on-discord-zh","如何在 Discord 執行 Hermes Agent","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778724655796-cjul.png","2026-05-14T02:10:34.362605+00:00",{"id":75,"slug":76,"title":77,"cover_image":78,"image_url":78,"created_at":79,"category":30},"4104fa5f-d95f-45c5-9032-99416cf0365c","why-ragflow-is-the-right-open-source-rag-engine-to-self-host-zh","為什麼 RAGFlow 是最適合自架的開源 RAG 引擎","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778674262278-1630.png","2026-05-13T12:10:23.762632+00:00",{"id":81,"slug":82,"title":83,"cover_image":84,"image_url":84,"created_at":85,"category":30},"7095f05c-34f5-469f-a044-2525d2010ce9","how-to-add-temporal-rag-in-production-zh","如何在正式環境加入 Temporal RAG","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778667053844-osvs.png","2026-05-13T10:10:30.930982+00:00",{"id":87,"slug":88,"title":89,"cover_image":90,"image_url":90,"created_at":91,"category":30},"10479c95-53c6-4723-9aaa-2fde5fb19ee7","github-agentic-workflows-ai-github-actions-zh","GitHub 把 AI 代理放進 Actions","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778551884342-8io7.png","2026-05-12T02:11:02.069769+00:00",[93,98,103,108,113,118,123,128,133,138],{"id":94,"slug":95,"title":96,"created_at":97},"4ae1e197-1d3d-4233-8733-eafe9cb6438b","claude-now-uses-your-pc-to-finish-tasks-zh","Claude 開始幫你操作電腦","2026-03-26T07:20:48.457387+00:00",{"id":99,"slug":100,"title":101,"created_at":102},"5bede67f-e21c-413d-9ab8-54a3c3d26227","googles-2026-ai-agent-report-decoded-zh","Google 2026 AI Agent 報告解讀","2026-03-26T11:15:22.651956+00:00",{"id":104,"slug":105,"title":106,"created_at":107},"2987d097-563f-46c7-b76f-b558d8ef7c2b","kimi-k25-review-stronger-still-not-legend-zh","Kimi K2.5 評測：更強，但還不是神作","2026-03-27T07:15:55.277513+00:00",{"id":109,"slug":110,"title":111,"created_at":112},"95c9053b-e3f4-4cb5-aace-5c54f4c9e044","claude-code-controls-mac-desktop-zh","Claude Code 也能操控 Mac 了","2026-03-28T03:01:58.58121+00:00",{"id":114,"slug":115,"title":116,"created_at":117},"dc58e153-e3a8-4c06-9b96-1aa64eabbf5f","cloudflare-100x-faster-ai-agent-sandbox-zh","Cloudflare 的 AI 沙箱跑超快","2026-03-28T03:09:44.142236+00:00",{"id":119,"slug":120,"title":121,"created_at":122},"1c8afc56-253f-47a2-979f-1065ff072f2a","openai-backs-isara-agent-swarm-bet-zh","OpenAI 挺 Isara 的 agent swarm …","2026-03-28T03:15:27.513155+00:00",{"id":124,"slug":125,"title":126,"created_at":127},"7379b422-576e-45df-ad5a-d57a0d9dd467","openai-plan-automated-ai-researcher-zh","OpenAI 想做自動化 AI 研究員","2026-03-28T03:17:42.090548+00:00",{"id":129,"slug":130,"title":131,"created_at":132},"48c9889e-86df-450b-a356-e4a4b7c83c5b","harness-engineering-ai-agent-reliability-2026-zh","駕馭工程：從「馬具」到「作業系統」，AI Agent 可靠性的終極密碼","2026-03-31T06:42:53.556721+00:00",{"id":134,"slug":135,"title":136,"created_at":137},"e41546b8-ba9e-455f-9159-88d4614ad711","openai-codex-plugin-claude-code-zh","OpenAI 把 Codex 放進 Claude Code","2026-04-01T09:21:54.687617+00:00",{"id":139,"slug":140,"title":141,"created_at":142},"96d8e8c8-1edd-475d-9145-b1e7a1b02b65","mcp-explained-from-prompts-to-production-zh","MCP 怎麼把提示詞變工作流","2026-04-01T09:24:39.321274+00:00"]