模型上下文协议服务器生成器

MCP Factory是一个自动化工具,用于从Windows二进制文件中生成模型上下文协议(MCP)服务器,使AI代理能够与缺乏API文档的传统Windows应用程序交互。

  • by evanking12
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 evanking12/mcp-factory

使用说明

MCP工厂

从Windows二进制文件自动生成模型上下文协议服务器

项目: USF CSE高级设计顶点-微软赞助
目标: 通过自动生成MCP服务器,使AI代理能够与Windows应用程序交互

团队

角色 成员 GitHub
第2-3节 埃文·金 @福音12
第4节(MCP生成) Layalie AbuOleim @阿布莱姆1
第4节(MCP生成) Caden Spokas @bustlingbungus
第5节(验证) Thinh Nguyen @TheNgith

业务场景

企业组织需要AI驱动的客户服务,可以调用缺乏API文档或现代集成点的现有内部工具。MCP Factory通过自动分析Windows二进制文件和生成符合标准的模型上下文协议服务器来弥合这一差距。

Azure资源状态

资源 名称/ID 状态
订阅ID abb10328-e7f1-4d4a-9067-c1967fd70429 ✅ 活动
租户ID bfddc1f5-1e88-471c-9b5e-44611ddd3c22 ✅ 活动
资源组 mcp-factory-rg /东方 ✅ 活动
管理身份 mcp-factory-identity (字幕) f70e3ce7…,principalId ef864658…) ✅ 活动
密钥库 mcp-factory-kv / mcp-factory-kv.vault.azure.net ✅ 活动
存储帐户 mcpfactorystore /标准_LRS ✅ 活动
Blob--上传 mcpfactorystore/uploads ✅ 活动
Blob--伪影 mcpfactorystore/artifacts ✅ 活动
集装箱登记处 mcpfactoryacr / mcpfactoryacr.azurecr.io ✅ 活动
ACA环境 mcp-factory-env /eastus(日志分析 0baaed31…) ✅ 活动
ACA默认域 icycoast-8ddfa278.eastus.azurecontainerapps.io ✅ 活动(已集成Direct3D)
ACA应用程序——管道 mcp-factory-pipeline ✅ 现场直播-- mcp-factory-pipeline.icycoast-8ddfa278.eastus.azurecontainerapps.io
ACA应用程序——网络用户界面 mcp-factory-ui ✅ 现场直播-- mcp-factory-ui.icycoast-8ddfa278.eastus.azurecontainerapps.io
Azure OpenAI mcp-factory-openai / https://mcp-factory-openai.openai.azure.com/ ✅ 活动
OpenAI部署 gpt-4o (2024-11-20型,10K TPM) ✅ 活动
应用洞察 mcp-factory-insights (日志分析: mcp-factory-logs) ✅ 活动
应用服务 mcp-factory-web ⏭ 跳过(VM配额=0,转到ACA)

身份和RBAC

所有访问都是通过托管身份进行的,环境变量中没有密钥或秘密。

角色 资源
密钥库秘密用户+秘密官员 mcp-factory-kv
存储Blob数据贡献者 mcpfactorystore
使用 AcrPull + AcrPush mcpfactoryacr
认知服务OpenAI用户 mcp-factory-openai

密钥库秘密

通过以下方式连接到ACA容器 secretref::

秘密名称 使用人
azure-storage-account 管道
openai-endpoint 管道
openai-deployment 管道
azure-client-id 管道
appinsights-connection 管道

部署

两个容器——每次推送时自动部署 main 通过 .github/workflows/ci-cd.yml (GitHub Actions OIDC,无存储机密)。紧急热修复程序的手动命令:

# Build and push
docker build -t mcpfactoryacr.azurecr.io/mcp-factory-pipeline:latest .
docker build -t mcpfactoryacr.azurecr.io/mcp-factory-ui:latest -f Dockerfile.ui .
docker push mcpfactoryacr.azurecr.io/mcp-factory-pipeline:latest
docker push mcpfactoryacr.azurecr.io/mcp-factory-ui:latest

# Update running containers
az containerapp update --name mcp-factory-pipeline --resource-group mcp-factory-rg --image mcpfactoryacr.azurecr.io/mcp-factory-pipeline:latest
az containerapp update --name mcp-factory-ui --resource-group mcp-factory-rg --image mcpfactoryacr.azurecr.io/mcp-factory-ui:latest
  • 管道 (Dockerfile) — uvicorn api.main:app 在8000端口。运行发现,通过托管身份读取密钥库机密。将上传/工件写入Blob存储。
  • 用户界面 (Dockerfile.ui) — uvicorn ui.main:app 在端口8080上。代理 /api/* 通过以下方式访问管道URL httpx。没有秘密。

当前状态——第10/16周

摘要: 完整的端到端管道 生活在Azure.分析→ 生成→ 聊天已验证 calc.exe 和 notepad.exe.MCP stdio服务器(generated/notepad/mcp_stdio.py)注册于 .vscode/mcp.json --VS Code Copilot通过以下方式进行本地连接 #mcp-notepadAzure Monitor工作簿与App Insights一起部署,显示实时运营指标。在二头肌中为GUI自动化CI作业配置了自托管的Windows运行器VM。所有已知的差距都缩小了。

  • [x] 第2-3节:混合动力发现发动机 — 完成
    • ✅ PE DLL/EXE。NET、COM/TLB、RPC、CLI、SQL、9种脚本语言、所有§1遗留协议
    • ✅ --target 接受文件 或 已安装目录(C:\Program Files\AppD\)--§2.a
    • ✅ --registry flag扫描HKLM应用程序路径、卸载密钥和COM CLSID注册--§1.c
    • ✅ 制服 { name, kind, confidence, description, return_type, parameters, execution } 模式
    • ✅ 29/29个演示目标通过所有10个源类型部分
  • [x] 第4节:MCP生成 — 完成(云+本地+复制)
    • ✅ python mcp_factory.py --target <file> 在一个命令中运行完整的管道
    • ✅ Flask MCP服务器 /tools, /invoke, /chat, /download/invocables
    • ✅ 聊天界面位于 http://localhost:5000;显示工具调用+实时执行结果
    • ✅ 工作演示:计算器(55个调用程序,WinUI3)和记事本(Win32)
    • ✅ /api/generate live in ACA--返回正确的工具模式,保存到Blob工件中
    • ✅ generated/notepad/mcp_stdio.py --使用 mcp Python SDK。与HTTP服务器相同的工具注册表;跑 _execute_tool (pywinauto)在线程执行器中,因此asyncio循环永远不会阻塞。
    • ✅ .vscode/mcp.json --VS代码副本服务器注册。打开Copilot聊天→ type #mcp-notepad → 工具出现;让Copilot打开记事本并键入文本→ 它召唤 type_text 通过MCP协议。
  • [x] 第5节:验证UI — 完成(云)
    • ✅ FastAPI web用户界面(ui/main.py)--4步向导:上传→ 选择→ 生成→ Chat
    • ✅ 安装路径输入字段(§2.b)——粘贴 C:\Program Files\AppD\ 直接
    • ✅ 聊天选项卡发送 invocables 元数据,以便管道实际执行工具调用
    • ✅ 下载JSON模式按钮
    • ✅ 可选API-密钥保护(UI_API_KEY env-var)--§6访问限制
  • [x] 第6节:Azure基础架构 — 完全部署
    • ✅ 资源组、托管身份、密钥库、存储(上传+工件)、ACR、ACA环境均已配置
    • ✅ 托管身份:存储Blob数据贡献者+认知服务OpenAI用户+密钥库秘密用户+官员+ArcPull+ArcPush。env变量中没有秘密/密钥。
    • ✅ Azure OpenAI mcp-factory-openai — gpt-4o 部署(2024-11-20,10K TPM)处于活动状态
    • ✅ 应用洞察 mcp-factory-insights 连接到两个集装箱
    • ✅ Docker镜像推送到 mcpfactoryacr.azurecr.io两款ACA应用均已上线
    • ✅ mcp-factory-pipeline --修订 0000003,端到端验证
    • ✅ .NET Aspire-- aspire/AppHost/Program.cs 协调两个容器;端口绑定、App Insights和 PIPELINE_URL 注射全部有线。在本地运行 cd aspire/AppHost && dotnet run (需要.NET 8 SDK+Docker桌面)。
    • ✅ CI/CD-- .github/workflows/ci-cd.yml — 四-作业管道(测试→ gui测试(Windows) → 构建→ 部署)、GitHub OIDC(无存储秘密)。每次按下都会触发 main.
    • ✅ ACA可扩展到零——两个容器应用程序在空闲时可扩展到0个副本,在HTTP负载下可扩展到3/2。未使用时零成本。
    • ✅ Blob支持的作业状态-- _register_invocables 将可调用映射持久化到 artifacts/{job_id}/invocables_map.json; _get_invocable 缓存未命中时从Blob重新加载。状态在容器回收后幸存并扩展为零。
    • ✅ 注册表扫描连线到API- _run_discovery 通过 --registry 在Windows上,从云API启用HKLM App Paths/Uninstall/COM CLSID枚举(§1.c)。
    • ✅ Azure监视器工作簿 — infra/workbook.bicep 将共享工作簿部署到 mcp-factory-rg 与App Insights一起。五个图块:本周分析、平均调用/作业、工具调用成功率、平均+P95延迟表、吞吐量时间表。所有KQL查询都使用 toint(customDimensions[...]) 匹配实际遥测模式。
    • ✅ 自托管Windows运行程序VM — infra/runner-vm.bicep 规定a Standard_D2s_v3 Windows Server 2022虚拟机 CustomScriptExtension 自动在首次启动时安装Python、pywinauto和GitHub Actions runner服务(scripts/install-github-runner.ps1).这 gui-tests CI作业目标 [self-hosted, windows, x64].
    • ✅ Azure人工智能搜索 — api/search.py 生成时的矢量索引工具描述;当服务器有>15个工具时,聊天端点使用最近邻检索每轮选择15个最相关的工具,以防止大型二进制文件的上下文窗口耗尽。
  • [x] 赞助商要求(第6节检查表)
    • ✅ Azure云(计算、存储、网络、OpenAI)-实时
    • ✅ GitHub+GitHub Copilot——正在使用中;生成的MCP服务器本地连接到Copilot聊天
    • ✅ VS代码--开发环境+ .vscode/mcp.json 用于副驾驶MCP注册
    • ✅ .NET Aspire应用程序主机-- aspire/AppHost/Program.cs --两个集装箱都已完全接线
    • ✅ GitHub代码空间-- .devcontainer/devcontainer.json
    • ✅ 引用的Microsoft文档——本自述中的参考部分
    • ✅ 预算警报脚本-- scripts/setup_budget_alert.ps1 (150美元/月上限)
    • ✅ FERPA合规声明——如下

赞助商演示E2E

完整赞助商演示证明在GitHub Actions中运行,通过 赞助商演示E2E。工作流上传了一个名为的GitHub Actions工件 sponsor-demo-e2e.

标准绿跑: 24613173130. 集中远程DCOM运行时源代码证明: 24577926238. 硬化完整性证明: 24613434034. 已部署演示UI: mcp-factory-ui.cycoast-8ddfa278.eastus.containerapps.io.

静态赞助商参考:

  • 最终演示简报 是最短的赞助商/队友交接页面,具有规范的运行、部署的UI、信任/证据摘要和架构/路线图。
  • 赞助商视频演示演练 给出了推荐的SOAP/WSDL UI演示路径、GPT提示、后端图和队友错误输出重构评估。
  • 赞助商证明指数 将规范运行映射到精确的工件路径和快速证明工作流。
  • 赞助商演示注意事项 声明JSON-RPC、SOAP、CORBA、RPC、JNDI、COM/DCOM和任意二进制恢复的证明边界。
  • 非Ghidra伸展收尾 跟踪相同的子网远程DCOM证明路径,而不添加Ghidra或未记录的二进制恢复作用域。
  • 非代码赞助商工件 涵盖Azure成本态势、FERPA/访问控制、架构参考和重新运行指南。

推荐录制的演示目标:通过部署的UI实现SOAP/WSDL。使用 Load SOAP/WSDL Showcase 按钮或上传 tests/fixtures/sponsor/contoso_service.wsdl,然后分析,选择 GetCustomer 或 SubmitTicket,生成MCP模式,并要求GPT调用 生成的具有确定性哨兵的工具。聊天步骤包括 Live Proof Trace 显示GPT的面板 tool_call,后端路由,运行时 模式,以及 tool_result。上述演练具有复制就绪提示和 屏幕上显示的确切证据。

将工件解释为规范赞助商证明包:

  • final-summary.md 是赞助商可读的报告。它包括整体通过/失败、慢速目标诊断、桥接/会话证明和需求证明矩阵。
  • sponsor-report.html 是同一报告的可浏览渲染,用于实时查看。
  • final-summary.json 是同一门的机器可读形式。
  • GPT tool_call +后端 tool_result 所有13种非VM情况都需要哨兵证明:OpenAPI/REST、JSON-RPC、SOAP/WSDL、CORBA IDL、RPC IDL、JNDI、SQL、Python、JavaScript、Ruby、PHP、PowerShell和CMD/BAT。
  • JSON-RPC作为JSON-RRPC 2.0服务托管在管道API中。SOAP验证SOAP信封并分派WSDL命名的操作。SQL对确定性SQLite支持的Contoso数据执行。OpenAPI/REST验证声明的路由和方法。JNDI使用受控的LDAPv3兼容绑定/搜索/查找运行时,CORBA使用受控的OmniORB/IIOP运行时用于确定性Contoso IDL,RPC使用受控的DCE/RPC兼容运行时用于确定性RPC IDL。COM/TLB发现和本地COM自动化已通过Windows网桥得到验证。规范运行 24613173130 以进口为重点的跑步 24577926238 并通过DCOM上的WMI证明了一个受控的同子网远程DCOM夹具。未声明通用CORBA状态迁移、企业目录迁移、任意MSRPC状态支持和任意企业DCOM状态迁移。现在,只有当这些服务被禁用或无法访问时,“提供商要求”的结果才是回退,而不是通过所需的赞助商结果。
  • ci_artifacts/demo/gpt-format-matrix/summary.json 记录 runtime_mode_counts, runtime_backed_cases, adapter_backed_cases,每例 tool_call/tool_result 标记和转录路径。
  • 上述报告的规范运行 13/13 实时执行格式证明和 0 所需的提供者所需的案例。
  • 目标输入支持上传的文件和安装的路径/目录。执行发现的服务器或Windows网桥VM上下文必须可以访问已安装的路径; system32_directory 所需的安装目录是否符合要求 2.a.
  • cmd_exe 是可选的Windows诊断程序。所需的CMD/BAT证据是确定性的 .cmd GPT格式矩阵中的夹具。

关键工件路径:

  • ci_artifacts/demo/final-summary.md
  • ci_artifacts/demo/final-summary.json
  • ci_artifacts/demo/sponsor-report.html
  • ci_artifacts/demo/windows/summary.json
  • ci_artifacts/demo/windows/cmd_exe/cmd_exe.summary.json
  • ci_artifacts/demo/windows/notepad_exe/notepad_exe.summary.json
  • ci_artifacts/demo/windows-gpt/summary.json 当运行反推强化Windows GPT矩阵时
  • ci_artifacts/demo/repo-ingestion/summary.json 当运行回购摄取证明时

这些是来自GitHub Actions的CI证明工件。它们与所提供的应用程序UI blob下载是分开的 /api/download/{job_id}/{filename}.

已知差距

差距 状态
Linux容器中的精简GUI描述 ✅ 关闭2026-03-07 — gui-tests CI作业在自托管的Windows运行器上运行;pywinauto/UIA在CI中的实时Windows会话上运行
CI/CD OIDC激活 ✅ 关闭2026-03-07 --已创建联合凭据; Contributor 在两个ACA应用程序上分配的角色。
MCP协议证明(Copilot工具调用) ✅ 关闭2026-03-07 --确认直播:打开Copilot聊天,让它打开记事本并键入“hello world”——它调用 file_new 然后 type_text 通过MCP stdio协议。记事本打开,文本出现。
GUI/COM/CLI云端Windows分析 ✅ 关闭2026-03-07 — scripts/gui_bridge.py FastAPI worker在Windows runner VM上运行,暴露 POST /analyze 适用于所有4种仅限Windows的源代码类型(GUI pywinauto、COM/TLB pythoncom、Windows EXE CLI、注册表扫描)。 api/main.py 在静态分析后调用桥并合并结果。通过以下方式连接到二头肌 guiBridgeUrl / guiBridgeSecret 参数;VM在引导时自动启动网桥作为计划任务。

方法: A. 混合动力发现发动机 它根据检测到的功能智能地将任何目标文件路由到适当的分析器,生成一个统一的MCP JSON合约,由§4直接使用。

VS代码副本集成

生成的MCP服务器直接连接到VS Code Copilot Chat,无需额外配置。

先决条件: .venv 激活, mcp>=1.0 已安装(pip install -r generated/notepad/requirements.txt).

步骤:

  1. 在VS Code中打开此仓库。这 .vscode/mcp.json 已存在并指向 generated/notepad/mcp_stdio.py.
  2. 打开Copilot聊天(Ctrl+Alt+I).
  3. 类型: #mcp-notepad open a new file and type hello world
  4. 副驾驶电话 file_new 然后 type_text 通过MCP stdio协议。记事本在您的桌面上打开,“hello world”出现在其中。

这证明了: 工厂生成了一个二进制文件→ invocables.json → mcp_stdio.py → VS Code Copilot可以控制记事本。这是端到端的完整概念验证。

手动运行服务器(用于调试):

.venv\Scripts\Activate.ps1
cd generated\notepad
python mcp_stdio.py
# Send JSON-RPC manually or use scripts\mcp_smoke_test.py
python ..\..\scripts\mcp_smoke_test.py

平台要求

此工具是围绕Windows设计的。如果您使用的是Mac,请参阅 docs/mac兼容性.md.

先决条件

必需(在Windows 10/11上手动安装):

  • PowerShell 5.1+(内置于Windows 10+中)
  • python 3.8+--下载 python.org
    • 在安装过程中将Python添加到PATH(默认选中)
  • Git --下载自 git-scm.com

安装

先决条件: Git,Python 3.8+。

# Clone and run the demo
git clone https://github.com/evanking12/mcp-factory.git
cd mcp-factory
pip install -r requirements.txt
python scripts/demo_all_capabilities.py

故障排除: 如果你安装了多个Python版本 python 指向Python 2.x,使用:

py -3 -m pip install -r requirements.txt
py -3 scripts/demo_all_capabilities.py

快速开始

1.功能演示⚡ (“It Works”演示)

您将看到:

demo_all_capabilities.py 在所有支持的源类型中运行29个实时分析,并根据目标结果报告:

MCP FACTORY — ALL CAPABILITIES DEMO
=====================================

[Section 1: Native PE]
  kernel32.dll     ...  exports_mcp.json      1491 invocables
  user32.dll       ...  exports_mcp.json      1037 invocables
  zstd.dll         ...  exports_mcp.json        16 invocables

[Section 2: .NET Assemblies]
  System.dll       ...  dotnet_methods_mcp.json  143 invocables
  mscorlib.dll     ...  dotnet_methods_mcp.json   48 invocables

[Section 3: COM / Type Library]
  shell32.dll           ...  com_objects_mcp.json        482 invocables
  oleaut32.dll          ...  com_objects_mcp.json         12 invocables
  stdole2.tlb           ...  com_objects_mcp.json         50 invocables

[Section 4: CLI Tools]
  cmd.exe               ...  cli_mcp.json                  8 invocables
  git.exe               ...  cli_mcp.json                 35 invocables

[Section 5: SQL]
  sample.sql            ...  sql_file_mcp.json            14 invocables
  sqlite3.dll           ...  exports_mcp.json             16 invocables

[Section 6: Scripting Languages]
  sample.py             ...  python_script_mcp.json        5 invocables
  sample.ps1            ...  powershell_script_mcp.json    4 invocables
  sample.sh             ...  shell_script_mcp.json         5 invocables
  sample.bat            ...  batch_script_mcp.json         4 invocables
  sample.vbs            ...  vbscript_mcp.json             4 invocables
  sample.rb             ...  ruby_script_mcp.json          4 invocables
  sample.php            ...  php_script_mcp.json           5 invocables

[Section 7: JavaScript / TypeScript]
  sample.js             ...  javascript_mcp.json           6 invocables
  sample.ts             ...  typescript_mcp.json           5 invocables

[Section 8: RPC Interfaces]
  lsass.exe             ...  rpc_mcp.json                  8 invocables

[Section 9: Legacy Protocols & Spec Formats]
  sample_openapi.yaml   ...  openapi_spec_mcp.json         9 invocables
  sample_jsonrpc.json   ...  jsonrpc_spec_mcp.json         5 invocables
  sample.wsdl           ...  wsdl_file_mcp.json            7 invocables
  sample.idl            ...  corba_idl_mcp.json           12 invocables
  sample.jndi           ...  jndi_config_mcp.json         12 invocables
  zstd.pdb              ...  pdb_file_mcp.json           871 invocables

[Section 10: Directory Scan (§2.a installed-instance)]
  scripts/  (dir)       ...  scripts_scan_mcp.json      1184 invocables

Summary: 29 succeeded  0 skipped  (29 total)

为什么这很重要: 每个输出(无论源类型如何)都会生成与§4所使用的JSON模式相同的JSON模式。PE导出、Python函数和SQL存储过程看起来都与MCP生成器相同。

置信水平:

  • 放心: 显式元数据(类型注释、文档注释+返回类型)
  • 高: 部分文档或导出时标题匹配
  • 介质: 图案匹配,尽最大努力
  • 低: 最少信息(仅符号名称)

2.实时应用演示⚡ (“它控制Windows”演示)

启动一个预构建的服务器并与之聊天:

# Calculator (WinUI3/MSIX, 55 invocables — digit buttons, operators, scientific functions)
python mcp_factory.py --serve calculator-test2

# Notepad (classic Win32 — type, save, open, append)
python mcp_factory.py --serve notepad

打开 http://localhost:5000 并尝试:

  • 打开计算器,计算144的平方根,然后乘以7
  • 打开记事本,键入一首短诗,将其另存为poem.txt,然后重新打开并附加标题

聊天UI显示每个工具调用、其参数以及实时应用程序窗口的原始结果。

在任何二进制文件上运行完整管道:

# Discovery → selection TUI → server generation in one command
python mcp_factory.py --target C:\Windows\System32\notepad.exe --description "text editor"

分析特定文件或已安装目录

# Native DLL
python src/discovery/main.py --target "C:\Windows\System32\kernel32.dll" --out artifacts

# Script file
python src/discovery/main.py --target "path\to\service.py" --out artifacts

# OpenAPI / WSDL / IDL / JNDI / PDB — same command, format auto-detected
python src/discovery/main.py --target "api\openapi.yaml" --out artifacts

# Installed application directory (§2.a) — walks tree, analyses every recognized file
python src/discovery/main.py --target "C:\Program Files\MyApp\" --out artifacts

分析Windows CLI工具

python src/discovery/cli_analyzer.py "C:\Windows\System32\ipconfig.exe"

运行选择UI查看发现的工具,并选择MCP服务器公开的内容:

# Single file
python src/ui/select_invocables.py --target tests/fixtures/vcpkg_installed/x64-windows/bin/zstd.dll

# Installed directory (§2.a) — same flag, directory support is transparent
python src/ui/select_invocables.py --target tests/fixtures/scripts/

# With a free-text hint (§2.b) — highlights matching rows in the table
python src/ui/select_invocables.py --target zstd.dll --description "compress decompress streaming"

# From an already-generated discovery JSON (skip re-analysis)
python src/ui/select_invocables.py --input artifacts/discovery-output.json

UI默认值 保证+高置信度开启,中+低关闭(§3.b)。命令: <n> 切换行, 3-10 范围, g 仅保证+高, m 切换中等, l 切换低, a/n 全部/无, f <text> 过滤器, done save → artifacts/selected-invocables.json.

仓库结构

mcp-factory/
├── mcp_factory.py                 # Single-command entry point (--target / --serve)
├── scripts/
│   ├── demo_all_capabilities.py   # Main demo — 29 targets, all source types (10 sections)
│   ├── demo_legacy_protocols.py   # Standalone 6-target suite for spec-gap analyzers
│   ├── validate_features.py       # Validation suite
│   └── analyze_json_anomalies.py  # Hygiene verification
├── src/discovery/                 # Sections 2-3: Discovery pipeline
│   ├── main.py                    # CLI orchestrator — single file OR directory walk (§2.a)
│   ├── classify.py                # File-type detection (22+ source types)
│   ├── exports.py                 # Native PE exports (pefile)
│   ├── pe_parse.py                # .NET reflection
│   ├── com_scan.py                # COM registry + TLB scanning
│   ├── cli_analyzer.py            # CLI argument extraction
│   ├── gui_analyzer.py            # GUI discovery — UIA button walk, menu enumeration, app-type detection
│   ├── rpc_scan.py                # RPC interface scanning
│   ├── sql_analyzer.py            # SQL stored procs, views, tables, triggers
│   ├── script_analyzer.py         # Python, PowerShell, Shell, Batch, VBScript, Ruby, PHP
│   ├── js_analyzer.py             # JavaScript + TypeScript
│   ├── openapi_analyzer.py        # OpenAPI 3.x / Swagger 2.x + JSON-RPC 2.0
│   ├── wsdl_analyzer.py           # SOAP / WSDL 1.1
│   ├── idl_analyzer.py            # CORBA IDL interfaces
│   ├── jndi_analyzer.py           # JNDI bindings (.properties, Spring XML)
│   ├── pdb_analyzer.py            # PDB debug symbols (dbghelp.dll)
│   └── schema.py                  # Unified Invocable schema → MCP JSON
├── src/ui/
│   └── select_invocables.py       # Interactive §3 selection UI (rich table, confidence filter)
├── src/generation/                # Section 4: MCP server generation
│   ├── section4_select_tools.py
│   └── section4_generate_server.py  # Flask server template + chat UI template
├── generated/                     # Pre-built servers (ready to --serve)
│   ├── calculator-test2/          # Calculator — 55 invocables, WinUI3/MSIX
│   └── notepad/                   # Notepad — classic Win32, type/save/open/append
├── tests/
│   └── fixtures/scripts/          # Sample files for all supported source types
│       ├── sample_openapi.yaml    # OpenAPI 3.0 fixture (9 operations)
│       ├── sample_jsonrpc.json    # JSON-RPC 2.0 fixture (5 methods)
│       ├── sample.wsdl            # WSDL 1.1 fixture (7 operations)
│       ├── sample.idl             # CORBA IDL fixture (12 methods)
│       └── sample.jndi            # JNDI fixture (12 bindings)
├── demo_output/unified/           # Generated demo artifacts (one sub-dir per target)
└── docs/
    ├── adr/                       # Architecture Decision Records (ADR-0001 → ADR-0008)
    ├── copilot-log/entries.md     # Session-by-session development log
    ├── sections-2-3.md            # §2-3 feature coverage reference (29/29 targets)
    └── schemas/                   # JSON schema contracts for Section 4

团队职责

  • 第2-3节(二元分析): Evan King-DLL/EXE导出发现、头匹配、分层输出
  • 第4节(MCP生成): Layalie AbuOleim,Caden Spokas-JSON模式生成,工具定义
  • 第5节(验证): Thinh Nguyen-交互式用户界面,基于LLM的验证
  • 集成和部署: 团队协作-Azure部署、CI/CD、文档

第4节:MCP服务器生成

完整管道(发现→ 选择→ 服务器)

# Run the entire pipeline on any target in one command
python mcp_factory.py --target C:\Windows\System32\calc.exe --description "calculator"

# Skip re-discovery — load an existing discovery JSON directly
python mcp_factory.py --input artifacts/discovery-output.json

# Generate the server without auto-launching it
python mcp_factory.py --target zstd.dll --skip-launch

# Suppress the browser auto-open (e.g. headless / CI)
python mcp_factory.py --serve notepad --no-browser

这将运行发现,打开选择TUI,然后生成并启动服务器。

标志 描述
--target FILE_OR_DIR 要分析的二进制文件、脚本或目录--运行完整发现
--serve COMPONENT 完全跳过管道;从以下位置启动预构建服务器 generated/
--input JSON 跳过发现;加载现有 discovery-output.json 直接
--description TEXT 高亮显示所选TUI中匹配行的自由文本提示
--no-browser 服务器启动后,不要自动打开浏览器
--skip-launch 生成后停止--不要启动服务器

启动预构建的服务器

python mcp_factory.py --serve notepad
python mcp_factory.py --serve calculator-test2

手动管道步骤

# 1. Discovery
python src/discovery/main.py --target <file> --out artifacts

# 2. Select invocables (interactive TUI)
python src/ui/select_invocables.py --target <file>
# Writes: artifacts/selected-invocables.json

# 3. Generate server
python src/generation/section4_generate_server.py
# Writes: generated/<name>/server.py + static/index.html

# 4. Run the server
cd generated/<name>
cp .env.example .env  # fill in OPENAI_API_KEY
python server.py

通过以下方式进行验证:

curl http://localhost:5000/tools
# Open http://localhost:5000 in browser for chat UI

数据合约稳定性(第4节)

第2-3节生成了第4节团队所依赖的稳定JSON模式:

贡献

这是一个活跃的顶点项目。有关开发设置和工作流程指南,请参阅 贡献.md.

文档

文档 描述
项目描述 原始赞助商要求(第1-7节)
建筑 系统设计和组件概述
第2-3节详细信息 二进制发现实现
产品流程 完整管道(第2-5节)
模式 第4节的JSON模式合约
美国存托凭证 架构决策记录
故障排除 常见问题和解决方案

由微软赞助 |由微软工程师指导
最后更新时间:2026年3月7日-Aspire构建干净;添加了CI/CD工作流程、App Insights自定义遥测和KV清理脚本


FERPA合规声明

MCP工厂的开发和运营符合《家庭教育权利和隐私法》(FERPA)和所有其他适用的数据隐私法规。

  • 不收集或存储学生个人身份信息。 该系统不会收集、处理或保留姓名、学生ID、电子邮件地址或任何其他个人身份信息。
  • 上传的二进制文件是短暂的。 通过web UI上传的文件仅在分析管道作业期间写入Azure Blob存储。Blobs存储在随机作业ID下;不创建文件名到标识的映射。Blob生命周期管理策略会在24小时后删除上传的文件。
  • 没有会话数据被持久化。 通过发送到Azure OpenAI的聊天消息 /api/chat 端点未记录到持久存储中。当通过API访问时,Azure OpenAI默认不存储提示/完成数据。
  • 访问权限仅限于项目团队。 两个Azure容器应用程序都部署了Microsoft Entra ID支持的托管身份验证;不允许对存储或AI服务进行匿名写访问。UI端点可以使用共享的API密钥进一步硬化(UI_API_KEY 环境变量,见上文间隙#8)。
  • Azure资源的范围仅限于项目订阅 (abb10328-e7f1-4d4a-9067-c1967fd70429)并且不与其他课程或学生共享。

有关数据处理的问题应直接联系项目发起人联系人。


参考文献--Microsoft文档

以下Microsoft学习页面和官方文档用于此项目的设计和开发:

主题 URL
模型上下文协议(MCP)概述 https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/function-calling
Azure OpenAI函数调用 https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/function-calling
Azure容器应用概述 https://learn.microsoft.com/en-us/azure/container-apps/overview
Azure容器应用程序环境 https://learn.microsoft.com/en-us/azure/container-apps/environment
Azure Blob存储概述 https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-overview
Azure密钥库机密 https://learn.microsoft.com/en-us/azure/key-vault/secrets/about-secrets
Azure资源的托管身份 https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview
Azure容器注册表 https://learn.microsoft.com/en-us/azure/container-registry/container-registry-intro
应用程序洞察(Azure Monitor) https://learn.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview
.NET Aspire概述 https://learn.microsoft.com/en-us/dotnet/aspire/get-started/aspire-overview
.NET Aspire应用程序主机 https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/app-host-overview
GitHub代码空间开发容器参考 https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration
开发容器规范 https://containers.dev/implementors/spec/
Azure成本管理预算 https://learn.microsoft.com/en-us/azure/cost-management-billing/costs/tutorial-acm-create-budgets
pefile库(PE分析) https://github.com/erocarrera/pefile
窗户 winreg 模块 https://docs.python.org/3/library/winreg.html
COM对象注册(CLSID) https://learn.microsoft.com/en-us/windows/win32/com/com-class-objects-and-clsids
Windows应用程序路径注册表项 https://learn.microsoft.com/en-us/windows/win32/shell/app-registration
FastAPI文档 https://fastapi.tiangolo.com/
Azure Python SDKhttps://learn.microsoft.com/en-us/azure/developer/python/sdk/azure-sdk-overview