WSDL到MCP
一种基于浏览器的工具,将SOAP/WSDL服务定义转换为全类型 模型上下文协议(MCP) 项目——准备投入任何兼容MCP的AI代理。
它做什么
将其指向WSDL文件(本地或URL),它将生成一个完整的、可运行的MCP服务器项目:
- 解析WSDL和XSD模式,解析导入和复杂类型层次结构
- 将SOAP操作映射到具有类型化输入/输出模式(Zod+JSON模式)的MCP工具
- 生成带有会话管理、XML的TypeScript MCP项目↔JSON转换和错误处理
- 包括一个浏览器内游乐场,用于根据实时LLM测试生成的工具
入门
npm install
npm run dev然后打开 http://localhost:5173 在您的浏览器中。
如何使用
- 上传 --放下a
.wsdl文件或从URL加载一个(使用可选的CORS代理) - 配置 --设置项目名称、目标命名空间以及要包含的操作
- 审查 --下载前预览所有生成的文件
- 下载 --获取完整MCP项目的ZIP文件
- 试试看 --在浏览器游乐场中交互式测试您的工具
生成的项目
下载的ZIP包含一个准备运行的MCP服务器,具有:
| 文件 | 目的 |
|---|---|
src/index.ts | MCP服务器入口点 |
src/tools/ | 每个SOAP操作一个文件,具有Zod模式 |
src/soap/client-factory.ts | SOAP HTTP客户端 |
src/utils/xml-to-json.ts | XML↔JSON转换 |
src/session/session-manager.ts | WS-Security会话处理 |
src/soap/header-builder.ts | SOAP标头构造 |
.env.example | 环境变量引用 |
环境变量
| 身份验证类型 | 生成的变量 |
|---|---|
| 没有 | BASE_URL |
| 基础 | BASE_URL, USER_ID, PASSWORD |
| 会议 | BASE_URL, AUTH_URL, USER_ID, PASSWORD, LOGIN_TYPE |
当使用会话认证时, AUTH_URL 指向身份验证服务 BASE_URL 到商业服务。如果两者都位于同一端点,则将它们设置为相同的值。
连接到MCP客户端
生成的服务器使用stdio传输。对于需要HTTP的客户端(例如OpenWebUI),请使用 mcpo 作为一座桥梁:
pip install mcpo
mcpo --port 8000 -- npx tsx src/index.tsClaude Desktop和其他stdio本地客户端直接通过以下方式工作 claude_desktop_config.json --查看生成的 README.md 在ZIP内部。
游乐场LLM提供商
浏览器内游乐场支持:
| 提供者 | 身份验证 | 备注 |
|---|---|---|
| 奥拉玛 | 无 | 本地;默认 http://localhost:11434.一起跑 OLLAMA_ORIGINS=* ollama serve |
| llama.cpp | 无 | 本地;默认 http://localhost:8080.需要启用CORS |
| Anthropic | API密钥 | 需要CORS代理(浏览器→ API |
| 谷歌双子座 | API密钥 | 需要CORS代理(浏览器→ API |
CORS代理
对于云提供商(Anthropic、Gemini),由于CORS,浏览器无法直接调用他们的API。该应用程序包含一个Cloudflare Worker脚本,您可以将其部署为自己的代理——请参阅 CORS代理 上传步骤UI中的部分。
本地开发配置
创建一个 .env.local 项目根目录中的文件,在不接触源代码的情况下覆盖默认值(gitignored通过 *.local):
VITE_DEFAULT_PROVIDER=llamacpp # Default LLM provider (ollama | llamacpp | anthropic | gemini)
VITE_DEFAULT_PROXY_URL=https://... # Pre-fill the CORS proxy URL field
VITE_DEFAULT_LLM_BASE_URL=https://... # Pre-fill the LLM server URL field
VITE_ALLOWED_HOST=your-domain.example.com # Add a custom hostname to Vite's allowedHosts没有 .env.local,该应用程序将恢复到安全的公共默认设置(Ollama on localhost).
建筑
npm run build输出转到 dist/.
技术栈
数据流
flowchart TB
subgraph browser["Browser (this tool — React + Vite)"]
direction TB
wsdl["WSDL / XSD files"]
parser["Parser\n(WSDL + XSD resolver)"]
codegen["Code Generator\n(TypeScript templates)"]
zip["ZIP download"]
wsdl --> parser --> codegen --> zip
end
subgraph server["Generated MCP Server (Node.js / tsx)"]
direction TB
entry["src/index.ts\nMcpServer · StdioTransport"]
tools["src/tools/\nZod-validated tool handlers"]
soapclient["src/soap/client-factory.ts\nSOAP client (node-soap)"]
session["src/session/session-manager.ts\nLogin · ticket cache · auto-refresh"]
entry --> tools --> soapclient
tools --> session --> soapclient
end
subgraph clients["MCP Clients"]
direction TB
claude["Claude Desktop\nCursor · Cline\n(stdio — direct)"]
mcpo["mcpo\n(stdio → HTTP bridge)"]
openwebui["OpenWebUI\nother HTTP clients"]
mcpo --> openwebui
end
subgraph soap["SOAP Services"]
auth["Auth endpoint\n(AUTH_URL)"]
biz["Business endpoint\n(BASE_URL)"]
end
zip -->|"npm install && npm run dev"| server
claude -->|stdio| entry
claude -.->|spawns| entry
mcpo -->|stdio| entry
soapclient -->|"HTTP/S · XML"| biz
session -->|"Login / Logout"| auth图书馆
| 层 | 技术 |
|---|---|
| UI框架 | React 19+TypeScript |
| 快速构建 | |
| 状态 | 状态 |
| zip输出 | jszip+文件保护程序 |
| 语法高亮 | highlight.js |
| 生成的服务器:MCP | @modelcontextprotocol/sdk |
| 生成的服务器:SOAP | node-soap |
| 生成的服务器:模式 | Zod+JSON模式 |
| HTTP网桥(可选) | mcpo |
许可证
麻省理工学院
