Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion client/dashboard/src/pages/mcp/MCPDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,24 @@ export function MCPEnableButton({ toolset }: { toolset: Toolset }) {
*/
function MCPOverviewTab({ toolset }: { toolset: Toolset }) {
const { url: mcpUrl } = useMcpUrl(toolset);
const queryClient = useQueryClient();
const updateToolsetMutation = useUpdateToolsetMutation();

const handleMakePublic = () =>
updateToolsetMutation.mutate(
{
request: {
slug: toolset.slug,
updateToolsetRequestBody: { mcpIsPublic: true },
},
},
{
onSuccess: () => {
invalidateAllToolset(queryClient);
toast.success("Server is now public.");
},
},
);
Comment on lines +410 to +424
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.

🚩 Missing specific error handling for plan-limited public server quota

The new handleMakePublic in MCPOverviewTab (line 410-424) relies solely on the global mutation onError handler (client/dashboard/src/contexts/Sdk.tsx:42-44) which shows a generic "Request failed" toast. In contrast, MCPSettingsTab (lines 1048-1056) specifically checks for "maximum number of public MCP servers for your account type" and opens a FeatureRequestModal prompting an upgrade. Users hitting the plan limit via the new Overview tab button will see a less informative generic error instead of the upgrade flow. This isn't a correctness bug (the error is still surfaced), but it's a UX gap that may confuse users on the base plan.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.


const result = useGetMcpMetadata({ toolsetSlug: toolset.slug }, undefined, {
retry: (_, err) => {
Expand Down Expand Up @@ -434,7 +452,17 @@ function MCPOverviewTab({ toolset }: { toolset: Toolset }) {
{!toolset.mcpIsPublic && (
<Type small italic destructive>
Your server is private. To share with external users, you must make
it public in the server settings.
it public.{" "}
<button
type="button"
className="underline hover:opacity-80"
disabled={updateToolsetMutation.isPending}
onClick={handleMakePublic}
>
{updateToolsetMutation.isPending
? "Enabling..."
: "Make it public"}
</button>
</Type>
)}
<Stack className="mt-2" gap={1}>
Expand Down
Loading