2b55513a9e
* update MIME types for UI resources to include profile for MCP Apps * make it a const
36 lines
1.2 KiB
Go
36 lines
1.2 KiB
Go
package github
|
|
|
|
import (
|
|
"context"
|
|
|
|
ghcontext "github.com/github/github-mcp-server/pkg/context"
|
|
"github.com/modelcontextprotocol/go-sdk/mcp"
|
|
)
|
|
|
|
// mcpAppsExtensionKey is the capability extension key that clients use to
|
|
// advertise MCP Apps UI support.
|
|
const mcpAppsExtensionKey = "io.modelcontextprotocol/ui"
|
|
|
|
// MCPAppMIMEType is the MIME type for MCP App UI resources.
|
|
const MCPAppMIMEType = "text/html;profile=mcp-app"
|
|
|
|
// clientSupportsUI reports whether the MCP client that sent this request
|
|
// supports MCP Apps UI rendering.
|
|
// It checks the context first (set by HTTP/stateless servers from stored
|
|
// session capabilities), then falls back to the go-sdk Session (for stdio).
|
|
func clientSupportsUI(ctx context.Context, req *mcp.CallToolRequest) bool {
|
|
// Check context first (works for HTTP/stateless servers)
|
|
if supported, ok := ghcontext.HasUISupport(ctx); ok {
|
|
return supported
|
|
}
|
|
// Fall back to go-sdk session (works for stdio/stateful servers)
|
|
if req != nil && req.Session != nil {
|
|
params := req.Session.InitializeParams()
|
|
if params != nil && params.Capabilities != nil {
|
|
_, hasUI := params.Capabilities.Extensions[mcpAppsExtensionKey]
|
|
return hasUI
|
|
}
|
|
}
|
|
return false
|
|
}
|