Skip to content

feat(cli/sdk/mcp): add workspaces update for renaming#4189

Merged
saddlepaddle merged 4 commits intomainfrom
feat/workspaces-update
May 7, 2026
Merged

feat(cli/sdk/mcp): add workspaces update for renaming#4189
saddlepaddle merged 4 commits intomainfrom
feat/workspaces-update

Conversation

@saddlepaddle
Copy link
Copy Markdown
Collaborator

@saddlepaddle saddlepaddle commented May 7, 2026

Summary

Expose workspaces update across all three client surfaces so workspaces can be renamed without going through the desktop UI:

  • CLI: superset workspaces update <id> --name "..."
  • SDK: client.workspaces.update(id, { name })
  • MCP-v2: workspaces_update tool

The cloud v2Workspace.update procedure already accepts name, branch, and hostId patches. Only name is wired through here — branch and host moves require host-side git orchestration that isn't safe to drive directly from the cloud.

The schema leaves room for additional fields when a clear use case shows up.

Why this PR

The CLI/SDK/MCP previously only had create / list / delete for workspaces — no way to rename one once it existed. The desktop app's host service has an aiRename flow but no plain "set the name" entry point exposed externally.

Test plan

  • superset workspaces update <id> --name "New name" updates the cloud row and the change appears in superset workspaces list
  • SDK: await client.workspaces.update(id, { name: "..." }) returns the updated row
  • MCP: invoke workspaces_update from a connected MCP client and confirm the rename
  • Omitting --name returns "No fields to update" (CLI) / cloud-side BAD_REQUEST (SDK/MCP)

Summary by cubic

Add workspace rename support across CLI, SDK, and MCP so you can rename a workspace without the desktop app. Routes through cloud v2Workspace.update; only name is supported (branch/host moves are out of scope).

  • New Features
    • CLI: superset workspaces update <id> --name "New name"; errors with "No fields to update" if --name is missing.
    • SDK: client.workspaces.update(id, { name }) returns the updated workspace.
    • MCP-v2: workspaces_update tool accepts id and optional name; validation is handled server-side.
    • Docs: added superset workspaces update to the CLI reference.

Written for commit d3f10b8. Summary will update on new commits.

Summary by CodeRabbit

  • New Features

    • Add workspace update: rename a workspace via a new CLI command and via the API/SDK.
    • Backend tool added to expose workspace update capability to integrations.
  • Documentation

    • Updated guides to document the new "workspace update" command and usage examples.

Expose workspace updates across all three client surfaces. The cloud
v2Workspace.update procedure already supports name/branch/hostId; only
name is wired through here since branch/host moves require host-side
git orchestration that isn't safe to drive from the cloud directly.

- CLI: superset workspaces update <id> --name "..."
- SDK: client.workspaces.update(id, { name })
- MCP-v2: workspaces_update tool
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 7, 2026

Review Change Stack
No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c973427b-cc16-47c0-b7e9-ffad122c1179

📥 Commits

Reviewing files that changed from the base of the PR and between 30df2ec and d3f10b8.

📒 Files selected for processing (1)
  • packages/mcp-v2/src/tools/workspaces/update.ts
✅ Files skipped from review due to trivial changes (1)
  • packages/mcp-v2/src/tools/workspaces/update.ts

📝 Walkthrough

Walkthrough

This PR adds a complete workspace update flow: SDK types and method, MCP tool and registration, CLI command, and documentation.

Changes

Workspace Update Across SDK, MCP, and CLI

Layer / File(s) Summary
Data Types and Contracts
packages/sdk/src/resources/workspaces.ts
New WorkspaceUpdateParams (optional name) and WorkspaceUpdateResult types; namespace exports include both.
SDK Method Implementation
packages/sdk/src/resources/workspaces.ts
Workspaces.update() calls v2Workspace.update({ id, ...params }) and returns WorkspaceUpdateResult.
MCP Tool Implementation
packages/mcp-v2/src/tools/workspaces/update.ts
Adds workspaces_update MCP tool with Zod schema for id and optional name; handler delegates to caller.v2Workspace.update.
MCP Tool Registration
packages/mcp-v2/src/tools/register.ts
Imports and adds workspacesUpdate to REGISTRARS so the tool is registered on startup.
CLI Command
packages/cli/src/commands/workspaces/update/command.ts
New CLI command accepting required id positional and optional --name; validates active organization and non-empty updates, then invokes the SDK mutation.
Documentation
skills/superset/SKILL.md
Adds superset workspaces update <id> --name "..." to the Workspaces command reference.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 I nibble code with carroted cheer,
Update hops through stack to appear.
Types and tools in tidy rows,
CLI whispers what the server knows,
A tiny change that softly grows.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: adding workspace update functionality across CLI, SDK, and MCP for renaming workspaces.
Description check ✅ Passed The PR description is comprehensive, covering the summary, motivation, test plan, and implementation details across all three surfaces (CLI, SDK, MCP).
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/workspaces-update

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented May 7, 2026

Greptile Summary

This PR exposes an existing v2Workspace.update cloud procedure across the CLI, SDK, and MCP-v2 surfaces so workspaces can be renamed without the desktop UI. The changes are additive and follow existing patterns (file-system-routed CLI command, APIResource SDK method, defineTool/createMcpCaller MCP tool).

  • CLI (workspaces/update/command.ts): Correctly guards against missing --name with an explicit "No fields to update" error before hitting the network, matching the defensive style of the delete command.
  • SDK (resources/workspaces.ts): Adds update(), WorkspaceUpdateParams, and WorkspaceUpdateResult. WorkspaceUpdateParams has only optional fields, so an empty-object call type-checks but fails at runtime.
  • MCP-v2 (tools/workspaces/update.ts): Registers workspaces_update via createMcpCaller. The tool description implies any call with only id is a valid partial update, but the server rejects it; no client-side guard mirrors the CLI's behaviour.

Confidence Score: 4/5

Safe to merge; the feature is additive and the cloud procedure already exists. The MCP tool and SDK type both permit a no-field call that fails at the server — worth tightening before the surface becomes widely used.

The CLI correctly guards against an empty update; the MCP tool and SDK do not. Calling update(id, {}) or invoking workspaces_update with only an id silently reaches the server and returns an opaque BAD_REQUEST instead of a clear client-side message. The description in the MCP tool reinforces the misunderstanding by implying partial calls are always safe.

packages/mcp-v2/src/tools/workspaces/update.ts and packages/sdk/src/resources/workspaces.ts need the no-field guard and type constraint respectively.

Important Files Changed

Filename Overview
packages/cli/src/commands/workspaces/update/command.ts New CLI command for renaming a workspace — follows the existing create/delete pattern, with correct org-id guard and an explicit "No fields to update" check before hitting the cloud.
packages/sdk/src/resources/workspaces.ts Adds update() method and WorkspaceUpdateParams/WorkspaceUpdateResult types. WorkspaceUpdateParams has only optional fields, so update(id, {}) type-checks but will fail at runtime with a server BAD_REQUEST.
packages/mcp-v2/src/tools/workspaces/update.ts New MCP tool wrapping the cloud update procedure. No client-side guard against an empty-field call; the tool description implies a no-op is valid but the server returns BAD_REQUEST.
packages/mcp-v2/src/tools/register.ts Imports and registers the new workspaces_update tool in the correct position between workspacesCreate and workspacesDelete.

Sequence Diagram

sequenceDiagram
    participant User
    participant CLI/SDK/MCP
    participant CloudAPI as Cloud API (v2Workspace.update)

    Note over CLI/SDK/MCP: CLI path
    User->>CLI/SDK/MCP: superset workspaces update id --name New
    CLI/SDK/MCP->>CLI/SDK/MCP: "Guard: name === undefined, throws CLIError"
    CLI/SDK/MCP->>CloudAPI: "v2Workspace.update.mutate({ id, name })"
    CloudAPI-->>CLI/SDK/MCP: WorkspaceUpdateResult
    CLI/SDK/MCP-->>User: Updated workspace id

    Note over CLI/SDK/MCP: SDK path
    User->>CLI/SDK/MCP: "client.workspaces.update(id, { name })"
    CLI/SDK/MCP->>CloudAPI: mutation v2Workspace.update with id and name
    CloudAPI-->>CLI/SDK/MCP: WorkspaceUpdateResult
    CLI/SDK/MCP-->>User: WorkspaceUpdateResult

    Note over CLI/SDK/MCP: MCP no name supplied no guard
    User->>CLI/SDK/MCP: workspaces_update with id only
    CLI/SDK/MCP->>CloudAPI: caller.v2Workspace.update with id only
    CloudAPI-->>CLI/SDK/MCP: BAD_REQUEST no fields to update
Loading
Prompt To Fix All With AI
Fix the following 3 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 3
packages/sdk/src/resources/workspaces.ts:201-204
Empty-object update compiles cleanly but fails at runtime. `WorkspaceUpdateParams` has only optional fields, so `client.workspaces.update(id, {})` passes the TypeScript compiler and then hits the cloud with nothing to change, returning a server-side BAD_REQUEST. A `RequireAtLeastOne` constraint makes the invalid call a compile-time error rather than a silent runtime failure.

```suggestion
/** Requires at least one field — an all-optional update is rejected by the server. */
export type WorkspaceUpdateParams = RequireAtLeastOne<{
	/** New workspace name. */
	name?: string;
}>;

/** Utility: at least one key of T must be present. */
type RequireAtLeastOne<T> = {
	[K in keyof T]-?: Required<Pick<T, K>> & Partial<Omit<T, K>>;
}[keyof T];
```

### Issue 2 of 3
packages/mcp-v2/src/tools/workspaces/update.ts:9-10
The tool description says "omitted fields preserve their current value," which an LLM will reasonably interpret as meaning a call with only `id` is a safe no-op. In practice the server rejects it with BAD_REQUEST. The CLI guards against this client-side with an explicit "No fields to update" error; the MCP tool should do the same, or the description should make the constraint explicit.

```suggestion
		description:
			"Update fields on an existing workspace (cloud-index metadata). You must supply at least one optional field (e.g. name); passing only the id with no other fields is an error.",
```

### Issue 3 of 3
packages/mcp-v2/src/tools/workspaces/update.ts:15-18
No client-side guard against an all-optional payload. The CLI throws "No fields to update" before touching the network; without the same check here the MCP handler forwards `{ id }` to the server and returns an opaque cloud error instead of a clear message. Adding a pre-flight check mirrors the CLI's behaviour.

```suggestion
		handler: async (input, ctx) => {
			const { id, ...fields } = input;
			if (Object.keys(fields).length === 0) {
				throw new Error("No fields to update. Pass at least one field such as name.");
			}
			const caller = createMcpCaller(ctx);
			return caller.v2Workspace.update(input);
		},
```

Reviews (1): Last reviewed commit: "docs(skill): add workspaces update to su..." | Re-trigger Greptile

Comment on lines +201 to +204
export interface WorkspaceUpdateParams {
/** New workspace name. */
name?: string;
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Empty-object update compiles cleanly but fails at runtime. WorkspaceUpdateParams has only optional fields, so client.workspaces.update(id, {}) passes the TypeScript compiler and then hits the cloud with nothing to change, returning a server-side BAD_REQUEST. A RequireAtLeastOne constraint makes the invalid call a compile-time error rather than a silent runtime failure.

Suggested change
export interface WorkspaceUpdateParams {
/** New workspace name. */
name?: string;
}
/** Requires at least one field — an all-optional update is rejected by the server. */
export type WorkspaceUpdateParams = RequireAtLeastOne<{
/** New workspace name. */
name?: string;
}>;
/** Utility: at least one key of T must be present. */
type RequireAtLeastOne<T> = {
[K in keyof T]-?: Required<Pick<T, K>> & Partial<Omit<T, K>>;
}[keyof T];
Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/sdk/src/resources/workspaces.ts
Line: 201-204

Comment:
Empty-object update compiles cleanly but fails at runtime. `WorkspaceUpdateParams` has only optional fields, so `client.workspaces.update(id, {})` passes the TypeScript compiler and then hits the cloud with nothing to change, returning a server-side BAD_REQUEST. A `RequireAtLeastOne` constraint makes the invalid call a compile-time error rather than a silent runtime failure.

```suggestion
/** Requires at least one field — an all-optional update is rejected by the server. */
export type WorkspaceUpdateParams = RequireAtLeastOne<{
	/** New workspace name. */
	name?: string;
}>;

/** Utility: at least one key of T must be present. */
type RequireAtLeastOne<T> = {
	[K in keyof T]-?: Required<Pick<T, K>> & Partial<Omit<T, K>>;
}[keyof T];
```

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +9 to +10
description:
"Update fields on an existing workspace (cloud-index metadata). Only the fields you pass are changed; omitted fields preserve their current value.",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 The tool description says "omitted fields preserve their current value," which an LLM will reasonably interpret as meaning a call with only id is a safe no-op. In practice the server rejects it with BAD_REQUEST. The CLI guards against this client-side with an explicit "No fields to update" error; the MCP tool should do the same, or the description should make the constraint explicit.

Suggested change
description:
"Update fields on an existing workspace (cloud-index metadata). Only the fields you pass are changed; omitted fields preserve their current value.",
description:
"Update fields on an existing workspace (cloud-index metadata). You must supply at least one optional field (e.g. name); passing only the id with no other fields is an error.",
Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/mcp-v2/src/tools/workspaces/update.ts
Line: 9-10

Comment:
The tool description says "omitted fields preserve their current value," which an LLM will reasonably interpret as meaning a call with only `id` is a safe no-op. In practice the server rejects it with BAD_REQUEST. The CLI guards against this client-side with an explicit "No fields to update" error; the MCP tool should do the same, or the description should make the constraint explicit.

```suggestion
		description:
			"Update fields on an existing workspace (cloud-index metadata). You must supply at least one optional field (e.g. name); passing only the id with no other fields is an error.",
```

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +15 to +18
handler: async (input, ctx) => {
const caller = createMcpCaller(ctx);
return caller.v2Workspace.update(input);
},
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 No client-side guard against an all-optional payload. The CLI throws "No fields to update" before touching the network; without the same check here the MCP handler forwards { id } to the server and returns an opaque cloud error instead of a clear message. Adding a pre-flight check mirrors the CLI's behaviour.

Suggested change
handler: async (input, ctx) => {
const caller = createMcpCaller(ctx);
return caller.v2Workspace.update(input);
},
handler: async (input, ctx) => {
const { id, ...fields } = input;
if (Object.keys(fields).length === 0) {
throw new Error("No fields to update. Pass at least one field such as name.");
}
const caller = createMcpCaller(ctx);
return caller.v2Workspace.update(input);
},
Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/mcp-v2/src/tools/workspaces/update.ts
Line: 15-18

Comment:
No client-side guard against an all-optional payload. The CLI throws "No fields to update" before touching the network; without the same check here the MCP handler forwards `{ id }` to the server and returns an opaque cloud error instead of a clear message. Adding a pre-flight check mirrors the CLI's behaviour.

```suggestion
		handler: async (input, ctx) => {
			const { id, ...fields } = input;
			if (Object.keys(fields).length === 0) {
				throw new Error("No fields to update. Pass at least one field such as name.");
			}
			const caller = createMcpCaller(ctx);
			return caller.v2Workspace.update(input);
		},
```

How can I resolve this? If you propose a fix, please make it concise.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

🧹 Preview Cleanup Complete

The following preview resources have been cleaned up:

  • ✅ Neon database branch

Thank you for your contribution! 🎉

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 4 files

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/cli/src/commands/workspaces/update/command.ts`:
- Around line 17-24: The CLI currently only rejects undefined names but allows
empty or whitespace-only names to be sent to ctx.api.v2Workspace.update.mutate;
update the validation around options.name (the block that throws CLIError) to
trim the value and ensure it's non-empty (e.g., check that options.name?.trim()
is truthy) and throw the same CLIError with the "Pass --name <new-name>" hint
when invalid, before calling ctx.api.v2Workspace.update.mutate.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4a802411-a2fd-4bc4-8095-3226429c067e

📥 Commits

Reviewing files that changed from the base of the PR and between cac1fef and 7fc930c.

📒 Files selected for processing (5)
  • packages/cli/src/commands/workspaces/update/command.ts
  • packages/mcp-v2/src/tools/register.ts
  • packages/mcp-v2/src/tools/workspaces/update.ts
  • packages/sdk/src/resources/workspaces.ts
  • skills/superset/SKILL.md

Comment on lines +17 to +24
if (options.name === undefined) {
throw new CLIError("No fields to update", "Pass --name <new-name>");
}

const updated = await ctx.api.v2Workspace.update.mutate({
id,
name: options.name,
});
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Reject blank workspace names before calling the API.

Line 17 only checks undefined, so empty/whitespace values can still be sent at Line 23. Add a trimmed non-empty check for better CLI-side validation.

Proposed patch
-		if (options.name === undefined) {
+		const name = options.name?.trim();
+		if (!name) {
 			throw new CLIError("No fields to update", "Pass --name <new-name>");
 		}
@@
 		const updated = await ctx.api.v2Workspace.update.mutate({
 			id,
-			name: options.name,
+			name,
 		});
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if (options.name === undefined) {
throw new CLIError("No fields to update", "Pass --name <new-name>");
}
const updated = await ctx.api.v2Workspace.update.mutate({
id,
name: options.name,
});
const name = options.name?.trim();
if (!name) {
throw new CLIError("No fields to update", "Pass --name <new-name>");
}
const updated = await ctx.api.v2Workspace.update.mutate({
id,
name,
});
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/cli/src/commands/workspaces/update/command.ts` around lines 17 - 24,
The CLI currently only rejects undefined names but allows empty or
whitespace-only names to be sent to ctx.api.v2Workspace.update.mutate; update
the validation around options.name (the block that throws CLIError) to trim the
value and ensure it's non-empty (e.g., check that options.name?.trim() is
truthy) and throw the same CLIError with the "Pass --name <new-name>" hint when
invalid, before calling ctx.api.v2Workspace.update.mutate.

The CLI throws "No fields to update" client-side when --name is omitted.
The MCP tool was forwarding {id} to the server and surfacing an opaque
BAD_REQUEST. Mirror the CLI's behaviour with an explicit error and
sharpen the tool description so an LLM caller knows at-least-one-field
is required.
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/mcp-v2/src/tools/workspaces/update.ts`:
- Line 19: Replace the CLI-specific wording in the validation error message that
currently mentions "--name" with MCP-neutral phrasing; locate the string "No
fields to update. Pass at least one field such as --name." in
packages/mcp-v2/src/tools/workspaces/update.ts and change it to something like
"No fields to update. Pass at least one updatable field such as name." (or "one
updatable field") so the message uses neutral field names rather than CLI flag
syntax.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e5b35468-3266-4366-84dc-5c372e3cfdb1

📥 Commits

Reviewing files that changed from the base of the PR and between 7fc930c and 30df2ec.

📒 Files selected for processing (2)
  • packages/mcp-v2/src/tools/workspaces/update.ts
  • packages/sdk/src/resources/workspaces.ts

const { id: _id, ...fields } = input;
if (Object.keys(fields).length === 0) {
throw new Error(
"No fields to update. Pass at least one field such as --name.",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use MCP-neutral validation text instead of CLI flag wording.

"--name" is CLI-specific and can confuse MCP users. Prefer "name" (or “one updatable field”) in this tool error.

Suggested tweak
-					"No fields to update. Pass at least one field such as --name.",
+					"No fields to update. Pass at least one field such as name.",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"No fields to update. Pass at least one field such as --name.",
"No fields to update. Pass at least one field such as name.",
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/mcp-v2/src/tools/workspaces/update.ts` at line 19, Replace the
CLI-specific wording in the validation error message that currently mentions
"--name" with MCP-neutral phrasing; locate the string "No fields to update. Pass
at least one field such as --name." in
packages/mcp-v2/src/tools/workspaces/update.ts and change it to something like
"No fields to update. Pass at least one updatable field such as name." (or "one
updatable field") so the message uses neutral field names rather than CLI flag
syntax.

Description already states at-least-one-field; client-side guard adds
boilerplate without saving a round-trip.
@saddlepaddle saddlepaddle merged commit cd55568 into main May 7, 2026
17 checks passed
This was referenced May 7, 2026
saddlepaddle added a commit that referenced this pull request May 7, 2026
Changes since v0.2.11:

- workspaces: add `superset workspaces update <id> --name "..."` for
  renaming. Branch/host moves stay desktop-only — they require host-side
  git orchestration that isn't safe to drive from the cloud directly.
  (#4189)
- organization: new `superset organization members list` command (also
  exposed via SDK + mcp-v2). Read-only — add/remove keep their
  existing UI flows. (#4197)
- tasks: new `superset tasks statuses list` command surfacing the
  organization's configured task statuses. (#4197)
- host-service: paste a closed/merged PR URL or `#N` into the v2
  new-workspace modal and the dropdown actually returns the PR instead
  of "No open pull requests found." Direct lookups now ignore the
  open-only state filter that bounds text-search results. (#4190)

Push cli-v0.2.12 after this lands to fire the release pipeline.
saddlepaddle added a commit that referenced this pull request May 7, 2026
Changes since alpha.8:

- workspaces.update accepts `{ name }` for renaming. Branch/host moves
  stay desktop-only — they require host-side git orchestration that
  isn't safe to drive from the cloud. (#4189)
- organization.members.list — read-only listing of org members.
  add/remove deliberately not exposed; they have UI-side concerns
  (invites, ownership transfer, audit) that aren't ready for a
  programmatic API. (#4197)
- task.statuses.list — list configured task statuses for the org.
  (#4197)

After merge: `cd packages/sdk && bun run build && cd dist && npm publish --access public`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant