[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-crewform-agents-act-like-mcp-tools-en":3,"tags-crewform-agents-act-like-mcp-tools-en":30,"related-lang-crewform-agents-act-like-mcp-tools-en":41,"related-posts-crewform-agents-act-like-mcp-tools-en":45,"series-ai-agent-51e2d621-4c94-4b3d-b2aa-1087d78a6705":82},{"id":4,"title":5,"content":6,"summary":7,"source":8,"source_url":9,"author":10,"image_url":11,"keywords":12,"language":18,"translated_content":10,"views":19,"is_premium":20,"created_at":21,"updated_at":21,"cover_image":11,"published_at":22,"rewrite_status":23,"rewrite_error":10,"rewritten_from_id":24,"slug":25,"category":26,"related_article_id":27,"status":28,"google_indexed_at":29,"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":20},"51e2d621-4c94-4b3d-b2aa-1087d78a6705","CrewForm Agents Can Now Act Like MCP Tools","\u003Cp>Model Context Protocol, or MCP, has been getting real traction because it gives AI apps a shared way to find and call tools. In \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>, the team took that idea one step further: published agents can now appear as tools inside \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>, and any other MCP client.\u003C\u002Fp>\u003Cp>The interesting part is that the agents do not know they are being called through MCP. They still run with their own model, system prompt, knowledge base, and tool access. The MCP layer just turns them into something external apps can invoke with a single JSON-RPC call.\u003C\u002Fp>\u003Cp>That matters because it pushes AI orchestration closer to a plug-and-play model. Instead of writing custom wrappers for every agent you want to expose, you flip a publish flag, copy a config snippet, and the agent becomes callable from the client side.\u003C\u002Fp>\u003Ch2>What CrewForm actually changed\u003C\u002Fh2>\u003Cp>CrewForm already supported MCP as a client, which meant its agents could call outside tools such as GitHub, Brave Search, and Postgres. The new work reverses the direction. Now CrewForm can also act as an MCP server, exposing selected agents to external clients as tools.\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1775131439381-rxgf.png\" alt=\"CrewForm Agents Can Now Act Like MCP Tools\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>The implementation is small enough to fit in one HTTP handler, \u003Ccode>mcpServer.ts\u003C\u002Fcode>, which the team says is about 300 lines. It mounts at \u003Ccode>POST \u002Fmcp\u003C\u002Fcode> alongside the platform’s other protocol handlers, including A2A and AG-UI.\u003C\u002Fp>\u003Cp>That design choice is smart for a few reasons. It keeps the surface area compact, it avoids a separate service for MCP, and it lets the same agent runtime handle both internal and external calls.\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>Protocol:\u003C\u002Fstrong> MCP uses JSON-RPC 2.0 over HTTP\u003C\u002Fli>\u003Cli>\u003Cstrong>Discovery call:\u003C\u002Fstrong> \u003Ccode>tools\u002Flist\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Cstrong>Execution call:\u003C\u002Fstrong> \u003Ccode>tools\u002Fcall\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Cstrong>Transport choice:\u003C\u002Fstrong> streamable HTTP\u003C\u002Fli>\u003Cli>\u003Cstrong>Publishing switch:\u003C\u002Fstrong> \u003Ccode>is_mcp_published\u003C\u002Fcode>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>The server does not invent a new tool format. It follows MCP’s existing methods, which keeps compatibility high and makes the integration easier to reason about.\u003C\u002Fp>\u003Ch2>How an agent becomes a tool\u003C\u002Fh2>\u003Cp>When an MCP client asks for \u003Ccode>tools\u002Flist\u003C\u002Fcode>, CrewForm queries its workspace for agents marked as published. Each one becomes a tool entry with a normalized name, a short description, and a simple input schema that expects a single \u003Ccode>message\u003C\u002Fcode> field.\u003C\u002Fp>\u003Cp>The naming rules matter because MCP tool names must be lowercase, alphanumeric, and underscore-separated, with a 64-character limit. So an agent called \u003Ccode>Blog Content Writer v2\u003C\u002Fcode> turns into \u003Ccode>blog_content_writer_v2\u003C\u002Fcode>. That kind of normalization sounds minor, but it prevents a lot of friction once clients start auto-discovering tools.\u003C\u002Fp>\u003Cp>When a client calls \u003Ccode>tools\u002Fcall\u003C\u002Fcode>, CrewForm looks up the matching agent, creates a task record in the database, and lets the existing task runner process it. In other words, the same execution path used by the UI also handles MCP requests.\u003C\u002Fp>\u003Cp>That point is easy to miss, but it is the real architectural win. The MCP call is not a thin prompt relay. The agent runs with its full configuration, including model choice, system prompt, tools, and knowledge base.\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>Discovery payload:\u003C\u002Fstrong> one MCP tool per published agent\u003C\u002Fli>\u003Cli>\u003Cstrong>Task creation:\u003C\u002Fstrong> database insert into \u003Ccode>tasks\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Cstrong>Execution source:\u003C\u002Fstrong> \u003Ccode>mcp\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Cstrong>Timeout used in polling:\u003C\u002Fstrong> 120,000 ms\u003C\u002Fli>\u003Cli>\u003Cstrong>Result path:\u003C\u002Fstrong> JSON-RPC response after completion\u003C\u002Fli>\u003C\u002Ful>\u003Cp>That model is especially useful for teams that already built opinionated agents. A \u003Ca href=\"\u002Fnews\u002Fintuit-qodo-ai-code-review-investor-angle-en\">code review\u003C\u002Fa>er agent can keep its own rules, a content writer can keep its own voice, and a research agent can keep its own tool set. The MCP client just sees tools.\u003C\u002Fp>\u003Ch2>Authentication, transport, and why HTTP won\u003C\u002Fh2>\u003Cp>For authentication, CrewForm reused its existing API key system. MCP clients send a Bearer token, and the backend maps that token to a workspace by checking the encrypted key in the database. Only agents published in that workspace are exposed.\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1775131441517-j110.png\" alt=\"CrewForm Agents Can Now Act Like MCP Tools\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>That is a practical security boundary. It means one token does not unlock every agent in the system. It only exposes the workspace the key belongs to, which is exactly what you want if different teams are using the same platform.\u003C\u002Fp>\u003Cblockquote>“The Protocol is not the product.” — \u003Ca href=\"https:\u002F\u002Fmodelcontextprotocol.io\" target=\"_blank\" rel=\"noopener\">Anthropic\u003C\u002Fa>, MCP documentation\u003C\u002Fblockquote>\u003Cp>Transport choice was another important decision. MCP supports stdio, SSE, and streamable HTTP. CrewForm picked streamable HTTP because its runner already speaks HTTP, and because that format works well behind proxies, load balancers, and CDNs.\u003C\u002Fp>\u003Cp>It also fits the way modern clients are shipping. Both Claude Desktop and Cursor support HTTP-based MCP flows, which means users do not need a separate local bridge or a long-running socket process.\u003C\u002Fp>\u003Cp>If you zoom out, this choice is less about protocol purity and more about deployment reality. HTTP is boring in the best possible way: easy to host, easy to inspect, and easy to put in front of existing infrastructure.\u003C\u002Fp>\u003Ch2>Why the UX matters as much as the server\u003C\u002Fh2>\u003Cp>The backend change is simple, but the product work around it is what makes the feature usable. On each agent detail page, CrewForm added a one-click \u003Cstrong>MCP Publish\u003C\u002Fstrong> toggle. Flip it on and the agent appears as a tool. Flip it off and it disappears.\u003C\u002Fp>\u003Cp>They also added a button to generate an MCP API key in Settings &gt; \u003Ca href=\"\u002Fnews\u002Fopencode-mcp-servers-oauth-support-en\">MCP Servers\u003C\u002Fa>. The key is prefixed with \u003Ccode>cf_mcp_\u003C\u002Fcode>, shown once for copying, and then pasted into the client config. That small detail removes a bunch of setup pain.\u003C\u002Fp>\u003Cp>Instead of making users hand-write JSON, CrewForm generates the config snippet for them. That matters because a lot of adoption friction comes from the last 10 percent of setup, not the core feature itself.\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>Publish action:\u003C\u002Fstrong> one toggle per agent\u003C\u002Fli>\u003Cli>\u003Cstrong>Key generation:\u003C\u002Fstrong> one click in settings\u003C\u002Fli>\u003Cli>\u003Cstrong>Client config:\u003C\u002Fstrong> auto-generated JSON snippet\u003C\u002Fli>\u003Cli>\u003Cstrong>Setup target:\u003C\u002Fstrong> \u003Ccode>claude_desktop_config.json\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Cstrong>Activation step:\u003C\u002Fstrong> restart the MCP client\u003C\u002Fli>\u003C\u002Ful>\u003Cp>For developers, this is the difference between “interesting demo” and “tool I will actually use.” If the path from idea to working integration takes five minutes, people will try it. If it takes an afternoon of config debugging, they will move on.\u003C\u002Fp>\u003Cp>That is why the article’s example feels concrete. A \u003Cstrong>Code Reviewer\u003C\u002Fstrong> agent can be built with \u003Ca href=\"https:\u002F\u002Fopenai.com\u002Findex\u002Fhello-gpt-4o\u002F\" target=\"_blank\" rel=\"noopener\">GPT-4o\u003C\u002Fa>, a code-quality prompt, and access to GitHub tools. Once published, Claude can delegate a review task to it without knowing the details.\u003C\u002Fp>\u003Ch2>How this compares with other agent setups\u003C\u002Fh2>\u003Cp>There are a lot of ways to expose AI agents today, but most of them fall into one of two buckets: custom APIs or tightly coupled app-specific integrations. CrewForm’s MCP approach sits in a cleaner middle ground because it uses a standard that other clients already understand.\u003C\u002Fp>\u003Cp>That does not make it magical. It still depends on how good the underlying agent is, and it still needs proper controls around publishing and auth. But it does remove a pile of glue code that usually gets in the way.\u003C\u002Fp>\u003Cp>Here is the practical comparison:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>Custom REST wrapper:\u003C\u002Fstrong> you build and maintain one endpoint per agent, plus your own schema conventions\u003C\u002Fli>\u003Cli>\u003Cstrong>App-specific plugin:\u003C\u002Fstrong> fast for one client, weak for portability across tools\u003C\u002Fli>\u003Cli>\u003Cstrong>CrewForm MCP publishing:\u003C\u002Fstrong> one agent definition, then exposure to multiple MCP clients through the same interface\u003C\u002Fli>\u003Cli>\u003Cstrong>Direct prompt forwarding:\u003C\u002Fstrong> simpler to start, but it drops the agent’s own runtime, tools, and knowledge base\u003C\u002Fli>\u003C\u002Ful>\u003Cp>The article also points to a broader platform direction. CrewForm now spans four modes: MCP client, MCP server, A2A for agent-to-agent delegation, and AG-UI for real-time frontend streaming. The key idea is consistency: one codebase, multiple protocol roles.\u003C\u002Fp>\u003Cp>If you are building internal AI infrastructure, that is a nice place to be. You can keep the agent logic in one system and decide later whether it should call out, be called, or talk to another agent.\u003C\u002Fp>\u003Cp>For teams already using \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\" target=\"_blank\" rel=\"noopener\">MCP\u003C\u002Fa>, the takeaway is straightforward: published agents can become first-class tools without a second implementation. For teams not using it yet, this is a good example of why the protocol has gotten attention so quickly.\u003C\u002Fp>\u003Ch2>What to watch next\u003C\u002Fh2>\u003Cp>The most interesting part of this update is not the toggle or the config snippet. It is the idea that an agent platform can expose the same runtime in multiple directions without rewriting the agent itself. That gives developers a clean way to reuse work across clients, products, and teams.\u003C\u002Fp>\u003Cp>I would expect the next pressure point to be permissions and observability. Once teams publish dozens of agents as tools, they will want finer-grained access controls, better audit logs, and clearer usage metrics around which client called what, when, and with which inputs.\u003C\u002Fp>\u003Cp>That is where this model gets serious. The question stops being “can we expose an agent as a tool?” and becomes “which agents should be public, which should stay private, and how do we track their behavior across clients?”\u003C\u002Fp>\u003Cp>If CrewForm keeps the current simplicity while adding those controls, it could become a useful reference for anyone trying to turn internal agents into shared infrastructure. If you are building something similar, the obvious next step is to publish one agent, call it from a real MCP client, and see how much glue code you can delete.\u003C\u002Fp>","CrewForm now exposes published agents as MCP tools, so Claude Desktop and Cursor can call them directly with one config file.","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-1775131439381-rxgf.png",[13,14,15,16,17],"MCP","CrewForm","Claude Desktop","Cursor","AI agents","en",0,false,"2026-04-02T12:03:40.711171+00:00","2026-04-02T12:03:40.661+00:00","done","9f1f54ea-8c4e-437f-b8f5-38b5826ec124","crewform-agents-act-like-mcp-tools-en","ai-agent","7ddbbf8f-d0ea-49fd-9104-771f0aa0f77e","published","2026-04-08T09:00:52.509+00:00",[31,33,35,37,39],{"name":16,"slug":32},"cursor",{"name":14,"slug":34},"crewform",{"name":13,"slug":36},"mcp",{"name":15,"slug":38},"claude-desktop",{"name":17,"slug":40},"ai-agents",{"id":27,"slug":42,"title":43,"language":44},"crewform-agents-act-like-mcp-tools-zh","CrewForm 讓 Agent 直接變 MCP 工具","zh",[46,52,58,64,70,76],{"id":47,"slug":48,"title":49,"cover_image":50,"image_url":50,"created_at":51,"category":26},"c5d4bc11-1f4d-438c-b644-a8498826e1ab","claude-agent-dreaming-outcomes-multiagent-en","Claude给Agent加了“做梦”功能","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778868649463-f5qv.png","2026-05-15T18:10:25.29539+00:00",{"id":53,"slug":54,"title":55,"cover_image":56,"image_url":56,"created_at":57,"category":26},"fda44d24-7baf-4d91-a7f9-bbfecae20a27","switch-ai-outputs-markdown-to-html-en","How to Switch AI Outputs from Markdown to HTML","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778743249827-wmsr.png","2026-05-14T07:20:22.631724+00:00",{"id":59,"slug":60,"title":61,"cover_image":62,"image_url":62,"created_at":63,"category":26},"064275f5-4282-47c3-8e4a-60fe8ac99246","anthropic-cat-wu-proactive-ai-assistants-en","Anthropic’s Cat Wu on proactive AI assistants","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778735465548-a92i.png","2026-05-14T05:10:31.723441+00:00",{"id":65,"slug":66,"title":67,"cover_image":68,"image_url":68,"created_at":69,"category":26},"423ac8ad-2886-42a9-8dd8-78e5d43a1574","how-to-run-hermes-agent-on-discord-en","How to Run Hermes Agent on Discord","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778724656141-i30t.png","2026-05-14T02:10:35.727086+00:00",{"id":71,"slug":72,"title":73,"cover_image":74,"image_url":74,"created_at":75,"category":26},"776a562c-99a6-4a6b-93a0-9af40300f3f2","why-ragflow-is-the-right-open-source-rag-engine-to-self-host-en","Why RAGFlow is the right open-source RAG engine to self-host","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778674254587-0pxn.png","2026-05-13T12:10:25.721583+00:00",{"id":77,"slug":78,"title":79,"cover_image":80,"image_url":80,"created_at":81,"category":26},"322ec8bc-61d3-4c80-bb9e-a19941e137c6","how-to-add-temporal-rag-in-production-en","How to Add Temporal RAG in Production","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778667085221-0mox.png","2026-05-13T10:10:31.619892+00:00",[83,88,93,98,103,108,113,118,123,128],{"id":84,"slug":85,"title":86,"created_at":87},"03db8de8-8dc2-4ac1-9cf7-898782efbb1f","anthropic-claude-ai-agent-task-automation-en","Anthropic's Claude AI Agent: A New Era of Task Automation","2026-03-25T16:25:06.513026+00:00",{"id":89,"slug":90,"title":91,"created_at":92},"045d1abc-190d-4594-8c95-91e2a26f0c5a","googles-2026-ai-agent-report-decoded-en","Google’s 2026 AI Agent Report, Decoded","2026-03-26T11:15:23.046616+00:00",{"id":94,"slug":95,"title":96,"created_at":97},"e64aba21-254b-4f93-aa21-837484bb52ec","kimi-k25-review-stronger-still-not-legend-en","Kimi K2.5 review: stronger, still not a legend","2026-03-27T07:15:55.385951+00:00",{"id":99,"slug":100,"title":101,"created_at":102},"30dfb781-a1b2-4add-aebe-b3df40247c37","claude-code-controls-mac-desktop-en","Claude Code now controls your Mac desktop","2026-03-28T03:01:59.384091+00:00",{"id":104,"slug":105,"title":106,"created_at":107},"254405b6-7833-4800-8e13-f5196deefbe6","cloudflare-100x-faster-ai-agent-sandbox-en","Cloudflare’s 100x Faster AI Agent Sandbox","2026-03-28T03:09:44.356437+00:00",{"id":109,"slug":110,"title":111,"created_at":112},"04f29b7f-9b91-4306-89a7-97d725e6e1ba","openai-backs-isara-agent-swarm-bet-en","OpenAI backs Isara’s agent-swarm bet","2026-03-28T03:15:27.849766+00:00",{"id":114,"slug":115,"title":116,"created_at":117},"3b0bf479-e4ae-4703-9666-721a7e0cdb91","openai-plan-automated-ai-researcher-en","OpenAI’s plan for an automated AI researcher","2026-03-28T03:17:42.312819+00:00",{"id":119,"slug":120,"title":121,"created_at":122},"fe91bce0-b85d-4efa-a207-24ae9939c29f","harness-engineering-ai-agent-reliability-2026","Harness Engineering: From Bridle to Operating System, The Missing Link in AI Agent Reliability","2026-03-31T06:36:55.648751+00:00",{"id":124,"slug":125,"title":126,"created_at":127},"67dc66da-ca46-4aa5-970b-e997a39fe109","openai-codex-plugin-claude-code-en","OpenAI puts Codex inside Claude Code","2026-04-01T09:21:55.381386+00:00",{"id":129,"slug":130,"title":131,"created_at":132},"7a09007d-820f-43b3-8607-8ad1bfcb94c8","mcp-explained-from-prompts-to-production-en","MCP Explained: From Prompts to Production","2026-04-01T09:24:40.089177+00:00"]