Skip to content

Fix MCP header encoding for non-ASCII values#27771

Open
jstar0 wants to merge 1 commit into
google-gemini:mainfrom
jstar0:fix/mcp-header-byte-string
Open

Fix MCP header encoding for non-ASCII values#27771
jstar0 wants to merge 1 commit into
google-gemini:mainfrom
jstar0:fix/mcp-header-byte-string

Conversation

@jstar0

@jstar0 jstar0 commented Jun 9, 2026

Copy link
Copy Markdown

Summary

Fixes #25668.

MCP HTTP transports now encode configured header values that cannot be passed to Fetch as ByteString values. This prevents discovery from failing when a configured header contains Unicode text such as mąka.

Changes

  • Normalize MCP transport header values before they are passed into Fetch-backed transports.
  • Preserve existing values that are already valid ByteString values.
  • Encode only non-ByteString values as UTF-8 bytes represented in Latin-1, which keeps Fetch Headers validation from throwing while preserving the intended bytes.
  • Add a regression test for an httpUrl MCP server configured with a non-ASCII header value.

Verification

npm exec prettier -- --check packages/core/src/tools/mcp-client.ts packages/core/src/tools/mcp-client.test.ts
npm exec --workspace @google/gemini-cli-core -- vitest run src/tools/mcp-client.test.ts
npm run typecheck --workspace @google/gemini-cli-core
npm exec eslint -- packages/core/src/tools/mcp-client.ts packages/core/src/tools/mcp-client.test.ts

@jstar0 jstar0 requested a review from a team as a code owner June 9, 2026 21:10
@github-actions github-actions Bot added the size/m A medium sized PR label Jun 9, 2026
@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown

📊 PR Size: size/M

  • Lines changed: 50
  • Additions: +46
  • Deletions: -4
  • Files changed: 2

@google-cla

google-cla Bot commented Jun 9, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown

🛑 Action Required: Evaluation Approval

Steering changes have been detected in this PR. To prevent regressions, a maintainer must approve the evaluation run before this PR can be merged.

Maintainers:

  1. Go to the Workflow Run Summary.
  2. Click the yellow 'Review deployments' button.
  3. Select the 'eval-gate' environment and click 'Approve'.

Once approved, the evaluation results will be posted here automatically.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses an issue where MCP HTTP transports failed to handle non-ASCII characters in configured headers. By implementing a normalization step that encodes these values into a format compatible with Fetch headers, the change ensures that discovery processes remain robust even when using Unicode text in header configurations.

Highlights

  • Header Encoding: Introduced a normalization mechanism for MCP transport headers to ensure non-ASCII values are correctly encoded for Fetch-backed transports.
  • ByteString Validation: Added a utility to identify if header values are valid ByteStrings, preserving them as-is while encoding others as UTF-8 bytes represented in Latin-1.
  • Regression Testing: Added a new test case to verify that MCP servers configured with non-ASCII header values do not cause discovery failures.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces header value encoding for HTTP and SSE transports in the MCP client to prevent errors when headers contain non-ByteString characters (such as UTF-8 characters). It adds helper functions encodeHeaderValuesForFetch and isByteString to convert non-ByteString values into Latin-1, and applies this encoding in createTransportRequestInit and createSSETransportWithAuth. A corresponding unit test has been added to verify this behavior. No review comments were provided, so there is no additional feedback to address.

@gemini-cli gemini-cli Bot added priority/p2 Important but can be addressed in a future release. area/agent Issues related to Core Agent, Tools, Memory, Sub-Agents, Hooks, Agent Quality labels Jun 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/agent Issues related to Core Agent, Tools, Memory, Sub-Agents, Hooks, Agent Quality priority/p2 Important but can be addressed in a future release. size/m A medium sized PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MCP server discovery failure: ByteString conversion error when using non-ASCII characters in headers

1 participant