Skip to content

Commit bfda3b4

Browse files
committed
fix comments
1 parent 4af1f8e commit bfda3b4

7 files changed

Lines changed: 169 additions & 185 deletions

mcp/mcp_http_headers.go

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,66 +10,69 @@ import (
1010
"fmt"
1111
"net/http"
1212

13+
internaljson "github.com/modelcontextprotocol/go-sdk/internal/json"
1314
"github.com/modelcontextprotocol/go-sdk/jsonrpc"
1415
)
1516

1617
const (
17-
ProtocolVersionHeader = "Mcp-Protocol-Version"
18-
SessionIDHeader = "Mcp-Session-Id"
19-
LastEventIDHeader = "Last-Event-ID"
20-
MethodHeader = "Mcp-Method"
21-
NameHeader = "Mcp-Name"
22-
MinVersionForStandardHeaders = "2026-06-XX"
18+
protocolVersionHeader = "Mcp-Protocol-Version"
19+
sessionIDHeader = "Mcp-Session-Id"
20+
lastEventIDHeader = "Last-Event-ID"
21+
methodHeader = "Mcp-Method"
22+
nameHeader = "Mcp-Name"
23+
minVersionForStandardHeaders = protocolVersion20260630
2324
)
2425

2526
func extractName(method string, params json.RawMessage) (string, bool) {
2627
switch method {
2728
case "tools/call":
2829
var p CallToolParams
29-
if err := json.Unmarshal(params, &p); err == nil {
30+
if err := internaljson.Unmarshal(params, &p); err == nil {
3031
return p.Name, true
3132
}
3233
case "prompts/get":
3334
var p GetPromptParams
34-
if err := json.Unmarshal(params, &p); err == nil {
35+
if err := internaljson.Unmarshal(params, &p); err == nil {
3536
return p.Name, true
3637
}
3738
case "resources/read":
3839
var p ReadResourceParams
39-
if err := json.Unmarshal(params, &p); err == nil {
40+
if err := internaljson.Unmarshal(params, &p); err == nil {
4041
return p.URI, true
4142
}
4243
}
4344

4445
return "", false
4546
}
4647

48+
// setStandardHeaders populates standard MCP headers.
49+
// It requires the protocol version header to be set.
4750
func setStandardHeaders(header http.Header, msg jsonrpc.Message) {
4851
if msg == nil {
4952
return
5053
}
51-
if header.Get(ProtocolVersionHeader) == "" || header.Get(ProtocolVersionHeader) < MinVersionForStandardHeaders {
54+
if header.Get(protocolVersionHeader) == "" || header.Get(protocolVersionHeader) < minVersionForStandardHeaders {
5255
return
5356
}
5457

5558
switch msg := msg.(type) {
5659
case *jsonrpc.Request:
57-
header.Set(MethodHeader, msg.Method)
60+
header.Set(methodHeader, msg.Method)
5861
if name, ok := extractName(msg.Method, msg.Params); ok {
59-
header.Set(NameHeader, name)
62+
header.Set(nameHeader, name)
6063
}
6164
}
6265
}
6366

6467
func validateMcpHeaders(header http.Header, msg jsonrpc.Message) error {
65-
protocolVersion := header.Get(ProtocolVersionHeader)
66-
if protocolVersion == "" || protocolVersion < MinVersionForStandardHeaders {
68+
protocolVersion := header.Get(protocolVersionHeader)
69+
if protocolVersion == "" || protocolVersion < minVersionForStandardHeaders {
6770
return nil
6871
}
6972

7073
switch msg := msg.(type) {
7174
case *jsonrpc.Request:
72-
methodInHeader := header.Get(MethodHeader)
75+
methodInHeader := header.Get(methodHeader)
7376
if methodInHeader == "" {
7477
return errors.New("missing required Mcp-Method header")
7578
}
@@ -78,14 +81,16 @@ func validateMcpHeaders(header http.Header, msg jsonrpc.Message) error {
7881
}
7982

8083
if msg.Method == "tools/call" || msg.Method == "resources/read" || msg.Method == "prompts/get" {
81-
nameInHeader := header.Get(NameHeader)
84+
nameInHeader := header.Get(nameHeader)
8285
if nameInHeader == "" {
8386
return fmt.Errorf("missing required Mcp-Name header for method %q", msg.Method)
8487
}
85-
if nameInBody, ok := extractName(msg.Method, msg.Params); ok {
86-
if nameInHeader != nameInBody {
87-
return fmt.Errorf("header mismatch: Mcp-Name header value '%s' does not match body value '%s'", nameInHeader, nameInBody)
88-
}
88+
nameInBody, ok := extractName(msg.Method, msg.Params)
89+
if !ok {
90+
return fmt.Errorf("failed to extract name from parameters for method %q", msg.Method)
91+
}
92+
if nameInHeader != nameInBody {
93+
return fmt.Errorf("header mismatch: Mcp-Name header value '%s' does not match body value '%s'", nameInHeader, nameInBody)
8994
}
9095
}
9196
}

0 commit comments

Comments
 (0)