Skip to content

Raw request propagation in tools - passed to callbacks via RequestHandlerExtra<ServerRequest, ServerNotification> #627

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

KKonstantinov
Copy link

@KKonstantinov KKonstantinov commented Jun 13, 2025

Request Propagation to tool/resource/prompt callbacks via RequestHandlerExtra

This PR is a substitute of the original PR (#557).

Motivation and Context

An application often times needs access to the original request headers, for example, whenever it is sitting behind a reverse proxy, and the reverse proxy is setting some headers itself.

Few real-life examples / use cases:

  • Authentication may rely on request headers. In the case where the MCP server needs to act on behalf of the client to retrieve resources from a remote server or DB, thus requiring to authenticate on behalf of the client, getting the request headers is essential.
  • A trace ID / correlation header is generated at the API gateway / reverse proxy later, then passed to the actual remote MCP server. The MCP server needs to utilize the traceparent to store it in logs, etc.

How Has This Been Tested?

SSE and Streamable transport - resources and tools.

Breaking Changes

No breaking changes.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

Adding the RequestInfo type, which contains just headers for now - to be used for more raw request properties to add as we go - e.g. httpMethod, and others.

server.tool("fetch-weather", { city: z.string() },
  async ({ city }, extra) => {
    const response = await fetch('https://api.weather.com/${city}');
    const data = await response.text();
    console.log(extra.requestInfo); // contains headers
    return {
      content: [{ type: "text", text: data }]
    };
  }
);

@KKonstantinov
Copy link
Author

Hi @ihrpr, this is the new one (replaces #557.) if we could have it reviewed/merged please, let me know if any comments.

@ihrpr ihrpr added this to the HPR milestone Jun 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants