chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
package github
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/modelcontextprotocol/go-sdk/mcp"
|
||||
)
|
||||
|
||||
// RegisterUIResources registers MCP App UI resources with the server.
|
||||
// These are static resources (not templates) that serve HTML content for
|
||||
// MCP App-enabled tools. The HTML is built from React/Primer components
|
||||
// in the ui/ directory using `script/build-ui`.
|
||||
//
|
||||
// Resource metadata follows the stable 2026-01-26 MCP Apps spec:
|
||||
// https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx
|
||||
func RegisterUIResources(s *mcp.Server, readOnly bool) {
|
||||
// Register the get_me UI resource
|
||||
s.AddResource(
|
||||
&mcp.Resource{
|
||||
URI: GetMeUIResourceURI,
|
||||
Name: "get_me_ui",
|
||||
Description: "MCP App UI for the get_me tool",
|
||||
MIMEType: MCPAppMIMEType,
|
||||
},
|
||||
func(_ context.Context, _ *mcp.ReadResourceRequest) (*mcp.ReadResourceResult, error) {
|
||||
html := MustGetUIAsset("get-me.html")
|
||||
return &mcp.ReadResourceResult{
|
||||
Contents: []*mcp.ResourceContents{
|
||||
{
|
||||
URI: GetMeUIResourceURI,
|
||||
MIMEType: MCPAppMIMEType,
|
||||
Text: html,
|
||||
Meta: mcp.Meta{
|
||||
"ui": map[string]any{
|
||||
// Allow loading images from GitHub's avatar CDN.
|
||||
"csp": map[string]any{
|
||||
"resourceDomains": []string{"https://avatars.githubusercontent.com"},
|
||||
},
|
||||
// Profile card renders inline within chat without a host border.
|
||||
"prefersBorder": false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
},
|
||||
)
|
||||
|
||||
if readOnly {
|
||||
return
|
||||
}
|
||||
|
||||
// Register the issue_write UI resource
|
||||
s.AddResource(
|
||||
&mcp.Resource{
|
||||
URI: IssueWriteUIResourceURI,
|
||||
Name: "issue_write_ui",
|
||||
Description: "MCP App UI for creating and updating GitHub issues",
|
||||
MIMEType: MCPAppMIMEType,
|
||||
},
|
||||
func(_ context.Context, _ *mcp.ReadResourceRequest) (*mcp.ReadResourceResult, error) {
|
||||
html := MustGetUIAsset("issue-write.html")
|
||||
return &mcp.ReadResourceResult{
|
||||
Contents: []*mcp.ResourceContents{
|
||||
{
|
||||
URI: IssueWriteUIResourceURI,
|
||||
MIMEType: MCPAppMIMEType,
|
||||
Text: html,
|
||||
Meta: mcp.Meta{
|
||||
"ui": map[string]any{
|
||||
// No external origins required; documents the secure default.
|
||||
"csp": map[string]any{},
|
||||
// Form surface benefits from a host-provided border.
|
||||
"prefersBorder": true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
},
|
||||
)
|
||||
|
||||
// Register the create_pull_request UI resource
|
||||
s.AddResource(
|
||||
&mcp.Resource{
|
||||
URI: PullRequestWriteUIResourceURI,
|
||||
Name: "pr_write_ui",
|
||||
Description: "MCP App UI for creating GitHub pull requests",
|
||||
MIMEType: MCPAppMIMEType,
|
||||
},
|
||||
func(_ context.Context, _ *mcp.ReadResourceRequest) (*mcp.ReadResourceResult, error) {
|
||||
html := MustGetUIAsset("pr-write.html")
|
||||
return &mcp.ReadResourceResult{
|
||||
Contents: []*mcp.ResourceContents{
|
||||
{
|
||||
URI: PullRequestWriteUIResourceURI,
|
||||
MIMEType: MCPAppMIMEType,
|
||||
Text: html,
|
||||
Meta: mcp.Meta{
|
||||
"ui": map[string]any{
|
||||
"csp": map[string]any{},
|
||||
"prefersBorder": true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
},
|
||||
)
|
||||
|
||||
s.AddResource(
|
||||
&mcp.Resource{
|
||||
URI: PullRequestEditUIResourceURI,
|
||||
Name: "pr_edit_ui",
|
||||
Description: "MCP App UI for editing GitHub pull requests",
|
||||
MIMEType: MCPAppMIMEType,
|
||||
},
|
||||
func(_ context.Context, _ *mcp.ReadResourceRequest) (*mcp.ReadResourceResult, error) {
|
||||
html := MustGetUIAsset("pr-edit.html")
|
||||
return &mcp.ReadResourceResult{
|
||||
Contents: []*mcp.ResourceContents{
|
||||
{
|
||||
URI: PullRequestEditUIResourceURI,
|
||||
MIMEType: MCPAppMIMEType,
|
||||
Text: html,
|
||||
Meta: mcp.Meta{
|
||||
"ui": map[string]any{
|
||||
"csp": map[string]any{},
|
||||
"prefersBorder": true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
},
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user