Skip to content

Commit 56ea66f

Browse files
committed
multiple tools support
1 parent 256b523 commit 56ea66f

File tree

2 files changed

+42
-8
lines changed

2 files changed

+42
-8
lines changed

cmd/docker-mcp/commands/tools.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,26 +61,26 @@ func toolsCommand(docker docker.Client) *cobra.Command {
6161

6262
var enableServerName string
6363
enableCmd := &cobra.Command{
64-
Use: "enable",
65-
Short: "enable a tool",
66-
Args: cobra.ExactArgs(1),
64+
Use: "enable [tool1] [tool2] ...",
65+
Short: "enable one or more tools",
66+
Args: cobra.MinimumNArgs(1),
6767
RunE: func(cmd *cobra.Command, args []string) error {
6868
return tools.Enable(cmd.Context(), docker, args, enableServerName)
6969
},
7070
}
71-
enableCmd.Flags().StringVar(&enableServerName, "server", "", "Specify which server provides the tool (optional, will auto-discover if not provided)")
71+
enableCmd.Flags().StringVar(&enableServerName, "server", "", "Specify which server provides the tools (optional, will auto-discover if not provided)")
7272
cmd.AddCommand(enableCmd)
7373

7474
var disableServerName string
7575
disableCmd := &cobra.Command{
76-
Use: "disable",
77-
Short: "disable a tool",
78-
Args: cobra.ExactArgs(1),
76+
Use: "disable [tool1] [tool2] ...",
77+
Short: "disable one or more tools",
78+
Args: cobra.MinimumNArgs(1),
7979
RunE: func(cmd *cobra.Command, args []string) error {
8080
return tools.Disable(cmd.Context(), docker, args, disableServerName)
8181
},
8282
}
83-
disableCmd.Flags().StringVar(&disableServerName, "server", "", "Specify which server provides the tool (optional, will auto-discover if not provided)")
83+
disableCmd.Flags().StringVar(&disableServerName, "server", "", "Specify which server provides the tools (optional, will auto-discover if not provided)")
8484
cmd.AddCommand(disableCmd)
8585

8686
return cmd

cmd/docker-mcp/tools/tools_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,22 @@ func TestEnableToolAutoDiscoverNotFound(t *testing.T) {
158158
require.ErrorContains(t, err, "tool \"nonexistent_tool\" not found in any server")
159159
}
160160

161+
func TestEnableMultipleTools(t *testing.T) {
162+
ctx, _, docker := setup(t, withEmptyToolsConfig(), withSampleCatalog())
163+
164+
err := Enable(ctx, docker, []string{"search_duckduckgo", "other_tool"}, "duckduckgo")
165+
require.NoError(t, err)
166+
167+
toolsYAML, err := config.ReadTools(ctx, docker)
168+
require.NoError(t, err)
169+
toolsConfig, err := config.ParseToolsConfig(toolsYAML)
170+
require.NoError(t, err)
171+
172+
assert.Contains(t, toolsConfig.ServerTools["duckduckgo"], "search_duckduckgo")
173+
assert.Contains(t, toolsConfig.ServerTools["duckduckgo"], "other_tool")
174+
assert.Len(t, toolsConfig.ServerTools["duckduckgo"], 2)
175+
}
176+
161177
func TestDisableEmpty(t *testing.T) {
162178
ctx, _, docker := setup(t, withEmptyToolsConfig(), withSampleCatalog())
163179

@@ -214,6 +230,24 @@ func TestDisableServerNotFound(t *testing.T) {
214230
require.ErrorContains(t, err, "server \"nonexistent_server\" not found in catalog")
215231
}
216232

233+
func TestDisableMultipleTools(t *testing.T) {
234+
ctx, _, docker := setup(t,
235+
withToolsConfig("duckduckgo:\n - search_duckduckgo\n - other_tool"),
236+
withSampleCatalog())
237+
238+
err := Disable(ctx, docker, []string{"search_duckduckgo", "other_tool"}, "duckduckgo")
239+
require.NoError(t, err)
240+
241+
toolsYAML, err := config.ReadTools(ctx, docker)
242+
require.NoError(t, err)
243+
toolsConfig, err := config.ParseToolsConfig(toolsYAML)
244+
require.NoError(t, err)
245+
246+
assert.NotContains(t, toolsConfig.ServerTools["duckduckgo"], "search_duckduckgo")
247+
assert.NotContains(t, toolsConfig.ServerTools["duckduckgo"], "other_tool")
248+
assert.Empty(t, toolsConfig.ServerTools["duckduckgo"])
249+
}
250+
217251
// Fixtures and helpers
218252

219253
func setup(t *testing.T, options ...option) (context.Context, string, docker.Client) {

0 commit comments

Comments
 (0)