oauth_standard_mcp_server/
oauth_standard_mcp_server.rs1use oauth_provider_rs::GitHubOAuthProvider;
2use remote_mcp_kernel::{
3 config::{get_github_oauth_provider_config, get_bind_socket_addr, get_logging_level},
4 error::AppResult,
5 microkernel::create_full_github_microkernel,
6};
7use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
8
9#[tokio::main]
10async fn main() -> AppResult<()> {
11 dotenv::dotenv().ok();
13
14 init_tracing()?;
16
17 tracing::info!("Starting MCP OAuth server with microkernel architecture...");
18
19 let github_config = get_github_oauth_provider_config()?;
21 let oauth_provider = GitHubOAuthProvider::new_github(github_config);
22
23 log_startup_info();
25
26 let microkernel = create_full_github_microkernel(oauth_provider);
28
29 let bind_address = get_bind_socket_addr()?;
31 microkernel.serve(bind_address).await?;
32
33 Ok(())
34}
35
36fn init_tracing() -> AppResult<()> {
37 tracing_subscriber::registry()
38 .with(
39 tracing_subscriber::EnvFilter::try_from_default_env()
40 .unwrap_or_else(|_| get_logging_level().as_str().into()),
41 )
42 .with(tracing_subscriber::fmt::layer())
43 .init();
44
45 Ok(())
46}
47
48fn log_startup_info() {
49 use remote_mcp_kernel::config::{get_server_host, get_server_port, get_server_version, get_github_client_id, get_github_client_secret};
50
51 println!("🚀 Starting MCP OAuth server with microkernel architecture...");
52 println!("📋 Configuration:");
53 println!(" - Architecture: Microkernel (independent handlers)");
54 println!(" - Server: {}:{}", get_server_host(), get_server_port().unwrap_or(8080));
55 println!(" - Version: {}", get_server_version());
56 println!(
57 " - GitHub Client ID: {}",
58 if get_github_client_id().is_ok() {
59 "Configured"
60 } else {
61 "Not configured"
62 }
63 );
64 println!(
65 " - GitHub Client Secret: {}",
66 if get_github_client_secret().is_ok() {
67 "Configured"
68 } else {
69 "Not configured"
70 }
71 );
72 println!("🔧 Handlers:");
73 println!(" - OAuth Provider (authentication & authorization)");
74 println!(" - Streamable HTTP Handler (MCP over HTTP)");
75 println!(" - SSE Handler (MCP over SSE)");
76 println!();
77}