Skip to content

Commit 8b0ccde

Browse files
committed
chore: using tokio::select and adjusting proxy config
1 parent 06d53f1 commit 8b0ccde

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, Transport};
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};
@@ -150,15 +151,19 @@ async fn main() -> anyhow::Result<()> {
150151
.start();
151152

152153
match config.transport {
153-
Transport::StreamableHttp { proxy, proxy_endpoint, .. } => {
154+
Transport::StreamableHttp { proxy, proxy_url, address, port } => {
154155
if proxy {
155-
let mut endpoint = proxy_endpoint;
156-
if !endpoint.starts_with("http") {
157-
endpoint = format!("http://{endpoint}");
158-
}
159-
160-
let proxy_client = start_proxy_client(endpoint.as_str());
161-
let (_, _ ) = tokio::join!(mcp_server, proxy_client);
156+
let url = Transport::proxy_url(&proxy_url, &address, &port);
157+
let proxy_client = async {
158+
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
159+
_ = start_proxy_client(url.as_str()).await;
160+
};
161+
162+
tokio::select! {
163+
_ = mcp_server => {},
164+
_ = proxy_client => {},
165+
_ = signal::ctrl_c() => {}
166+
};
162167
} else {
163168
mcp_server.await?;
164169
}

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

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

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

@@ -102,12 +101,16 @@ impl Transport {
102101
5000
103102
}
104103

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

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

0 commit comments

Comments
 (0)