MCP Server

/app/lib/mcpserver/defaults.go (1.3 KB)

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package mcpserver

import (
"context"
"fmt"

"{{{ .Package }}}/app"
"{{{ .Package }}}/app/util"
)

var (
defaultServer *Server
defaultTools Tools
)

func AddDefaultTools(ts ...*Tool) {
defaultTools = append(defaultTools, ts...)
}

func ClearDefaultTools() {
defaultTools = nil
}

func GetDefaultServer(ctx context.Context, as *app.State, logger util.Logger) (*Server, error) {
if defaultServer != nil {
return defaultServer, nil
}
ret, err := NewServer(ctx, as, logger)
if err != nil {
return nil, err
}
defaultServer = ret
return defaultServer, nil
}

func CurrentDefaultServer() *Server {
return defaultServer
}

const usageCLI = `{
"mcpServers": {
"%s": {
"command": "%s",
"args": ["mcp"]
}
}
}`

func UsageCLI() string {
return fmt.Sprintf(usageCLI, util.AppCmd, util.AppCmd)
}

const usageHTTP = `{
"mcpServers": {
"%s": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://localhost:%d/mcp"]
}
}
}`

func UsageHTTP() string {
return fmt.Sprintf(usageHTTP, util.AppCmd, util.AppPort)
}

func ResultString(r any, logger util.Logger) string {
switch t := r.(type) {
case string:
return t
case []byte:
return string(t)
default:
logger.Debugf("unsupported type: %T", t)
return util.ToJSON(t)
}
}