File tree Expand file tree Collapse file tree 2 files changed +54
-1
lines changed
Expand file tree Collapse file tree 2 files changed +54
-1
lines changed Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "flag"
5+ "fmt"
6+ )
7+
8+ func init () {
9+ flagSet := flag .NewFlagSet ("mcp" , flag .ExitOnError )
10+ handler := func (args []string ) error {
11+ return mcpMain (args )
12+ }
13+
14+ commands = append (commands , & command {
15+ flagSet : flagSet ,
16+ handler : handler ,
17+ })
18+ }
19+ func mcpMain (args []string ) error {
20+ fmt .Println ("NOTE: This command is still experimental" )
21+ tools , err := LoadMCPToolDefinitions (mcpToolListJSON )
22+ if err != nil {
23+ return err
24+ }
25+
26+ subcmd := args [0 ]
27+ if subcmd == "list-tools" {
28+ fmt .Println ("Available tools" )
29+ for name := range tools {
30+ fmt .Printf ("- %s\n " , name )
31+ }
32+ return nil
33+ }
34+
35+ tool , ok := tools [subcmd ]
36+ if ! ok {
37+ return fmt .Errorf ("tool definition for %q not found - run src mcp list-tools to see a list of available tools" , subcmd )
38+ }
39+ return handleMcpTool (tool , args [1 :])
40+ }
41+
42+ func handleMcpTool (tool * MCPToolDef , args []string ) error {
43+ fmt .Printf ("handling tool %q args: %+v" , tool .Name , args )
44+ return nil
45+ }
Original file line number Diff line number Diff line change 55 _ "embed"
66 "encoding/json"
77 "fmt"
8+ "strings"
89
910 "github.com/sourcegraph/sourcegraph/lib/errors"
1011)
@@ -85,7 +86,8 @@ func LoadToolDefinitions(data []byte) (map[string]*ToolDef, error) {
8586 parser := & parser {}
8687
8788 for _ , t := range defs .Tools {
88- tools [t .Name ] = & ToolDef {
89+ name := normalizeToolName (t .Name )
90+ tools [name ] = & ToolDef {
8991 Name : t .Name ,
9092 Description : t .Description ,
9193 InputSchema : parser .parseRootSchema (t .InputSchema ),
@@ -164,3 +166,9 @@ func (p *parser) parseProperties(props map[string]json.RawMessage) map[string]Sc
164166 }
165167 return res
166168}
169+
170+ // normalizeToolName takes mcp tool names like 'sg_keyword_search' and normalizes it to 'keyword-search"
171+ func normalizeToolName (toolName string ) string {
172+ toolName , _ = strings .CutPrefix (toolName , "sg_" )
173+ return strings .ReplaceAll (toolName , "_" , "-" )
174+ }
You can’t perform that action at this time.
0 commit comments