Skip to content

feat: support FOFA_EMAIL/FOFA_KEY environment variables in mcp.json - #40

Open
LilyAva000 wants to merge 1 commit into
asaotomo:v2.0.0from
LilyAva000:feat/mcp-env-credentials
Open

feat: support FOFA_EMAIL/FOFA_KEY environment variables in mcp.json#40
LilyAva000 wants to merge 1 commit into
asaotomo:v2.0.0from
LilyAva000:feat/mcp-env-credentials

Conversation

@LilyAva000

Copy link
Copy Markdown

背景 (Motivation)

目前 FofaMap 的 MCP 服务只能通过 config/settings.yaml 配置 FOFA 凭据,不支持在 mcp.jsonenv 字段中传入。这带来两个不便:

  1. 不符合 MCP 生态的常见做法(大多数 MCP Server 都支持通过 env 注入凭据);
  2. 凭据必须写进项目目录下的配置文件,容易随项目一起被误提交,且在多项目共享同一份 FofaMap 时不够灵活。

改动内容 (Changes)

  • config/__init__.py:在加载 settings.yaml 之后,读取环境变量 FOFA_EMAILFOFA_KEY 并覆盖 userinfo.email / userinfo.key。环境变量优先级高于 yaml 配置;未设置环境变量时行为与之前完全一致(向后兼容)。由于 CLI 与 MCP 共用 settings 单例,CLI 模式下同样生效。
  • README.md:在 Cursor / LM Studio 的 MCP 集成章节中补充 env 配置说明,并给出完整的 mcp.json 参考示例:
{
  "mcpServers": {
    "fofamap-v2": {
      "command": "python3.10",
      "args": ["/path/to/mcp_server.py"],
      "env": {
        "FOFA_EMAIL": "your_email@example.com",
        "FOFA_KEY": "your_fofa_api_key"
      }
    }
  }
}

测试 (Testing)

已验证以下三种场景:

场景 结果
未设置环境变量 使用 settings.yaml 中的 email/key(行为不变)
设置 FOFA_EMAIL + FOFA_KEY 覆盖 yaml 中的对应值
仅设置其中一个环境变量 只覆盖对应字段,另一字段仍取 yaml 值

兼容性

完全向后兼容:不设置环境变量时,加载逻辑与改动前一致,settings.yaml 仍是必需的(其余配置项仍从 yaml 读取)。

Allow configuring FOFA credentials via environment variables in mcp.json
"env" field, so users no longer have to put credentials in
config/settings.yaml. Environment variables take precedence over the
yaml config; the yaml file remains the fallback when env vars are unset.

- config/__init__.py: override userinfo.email/key from FOFA_EMAIL and
  FOFA_KEY after loading settings.yaml
- README.md: document the env option with a complete mcp.json example
@asaotomo

Copy link
Copy Markdown
Owner

感谢提交这个 PR,也感谢你指出 MCP 场景下不应强制把 FOFA 凭据写进项目配置文件。

经对照确认,这个需求已经在正式发布的 v2.0.1 中覆盖,而且安全边界比本 PR 基于 v2.0.0 的实现更完整,因此不再需要合并当前补丁:

  • FOFA_API_KEY 是首选变量,同时兼容 FOFA_KEY,并支持 FOFA_EMAIL;环境变量优先于本地 YAML:config/init.py
  • 配置文件现在可以不存在,CLI、MCP 与 REST API 共用同一配置加载器;MCP 宿主传给 fofamap-mcp 进程的环境变量会直接生效。
  • 2.0.1 还支持系统钥匙串,并把未经明确确认的 YAML 明文密钥标记为不安全的兼容路径。
  • 集成器只写入 MCP 的 command / args刻意不读取或复制真实凭据到生成的 mcp.json,避免凭据进入项目文件或被误提交:tests/test_integrations.py
  • 环境变量优先级及旧别名已有自动化测试覆盖:tests/test_config.py

因此,在支持 env 字段的 MCP 宿主中注入这些变量仍然可用;但 FofaMap 不会自动把密钥值复制进配置文件。推荐使用宿主的安全变量、系统钥匙串或进程环境,避免提交包含明文密钥的 mcp.json

另外,本 PR 的目标分支仍是旧的 v2.0.0;当前默认分支与正式版本已经是 v2.0.1。这个 PR 可以视为已在 v2.0.1 中解决。再次感谢你的贡献。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants