Skip to content

Commit 9f7d413

Browse files
committed
chore: using tokio::select and adjusting proxy config
1 parent a941128 commit 9f7d413

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
@@ -11,6 +11,7 @@ use apollo_mcp_server::server::Transport;
1111
use clap::Parser;
1212
use clap::builder::Styles;
1313
use clap::builder::styling::{AnsiColor, Effects};
14+
use tokio::signal;
1415
use runtime::IdOrDefault;
1516
use tracing::{Level, info, warn};
1617
use tracing_subscriber::EnvFilter;
@@ -161,15 +162,19 @@ async fn main() -> anyhow::Result<()> {
161162
.start();
162163

163164
match config.transport {
164-
Transport::StreamableHttp { proxy, proxy_endpoint, .. } => {
165+
Transport::StreamableHttp { proxy, proxy_url, address, port } => {
165166
if proxy {
166-
let mut endpoint = proxy_endpoint;
167-
if !endpoint.starts_with("http") {
168-
endpoint = format!("http://{endpoint}");
169-
}
170-
171-
let proxy_client = start_proxy_client(endpoint.as_str());
172-
let (_, _ ) = tokio::join!(mcp_server, proxy_client);
167+
let url = Transport::proxy_url(&proxy_url, &address, &port);
168+
let proxy_client = async {
169+
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
170+
_ = start_proxy_client(url.as_str()).await;
171+
};
172+
173+
tokio::select! {
174+
_ = mcp_server => {},
175+
_ = proxy_client => {},
176+
_ = signal::ctrl_c() => {}
177+
};
173178
} else {
174179
mcp_server.await?;
175180
}

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::custom_scalar_map::CustomScalarMap;
1111
use crate::errors::ServerError;
@@ -73,13 +73,12 @@ pub enum Transport {
7373

7474
/// Flag indicating whether to spin up a proxy server
7575
/// [default: false]
76-
#[serde(default = "Transport::default_proxy")]
76+
#[serde(default)]
7777
proxy: bool,
7878

7979
/// Proxy server endpoint to connect to if proxy is enabled
80-
/// [default: http://<address>:<port>/mcp]
81-
#[serde(default = "Transport::default_proxy_endpoint")]
82-
proxy_endpoint: String,
80+
#[serde(default)]
81+
proxy_url: Option<Url>,
8382
},
8483
}
8584

@@ -92,12 +91,16 @@ impl Transport {
9291
5000
9392
}
9493

95-
fn default_proxy() -> bool {
96-
false
97-
}
94+
pub fn proxy_url(proxy_url: &Option<Url>, address: &IpAddr, port: &u16) -> Url {
95+
match proxy_url {
96+
Some(proxy_url) => { proxy_url.clone() }
97+
None => {
98+
let address = format!("http://{address}:{port}/mcp");
99+
#[allow(clippy::unwrap_used)]
100+
Url::parse(address.as_str()).unwrap()
101+
}
102+
}
98103

99-
fn default_proxy_endpoint() -> String {
100-
format!("http://{}:{}/mcp", Self::default_address(), Self::default_port())
101104
}
102105
}
103106

0 commit comments

Comments
 (0)