Align x-mcp-header implementation with SEP-2243 spec clarifications (#1619)

Co-authored-by: Tarek Mahmoud Sayed <tarekms@ntdev.microsoft.com>
This commit is contained in:
Tarek Mahmoud Sayed 2026-06-05 15:45:08 -07:00 • committed by GitHub
commit ed19286a08
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 1035 additions and 116 deletions

View file

@ -9,6 +9,9 @@ public class McpHeaderAttributeTests
[InlineData("TenantId")]
[InlineData("Priority")]
[InlineData("X-Custom")]
[InlineData("x!header")]
[InlineData("x#header")]
[InlineData("x~header")]
public void Constructor_ValidHeaderName_Succeeds(string name)
{
var attr = new McpHeaderAttribute(name);
@ -27,6 +30,23 @@ public class McpHeaderAttributeTests
Assert.Throws<ArgumentException>(() => new McpHeaderAttribute("Region:Primary"));
}
[Theory]
[InlineData("Region(1)")]
[InlineData("path/to")]
[InlineData("key=value")]
[InlineData("name@host")]
[InlineData("with,comma")]
[InlineData("with;semi")]
[InlineData("with[bracket")]
[InlineData("with{brace")]
[InlineData("with\"quote")]
[InlineData("with\\backslash")]
[InlineData("with?question")]
public void Constructor_NonTcharCharacter_Throws(string name)
{
Assert.Throws<ArgumentException>(() => new McpHeaderAttribute(name));
}
[Fact]
public void Constructor_NullName_Throws()
{

View file

@ -1221,6 +1221,15 @@ public partial class McpServerToolTests
McpServerTool.Create(typeof(McpHeaderToolType).GetMethod(nameof(McpHeaderToolType.ToolWithNonPrimitiveHeader))!));
}
[Fact]
public void Create_WithMcpHeaderOnUInt64Type_ThrowsInvalidOperationException()
{
// ulong is excluded per SEP-2243 because its domain extends beyond the JavaScript safe
// integer range (and beyond long), so it cannot be represented as a signed integer header.
Assert.Throws<InvalidOperationException>(() =>
McpServerTool.Create(typeof(McpHeaderToolType).GetMethod(nameof(McpHeaderToolType.ToolWithUInt64Header))!));
}
[Fact]
public void Create_WithMcpHeaderOnNumericType_AddsExtension()
{
@ -1308,5 +1317,10 @@ public partial class McpServerToolTests
[McpServerTool]
public static string ToolWithoutHeaders(string region, string query)
=> "result";
[McpServerTool]
public static string ToolWithUInt64Header(
[McpHeader("Count")] ulong count)
=> "result";
}
}