{"record":{"id":"0f90935f6e38f66a","repo":"multica-ai/multica","slug":"remove-agent-mcp-server-w","errorCode":null,"errorMessage":"remove agent mcp server: %w","messagePattern":"remove agent mcp server: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/cmd/multica/cmd_agent_mcp.go","lineNumber":163,"sourceCode":"\tbody := map[string]any{\"enabled\": enabled}\n\tif err := client.PutJSON(ctx, agentMcpPath(agentID, serverID, \"enabled\"), body, &servers); err != nil {\n\t\treturn fmt.Errorf(\"update agent mcp server: %w\", err)\n\t}\n\treturn printWorkspaceMcpServers(cmd, servers)\n}\n\nfunc runAgentMcpRemove(cmd *cobra.Command, args []string) error {\n\tagentID, serverID := strings.TrimSpace(args[0]), strings.TrimSpace(args[1])\n\tclient, err := newAPIClient(cmd)\n\tif err != nil {\n\t\treturn err\n\t}\n\tctx, cancel := cli.APIContext(context.Background())\n\tdefer cancel()\n\n\tvar servers []workspaceMcpServer\n\tif err := client.DeleteJSONResponse(ctx, agentMcpPath(agentID, serverID), &servers); err != nil {\n\t\treturn fmt.Errorf(\"remove agent mcp server: %w\", err)\n\t}\n\treturn printWorkspaceMcpServers(cmd, servers)\n}\n","sourceCodeStart":145,"sourceCodeEnd":167,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/cmd/multica/cmd_agent_mcp.go#L145-L167","documentation":"Thrown by `multica agent mcp remove <agentID> <serverID>` when DELETE /api/agents/{id}/mcp-servers/{serverID} fails. The wrapped error typically indicates the attachment does not exist (already removed), the agent ID is unknown, or an auth/connectivity problem.","triggerScenarios":"Removing a server that was already detached; removing from a deleted agent; concurrent scripts racing to remove the same attachment; expired credentials.","commonSituations":"Re-running an idempotency-intended cleanup script that assumes remove of a missing attachment succeeds but the API returns 404; state drift between local records and the server.","solutions":["List attachments first and only remove IDs present: multica agent mcp list <agent-id>","If the wrapped error is 404 for an already-removed server, treat it as success in cleanup scripts","Fix auth/connectivity for 401/403/network errors and retry"],"exampleFix":"# before (script)\nmultica agent mcp remove \"$AGENT\" \"$SERVER\" || exit 1\n# after (script)\nmultica agent mcp list \"$AGENT\" --output json | jq -e --arg s \"$SERVER\" 'map(.id) | index($s)' >/dev/null \\\n  && multica agent mcp remove \"$AGENT\" \"$SERVER\" || true","handlingStrategy":"try-catch","validationCode":"multica agent mcp list \"$AGENT_ID\" --output json | jq -e --arg s \"$SERVER_ID\" 'map(.id) | index($s)' >/dev/null \\\n  && multica agent mcp remove \"$AGENT_ID\" \"$SERVER_ID\" \\\n  || echo \"already removed: $SERVER_ID\"","typeGuard":null,"tryCatchPattern":"In Go: if err := client.DeleteJSONResponse(ctx, agentMcpPath(agentID, serverID), &servers); err != nil { if isNotFound(err) { return nil } ; return fmt.Errorf(\"remove agent mcp server: %w\", err) } — treat 404 as already-removed (idempotent success), surface everything else.","preventionTips":["Make cleanup scripts idempotent: check attachment existence before removing","Treat 404 on DELETE as success in convergence loops","Re-list attachments after bulk removals to confirm desired state"],"tags":["cli","api","http","mcp","idempotency","go"],"backgroundTag":null,"analyzedSha":"2c0912b6ec764b373d44eeea1e80f0d9f11ab417","analyzedAt":"2026-08-15T13:25:18.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}