MCP server cache directory collides when multiple servers have CJK-only display names

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

When multiple MCP servers in ~/.cursor/mcp.json have keys that differ
only in CJK characters (after the same English suffix), Cursor’s
per-workspace MCP cache folder name collides. As a result, the agent
session only sees ONE of those servers; all the others are silently
overwritten on disk despite their stdio processes starting successfully.

Steps to Reproduce

  1. Add the following to ~/.cursor/mcp.json:

    {
      "mcpServers": {
        "甲平台 - API 文档":         { "command": "npx -y apifox-mcp-server@latest --project-id=AAA", "env": { "APIFOX_ACCESS_TOKEN": "..." } },
        "乙平台 - API 文档": { "command": "npx -y apifox-mcp-server@latest --project-id=BBB", "env": { "APIFOX_ACCESS_TOKEN": "..." } },
        "丙平台 - API 文档":         { "command": "npx -y apifox-mcp-server@latest --project-id=CCC", "env": { "APIFOX_ACCESS_TOKEN": "..." } }
      }
    }
    

Enable all three in Settings → Tools & MCP. Each shows green (“3 tools enabled”).
Open a workspace, look at ~/.cursor/projects//mcps/.
Only ONE folder user-_-API exists, instead of three.

Logs
2026-05-13 09:54:32.413 [info] CreateClient completed, server stored: true
identifier=“user-甲平台 - API 文档”
2026-05-13 10:00:11.585 [info] Successfully connected to stdio server
identifier=“user-甲平台 - API 文档”
2026-05-13 10:00:11.585 [info] CreateClient completed, server stored: true
Both stdio processes start successfully, but on disk only one survives:

$ ls ~/.cursor/projects//mcps/
plugin-context7-plugin-context7
user--API ← single folder shared by 3 enabled servers
$ cat ~/.cursor/projects//mcps/user–API/SERVER_METADATA.json
{
“serverIdentifier”: “user-甲平台 - API 文档”,
“serverName”: “甲平台 - API 文档”
}
The agent’s CallMcpTool only resolves to whichever server happened to win the race; calling tools meant for the other servers fails with “tool not found”.

Root Cause Hypothesis
Folder name appears to be derived by:

Replace any non [A-Za-z0-9-] char with _
Collapse consecutive _ There is no uniqueness guarantee (e.g. no project-id hash or numeric suffix on collision).
Sanitized examples (all collapse to the same folder):

user-甲平台- API 文档 → user--API
user-乙平台 - API 文档 → user–API
user-丙平台 - API 文档 → user--API
user-丁平台 - API 文档 → user–API
Workaround
Add an English-letter prefix to each colliding key (e.g. Metric-甲平台 - API 文档). Then completely quit Cursor (not just Reload Window) and reopen.

Suggested Fix
Append a short hash of the original identifier (or the project-id) to the sanitized folder name to guarantee uniqueness, e.g. user-_-API-7621063.

Operating System

MacOS

Version Information

Version: 2.6.22
VSCode Version: 1.105.1
Commit: c6285feaba0ad62603f7c22e72f0a170dc8415a0
Date: 2026-03-27T15:59:31.561Z
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Darwin arm64 23.5.0

Does this stop you from using Cursor

Sometimes - I can sometimes use Cursor

Hi there,

This is a confirmed bug. Workaround for now: Add a unique ASCII prefix to each server’s key in mcp.json:

"A-测试甲 - API": { ... },
"B-测试乙 - API": { ... }

This gives each server a distinct sanitized folder name. Our team is aware of the issue and working on a fix.