oauth_standard_mcp_server/
oauth_standard_mcp_server.rs

1use oauth_provider_rs::GitHubOAuthProvider;
2use remote_mcp_kernel::{
3    config::{get_bind_socket_addr, get_github_oauth_provider_config, 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    // Load environment variables
12    dotenv::dotenv().ok();
13
14    // Initialize tracing
15    init_tracing()?;
16
17    tracing::info!("Starting MCP OAuth server with microkernel architecture...");
18
19    // Create OAuth provider
20    let github_config = get_github_oauth_provider_config()?;
21    let oauth_provider = GitHubOAuthProvider::new_github(github_config);
22
23    // Log configuration
24    log_startup_info();
25
26    // Create microkernel server with all handlers composed
27    let microkernel = create_full_github_microkernel(oauth_provider);
28
29    // Start the microkernel server
30    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::{
50        get_github_client_id, get_github_client_secret, get_server_host, get_server_port,
51        get_server_version,
52    };
53
54    println!("🚀 Starting MCP OAuth server with microkernel architecture...");
55    println!("📋 Configuration:");
56    println!("  - Architecture: Microkernel (independent handlers)");
57    println!(
58        "  - Server: {}:{}",
59        get_server_host(),
60        get_server_port().unwrap_or(8080)
61    );
62    println!("  - Version: {}", get_server_version());
63    println!(
64        "  - GitHub Client ID: {}",
65        if get_github_client_id().is_ok() {
66            "Configured"
67        } else {
68            "Not configured"
69        }
70    );
71    println!(
72        "  - GitHub Client Secret: {}",
73        if get_github_client_secret().is_ok() {
74            "Configured"
75        } else {
76            "Not configured"
77        }
78    );
79    println!("🔧 Handlers:");
80    println!("  - OAuth Provider (authentication & authorization)");
81    println!("  - Streamable HTTP Handler (MCP over HTTP)");
82    println!("  - SSE Handler (MCP over SSE)");
83    println!();
84}