Skip to main content

mcp_stdio_proxy/
env_init.rs

1//! 进程环境初始化
2//!
3//! 在 mcp-proxy 启动早期调用,设置进程级环境变量:
4//! - 镜像源(npm_config_registry / UV_INDEX_URL)
5
6use crate::config::{AppConfig, MirrorYamlConfig};
7
8/// 初始化进程环境(镜像源)
9///
10/// 在 main() 启动早期、日志初始化前调用。
11/// 设置的环境变量会被所有子进程(npx/uvx 等)自动继承。
12pub fn init(app_config: &AppConfig) {
13    // 1. 镜像源配置
14    init_mirror(&app_config.mirror);
15
16    // 2. 汇总诊断日志
17    mcp_common::diagnostic::eprint_env_summary();
18}
19
20/// 从 config.yml + 环境变量合并镜像配置,设为进程级环境变量
21fn init_mirror(yml: &MirrorYamlConfig) {
22    let mut config = mcp_common::mirror::MirrorConfig::from_env();
23
24    // config.yml 非空值作为默认(环境变量优先级更高)
25    if config.npm_registry.is_none() && !yml.npm_registry.is_empty() {
26        config.npm_registry = Some(yml.npm_registry.clone());
27    }
28    if config.pypi_index_url.is_none() && !yml.pypi_index_url.is_empty() {
29        config.pypi_index_url = Some(yml.pypi_index_url.clone());
30    }
31
32    if config.is_empty() {
33        eprintln!("  - Mirror: not configured");
34        return;
35    }
36
37    if let Some(ref npm) = config.npm_registry {
38        eprintln!("  - npm registry: {npm}");
39    }
40    if let Some(ref pypi) = config.pypi_index_url {
41        eprintln!("  - PyPI index: {pypi}");
42    }
43    config.apply_to_process_env();
44}