mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 02:15:48 +02:00
60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package mcp
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/mark3labs/mcp-go/mcp"
|
|
"github.com/mark3labs/mcp-go/server"
|
|
)
|
|
|
|
var (
|
|
mcpServer = server.NewMCPServer(
|
|
"Nginx",
|
|
"1.0.0",
|
|
server.WithResourceCapabilities(true, true),
|
|
server.WithLogging(),
|
|
server.WithRecovery(),
|
|
)
|
|
sseServer = server.NewSSEServer(
|
|
mcpServer,
|
|
server.WithSSEEndpoint("/mcp"),
|
|
server.WithMessageEndpoint("/mcp_message"),
|
|
)
|
|
)
|
|
|
|
const (
|
|
MimeTypeJSON = "application/json"
|
|
MimeTypeText = "text/plain"
|
|
)
|
|
|
|
type Resource struct {
|
|
Resource mcp.Resource
|
|
Handler func(ctx context.Context, request mcp.ReadResourceRequest) ([]mcp.ResourceContents, error)
|
|
}
|
|
|
|
type Tool struct {
|
|
Tool mcp.Tool
|
|
Handler func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error)
|
|
}
|
|
|
|
var (
|
|
tools = []Tool{}
|
|
toolMutex sync.Mutex
|
|
)
|
|
func AddTool(tool mcp.Tool, handler func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error)) {
|
|
toolMutex.Lock()
|
|
defer toolMutex.Unlock()
|
|
tools = append(tools, Tool{Tool: tool, Handler: handler})
|
|
}
|
|
|
|
func ServeHTTP(c *gin.Context) {
|
|
sseServer.ServeHTTP(c.Writer, c.Request)
|
|
}
|
|
|
|
func Init() {
|
|
for _, tool := range tools {
|
|
mcpServer.AddTool(tool.Tool, tool.Handler)
|
|
}
|
|
}
|