From f8b73faf5d4da7c0753800e66f34d8267f0f3b46 Mon Sep 17 00:00:00 2001 From: decolua Date: Mon, 8 Jun 2026 15:35:37 +0700 Subject: [PATCH] feat(cowork): re-enable Claude Cowork with preset-only stdio MCP Restore Cowork feature while closing the RCE vector: drop user-defined stdio commands so only hard-coded preset plugins (browsermcp) may spawn. Custom MCP now accepts remote URL only. Routes stay gated to localhost. Co-authored-by: Cursor --- .../cli-tools/components/CoworkToolCard.js | 73 ++++--------------- .../api/cli-tools/cowork-settings/route.js | 43 ++--------- src/app/api/mcp/[plugin]/message/route.js | 2 - src/app/api/mcp/[plugin]/sse/route.js | 2 - src/lib/mcp/stdioSseBridge.js | 37 +--------- src/shared/constants/cliTools.js | 17 ++--- src/shared/constants/coworkPlugins.js | 5 +- 7 files changed, 33 insertions(+), 146 deletions(-) diff --git a/src/app/(dashboard)/dashboard/cli-tools/components/CoworkToolCard.js b/src/app/(dashboard)/dashboard/cli-tools/components/CoworkToolCard.js index a3b20bcc..07bba260 100644 --- a/src/app/(dashboard)/dashboard/cli-tools/components/CoworkToolCard.js +++ b/src/app/(dashboard)/dashboard/cli-tools/components/CoworkToolCard.js @@ -48,7 +48,7 @@ export default function CoworkToolCard({ const [modelSelectOpen, setModelSelectOpen] = useState(false); const [marketplaceOpen, setMarketplaceOpen] = useState(false); const [addMcpOpen, setAddMcpOpen] = useState(false); - const [addMcpForm, setAddMcpForm] = useState({ type: "url", name: "", url: "", command: "", args: "" }); + const [addMcpForm, setAddMcpForm] = useState({ name: "", url: "" }); useEffect(() => { if (apiKeys?.length > 0 && !selectedApiKey) { @@ -374,7 +374,7 @@ export default function CoworkToolCard({
{p.name} custom - {p.url || p.command} + {p.url} @@ -388,7 +388,7 @@ export default function CoworkToolCard({ - Find MCPs → @@ -554,17 +554,6 @@ export default function CoworkToolCard({
-
- - -
-
@@ -576,41 +565,16 @@ export default function CoworkToolCard({ className="px-2 py-1.5 rounded border border-border bg-surface text-xs outline-none focus:border-primary" />
- {addMcpForm.type === "url" ? ( -
- - setAddMcpForm((f) => ({ ...f, url: e.target.value }))} - className="px-2 py-1.5 rounded border border-border bg-surface text-xs outline-none focus:border-primary" - /> -
- ) : ( - <> -
- - setAddMcpForm((f) => ({ ...f, command: e.target.value }))} - className="px-2 py-1.5 rounded border border-border bg-surface text-xs outline-none focus:border-primary" - /> -
-
- - setAddMcpForm((f) => ({ ...f, args: e.target.value }))} - className="px-2 py-1.5 rounded border border-border bg-surface text-xs outline-none focus:border-primary" - /> -
- - )} +
+ + setAddMcpForm((f) => ({ ...f, url: e.target.value }))} + className="px-2 py-1.5 rounded border border-border bg-surface text-xs outline-none focus:border-primary" + /> +
@@ -618,15 +582,8 @@ export default function CoworkToolCard({