| /** | |
| * Pure utility functions for MCP name normalization. | |
| * This file has no dependencies to avoid circular imports. | |
| */ | |
| // Claude.ai server names are prefixed with this string | |
| const CLAUDEAI_SERVER_PREFIX = 'claude.ai ' | |
| /** | |
| * Normalize server names to be compatible with the API pattern ^[a-zA-Z0-9_-]{1,64}$ | |
| * Replaces any invalid characters (including dots and spaces) with underscores. | |
| * | |
| * For claude.ai servers (names starting with "claude.ai "), also collapses | |
| * consecutive underscores and strips leading/trailing underscores to prevent | |
| * interference with the __ delimiter used in MCP tool names. | |
| */ | |
| export function normalizeNameForMCP(name: string): string { | |
| let normalized = name.replace(/[^a-zA-Z0-9_-]/g, '_') | |
| if (name.startsWith(CLAUDEAI_SERVER_PREFIX)) { | |
| normalized = normalized.replace(/_+/g, '_').replace(/^_|_$/g, '') | |
| } | |
| return normalized | |
| } | |