Fix: Automatically sanitize tool names to valid JavaScript identifiers#2
Open
dankelleher wants to merge 1 commit intowill123195:mainfrom
Open
Fix: Automatically sanitize tool names to valid JavaScript identifiers#2dankelleher wants to merge 1 commit intowill123195:mainfrom
dankelleher wants to merge 1 commit intowill123195:mainfrom
Conversation
MCP tools commonly use kebab-case naming (e.g., 'get-profile', 'send-message') which are not valid JavaScript identifiers. This causes runtime errors when the LLM tries to call these functions directly in the sandbox. Changes: - Added sanitizeToolName() helper to convert non-JS-friendly characters to underscores - Updated extractToolBindings() to sanitize names when creating bindings - Updated generateCodeSystemPrompt() to document sanitized names - Ensures tool names in system prompt match what's available in sandbox This allows MCP tools with dashes, dots, or other special characters to work seamlessly without requiring manual name conversion.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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: