Skip to content
Merged
Show file tree
Hide file tree
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
10 changes: 5 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion apps/desktop/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ RUST_LOG="debug"
# Registry API URL
# For production: https://api.mcpmux.com
# For local dev: http://localhost:8787
MCPMUX_REGISTRY_URL="http://localhost:8787"
MCPMUX_REGISTRY_URL="https://api.mcpmux.com"
22 changes: 22 additions & 0 deletions apps/desktop/public/mcpmux.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions apps/desktop/src-tauri/capabilities/default.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@
"windows": ["main"],
"permissions": [
"core:default",
"core:window:allow-minimize",
"core:window:allow-maximize",
"core:window:allow-toggle-maximize",
"core:window:allow-unmaximize",
"core:window:allow-close",
"core:window:allow-is-maximized",
"core:window:allow-start-dragging",
"core:window:allow-show",
"core:window:allow-set-focus",
"opener:default",
"deep-link:default",
"updater:default"
Expand Down
Binary file modified apps/desktop/src-tauri/icons/128x128.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/128x128@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/32x32.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/Square107x107Logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/Square142x142Logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/Square150x150Logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/Square284x284Logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/Square30x30Logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/Square310x310Logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/Square44x44Logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/Square71x71Logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/Square89x89Logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/StoreLogo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 19 additions & 0 deletions apps/desktop/src-tauri/icons/appicon-small.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/desktop/src-tauri/icons/icon.icns
Binary file not shown.
Binary file modified apps/desktop/src-tauri/icons/icon.ico
Binary file not shown.
Binary file modified apps/desktop/src-tauri/icons/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
48 changes: 48 additions & 0 deletions apps/desktop/src-tauri/src/commands/oauth.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ use super::gateway::GatewayAppState;
/// Now only contains request_id - frontend must call get_pending_consent
pub const OAUTH_CONSENT_EVENT: &str = "oauth-consent-request";

/// Event name for server install requests sent to frontend (from deep link)
pub const SERVER_INSTALL_EVENT: &str = "server-install-request";

/// Minimal deep link payload - only request_id
/// Frontend must call get_pending_consent to get full details
#[derive(Debug, Clone, Serialize)]
Expand All @@ -52,6 +55,13 @@ pub struct OAuthDeepLinkPayload {
pub request_id: String,
}

/// Deep link payload for server installation requests
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ServerInstallDeepLinkPayload {
pub server_id: String,
}

/// Full consent request details returned by get_pending_consent
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
Expand Down Expand Up @@ -111,6 +121,9 @@ pub fn handle_deep_link<R: tauri::Runtime>(app: &tauri::AppHandle<R>, url: &str)
// Inbound OAuth - client requesting approval
handle_authorize_deep_link(app, &parsed);
}
Some("install") => {
handle_install_deep_link(app, &parsed);
}
Some("test") => {
info!("[DeepLink] Test URL received successfully!");
}
Expand Down Expand Up @@ -157,6 +170,41 @@ fn handle_authorize_deep_link<R: tauri::Runtime>(app: &tauri::AppHandle<R>, url:
}
}

/// Handle server install deep link
///
/// Extracts server_id and emits to frontend.
/// Frontend will look up the server definition and show install modal.
fn handle_install_deep_link<R: tauri::Runtime>(app: &tauri::AppHandle<R>, url: &Url) {
let params: HashMap<_, _> = url.query_pairs().collect();

let server_id = match params.get("server") {
Some(id) if !id.is_empty() => id.to_string(),
_ => {
error!("[DeepLink] Install link missing required parameter: server");
return;
}
};

info!(
"[DeepLink] Server install request: server_id='{}'",
server_id
);

let payload = ServerInstallDeepLinkPayload { server_id };

if let Err(e) = app.emit(SERVER_INSTALL_EVENT, &payload) {
error!("[DeepLink] Failed to emit server install event: {}", e);
return;
}

// Focus the main window
if let Some(window) = app.get_webview_window("main") {
let _ = window.show();
let _ = window.unminimize();
let _ = window.set_focus();
}
}

/// Handle OAuth callback deep link (legacy - for outbound OAuth server connections)
///
/// NOTE: The primary OAuth callback mechanism is now the loopback HTTP server
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop/src-tauri/src/state/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ impl AppState {
info!("Using spaces directory: {:?}", spaces_dir);

let registry_url = std::env::var("MCPMUX_REGISTRY_URL")
.unwrap_or_else(|_| "http://localhost:8787".to_string());
.unwrap_or_else(|_| "https://api.mcpmux.com".to_string());
info!("Using Registry API URL: {}", registry_url);

let server_discovery = Arc::new(
Expand Down
3 changes: 2 additions & 1 deletion apps/desktop/src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@
"minWidth": 800,
"minHeight": 600,
"center": true,
"preventOverflow": true
"preventOverflow": true,
"decorations": false
}
],
"security": {
Expand Down
12 changes: 2 additions & 10 deletions apps/desktop/src/App.css
Original file line number Diff line number Diff line change
Expand Up @@ -64,19 +64,11 @@
animation-name: scale-in;
}

/* Logo hover effects */
/* Logo hover effects — McpMux brand */
.logo {
transition: filter 0.3s ease;
}

.logo.tauri:hover {
.logo.mcpmux:hover {
filter: drop-shadow(0 0 1.5em rgb(var(--primary)));
}

.logo.vite:hover {
filter: drop-shadow(0 0 1.5em #747bff);
}

.logo.react:hover {
filter: drop-shadow(0 0 1.5em #61dafb);
}
Loading