chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package context
|
||||
|
||||
import "context"
|
||||
|
||||
type mcpMethodInfoCtx string
|
||||
|
||||
var mcpMethodInfoCtxKey mcpMethodInfoCtx = "mcpmethodinfo"
|
||||
|
||||
// MCPMethodInfo contains pre-parsed MCP method information extracted from the JSON-RPC request.
|
||||
// This is populated early in the request lifecycle to enable:
|
||||
// - Inventory filtering via ForMCPRequest (only register needed tools/resources/prompts)
|
||||
// - Avoiding duplicate JSON parsing in middlewares (secret-scanning, scope-challenge)
|
||||
// - Performance optimization for per-request server creation
|
||||
type MCPMethodInfo struct {
|
||||
// Method is the MCP method being called (e.g., "tools/call", "tools/list", "initialize")
|
||||
Method string
|
||||
// ItemName is the name of the specific item being accessed (tool name, resource URI, prompt name)
|
||||
// Only populated for call/get methods (tools/call, prompts/get, resources/read)
|
||||
ItemName string
|
||||
// Owner is the repository owner from tool call arguments, if present
|
||||
Owner string
|
||||
// Repo is the repository name from tool call arguments, if present
|
||||
Repo string
|
||||
// Arguments contains the raw tool arguments for tools/call requests
|
||||
Arguments map[string]any
|
||||
}
|
||||
|
||||
// WithMCPMethodInfo stores the MCPMethodInfo in the context.
|
||||
func WithMCPMethodInfo(ctx context.Context, info *MCPMethodInfo) context.Context {
|
||||
return context.WithValue(ctx, mcpMethodInfoCtxKey, info)
|
||||
}
|
||||
|
||||
// MCPMethod retrieves the MCPMethodInfo from the context.
|
||||
func MCPMethod(ctx context.Context) (*MCPMethodInfo, bool) {
|
||||
if info, ok := ctx.Value(mcpMethodInfoCtxKey).(*MCPMethodInfo); ok {
|
||||
return info, true
|
||||
}
|
||||
return nil, false
|
||||
}
|
||||
Reference in New Issue
Block a user