You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Title: MCP tools with dots in names cause 400 Bad Request — should match MCP spec #2581
When an MCP server returns tools with dots (.) in their names, Copilot CLI sends them to the API which rejects them with a 400 error:
✗ Execution failed: CAPIError: 400 tools.19.custom.name: String should match pattern
'^[a-zA-Z0-9_-]{1,128}$'
The MCP specification explicitly allows dots in tool names (section 5.1.1). VS Code Copilot handles this by remapping tool names internally (dots → underscores), but the CLI passes them through raw and the API rejects them.
Steps to Reproduce
Configure an MCP server that returns tools with dots in names (e.g., Backstage's @backstage/plugin-mcp-actions-backend v0.1.10+ which generates names like catalog.get-entity-facets)
Start Copilot CLI
Send any prompt → 400 Bad Request
Expected Behavior
API should accept dots per the MCP spec.
Actual Behavior
Hard failure — CLI becomes completely unusable when any MCP server has dotted tool names.
if using a gpt model
✗ Execution failed: CAPIError: 400 Invalid 'tools[50].name': string does not match pattern. Expected a string that match
the pattern '^[a-zA-Z0-9_-]+$'. (Request ID: ABF5:A4EA9:227CEAA:258497D:69D6691C)
if using a Claude model i get a generic 400
✗ Execution failed: CAPIError: 400 400 Bad Request
(Request ID: 3601:AECAE:23B320B:26D6666:69D66A8B)
Execution failed: CAPIError: 400 Invalid 'tools[21].name': string does not match pattern. Expected a string that matches the pattern '^[a-zA-Z0-9_-]+$'.
(Request ID: C128:2D65C6:67D1174:82940F6:69DC4D15)
This appears to be resolved as of GitHub Copilot CLI v1.0.89. Please update to that release or a newer stable version. We're closing this as completed. If it still happens, please comment with your version and reproduction steps.
Activity
neilhughesp commentedon Apr 8, 2026
if using a gpt model
✗ Execution failed: CAPIError: 400 Invalid 'tools[50].name': string does not match pattern. Expected a string that match
the pattern '^[a-zA-Z0-9_-]+$'. (Request ID: ABF5:A4EA9:227CEAA:258497D:69D6691C)
if using a Claude model i get a generic 400
✗ Execution failed: CAPIError: 400 400 Bad Request
(Request ID: 3601:AECAE:23B320B:26D6666:69D66A8B)
matt-gribben commentedon Apr 13, 2026
I'm also seeing this issue
copilot-cli-bot commentedon Sep 29, 2026
This appears to be resolved as of GitHub Copilot CLI v1.0.89. Please update to that release or a newer stable version. We're closing this as completed. If it still happens, please comment with your version and reproduction steps.