Skip to content

Commit 0434c6f

Browse files
committed
chore: using tokio::select and adjusting proxy config
1 parent d9929c5 commit 0434c6f

File tree

5 files changed

+29
-19
lines changed

5 files changed

+29
-19
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/apollo-mcp-proxy/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ rmcp = { workspace = true, features = [
1616
tracing.workspace = true
1717
tracing-appender = "0.2.3"
1818
tracing-subscriber.workspace = true
19+
serde_json = "1.0.140"
1920

2021
[lints]
2122
workspace = true

crates/apollo-mcp-proxy/src/client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ pub async fn start_proxy_client(url: &str) -> Result<(), Box<dyn Error>> {
3030
};
3131

3232
let server_info = client.peer_info();
33-
info!("[Proxy] Connected to server");
33+
info!("[Proxy] Connected to server at {}", url);
3434
debug!("{server_info:#?}");
3535

3636
let proxy_server = ProxyServer::new(client.peer().clone(), client.peer_info());

crates/apollo-mcp-server/src/main.rs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use apollo_mcp_server::server::Server;
1010
use clap::Parser;
1111
use clap::builder::Styles;
1212
use clap::builder::styling::{AnsiColor, Effects};
13+
use tokio::signal;
1314
use runtime::IdOrDefault;
1415
use runtime::logging::Logging;
1516
use tracing::{info, warn};
@@ -139,15 +140,19 @@ async fn main() -> anyhow::Result<()> {
139140
.start();
140141

141142
match config.transport {
142-
Transport::StreamableHttp { proxy, proxy_endpoint, .. } => {
143+
Transport::StreamableHttp { proxy, proxy_url, address, port } => {
143144
if proxy {
144-
let mut endpoint = proxy_endpoint;
145-
if !endpoint.starts_with("http") {
146-
endpoint = format!("http://{endpoint}");
147-
}
148-
149-
let proxy_client = start_proxy_client(endpoint.as_str());
150-
let (_, _ ) = tokio::join!(mcp_server, proxy_client);
145+
let url = Transport::proxy_url(&proxy_url, &address, &port);
146+
let proxy_client = async {
147+
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
148+
_ = start_proxy_client(url.as_str()).await;
149+
};
150+
151+
tokio::select! {
152+
_ = mcp_server => {},
153+
_ = proxy_client => {},
154+
_ = signal::ctrl_c() => {}
155+
};
151156
} else {
152157
mcp_server.await?;
153158
}

crates/apollo-mcp-server/src/server.rs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use bon::bon;
55
use reqwest::header::{CONTENT_TYPE, HeaderMap, HeaderValue};
66
use schemars::JsonSchema;
77
use serde::Deserialize;
8-
use url::Url;
8+
use url::{Url};
99

1010
use crate::auth;
1111
use crate::custom_scalar_map::CustomScalarMap;
@@ -82,13 +82,12 @@ pub enum Transport {
8282

8383
/// Flag indicating whether to spin up a proxy server
8484
/// [default: false]
85-
#[serde(default = "Transport::default_proxy")]
85+
#[serde(default)]
8686
proxy: bool,
8787

8888
/// Proxy server endpoint to connect to if proxy is enabled
89-
/// [default: http://<address>:<port>/mcp]
90-
#[serde(default = "Transport::default_proxy_endpoint")]
91-
proxy_endpoint: String,
89+
#[serde(default)]
90+
proxy_url: Option<Url>,
9291
},
9392
}
9493

@@ -101,12 +100,16 @@ impl Transport {
101100
5000
102101
}
103102

104-
fn default_proxy() -> bool {
105-
false
106-
}
103+
pub fn proxy_url(proxy_url: &Option<Url>, address: &IpAddr, port: &u16) -> Url {
104+
match proxy_url {
105+
Some(proxy_url) => { proxy_url.clone() }
106+
None => {
107+
let address = format!("http://{address}:{port}/mcp");
108+
#[allow(clippy::unwrap_used)]
109+
Url::parse(address.as_str()).unwrap()
110+
}
111+
}
107112

108-
fn default_proxy_endpoint() -> String {
109-
format!("http://{}:{}/mcp", Self::default_address(), Self::default_port())
110113
}
111114
}
112115

0 commit comments

Comments
 (0)