Fix: Automatically sanitize tool names to valid JavaScript identifiers #2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
MCP tools commonly use kebab-case naming conventions (e.g.,
get-profile,send-message) which are not valid JavaScript identifiers. When using these tools withtool-scripting, the LLM receives instructions to "call functions directly" (e.g.,await get_profile(...)), but tool names with dashes cannot be called this way in JavaScript.This causes runtime errors like:
The LLM intelligently converts dashes to underscores when generating code, but the actual bindings in the sandbox still use the original names with dashes.
Solution
This PR adds automatic tool name sanitization to ensure tool names are valid JavaScript identifiers:
sanitizeToolName()helper - Converts any non-JS-friendly characters (dashes, dots, etc.) to underscoresextractToolBindings()- Sanitizes names when creating sandbox bindingsgenerateCodeSystemPrompt()- Uses sanitized names in documentation so the system prompt matches what's availableExample
Before:
After: