oauth_standard_mcp_server/
oauth_standard_mcp_server.rs

1use 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    // 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::{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}