Support deep linking MCP (#1550)
<!-- CURSOR_SUMMARY --> > [!NOTE] > Adds support for `dyad://add-mcp-server` deep links that prefill MCP server settings, and updates deep link context/consumers to use timestamp-based effects and clearing to avoid repeat handling. > > - **Deep Link Infrastructure**: > - Introduce `src/ipc/deep_link_data.ts` with zod schema (`AddMcpServerConfigSchema`) and typed `DeepLinkData`. > - Extend `DeepLinkContext` with `clearLastDeepLink`, timestamped events, and auto-navigate to `/settings#tools-mcp` on `add-mcp-server`. > - **Main Process**: > - Handle `dyad://add-mcp-server?name=...&config=...`: > - Base64-decode and validate `config`; send `deep-link-received` with typed payload or show error. > - **Settings UI (MCP)**: > - In `ToolsMcpSettings`, prefill form from `add-mcp-server` payload (supports `stdio` command/args and `http` url) and show info toast; clear deep link after handling. > - **Connectors/UI**: > - Update `TitleBar`, `NeonConnector`, `SupabaseConnector` to: > - Depend on `lastDeepLink?.timestamp` and call `clearLastDeepLink()` after handling (`dyad-pro-return`, `neon-oauth-return`, `supabase-oauth-return`). > - **IPC Renderer**: > - Use centralized `DeepLinkData` types in `ipc_client.ts`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 294a9c6f38442241b54e9bcbe19a7a772d338ee0. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
This commit is contained in:
27
src/ipc/deep_link_data.ts
Normal file
27
src/ipc/deep_link_data.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { z } from "zod";
|
||||
|
||||
export const AddMcpServerConfigSchema = z.discriminatedUnion("type", [
|
||||
z.object({
|
||||
type: z.enum(["stdio"]),
|
||||
command: z.string(),
|
||||
}),
|
||||
z.object({
|
||||
type: z.enum(["http"]),
|
||||
url: z.string(),
|
||||
}),
|
||||
]);
|
||||
|
||||
export type AddMcpServerConfig = z.infer<typeof AddMcpServerConfigSchema>;
|
||||
export type AddMcpServerPayload = {
|
||||
name: string;
|
||||
config: AddMcpServerConfig;
|
||||
};
|
||||
export type AddMcpServerDeepLinkData = {
|
||||
type: "add-mcp-server";
|
||||
payload: AddMcpServerPayload;
|
||||
};
|
||||
export type DeepLinkData =
|
||||
| AddMcpServerDeepLinkData
|
||||
| {
|
||||
type: string;
|
||||
};
|
||||
@@ -77,6 +77,7 @@ import type {
|
||||
ProposalResult,
|
||||
} from "@/lib/schemas";
|
||||
import { showError } from "@/lib/toast";
|
||||
import { DeepLinkData } from "./deep_link_data";
|
||||
|
||||
export interface ChatStreamCallbacks {
|
||||
onUpdate: (messages: Message[]) => void;
|
||||
@@ -102,10 +103,6 @@ export interface GitHubDeviceFlowErrorData {
|
||||
error: string;
|
||||
}
|
||||
|
||||
export interface DeepLinkData {
|
||||
type: string;
|
||||
}
|
||||
|
||||
interface DeleteCustomModelParams {
|
||||
providerId: string;
|
||||
modelApiName: string;
|
||||
|
||||
Reference in New Issue
Block a user