@@ -13,25 +13,55 @@ import (
13
13
"github.com/grafana/mcp-grafana/tools"
14
14
)
15
15
16
-
func newServer() *server.MCPServer {
16
+
func maybeAddTools(s *server.MCPServer, tf func(*server.MCPServer), disable bool, category string) {
17
+
if disable {
18
+
slog.Info("Disabling tools", "category", category)
19
+
return
20
+
}
21
+
tf(s)
22
+
}
23
+
24
+
// disabledTools indicates whether each category of tools should be disabled.
25
+
type disabledTools struct {
26
+
search, datasource, incident,
27
+
prometheus, loki, alerting,
28
+
dashboard, oncall bool
29
+
}
30
+
31
+
func (dt *disabledTools) addFlags() {
32
+
flag.BoolVar(&dt.search, "disable-search", false, "Disable search tools")
33
+
flag.BoolVar(&dt.datasource, "disable-datasource", false, "Disable datasource tools")
34
+
flag.BoolVar(&dt.incident, "disable-incident", false, "Disable incident tools")
35
+
flag.BoolVar(&dt.prometheus, "disable-prometheus", false, "Disable prometheus tools")
36
+
flag.BoolVar(&dt.loki, "disable-loki", false, "Disable loki tools")
37
+
flag.BoolVar(&dt.alerting, "disable-alerting", false, "Disable alerting tools")
38
+
flag.BoolVar(&dt.dashboard, "disable-dashboard", false, "Disable dashboard tools")
39
+
flag.BoolVar(&dt.oncall, "disable-oncall", false, "Disable oncall tools")
40
+
}
41
+
42
+
func (dt *disabledTools) addTools(s *server.MCPServer) {
43
+
maybeAddTools(s, tools.AddSearchTools, dt.search, "search")
44
+
maybeAddTools(s, tools.AddDatasourceTools, dt.datasource, "datasource")
45
+
maybeAddTools(s, tools.AddIncidentTools, dt.incident, "incident")
46
+
maybeAddTools(s, tools.AddPrometheusTools, dt.prometheus, "prometheus")
47
+
maybeAddTools(s, tools.AddLokiTools, dt.loki, "loki")
48
+
maybeAddTools(s, tools.AddAlertingTools, dt.alerting, "alerting")
49
+
maybeAddTools(s, tools.AddDashboardTools, dt.dashboard, "dashboard")
50
+
maybeAddTools(s, tools.AddOnCallTools, dt.oncall, "oncall")
51
+
}
52
+
53
+
func newServer(dt disabledTools) *server.MCPServer {
17
54
s := server.NewMCPServer(
18
55
"mcp-grafana",
19
56
"0.1.0",
20
57
)
21
-
tools.AddSearchTools(s)
22
-
tools.AddDatasourceTools(s)
23
-
tools.AddIncidentTools(s)
24
-
tools.AddPrometheusTools(s)
25
-
tools.AddLokiTools(s)
26
-
tools.AddAlertingTools(s)
27
-
tools.AddDashboardTools(s)
28
-
tools.AddOnCallTools(s)
58
+
dt.addTools(s)
29
59
return s
30
60
}
31
61
32
-
func run(transport, addr string, logLevel slog.Level) error {
62
+
func run(transport, addr string, logLevel slog.Level, dt disabledTools) error {
33
63
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: logLevel})))
34
-
s := newServer()
64
+
s := newServer(dt)
35
65
36
66
switch transport {
37
67
case "stdio":
@@ -67,9 +97,11 @@ func main() {
67
97
)
68
98
addr := flag.String("sse-address", "localhost:8000", "The host and port to start the sse server on")
69
99
logLevel := flag.String("log-level", "info", "Log level (debug, info, warn, error)")
100
+
var dt disabledTools
101
+
dt.addFlags()
70
102
flag.Parse()
71
103
72
-
if err := run(transport, *addr, parseLevel(*logLevel)); err != nil {
104
+
if err := run(transport, *addr, parseLevel(*logLevel), dt); err != nil {
73
105
panic(err)
74
106
}
75
107
}
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4