@@ -9,10 +9,11 @@ import (
9
9
"github.com/coder/coder/v2/coderd/httpmw"
10
10
"github.com/coder/coder/v2/coderd/mcp"
11
11
"github.com/coder/coder/v2/codersdk"
12
+ "github.com/coder/coder/v2/codersdk/toolsdk"
12
13
)
13
14
14
15
// mcpHTTPHandler creates the MCP HTTP transport handler
15
- func (api * API ) mcpHTTPHandler () http.Handler {
16
+ func (api * API ) mcpHTTPHandler (tools []toolsdk. GenericTool ) http.Handler {
16
17
return http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
17
18
// Create MCP server instance for each request
18
19
mcpServer , err := mcp .NewServer (api .Logger .Named ("mcp" ))
@@ -29,11 +30,41 @@ func (api *API) mcpHTTPHandler() http.Handler {
29
30
authenticatedClient .SetSessionToken (httpmw .APITokenFromRequest (r ))
30
31
31
32
// Register tools with authenticated client
32
- if err := mcpServer .RegisterTools (authenticatedClient ); err != nil {
33
+ if err := mcpServer .RegisterTools (authenticatedClient , tools ); err != nil {
33
34
api .Logger .Warn (r .Context (), "failed to register MCP tools" , slog .Error (err ))
34
35
}
35
36
36
37
// Handle the MCP request
37
38
mcpServer .ServeHTTP (w , r )
38
39
})
39
40
}
41
+
42
+ // standardMCPHTTPHandler sets up the MCP HTTP transport handler for the standard tools.
43
+ // Standard tools are all tools except for the report task, ChatGPT search, and ChatGPT fetch tools.
44
+ func (api * API ) standardMCPHTTPHandler () http.Handler {
45
+ mcpTools := []toolsdk.GenericTool {}
46
+ for _ , tool := range toolsdk .All {
47
+ if tool .Name == toolsdk .ToolNameReportTask ||
48
+ tool .Name == toolsdk .ToolNameChatGPTSearch || tool .Name == toolsdk .ToolNameChatGPTFetch {
49
+ continue
50
+ }
51
+ mcpTools = append (mcpTools , tool )
52
+ }
53
+ return api .mcpHTTPHandler (mcpTools )
54
+ }
55
+
56
+ // chatgptMCPHTTPHandler sets up the MCP HTTP transport handler for the ChatGPT tools.
57
+ // ChatGPT tools are the search and fetch tools as defined in https://platform.openai.com/docs/mcp.
58
+ // We do not expose any extra ones because ChatGPT has an undocumented "Safety Scan" feature.
59
+ // In my experiments, if I included extra tools in the MCP server, ChatGPT would refuse
60
+ // to add Coder as a connector.
61
+ func (api * API ) chatgptMCPHTTPHandler () http.Handler {
62
+ mcpTools := []toolsdk.GenericTool {}
63
+ for _ , tool := range toolsdk .All {
64
+ if ! (tool .Name == toolsdk .ToolNameChatGPTSearch || tool .Name == toolsdk .ToolNameChatGPTFetch ) {
65
+ continue
66
+ }
67
+ mcpTools = append (mcpTools , tool )
68
+ }
69
+ return api .mcpHTTPHandler (mcpTools )
70
+ }
0 commit comments