todiagram-mcp-windows-fix
by JehadurRE
README.md
# todiagram-mcp-windows-fix
**Windows-compatible fork** of `@todiagram/todiagram-mcp` that fixes `ERR_UNSUPPORTED_ESM_URL_SCHEME` on Node.js v22+ and v25+ on Windows.
> Connect ToDiagram to Cursor, Claude, Windsurf, and other AI assistants — now works on Windows!
## ⚠️ The Problem
The original `@todiagram/todiagram-mcp` crashes on Windows with:
```
Fatal error in main(): Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]:
Only URLs with a scheme in: file, data, and node are supported by the default ESM loader.
On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
```
**Root cause**: In `dist/mcp-server.js`, the `lazyLoadUtil()` function dynamically imports tool modules using `path.join()`, which on Windows produces paths like `C:\Users\...\tools\file.js`. The Node.js ESM loader requires `file://` URLs, not bare Windows paths.
## ✅ The Fix
A one-line change in `dist/mcp-server.js`:
```diff
- import { fileURLToPath } from "url";
+ import { fileURLToPath, pathToFileURL } from "url";
// ... in lazyLoadUtil():
- await import(toolPath);
+ await import(pathToFileURL(toolPath).href);
```
`pathToFileURL()` converts `C:\Users\...\file.js` → `file:///C:/Users/.../file.js`, which the ESM loader accepts on all platforms.
## 📦 Install
```bash
npm install -g todiagram-mcp-windows-fix
```
## 🔧 MCP Configuration
### Claude Code (`.mcp.json`)
```json
{
"mcpServers": {
"todiagram": {
"type": "stdio",
"command": "todiagram",
"env": {
"TODIAGRAM_API_KEY": "your-api-key-here"
}
}
}
}
```
### Or via npx
```json
{
"mcpServers": {
"todiagram": {
"type": "stdio",
"command": "npx",
"args": ["-y", "todiagram-mcp-windows-fix"],
"env": {
"TODIAGRAM_API_KEY": "your-api-key-here"
}
}
}
}
```
### API Key Setup
1. Go to [ToDiagram Editor](https://todiagram.com/editor)
2. Click the **account icon** at top right
3. Go to **API Key** section
4. Create a key with a descriptive name and expiry time
## 🐛 Upstream Issue
This fix should be applied to the original `@todiagram/todiagram-mcp` package. The upstream issue is in `src/mcp-server.ts`:
```typescript
// Current (broken on Windows):
for (const toolPath of toolsPaths) {
await import(toolPath);
}
// Fix:
import { pathToFileURL } from "url";
for (const toolPath of toolsPaths) {
await import(pathToFileURL(toolPath).href);
}
```
**Affected platforms**: Windows with Node.js v22+ (any version using ESM loader with strict URL scheme validation)
**Affected versions**: `@todiagram/todiagram-mcp` v1.1.0 and likely earlier versions
## ✅ Platform Compatibility
| Platform | Node.js v20 | Node.js v22 | Node.js v25 |
|----------|-------------|-------------|-------------|
| Windows | ✅ | ✅ | ✅ |
| macOS | ✅ | ✅ | ✅ |
| Linux | ✅ | ✅ | ✅ |
## 📄 License
FSL-1.1-ALv2 (same as upstream)
TDQS
A4.2/5.0
Scored across 5 tools
Disambiguation5/5
Each tool targets a distinct diagram type (code, data, system, image, Mermaid), with descriptions explicitly guiding when to use each and highlighting differences (e.g., generateCodeDiagram vs generateSystemDiagram).
Naming Consistency5/5
All tools follow a consistent 'generate + [DiagramType]' pattern using CamelCase, e.g., generateCodeDiagram, generateDataDiagram, etc.
Tool Count5/5
5 tools is a well-scoped set for a diagram generation server, covering the main diagram categories without unnecessary duplication or missing core functionality.
Completeness5/5
The tool set covers the major diagram needs: code-level, data, system architecture, image-to-diagram conversion, and Mermaid syntax, with no obvious gaps for the domain.
Maintenance
ActivityStale
ResponsivenessNo issues