oauth_standard_mcp_server/
oauth_standard_mcp_server.rs1use oauth_provider_rs::{GitHubOAuthConfig, GitHubOAuthProvider};
2use remote_mcp_kernel::{
3 config::Config, error::AppResult, microkernel::create_full_github_microkernel,
4};
5use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
6
7#[tokio::main]
8async fn main() -> AppResult<()> {
9 dotenv::dotenv().ok();
11
12 let config = Config::from_env()?;
14
15 init_tracing(&config)?;
17
18 tracing::info!("Starting MCP OAuth server with microkernel architecture...");
19
20 let github_config = GitHubOAuthConfig {
22 client_id: config.github.client_id.clone(),
23 client_secret: config.github.client_secret.clone(),
24 redirect_uri: config.github.redirect_uri.clone(),
25 scope: config.github.scope.clone(),
26 provider_name: "github".to_string(),
27 };
28 let oauth_provider = GitHubOAuthProvider::new_github(github_config);
29
30 log_startup_info(&config);
32
33 let microkernel = create_full_github_microkernel(oauth_provider);
35
36 let bind_address = config.bind_socket_addr()?;
38 microkernel.serve(bind_address).await?;
39
40 Ok(())
41}
42
43fn init_tracing(config: &Config) -> AppResult<()> {
44 tracing_subscriber::registry()
45 .with(
46 tracing_subscriber::EnvFilter::try_from_default_env()
47 .unwrap_or_else(|_| config.logging.level.as_str().into()),
48 )
49 .with(tracing_subscriber::fmt::layer())
50 .init();
51
52 Ok(())
53}
54
55fn log_startup_info(config: &Config) {
56 println!("🚀 Starting MCP OAuth server with microkernel architecture...");
57 println!("📋 Configuration:");
58 println!(" - Architecture: Microkernel (independent handlers)");
59 println!(" - Server: {}:{}", config.server.host, config.server.port);
60 println!(" - Version: {}", config.server.version);
61 println!(
62 " - GitHub Client ID: {}",
63 if config.github.client_id.is_empty() {
64 "Not configured"
65 } else {
66 "Configured"
67 }
68 );
69 println!(
70 " - GitHub Client Secret: {}",
71 if config.github.client_secret.is_empty() {
72 "Not configured"
73 } else {
74 "Configured"
75 }
76 );
77 println!("🔧 Handlers:");
78 println!(" - OAuth Provider (authentication & authorization)");
79 println!(" - Streamable HTTP Handler (MCP over HTTP)");
80 println!(" - SSE Handler (MCP over SSE)");
81 println!();
82}