@@ -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
}
0 commit comments