Skip to content

Commit aceb8ce

Browse files
committed
feat: use underscores intead of hyphens
When only a profile name is provided and the id is generated it will replace special characters with underscores instead of hypens. Hypens were problematic because they were being interpreted as command line flags.
1 parent 26b8a87 commit aceb8ce

4 files changed

Lines changed: 22 additions & 22 deletions

File tree

docs/profiles.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ docker mcp profile create --name "My Servers" --id my-servers \
7777

7878
**Notes:**
7979
- `--name` is required and serves as the human-readable name
80-
- `--id` is optional; if not provided, it's generated from the name (lowercase, alphanumeric with hyphens)
80+
- `--id` is optional; if not provided, it's generated from the name (lowercase, alphanumeric with underscores)
8181
- `--server` can be specified multiple times to add multiple servers
8282
- Server references must be either:
8383
- `docker://` prefix for OCI images

pkg/workingset/create_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,11 @@ func TestCreateWithDockerImages(t *testing.T) {
101101
require.NoError(t, err)
102102

103103
// Verify the working set was created
104-
dbSet, err := dao.GetWorkingSet(ctx, "my-test-set")
104+
dbSet, err := dao.GetWorkingSet(ctx, "my_test_set")
105105
require.NoError(t, err)
106106
require.NotNil(t, dbSet)
107107

108-
assert.Equal(t, "my-test-set", dbSet.ID)
108+
assert.Equal(t, "my_test_set", dbSet.ID)
109109
assert.Equal(t, "My Test Set", dbSet.Name)
110110
assert.Len(t, dbSet.Servers, 2)
111111

@@ -127,7 +127,7 @@ func TestCreateWithRegistryServers(t *testing.T) {
127127
require.NoError(t, err)
128128

129129
// Verify the working set was created
130-
dbSet, err := dao.GetWorkingSet(ctx, "registry-set")
130+
dbSet, err := dao.GetWorkingSet(ctx, "registry_set")
131131
require.NoError(t, err)
132132
require.NotNil(t, dbSet)
133133

@@ -151,7 +151,7 @@ func TestCreateWithMixedServers(t *testing.T) {
151151
require.NoError(t, err)
152152

153153
// Verify the working set was created
154-
dbSet, err := dao.GetWorkingSet(ctx, "mixed-set")
154+
dbSet, err := dao.GetWorkingSet(ctx, "mixed_set")
155155
require.NoError(t, err)
156156
require.NotNil(t, dbSet)
157157

@@ -231,9 +231,9 @@ func TestCreateGeneratesUniqueIds(t *testing.T) {
231231
}
232232

233233
// Verify ID pattern
234-
assert.Contains(t, ids, "test-set")
235-
assert.Contains(t, ids, "test-set-2")
236-
assert.Contains(t, ids, "test-set-3")
234+
assert.Contains(t, ids, "test_set")
235+
assert.Contains(t, ids, "test_set_2")
236+
assert.Contains(t, ids, "test_set_3")
237237
}
238238

239239
func TestCreateWithInvalidServerFormat(t *testing.T) {
@@ -266,7 +266,7 @@ func TestCreateWithEmptyServers(t *testing.T) {
266266
require.NoError(t, err)
267267

268268
// Verify the working set was created with no servers
269-
dbSet, err := dao.GetWorkingSet(ctx, "empty-set")
269+
dbSet, err := dao.GetWorkingSet(ctx, "empty_set")
270270
require.NoError(t, err)
271271
require.NotNil(t, dbSet)
272272

@@ -283,7 +283,7 @@ func TestCreateAddsDefaultSecrets(t *testing.T) {
283283
require.NoError(t, err)
284284

285285
// Verify default secrets were added
286-
dbSet, err := dao.GetWorkingSet(ctx, "test-set")
286+
dbSet, err := dao.GetWorkingSet(ctx, "test_set")
287287
require.NoError(t, err)
288288
require.NotNil(t, dbSet)
289289

@@ -301,22 +301,22 @@ func TestCreateNameWithSpecialCharacters(t *testing.T) {
301301
{
302302
name: "name with spaces",
303303
inputName: "My Test Set",
304-
expectedID: "my-test-set",
304+
expectedID: "my_test_set",
305305
},
306306
{
307307
name: "name with special chars",
308308
inputName: "Test@Set#123!",
309-
expectedID: "test-set-123-",
309+
expectedID: "test_set_123_",
310310
},
311311
{
312312
name: "name with multiple spaces",
313313
inputName: "Test Set",
314-
expectedID: "test-set",
314+
expectedID: "test_set",
315315
},
316316
{
317317
name: "name with underscores",
318318
inputName: "Test_Set_Name",
319-
expectedID: "test-set-name",
319+
expectedID: "test_set_name",
320320
},
321321
}
322322

pkg/workingset/workingset.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,9 +349,9 @@ func (s *Server) BasicName() string {
349349
}
350350

351351
func createWorkingSetID(ctx context.Context, name string, dao db.DAO) (string, error) {
352-
// Replace all non-alphanumeric characters with a hyphen and make all uppercase lowercase
352+
// Replace all non-alphanumeric characters with an underscore and make all uppercase lowercase
353353
re := regexp.MustCompile("[^a-zA-Z0-9]+")
354-
cleaned := re.ReplaceAllString(name, "-")
354+
cleaned := re.ReplaceAllString(name, "_")
355355
baseName := strings.ToLower(cleaned)
356356

357357
existingSets, err := dao.FindWorkingSetsByIDPrefix(ctx, baseName)
@@ -371,7 +371,7 @@ func createWorkingSetID(ctx context.Context, name string, dao db.DAO) (string, e
371371
// TODO(cody): there are better ways to do this, but this is a simple brute force for now
372372
// Append a number to the base name
373373
for i := 2; i <= 100; i++ {
374-
newName := fmt.Sprintf("%s-%d", baseName, i)
374+
newName := fmt.Sprintf("%s_%d", baseName, i)
375375
if !takenIDs[newName] {
376376
return newName, nil
377377
}

pkg/workingset/workingset_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -911,24 +911,24 @@ func TestCreateWorkingSetID(t *testing.T) {
911911
{
912912
name: "name with spaces",
913913
inputName: "My Working Set",
914-
expectedID: "my-working-set",
914+
expectedID: "my_working_set",
915915
},
916916
{
917917
name: "name with special characters",
918918
inputName: "My@Working#Set!",
919-
expectedID: "my-working-set-",
919+
expectedID: "my_working_set_",
920920
},
921921
{
922922
name: "name with collision",
923923
inputName: "test",
924924
existingIDs: []string{"test"},
925-
expectedID: "test-2",
925+
expectedID: "test_2",
926926
},
927927
{
928928
name: "name with multiple collisions",
929929
inputName: "test",
930-
existingIDs: []string{"test", "test-2", "test-3"},
931-
expectedID: "test-4",
930+
existingIDs: []string{"test", "test_2", "test_3"},
931+
expectedID: "test_4",
932932
},
933933
}
934934

0 commit comments

Comments
 (0)