Skip to content

Commit 5ab73d0

Browse files
committed
chore: using tokio::select and adjusting proxy config
1 parent 9db4aab commit 5ab73d0

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;
@@ -159,15 +160,19 @@ async fn main() -> anyhow::Result<()> {
159160
.start();
160161

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

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;
@@ -71,13 +71,12 @@ pub enum Transport {
7171

7272
/// Flag indicating whether to spin up a proxy server
7373
/// [default: false]
74-
#[serde(default = "Transport::default_proxy")]
74+
#[serde(default)]
7575
proxy: bool,
7676

7777
/// Proxy server endpoint to connect to if proxy is enabled
78-
/// [default: http://<address>:<port>/mcp]
79-
#[serde(default = "Transport::default_proxy_endpoint")]
80-
proxy_endpoint: String,
78+
#[serde(default)]
79+
proxy_url: Option<Url>,
8180
},
8281
}
8382

@@ -90,12 +89,16 @@ impl Transport {
9089
5000
9190
}
9291

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

97-
fn default_proxy_endpoint() -> String {
98-
format!("http://{}:{}/mcp", Self::default_address(), Self::default_port())
99102
}
100103
}
101104

0 commit comments

Comments
 (0)