Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
7eca7b1
Add support for custom headers in HostedMcpServerTool
echapmanFromBunnings Nov 18, 2025
074df0b
Merge branch 'main' into AddHeaderToMcpToolCreation
echapmanFromBunnings Nov 22, 2025
6a19b2a
nitpick correction on code structure
echapmanFromBunnings Nov 22, 2025
6145568
Merge branch 'main' into AddHeaderToMcpToolCreation
echapmanFromBunnings Nov 25, 2025
ad14d00
Merge branch 'main' into AddHeaderToMcpToolCreation
echapmanFromBunnings Nov 26, 2025
4e62c4a
Merge branch 'main' into AddHeaderToMcpToolCreation
echapmanFromBunnings Dec 1, 2025
2b07d09
Remove obsolete CP0002 suppressions for HostedMcpServerTool
echapmanFromBunnings Dec 2, 2025
65eaefc
Improve documentation and formatting for MCP tool headers
echapmanFromBunnings Dec 2, 2025
da16da8
Merge branch 'main' into AddHeaderToMcpToolCreation
echapmanFromBunnings Dec 2, 2025
2f86ba9
Remove CP0002 suppressions for HostedMcpServerTool.Headers
echapmanFromBunnings Dec 3, 2025
42deffd
Merge branch 'AddHeaderToMcpToolCreation' of https://github.com/echap…
echapmanFromBunnings Dec 3, 2025
8512af3
Merge branch 'main' into AddHeaderToMcpToolCreation
echapmanFromBunnings Dec 3, 2025
3d24eaa
Update docs
jozkee Dec 4, 2025
b323648
Clarify XML doc for HTTP headers property
echapmanFromBunnings Dec 8, 2025
d595157
Merge branch 'AddHeaderToMcpToolCreation' of https://github.com/echap…
echapmanFromBunnings Dec 8, 2025
23367b6
Merge branch 'main' into AddHeaderToMcpToolCreation
echapmanFromBunnings Dec 12, 2025
22b0745
Copy Headers property in responsesMcpTool assignment
echapmanFromBunnings Dec 12, 2025
f250187
Sync AuthorizationToken with Headers dictionary
echapmanFromBunnings Dec 12, 2025
1da522b
Add test for MCP tool call with auth token and headers
echapmanFromBunnings Dec 12, 2025
a086a88
Add headers support to HostedMcpServerTool constructors
echapmanFromBunnings Dec 12, 2025
8436109
Merge branch 'main' into AddHeaderToMcpToolCreation
echapmanFromBunnings Dec 13, 2025
a169c31
Refactor HostedMcpServerTool header handling and constructors
echapmanFromBunnings Dec 13, 2025
898052a
Fix HostedMcpServerTool headers property and update tests
echapmanFromBunnings Dec 13, 2025
8ea1dfb
Refactor HostedMcpServerTool headers and update MCP tool conversion
echapmanFromBunnings Dec 14, 2025
ccf75dc
Add CP0002 suppressions for HostedMcpServerTool.set_Headers
echapmanFromBunnings Dec 14, 2025
99b05e4
Merge branch 'main' into AddHeaderToMcpToolCreation
echapmanFromBunnings Dec 15, 2025
7909717
Remove redundant AuthorizationToken assignment
echapmanFromBunnings Dec 15, 2025
00f501e
Merge branch 'AddHeaderToMcpToolCreation' of https://github.com/echap…
echapmanFromBunnings Dec 15, 2025
8978d76
Merge branch 'main' into AddHeaderToMcpToolCreation
echapmanFromBunnings Dec 15, 2025
0a43ed0
Improve AuthorizationToken getter and add null header test
echapmanFromBunnings Dec 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,27 +22,13 @@
<Right>lib/net462/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.HostedMcpServerTool.get_Headers</Target>
<Left>lib/net462/Microsoft.Extensions.AI.Abstractions.dll</Left>
<Right>lib/net462/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.HostedMcpServerTool.get_Url</Target>
<Left>lib/net462/Microsoft.Extensions.AI.Abstractions.dll</Left>
<Right>lib/net462/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.HostedMcpServerTool.set_Headers(System.Collections.Generic.IDictionary{System.String,System.String})</Target>
<Left>lib/net462/Microsoft.Extensions.AI.Abstractions.dll</Left>
<Right>lib/net462/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.ChatOptions.get_ContinuationToken</Target>
Expand All @@ -64,27 +50,13 @@
<Right>lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.HostedMcpServerTool.get_Headers</Target>
<Left>lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll</Left>
<Right>lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.HostedMcpServerTool.get_Url</Target>
<Left>lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll</Left>
<Right>lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.HostedMcpServerTool.set_Headers(System.Collections.Generic.IDictionary{System.String,System.String})</Target>
<Left>lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll</Left>
<Right>lib/net8.0/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.ChatOptions.get_ContinuationToken</Target>
Expand All @@ -106,27 +78,13 @@
<Right>lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.HostedMcpServerTool.get_Headers</Target>
<Left>lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll</Left>
<Right>lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.HostedMcpServerTool.get_Url</Target>
<Left>lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll</Left>
<Right>lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.HostedMcpServerTool.set_Headers(System.Collections.Generic.IDictionary{System.String,System.String})</Target>
<Left>lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll</Left>
<Right>lib/net9.0/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.ChatOptions.get_ContinuationToken</Target>
Expand All @@ -148,25 +106,11 @@
<Right>lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.HostedMcpServerTool.get_Headers</Target>
<Left>lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll</Left>
<Right>lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.HostedMcpServerTool.get_Url</Target>
<Left>lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll</Left>
<Right>lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Microsoft.Extensions.AI.HostedMcpServerTool.set_Headers(System.Collections.Generic.IDictionary{System.String,System.String})</Target>
<Left>lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll</Left>
<Right>lib/netstandard2.0/Microsoft.Extensions.AI.Abstractions.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
</Suppressions>
</Suppressions>
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,17 @@ private static string ValidateUrl(Uri serverUrl)
/// </para>
/// </remarks>
public HostedMcpServerToolApprovalMode? ApprovalMode { get; set; }

/// <summary>
/// Gets or sets HTTP headers to include when calling the remote MCP server.
/// </summary>
/// <remarks>
/// <para>
/// The underlying provider may respond with an error if <see cref="AuthorizationToken"/> is set and an Authorization header is included.
/// </para>
Comment thread
stephentoub marked this conversation as resolved.
Outdated
/// <para>
/// The underlying provider is not guaranteed to support or honor the headers.
/// </para>
/// </remarks>
Comment thread
jozkee marked this conversation as resolved.
public IDictionary<string, string>? Headers { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -579,12 +579,14 @@ void IDisposable.Dispose()
mcpTool.ServerName,
url,
mcpTool.AuthorizationToken,
mcpTool.ServerDescription) :
mcpTool.ServerDescription,
mcpTool.Headers) :
ResponseTool.CreateMcpTool(
mcpTool.ServerName,
new McpToolConnectorId(mcpTool.ServerAddress),
mcpTool.AuthorizationToken,
mcpTool.ServerDescription);
mcpTool.ServerDescription,
mcpTool.Headers);
Comment thread
echapmanFromBunnings marked this conversation as resolved.
Outdated

if (mcpTool.AllowedTools is not null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,17 @@ public void Constructor_Roundtrips()
var customApprovalMode = new HostedMcpServerToolRequireSpecificApprovalMode(["tool1"], ["tool2"]);
tool.ApprovalMode = customApprovalMode;
Assert.Same(customApprovalMode, tool.ApprovalMode);

Assert.Null(tool.Headers);
IDictionary<string, string> headers = new Dictionary<string, string>
{
["X-Custom-Header"] = "value1",
};
tool.Headers = headers;
Assert.Same(headers, tool.Headers);

tool.Headers = null;
Assert.Null(tool.Headers);
Comment thread
echapmanFromBunnings marked this conversation as resolved.
Outdated
}

Comment thread
echapmanFromBunnings marked this conversation as resolved.
[Fact]
Expand Down
Loading