ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从CLI到AI代理:User Scanner MCP服务器的架构设计与源码剖析

从CLI到AI代理:User Scanner MCP服务器的架构设计与源码剖析 从CLI到AI代理User Scanner MCP服务器的架构设计与源码剖析【免费下载链接】user-scanner️‍♂️ (2-in-1) Email Username OSINT suite featuring native MCP support for deep data extraction just from a single Email/Username. Analyzes 550 actively maintained scan vectors (175 email / 375 username) for security research, investigations, and digital footprinting.项目地址: https://gitcode.com/GitHub_Trending/us/user-scannerUser Scanner 是一个 2 合 1 的 OSINT 数字足迹扫描套件仅凭单个邮箱或用户名即可在 550 个扫描向量175 邮箱 / 375 用户名平台上执行安全研究与画像分析。本文带你完整剖析它原生MCP 服务器的架构设计与源码实现——看看一个纯 CLI 工具是如何变成 Claude Desktop、Cursor 等 AI 代理随时可调用的智能扫描引擎的。一、为什么OSINT工具需要MCP服务器传统工作流中OSINT 调查全靠人工你在终端输入user-scanner -u johndoe盯着进度条再把结果手动喂给分析工具。MCPModel Context Protocol模型上下文协议改变了这一切。它为 AI 大模型提供了一组标准化的工具接口AI 代理不再只是聊天而是能自主调用真实程序执行任务。对 User Scanner 来说接入 MCP 意味着自主调查AI 可以直接调用scan_username发起 550 平台的深度扫描递归情报挖掘通过cross_scan参数AI 自动从画像中挖出备用用户名、邮箱并二次扫描动态发现AI 能先查询list_available_modules弄清支持哪些平台再决定扫描范围整个 MCP 服务器只有 3 个文件、约 470 行代码却能驱动一个高并发扫描引擎——这正是本文要拆解的核心。二、整体架构三层极简设计MCP 服务器位于 user_scanner/mcp/ 目录职责划分清晰文件职责规模server.pystdio 入口、JSON-RPC 路由、日志配置70 行schemas.py定义暴露给 AI 的工具清单与参数 Schema186 行handlers.py参数解析、调用扫描编排器、组装响应211 行入口点在 pyproject.toml 中注册为独立可执行脚本user-scanner-mcp user_scanner.mcp.server:mainMCP 依赖被设计为可选扩展pyproject.toml 中mcp [mcp1.2.0,2]普通用户装基础版不受影响AI 场景才执行pip install user-scanner[mcp]。 架构精髓MCP 层不实现任何扫描逻辑它只是翻译官——把 AI 的 JSON 参数翻译成核心编排器的调用与 CLI 共享同一套扫描引擎。三、server.py70行代码的stdio入口3.1 双通道设计stdout说话stderr记录MCP 协议走标准输入/输出的 JSON-RPC 流因此任何混入 stdout 的杂音都会摧毁通信。server.py 的第一处关键设计就是日志分流server.py#L17-L23logging.basicConfig( levellogging.INFO, streamsys.stderr, )3.2 两个装饰器完成全部路由服务本体极其精简app.list_tools()声明工具清单app.call_tool()分发执行请求server.py#L28-L37全部委托给 schemas 和 handlers。启动时run()通过stdio_server()接管标准流server.py#L40-L47。还有一个贴心细节缺依赖时给出明确指引而非崩溃server.py#L6-L12——未安装mcp包会提示pip install user-scanner[mcp]后优雅退出。-v参数则可切换详细日志级别方便排障。四、schemas.py写给AI看的工具说明书对 AI 来说Schema 的 description 就是它的操作手册。get_tool_list() 声明了 3 个工具工具作用scan_username跨平台用户名深度扫描 元数据富化scan_email跨平台邮箱注册验证与账号发现list_available_modules动态发现所有支持的分类与平台4.1 参数 Schema 的复用技巧注意 basic_props 与 cross_scan_props 被抽成公共字典分别update进两个扫描工具的参数表——新增一个全局参数两个工具自动同步这是典型的 DRY 实践。4.2 把安全默认值写进描述里最精彩的是allow_loud的描述文案schemas.py#L73-L81明确警告仅当不需要隐蔽时才设 true会触发密码重置邮件并惊动目标默认 stealth 模式。等于给 AI 代理装上了安全护栏防止它误发高声请求。交叉扫描的 5 个参数cross_scan/cross_links/cross_emails/cross_depth/cross_sweep每个都有中文语义级说明AI 能据此自主决定挖掘深度——更深但更慢的调查完全由代理权衡。五、handlers.py把AI参数翻译成引擎调用handlers.py 是整个服务器的心脏有 4 个值得学习的设计。5.1 锁串行化并发请求不打架MCP 客户端可能同时发起多次工具调用而扫描引擎依赖模块级全局状态代理、超时、并发数。一把asyncio.Lock解决了全部竞争handlers.py#L40-L41_scan_lock asyncio.Lock()5.2 try/finally 保证状态用完即还原execute_scan() 在锁内应用代理/超时/并发配置finally块确保无论成败都恢复默认值handlers.py#L76-L123——第 N 次请求永远从干净环境开始这是长驻服务进程的经典防御。5.3 二次stdout防护重定向print编排器内部仍有面向终端的print()输出。handlers 用contextlib.redirect_stdout(sys.stderr)把它们全部劫持到 stderrhandlers.py#L97-L102再配合asyncio.to_thread把阻塞式扫描丢进线程既不卡事件循环也不污染 JSON-RPC 流。5.4 结构化响应包AI友好的输出结果不是原始文本而是带统计摘要的 JSON 信封handlers.py#L125-L147summary给出总数/命中/未找到/错误/跳过的计数results只含命中项errored_sites单列失败站点——AI 代理拿到即可直接推理无需解析噪声。工具路由本身是一个 3 分支的call_tool()handlers.py#L198-L211未知工具名会记录日志并抛出明确错误。六、底层引擎CLI与MCP共用同一套扫描核心MCP 层之所以薄是因为扫描能力全部沉淀在 user_scanner/core/动态模块发现load_modules() 用importlib扫描分类目录每个平台就是一个含validate_{名称}函数的模块——新增平台零注册成本统一调度handlers 调用与 CLI 完全相同的 orchestrator.pyrun_user_full/run_email_full_batch等保证两条入口行为一致并发引擎信号量 线程池实现默认 60 并发请求orchestrator.py#L27-L33httpxcurl_cffi提供 TLS 指纹伪装loud 门控高危模块如触发重置邮件的邮箱站见 helpers.py#L27-L61在未授权时返回skipped而非静默执行orchestrator.py#L60-L61想深入了解各层行为官方文档是最好的配套读物交叉扫描与置信度模型docs/CROSS_SCAN.mdCLI 完整参数手册docs/FLAGS.mdPython 库模式调用指南docs/USAGE.md通配符模式语法docs/PATTERNS.md七、快速上手三步接入你的AI代理 # 第1步安装带MCP扩展的版本 pip install user-scanner[mcp]第 2 步在客户端配置如claude_desktop_config.json或mcp_config.json中注册服务器{ mcpServers: { user-scanner: { command: user-scanner-mcp } } }第 3 步重启客户端直接用自然语言下指令例如用 stealth 模式扫描用户名 johndoe只看开发平台分类命中后递归挖掘两跳——AI 会自主组装module/category cross_scan cross_depth参数完成整条调查链路。 想阅读源码克隆仓库即可git clone https://gitcode.com/GitHub_Trending/us/user-scanner核心路径见下文清单。八、源码阅读路线与扩展建议推荐按依赖顺序阅读全部相对仓库根目录user_scanner/mcp/server.py —— 70 行10 分钟掌握 stdio MCP 骨架user_scanner/mcp/schemas.py —— 学习如何为 AI 编写高信息量 Schemauser_scanner/mcp/handlers.py —— 全局状态管理 stdout 防护的完整范例user_scanner/core/orchestrator.py —— 并发调度与 loud 门控tests/test_mcp_handlers.py —— 查看工具调用的期望行为与断言动手扩展新增工具只需在 schemas.py 的get_tool_list()追加一个types.Tool再在 handlers.py 的call_tool()加一个路由分支——这正是薄适配层 厚核心引擎架构的魅力所在。⚠️合规提醒User Scanner 仅面向教育用途、授权安全研究与防御性 OSINT 调查。请只在获得明确授权的目标上使用开发者不对任何滥用行为负责。【免费下载链接】user-scanner️‍♂️ (2-in-1) Email Username OSINT suite featuring native MCP support for deep data extraction just from a single Email/Username. Analyzes 550 actively maintained scan vectors (175 email / 375 username) for security research, investigations, and digital footprinting.项目地址: https://gitcode.com/GitHub_Trending/us/user-scanner创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表