@@ -4,8 +4,10 @@ import (
4
4
"context"
5
5
"flag"
6
6
"fmt"
7
+ "github.com/mark3labs/mcp-go/mcp"
7
8
"log"
8
9
"os"
10
+ "strings"
9
11
10
12
"gitee.com/oschina/mcp-gitee/operations/issues"
11
13
"gitee.com/oschina/mcp-gitee/operations/notifications"
@@ -18,7 +20,9 @@ import (
18
20
)
19
21
20
22
var (
21
- Version = utils .Version
23
+ Version = utils .Version
24
+ disabledToolsetsFlag string
25
+ enabledToolsetsFlag string
22
26
)
23
27
24
28
func newMCPServer () * server.MCPServer {
@@ -30,46 +34,111 @@ func newMCPServer() *server.MCPServer {
30
34
)
31
35
}
32
36
37
+ func addTool (s * server.MCPServer , tool mcp.Tool , handleFunc server.ToolHandlerFunc ) {
38
+ enabledToolsets := getEnabledToolsets ()
39
+ if len (enabledToolsets ) == 0 {
40
+ s .AddTool (tool , handleFunc )
41
+ return
42
+ }
43
+
44
+ for i := range enabledToolsets {
45
+ enabledToolsets [i ] = strings .TrimSpace (enabledToolsets [i ])
46
+ }
47
+
48
+ for _ , keepTool := range enabledToolsets {
49
+ if tool .Name == keepTool {
50
+ s .AddTool (tool , handleFunc )
51
+ return
52
+ }
53
+ }
54
+ }
55
+
56
+ func disableTools (s * server.MCPServer ) {
57
+ if enabledToolsetsFlag != "" {
58
+ enabledToolsetsFlag = os .Getenv ("ENABLED_TOOLSETS" )
59
+ }
60
+
61
+ if enabledToolsetsFlag != "" {
62
+ return
63
+ }
64
+
65
+ if disabledTools := getDisabledToolsets (); len (disabledTools ) > 0 {
66
+ s .DeleteTools (disabledTools ... )
67
+ }
68
+ }
69
+
33
70
func addTools (s * server.MCPServer ) {
34
71
// Repository Tools
35
- s . AddTool ( repository .ListUserReposTool , repository .ListUserReposHandler )
36
- s . AddTool ( repository .GetFileContentTool , repository .GetFileContentHandler )
37
- s . AddTool ( repository .NewCreateRepoTool (repository .CreateUserRepo ), repository .CreateRepoHandleFunc (repository .CreateUserRepo ))
38
- s . AddTool ( repository .NewCreateRepoTool (repository .CreateOrgRepo ), repository .CreateRepoHandleFunc (repository .CreateOrgRepo ))
39
- s . AddTool ( repository .NewCreateRepoTool (repository .CreateEnterRepo ), repository .CreateRepoHandleFunc (repository .CreateEnterRepo ))
40
- s . AddTool ( repository .CreateReleaseTool , repository .CreateReleaseHandleFunc )
41
- s . AddTool ( repository .ListReleasesTool , repository .ListReleasesHandleFunc )
42
- s . AddTool ( repository .SearchReposTool , repository .SearchOpenSourceReposHandler )
43
- s . AddTool ( repository .ForkRepositoryTool , repository .ForkRepositoryHandler )
72
+ addTool ( s , repository .ListUserReposTool , repository .ListUserReposHandler )
73
+ addTool ( s , repository .GetFileContentTool , repository .GetFileContentHandler )
74
+ addTool ( s , repository .NewCreateRepoTool (repository .CreateUserRepo ), repository .CreateRepoHandleFunc (repository .CreateUserRepo ))
75
+ addTool ( s , repository .NewCreateRepoTool (repository .CreateOrgRepo ), repository .CreateRepoHandleFunc (repository .CreateOrgRepo ))
76
+ addTool ( s , repository .NewCreateRepoTool (repository .CreateEnterRepo ), repository .CreateRepoHandleFunc (repository .CreateEnterRepo ))
77
+ addTool ( s , repository .CreateReleaseTool , repository .CreateReleaseHandleFunc )
78
+ addTool ( s , repository .ListReleasesTool , repository .ListReleasesHandleFunc )
79
+ addTool ( s , repository .SearchReposTool , repository .SearchOpenSourceReposHandler )
80
+ addTool ( s , repository .ForkRepositoryTool , repository .ForkRepositoryHandler )
44
81
45
82
// Pulls Tools
46
- s . AddTool ( pulls .NewListPullsTool (pulls .ListRepoPullsToolName ), pulls .ListPullsHandleFunc (pulls .ListRepoPullsToolName ))
47
- s . AddTool ( pulls .CreatePullTool , pulls .CreatePullHandleFunc )
48
- s . AddTool ( pulls .UpdatePullTool , pulls .UpdatePullHandleFunc )
49
- s . AddTool ( pulls .GetPullDetailTool , pulls .GetPullDetailHandleFunc )
50
- s . AddTool ( pulls .CommentPullTool , pulls .CommentPullHandleFunc )
51
- s . AddTool ( pulls .MergePullTool , pulls .MergePullHandleFunc )
52
- s . AddTool ( pulls .ListPullCommentsTool , pulls .ListPullCommentsHandleFunc )
83
+ addTool ( s , pulls .NewListPullsTool (pulls .ListRepoPullsToolName ), pulls .ListPullsHandleFunc (pulls .ListRepoPullsToolName ))
84
+ addTool ( s , pulls .CreatePullTool , pulls .CreatePullHandleFunc )
85
+ addTool ( s , pulls .UpdatePullTool , pulls .UpdatePullHandleFunc )
86
+ addTool ( s , pulls .GetPullDetailTool , pulls .GetPullDetailHandleFunc )
87
+ addTool ( s , pulls .CommentPullTool , pulls .CommentPullHandleFunc )
88
+ addTool ( s , pulls .MergePullTool , pulls .MergePullHandleFunc )
89
+ addTool ( s , pulls .ListPullCommentsTool , pulls .ListPullCommentsHandleFunc )
53
90
54
91
// Issues Tools
55
- s . AddTool ( issues .CreateIssueTool , issues .CreateIssueHandleFunc )
56
- s . AddTool ( issues .UpdateIssueTool , issues .UpdateIssueHandleFunc )
57
- s . AddTool ( issues .NewGetIssueDetailTool (issues .GetRepoIssueDetailToolName ), issues .GetIssueDetailHandleFunc (issues .GetRepoIssueDetailToolName ))
58
- s . AddTool ( issues .NewListIssuesTool (issues .ListRepoIssuesToolName ), issues .ListIssuesHandleFunc (issues .ListRepoIssuesToolName ))
59
- s . AddTool ( issues .CommentIssueTool , issues .CommentIssueHandleFunc )
60
- s . AddTool ( issues .ListIssueCommentsTool , issues .ListIssueCommentsHandleFunc )
92
+ addTool ( s , issues .CreateIssueTool , issues .CreateIssueHandleFunc )
93
+ addTool ( s , issues .UpdateIssueTool , issues .UpdateIssueHandleFunc )
94
+ addTool ( s , issues .NewGetIssueDetailTool (issues .GetRepoIssueDetailToolName ), issues .GetIssueDetailHandleFunc (issues .GetRepoIssueDetailToolName ))
95
+ addTool ( s , issues .NewListIssuesTool (issues .ListRepoIssuesToolName ), issues .ListIssuesHandleFunc (issues .ListRepoIssuesToolName ))
96
+ addTool ( s , issues .CommentIssueTool , issues .CommentIssueHandleFunc )
97
+ addTool ( s , issues .ListIssueCommentsTool , issues .ListIssueCommentsHandleFunc )
61
98
62
99
// Notifications Tools
63
- s . AddTool ( notifications .ListUserNotificationsTool , notifications .ListUserNotificationsHandler )
100
+ addTool ( s , notifications .ListUserNotificationsTool , notifications .ListUserNotificationsHandler )
64
101
65
102
// Users Tools
66
- s .AddTool (users .GetUserInfoTool , users .GetUserInfoHandleFunc ())
67
- s .AddTool (users .SearchUsersTool , users .SearchUsersHandler )
103
+ addTool (s , users .GetUserInfoTool , users .GetUserInfoHandleFunc ())
104
+ addTool (s , users .SearchUsersTool , users .SearchUsersHandler )
105
+ }
106
+
107
+ func getDisabledToolsets () []string {
108
+ if disabledToolsetsFlag == "" {
109
+ disabledToolsetsFlag = os .Getenv ("DISABLED_TOOLSETS" )
110
+ }
111
+
112
+ if disabledToolsetsFlag == "" {
113
+ return nil
114
+ }
115
+
116
+ tools := strings .Split (disabledToolsetsFlag , "," )
117
+ for i := range tools {
118
+ tools [i ] = strings .TrimSpace (tools [i ])
119
+ }
120
+
121
+ return tools
122
+ }
123
+
124
+ func getEnabledToolsets () []string {
125
+ if enabledToolsetsFlag == "" {
126
+ enabledToolsetsFlag = os .Getenv ("ENABLED_TOOLSETS" )
127
+ }
128
+ if enabledToolsetsFlag == "" {
129
+ return nil
130
+ }
131
+ tools := strings .Split (enabledToolsetsFlag , "," )
132
+ for i := range tools {
133
+ tools [i ] = strings .TrimSpace (tools [i ])
134
+ }
135
+ return tools
68
136
}
69
137
70
138
func run (transport , addr string ) error {
71
139
s := newMCPServer ()
72
140
addTools (s )
141
+ disableTools (s )
73
142
74
143
switch transport {
75
144
case "stdio" :
@@ -103,6 +172,8 @@ func main() {
103
172
showVersion := flag .Bool ("version" , false , "Show version information" )
104
173
transport := flag .String ("transport" , "stdio" , "Transport type (stdio or sse)" )
105
174
addr := flag .String ("sse-address" , "localhost:8000" , "The host and port to start the sse server on" )
175
+ flag .StringVar (& disabledToolsetsFlag , "disabled-toolsets" , "" , "Comma-separated list of tools to disable" )
176
+ flag .StringVar (& enabledToolsetsFlag , "enabled-toolsets" , "" , "Comma-separated list of tools to enable (if specified, only these tools will be available)" )
106
177
flag .Parse ()
107
178
108
179
if * showVersion {
0 commit comments