From 3dd0db07fd7bf0e330d0b535e622cdd27b24e6d7 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Sun, 17 Aug 2025 16:46:33 +0000 Subject: [PATCH 1/8] docs(fetch): Add Windows PYTHONIOENCODING configuration Add troubleshooting section for Windows users experiencing timeout issues. Setting PYTHONIOENCODING=utf-8 fixes character encoding problems that can cause the server to timeout on Windows systems. Fixes #65 Co-authored-by: Ola Hungerford --- src/fetch/README.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/fetch/README.md b/src/fetch/README.md index 5324e50731..1bf12a1565 100644 --- a/src/fetch/README.md +++ b/src/fetch/README.md @@ -168,6 +168,48 @@ This can be customized by adding the argument `--user-agent=YourUserAgent` to th The server can be configured to use a proxy by using the `--proxy-url` argument. +## Windows Configuration + +If you're experiencing timeout issues on Windows, you may need to set the `PYTHONIOENCODING` environment variable to ensure proper character encoding: + +
+Windows configuration (uvx) + +```json +{ + "mcpServers": { + "fetch": { + "command": "uvx", + "args": ["mcp-server-fetch"], + "env": { + "PYTHONIOENCODING": "utf-8" + } + } + } +} +``` +
+ +
+Windows configuration (pip) + +```json +{ + "mcpServers": { + "fetch": { + "command": "python", + "args": ["-m", "mcp_server_fetch"], + "env": { + "PYTHONIOENCODING": "utf-8" + } + } + } +} +``` +
+ +This addresses character encoding issues that can cause the server to timeout on Windows systems. + ## Debugging You can use the MCP inspector to debug the server. For uvx installations: From db88ac3ae9c75d0bc0207013a869f1aeaf471377 Mon Sep 17 00:00:00 2001 From: joshylchen <70675173+joshylchen@users.noreply.github.com> Date: Mon, 15 Sep 2025 16:43:18 +0800 Subject: [PATCH 2/8] Update README.md ## Add Zettelkasten MCP Server This PR adds the Zettelkasten to the community servers list. ### Project Overview Comprehensive AI-powered knowledge management system that implements the proven Zettelkasten (slip-box) method with modern AI assistance. ### Key Features - **Atomic Note Management**: Create, organize, and connect atomic ideas - **AI-Powered Workflows**: CEQRC process for enhanced learning - **Full-Text Search**: SQLite FTS5 with advanced query syntax - **Intelligent Linking**: AI-suggested connections between notes - **Multiple Interfaces**: CLI, REST API, Streamlit UI, and MCP server - **Comprehensive Documentation**: Setup guides and examples included ### MCP Server Details - **Transport**: STDIO - **Tools**: 7 comprehensive tools for note management and AI workflows - **Dependencies**: OpenAI API (optional, has stub mode) - **Python**: 3.11+ with modern async/await patterns - **Setup**: Automated setup script with Claude Desktop config generation ### Repository Information - **URL**: https://github.com/joshylchen/zettelkasten - **License**: MIT - **Documentation**: Complete setup guide in `docs/MCP_SETUP.md` - **Tests**: Comprehensive test coverage included This server demonstrates sophisticated MCP patterns and provides real value for knowledge workers and researchers using AI assistants. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 644963b93e..5edac12c5f 100644 --- a/README.md +++ b/README.md @@ -464,6 +464,7 @@ Official integrations are maintained by companies building production ready MCP - Zapier Logo **[Zapier](https://zapier.com/mcp)** - Connect your AI Agents to 8,000 apps instantly. - Zenable Logo **[Zenable](https://docs.zenable.io/integrations/mcp/getting-started)** - Clean up sloppy AI code and prevent vulnerabilities - **[ZenML](https://github.com/zenml-io/mcp-zenml)** - Interact with your MLOps and LLMOps pipelines through your [ZenML](https://www.zenml.io) MCP server +- **[Zettelkasten](https://github.com/joshylchen/zettelkasten)**- Comprehensive AI-powered knowledge management system implementing the Zettelkasten method. Features atomic note creation, full-text search, AI-powered CEQRC workflows (Capture→Explain→Question→Refine→Connect), intelligent link discovery, and multi-interface access (CLI, API, Web UI, MCP). Perfect for researchers, students, and knowledge workers. - ZIZAI Logo **[ZIZAI Recruitment](https://github.com/zaiwork/mcp)** - Interact with the next-generation intelligent recruitment platform for employees and employers, powered by [ZIZAI Recruitment](https://zizai.work). ### 🌎 Community Servers From 966ceea4fe6ba7ba44978ed09011cf365fbf0289 Mon Sep 17 00:00:00 2001 From: Josh Chen Date: Fri, 19 Sep 2025 07:18:07 +0800 Subject: [PATCH 3/8] update Zettelkasten under community project --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e2c6c566b5..c7a0f7e8af 100644 --- a/README.md +++ b/README.md @@ -469,7 +469,6 @@ Official integrations are maintained by companies building production ready MCP - Zapier Logo **[Zapier](https://zapier.com/mcp)** - Connect your AI Agents to 8,000 apps instantly. - Zenable Logo **[Zenable](https://docs.zenable.io/integrations/mcp/getting-started)** - Clean up sloppy AI code and prevent vulnerabilities - **[ZenML](https://github.com/zenml-io/mcp-zenml)** - Interact with your MLOps and LLMOps pipelines through your [ZenML](https://www.zenml.io) MCP server -- **[Zettelkasten](https://github.com/joshylchen/zettelkasten)**- Comprehensive AI-powered knowledge management system implementing the Zettelkasten method. Features atomic note creation, full-text search, AI-powered CEQRC workflows (Capture→Explain→Question→Refine→Connect), intelligent link discovery, and multi-interface access (CLI, API, Web UI, MCP). Perfect for researchers, students, and knowledge workers. - ZIZAI Logo **[ZIZAI Recruitment](https://github.com/zaiwork/mcp)** - Interact with the next-generation intelligent recruitment platform for employees and employers, powered by [ZIZAI Recruitment](https://zizai.work). ### 🌎 Community Servers @@ -1269,6 +1268,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[YouTube Video Summarizer](https://github.com/nabid-pf/youtube-video-summarizer-mcp)** - Summarize lengthy youtube videos. - **[yutu](https://github.com/eat-pray-ai/yutu)** - A fully functional MCP server and CLI for YouTube to automate YouTube operation. - **[ZapCap](https://github.com/bogdan01m/zapcap-mcp-server)** - MCP server for ZapCap API providing video caption and B-roll generation via natural language +- **[Zettelkasten](https://github.com/joshylchen/zettelkasten)**- Comprehensive AI-powered knowledge management system implementing the Zettelkasten method. Features atomic note creation, full-text search, AI-powered CEQRC workflows (Capture→Explain→Question→Refine→Connect), intelligent link discovery, and multi-interface access (CLI, API, Web UI, MCP). Perfect for researchers, students, and knowledge workers. - **[ZincBind](https://github.com/QuentinCody/zincbind-mcp-server)** - Unofficial MCP server for ZincBind, providing access to a comprehensive database of zinc binding sites in proteins, structural coordination data, and metalloproteomics research information. - **[Zoom](https://github.com/Prathamesh0901/zoom-mcp-server/tree/main)** - Create, update, read and delete your zoom meetings. ## 📚 Frameworks From e8a503611ca29c700839d30b0cb7a5d2e02e8307 Mon Sep 17 00:00:00 2001 From: Mahdiyar Date: Tue, 30 Sep 2025 02:46:36 -0400 Subject: [PATCH 4/8] Add Roundtable MCP server to community servers list - Added Roundtable to alphabetical listing between Root Signals and Routine - Roundtable is a unified integration layer that bridges multiple AI coding assistants - Supports Codex, Claude Code, Cursor, Gemini through zero-configuration auto-discovery - Features enterprise-ready architecture with FastMCP implementation and 26+ IDE integrations --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5327c8186c..c6c1ff1f3e 100644 --- a/README.md +++ b/README.md @@ -398,6 +398,7 @@ Official integrations are maintained by companies building production ready MCP - Roblox Studio **[Roblox Studio](https://github.com/Roblox/studio-rust-mcp-server)** - Roblox Studio MCP Server, create and manipulate scenes, scripts in Roblox Studio - Rodin **[Rodin](https://github.com/DeemosTech/rodin-api-mcp)** - Generate 3D Models with [Hyper3D Rodin](https://hyper3d.ai) - Root Signals Logo **[Root Signals](https://github.com/root-signals/root-signals-mcp)** - Improve and quality control your outputs with evaluations using LLM-as-Judge +- **[Roundtable](https://github.com/askbudi/roundtable)** - Unified integration layer that bridges multiple AI coding assistants (Codex, Claude Code, Cursor, Gemini) through zero-configuration auto-discovery and enterprise-ready architecture. - **[Routine](https://github.com/routineco/mcp-server)** - MCP server to interact with [Routine](https://routine.co/): calendars, tasks, notes, etc. - Composio Logo **[Rube](https://github.com/ComposioHQ/Rube)** - Rube is a Model Context Protocol (MCP) server that connects your AI tools to 500+ apps like Gmail, Slack, GitHub, and Notion. Simply install it in your AI client, authenticate once with your apps, and start asking your AI to perform real actions like "Send an email" or "Create a task." - SafeDep Logo **[SafeDep](https://github.com/safedep/vet/blob/main/docs/mcp.md)** - SafeDep `vet-mcp` helps in vetting open source packages for security risks—such as vulnerabilities and malicious code—before they're used in your project, especially with AI-generated code suggestions. From eff6fde5d639444fb53dc96d6aaab93bb25243e6 Mon Sep 17 00:00:00 2001 From: joshylchen Date: Fri, 3 Oct 2025 11:27:55 +0800 Subject: [PATCH 5/8] add Zettelkasten Space to official integration --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5327c8186c..a8be792b5c 100644 --- a/README.md +++ b/README.md @@ -480,6 +480,7 @@ Official integrations are maintained by companies building production ready MCP - Zapier Logo **[Zapier](https://zapier.com/mcp)** - Connect your AI Agents to 8,000 apps instantly. - Zenable Logo **[Zenable](https://docs.zenable.io/integrations/mcp/getting-started)** - Clean up sloppy AI code and prevent vulnerabilities - **[ZenML](https://github.com/zenml-io/mcp-zenml)** - Interact with your MLOps and LLMOps pipelines through your [ZenML](https://www.zenml.io) MCP server +- **[ZettelkastenSpace](https://github.com/joshylchen/zettelkasten_space)** - Built on the proven [Zettelkasten](https://www.zettelkasten.space/) method, enhanced with Claude Desktop integration via Model Context Protocol - Zine Logo **[Zine](https://www.zine.ai)** - Your memory, everywhere AI goes. Think iPhoto for your knowledge - upload and curate. Like ChatGPT but portable - context that travels with you. - ZIZAI Logo **[ZIZAI Recruitment](https://github.com/zaiwork/mcp)** - Interact with the next-generation intelligent recruitment platform for employees and employers, powered by [ZIZAI Recruitment](https://zizai.work). From c9b0135aa5ee8d6f7f1c9f1e943f78ea1f187fc1 Mon Sep 17 00:00:00 2001 From: olaservo Date: Sun, 12 Oct 2025 19:32:51 -0700 Subject: [PATCH 6/8] fix: preserve WSL paths and improve path normalization logic --- src/filesystem/__tests__/path-utils.test.ts | 227 +++++++++++++++++--- src/filesystem/path-utils.ts | 56 +++-- 2 files changed, 238 insertions(+), 45 deletions(-) diff --git a/src/filesystem/__tests__/path-utils.test.ts b/src/filesystem/__tests__/path-utils.test.ts index 8768de20cf..49590a75a0 100644 --- a/src/filesystem/__tests__/path-utils.test.ts +++ b/src/filesystem/__tests__/path-utils.test.ts @@ -10,14 +10,25 @@ describe('Path Utilities', () => { .toBe('/home/user/some path'); }); - it('converts WSL paths to Windows format', () => { + it('never converts WSL paths (they work correctly in WSL with Node.js fs)', () => { + // WSL paths should NEVER be converted, regardless of platform + // They are valid Linux paths that work with Node.js fs operations inside WSL expect(convertToWindowsPath('/mnt/c/NS/MyKindleContent')) - .toBe('C:\\NS\\MyKindleContent'); + .toBe('/mnt/c/NS/MyKindleContent'); + expect(convertToWindowsPath('/mnt/d/Documents')) + .toBe('/mnt/d/Documents'); }); - it('converts Unix-style Windows paths to Windows format', () => { - expect(convertToWindowsPath('/c/NS/MyKindleContent')) - .toBe('C:\\NS\\MyKindleContent'); + it('converts Unix-style Windows paths only on Windows platform', () => { + // On Windows, /c/ style paths should be converted + if (process.platform === 'win32') { + expect(convertToWindowsPath('/c/NS/MyKindleContent')) + .toBe('C:\\NS\\MyKindleContent'); + } else { + // On Linux, leave them unchanged + expect(convertToWindowsPath('/c/NS/MyKindleContent')) + .toBe('/c/NS/MyKindleContent'); + } }); it('leaves Windows paths unchanged but ensures backslashes', () => { @@ -34,11 +45,20 @@ describe('Path Utilities', () => { .toBe('C:\\Program Files\\Some App'); }); - it('handles uppercase and lowercase drive letters', () => { + it('handles drive letter paths based on platform', () => { + // WSL paths should never be converted expect(convertToWindowsPath('/mnt/d/some/path')) - .toBe('D:\\some\\path'); - expect(convertToWindowsPath('/d/some/path')) - .toBe('D:\\some\\path'); + .toBe('/mnt/d/some/path'); + + if (process.platform === 'win32') { + // On Windows, Unix-style paths like /d/ should be converted + expect(convertToWindowsPath('/d/some/path')) + .toBe('D:\\some\\path'); + } else { + // On Linux, /d/ is just a regular Unix path + expect(convertToWindowsPath('/d/some/path')) + .toBe('/d/some/path'); + } }); }); @@ -67,21 +87,33 @@ describe('Path Utilities', () => { .toBe('C:\\NS\\MyKindleContent'); }); - it('handles WSL paths', () => { + it('always preserves WSL paths (they work correctly in WSL)', () => { + // WSL paths should ALWAYS be preserved, regardless of platform + // This is the fix for issue #2795 expect(normalizePath('/mnt/c/NS/MyKindleContent')) - .toBe('C:\\NS\\MyKindleContent'); + .toBe('/mnt/c/NS/MyKindleContent'); + expect(normalizePath('/mnt/d/Documents')) + .toBe('/mnt/d/Documents'); }); it('handles Unix-style Windows paths', () => { - expect(normalizePath('/c/NS/MyKindleContent')) - .toBe('C:\\NS\\MyKindleContent'); + // On Windows, /c/ paths should be converted + if (process.platform === 'win32') { + expect(normalizePath('/c/NS/MyKindleContent')) + .toBe('C:\\NS\\MyKindleContent'); + } else if (process.platform === 'linux') { + // On Linux, /c/ is just a regular Unix path + expect(normalizePath('/c/NS/MyKindleContent')) + .toBe('/c/NS/MyKindleContent'); + } }); it('handles paths with spaces and mixed slashes', () => { expect(normalizePath('C:/NS/My Kindle Content')) .toBe('C:\\NS\\My Kindle Content'); + // WSL paths should always be preserved expect(normalizePath('/mnt/c/NS/My Kindle Content')) - .toBe('C:\\NS\\My Kindle Content'); + .toBe('/mnt/c/NS/My Kindle Content'); expect(normalizePath('C:\\Program Files (x86)\\App Name')) .toBe('C:\\Program Files (x86)\\App Name'); expect(normalizePath('"C:\\Program Files\\App Name"')) @@ -91,10 +123,19 @@ describe('Path Utilities', () => { }); it('preserves spaces in all path formats', () => { + // WSL paths should always be preserved expect(normalizePath('/mnt/c/Program Files/App Name')) - .toBe('C:\\Program Files\\App Name'); - expect(normalizePath('/c/Program Files/App Name')) - .toBe('C:\\Program Files\\App Name'); + .toBe('/mnt/c/Program Files/App Name'); + + if (process.platform === 'win32') { + // On Windows, Unix-style paths like /c/ should be converted + expect(normalizePath('/c/Program Files/App Name')) + .toBe('C:\\Program Files\\App Name'); + } else { + // On Linux, /c/ is just a regular Unix path + expect(normalizePath('/c/Program Files/App Name')) + .toBe('/c/Program Files/App Name'); + } expect(normalizePath('C:/Program Files/App Name')) .toBe('C:\\Program Files\\App Name'); }); @@ -105,15 +146,16 @@ describe('Path Utilities', () => { .toBe('C:\\NS\\Sub&Folder'); expect(normalizePath('C:/NS/Sub&Folder')) .toBe('C:\\NS\\Sub&Folder'); + // WSL paths should always be preserved expect(normalizePath('/mnt/c/NS/Sub&Folder')) - .toBe('C:\\NS\\Sub&Folder'); - + .toBe('/mnt/c/NS/Sub&Folder'); + // Test tilde in path (short names in Windows) expect(normalizePath('C:\\NS\\MYKIND~1')) .toBe('C:\\NS\\MYKIND~1'); expect(normalizePath('/Users/NEMANS~1/FOLDER~2/SUBFO~1/Public/P12PST~1')) .toBe('/Users/NEMANS~1/FOLDER~2/SUBFO~1/Public/P12PST~1'); - + // Test other special characters expect(normalizePath('C:\\Path with #hash')) .toBe('C:\\Path with #hash'); @@ -128,10 +170,19 @@ describe('Path Utilities', () => { it('capitalizes lowercase drive letters for Windows paths', () => { expect(normalizePath('c:/windows/system32')) .toBe('C:\\windows\\system32'); - expect(normalizePath('/mnt/d/my/folder')) // WSL path with lowercase drive - .toBe('D:\\my\\folder'); - expect(normalizePath('/e/another/folder')) // Unix-style Windows path with lowercase drive - .toBe('E:\\another\\folder'); + // WSL paths should always be preserved + expect(normalizePath('/mnt/d/my/folder')) + .toBe('/mnt/d/my/folder'); + + if (process.platform === 'win32') { + // On Windows, Unix-style paths should be converted and capitalized + expect(normalizePath('/e/another/folder')) + .toBe('E:\\another\\folder'); + } else { + // On Linux, /e/ is just a regular Unix path + expect(normalizePath('/e/another/folder')) + .toBe('/e/another/folder'); + } }); it('handles UNC paths correctly', () => { @@ -172,4 +223,132 @@ describe('Path Utilities', () => { expect(expandHome('C:/test')).toBe('C:/test'); }); }); + + describe('WSL path handling (issue #2795 fix)', () => { + // Save original platform + const originalPlatform = process.platform; + + afterEach(() => { + // Restore platform after each test + Object.defineProperty(process, 'platform', { + value: originalPlatform, + writable: true, + configurable: true + }); + }); + + it('should NEVER convert WSL paths - they work correctly in WSL with Node.js fs', () => { + // The key insight: When running `wsl npx ...`, Node.js runs INSIDE WSL (process.platform === 'linux') + // and /mnt/c/ paths work correctly with Node.js fs operations in that environment. + // Converting them to C:\ format breaks fs operations because Windows paths don't work inside WSL. + + // Mock Linux platform (inside WSL) + Object.defineProperty(process, 'platform', { + value: 'linux', + writable: true, + configurable: true + }); + + // WSL paths should NOT be converted, even inside WSL + expect(normalizePath('/mnt/c/Users/username/folder')) + .toBe('/mnt/c/Users/username/folder'); + + expect(normalizePath('/mnt/d/Documents/project')) + .toBe('/mnt/d/Documents/project'); + }); + + it('should also preserve WSL paths when running on Windows', () => { + // Mock Windows platform + Object.defineProperty(process, 'platform', { + value: 'win32', + writable: true, + configurable: true + }); + + // WSL paths should still be preserved (though they wouldn't be accessible from Windows Node.js) + expect(normalizePath('/mnt/c/Users/username/folder')) + .toBe('/mnt/c/Users/username/folder'); + + expect(normalizePath('/mnt/d/Documents/project')) + .toBe('/mnt/d/Documents/project'); + }); + + it('should convert Unix-style Windows paths (/c/) only when running on Windows (win32)', () => { + // Mock process.platform to be 'win32' (Windows) + Object.defineProperty(process, 'platform', { + value: 'win32', + writable: true, + configurable: true + }); + + // Unix-style Windows paths like /c/ should be converted on Windows + expect(normalizePath('/c/Users/username/folder')) + .toBe('C:\\Users\\username\\folder'); + + expect(normalizePath('/d/Documents/project')) + .toBe('D:\\Documents\\project'); + }); + + it('should NOT convert Unix-style paths (/c/) when running inside WSL (linux)', () => { + // Mock process.platform to be 'linux' (WSL/Linux) + Object.defineProperty(process, 'platform', { + value: 'linux', + writable: true, + configurable: true + }); + + // When on Linux, /c/ is just a regular Unix directory, not a drive letter + expect(normalizePath('/c/some/path')) + .toBe('/c/some/path'); + + expect(normalizePath('/d/another/path')) + .toBe('/d/another/path'); + }); + + it('should preserve regular Unix paths on all platforms', () => { + // Test on Linux + Object.defineProperty(process, 'platform', { + value: 'linux', + writable: true, + configurable: true + }); + + expect(normalizePath('/home/user/documents')) + .toBe('/home/user/documents'); + + expect(normalizePath('/var/log/app')) + .toBe('/var/log/app'); + + // Test on Windows (though these paths wouldn't work on Windows) + Object.defineProperty(process, 'platform', { + value: 'win32', + writable: true, + configurable: true + }); + + expect(normalizePath('/home/user/documents')) + .toBe('/home/user/documents'); + + expect(normalizePath('/var/log/app')) + .toBe('/var/log/app'); + }); + + it('reproduces exact scenario from issue #2795', () => { + // Simulate running inside WSL: wsl npx @modelcontextprotocol/server-filesystem /mnt/c/Users/username/folder + Object.defineProperty(process, 'platform', { + value: 'linux', + writable: true, + configurable: true + }); + + // This is the exact path from the issue + const inputPath = '/mnt/c/Users/username/folder'; + const result = normalizePath(inputPath); + + // Should NOT convert to C:\Users\username\folder + expect(result).toBe('/mnt/c/Users/username/folder'); + expect(result).not.toContain('C:'); + expect(result).not.toContain('\\'); + }); + }); }); diff --git a/src/filesystem/path-utils.ts b/src/filesystem/path-utils.ts index aca7f061fe..c897b9d2c7 100644 --- a/src/filesystem/path-utils.ts +++ b/src/filesystem/path-utils.ts @@ -8,14 +8,15 @@ import os from 'os'; */ export function convertToWindowsPath(p: string): string { // Handle WSL paths (/mnt/c/...) + // NEVER convert WSL paths - they are valid Linux paths that work with Node.js fs operations in WSL + // Converting them to Windows format (C:\...) breaks fs operations inside WSL if (p.startsWith('/mnt/')) { - const driveLetter = p.charAt(5).toUpperCase(); - const pathPart = p.slice(6).replace(/\//g, '\\'); - return `${driveLetter}:${pathPart}`; + return p; // Leave WSL paths unchanged } - + // Handle Unix-style Windows paths (/c/...) - if (p.match(/^\/[a-zA-Z]\//)) { + // Only convert when running on Windows + if (p.match(/^\/[a-zA-Z]\//) && process.platform === 'win32') { const driveLetter = p.charAt(1).toUpperCase(); const pathPart = p.slice(2).replace(/\//g, '\\'); return `${driveLetter}:${pathPart}`; @@ -38,21 +39,29 @@ export function convertToWindowsPath(p: string): string { export function normalizePath(p: string): string { // Remove any surrounding quotes and whitespace p = p.trim().replace(/^["']|["']$/g, ''); - - // Check if this is a Unix path (starts with / but not a Windows or WSL path) - const isUnixPath = p.startsWith('/') && - !p.match(/^\/mnt\/[a-z]\//i) && - !p.match(/^\/[a-zA-Z]\//); - + + // Check if this is a Unix path that should not be converted + // WSL paths (/mnt/) should ALWAYS be preserved as they work correctly in WSL with Node.js fs + // Regular Unix paths should also be preserved + const isUnixPath = p.startsWith('/') && ( + // Always preserve WSL paths (/mnt/c/, /mnt/d/, etc.) + p.match(/^\/mnt\/[a-z]\//i) || + // On non-Windows platforms, treat all absolute paths as Unix paths + (process.platform !== 'win32') || + // On Windows, preserve Unix paths that aren't Unix-style Windows paths (/c/, /d/, etc.) + (process.platform === 'win32' && !p.match(/^\/[a-zA-Z]\//)) + ); + if (isUnixPath) { // For Unix paths, just normalize without converting to Windows format // Replace double slashes with single slashes and remove trailing slashes return p.replace(/\/+/g, '/').replace(/\/+$/, ''); } - - // Convert WSL or Unix-style Windows paths to Windows format + + // Convert Unix-style Windows paths (/c/, /d/) to Windows format if on Windows + // This function will now leave /mnt/ paths unchanged p = convertToWindowsPath(p); - + // Handle double backslashes, preserving leading UNC \\ if (p.startsWith('\\\\')) { // For UNC paths, first normalize any excessive leading backslashes to exactly \\ @@ -67,15 +76,15 @@ export function normalizePath(p: string): string { // For non-UNC paths, normalize all double backslashes p = p.replace(/\\\\/g, '\\'); } - + // Use Node's path normalization, which handles . and .. segments let normalized = path.normalize(p); - + // Fix UNC paths after normalization (path.normalize can remove a leading backslash) if (p.startsWith('\\\\') && !normalized.startsWith('\\\\')) { normalized = '\\' + normalized; } - + // Handle Windows paths: convert slashes and ensure drive letter is capitalized if (normalized.match(/^[a-zA-Z]:/)) { let result = normalized.replace(/\//g, '\\'); @@ -85,10 +94,15 @@ export function normalizePath(p: string): string { } return result; } - - // For all other paths (including relative paths), convert forward slashes to backslashes - // This ensures relative paths like "some/relative/path" become "some\\relative\\path" - return normalized.replace(/\//g, '\\'); + + // On Windows, convert forward slashes to backslashes for relative paths + // On Linux/Unix, preserve forward slashes + if (process.platform === 'win32') { + return normalized.replace(/\//g, '\\'); + } + + // On non-Windows platforms, keep the normalized path as-is + return normalized; } /** From a9508aa115c41e47af27cbc7168953f60185eefb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Pankreti=C4=87?= Date: Mon, 20 Oct 2025 15:03:22 +0200 Subject: [PATCH 7/8] Add Infobip server entry --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5ca87ea5b9..25ae6750ef 100644 --- a/README.md +++ b/README.md @@ -248,6 +248,7 @@ Official integrations are maintained by companies building production ready MCP - Improve Digital Icon **[Improve Digital Publisher MCP](https://github.com/azerion/improvedigital-publisher-mcp-server)** - An MCP server that enables publishers to integrate [Improve Digital’s](https://improvedigital.com/) inventory management system with their AI tools or agents. - Inbox Zero Logo **[Inbox Zero](https://github.com/elie222/inbox-zero/tree/main/apps/mcp-server)** - AI personal assistant for email [Inbox Zero](https://www.getinboxzero.com) - Inflectra Logo **[Inflectra Spira](https://github.com/Inflectra/mcp-server-spira)** - Connect to your instance of the SpiraTest, SpiraTeam or SpiraPlan application lifecycle management platform by [Inflectra](https://www.inflectra.com) +- Infobip Logo **[Infobip](https://github.com/Inflectra/mcp-server-spira)** - MCP server for integrating [Infobip](https://www.infobip.com/) global cloud communication platform. It equips AI agents with communication superpowers, allowing them to send and receive SMS and RCS messages, interact with WhatsApp and Viber, automate communication workflows, and manage customer data, all in a production-ready environment. - Inkeep Logo **[Inkeep](https://github.com/inkeep/mcp-server-python)** - RAG Search over your content powered by [Inkeep](https://inkeep.com) - Integration App Icon **[Integration App](https://github.com/integration-app/mcp-server)** - Interact with any other SaaS applications on behalf of your customers. - IP2Location.io Icon **[IP2Location.io](https://github.com/ip2location/mcp-ip2location-io)** - Interact with IP2Location.io API to retrieve the geolocation information for an IP address. From 34c0882bb9f7e5b06722d6df74c4efbde8ff13db Mon Sep 17 00:00:00 2001 From: Dmitry Tokmachev Date: Mon, 20 Oct 2025 18:18:55 +0400 Subject: [PATCH 8/8] Update README with new service descriptions --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5ca87ea5b9..178c931763 100644 --- a/README.md +++ b/README.md @@ -176,6 +176,7 @@ Official integrations are maintained by companies building production ready MCP - Defang Logo **[Defang](https://github.com/DefangLabs/defang/blob/main/src/pkg/mcp/README.md)** - Deploy your project to the cloud seamlessly with the [Defang](https://www.defang.io) platform without leaving your integrated development environment - Detailer Logo **[Detailer](https://detailer.ginylil.com/)** – Instantly generate rich, AI-powered documentation for your GitHub repositories. Designed for AI agents to gain deep project context before taking action. - DevCycle Logo **[DevCycle](https://docs.devcycle.com/cli-mcp/mcp-getting-started)** - Create and monitor feature flags using natural language in your AI coding assistant. +- DevExpress Logo **[DevExpress](https://docs.devexpress.com/GeneralInformation/405551/help-resources/dev-express-documentation-mcp-server-configure-an-ai-powered-assistant)** Documentation MCP server — Get instant, AI-powered access to 300,000+ help topics on [DevExpress](https://www.devexpress.com) UI Component APIs — right in the AI Coding Assistant/IDE of your choice. - DevHub Logo **[DevHub](https://github.com/devhub/devhub-cms-mcp)** - Manage and utilize website content within the [DevHub](https://www.devhub.com) CMS platform - DevRev Logo **[DevRev](https://github.com/devrev/mcp-server)** - An MCP server to integrate with DevRev APIs to search through your DevRev Knowledge Graph where objects can be imported from diff. Sources listed [here](https://devrev.ai/docs/import#available-sources). - DexPaprika Logo **[DexPaprika (CoinPaprika)](https://github.com/coinpaprika/dexpaprika-mcp)** - Access real-time DEX data, liquidity pools, token information, and trading analytics across multiple blockchain networks with [DexPaprika](https://dexpaprika.com) by CoinPaprika.