Skip to content

Commit 4f48cf7

Browse files
committed
user provided serialization fixes for dml-tools property
1 parent 7228e60 commit 4f48cf7

4 files changed

Lines changed: 47 additions & 35 deletions

File tree

src/Cli.Tests/ConfigGeneratorTests.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -165,15 +165,7 @@ public void TestSpecialCharactersInConnectionString()
165165
},
166166
""mcp"": {
167167
""enabled"": true,
168-
""path"": ""/mcp"",
169-
""dml-tools"":{
170-
""describe-entities"": true,
171-
""create-record"": true,
172-
""read-records"": true,
173-
""update-record"": true,
174-
""delete-record"": true,
175-
""execute-entity"":true
176-
}
168+
""path"": ""/mcp""
177169
},
178170
""host"": {
179171
""cors"": {

src/Config/Converters/DmlToolsConfigConverter.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,13 @@ public override void Write(Utf8JsonWriter writer, DmlToolsConfig? value, JsonSer
139139

140140
// Only write the boolean value if it's provided by user
141141
// This prevents writing "dml-tools": true when it's the default
142-
if (!hasIndividualSettings && value.UserProvidedAllToolsEnabled)
142+
if (!hasIndividualSettings && value.UserProvidedAllTools)
143143
{
144144
writer.WritePropertyName("dml-tools");
145145
writer.WriteBooleanValue(value.AllToolsEnabled);
146146
}
147-
else
147+
148+
if(hasIndividualSettings)
148149
{
149150
writer.WritePropertyName("dml-tools");
150151

src/Config/ObjectModel/DmlToolsConfig.cs

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -64,61 +64,79 @@ public DmlToolsConfig(
6464
if (allToolsEnabled is not null)
6565
{
6666
AllToolsEnabled = allToolsEnabled.Value;
67-
UserProvidedAllToolsEnabled = true;
67+
UserProvidedAllTools = true;
68+
69+
// When allToolsEnabled is set, use it as the default for all tools
70+
bool toolDefault = allToolsEnabled.Value;
71+
72+
DescribeEntities = describeEntities ?? toolDefault;
73+
CreateRecord = createRecord ?? toolDefault;
74+
ReadRecords = readRecords ?? toolDefault;
75+
UpdateRecord = updateRecord ?? toolDefault;
76+
DeleteRecord = deleteRecord ?? toolDefault;
77+
ExecuteEntity = executeEntity ?? toolDefault;
6878
}
6979
else
7080
{
7181
AllToolsEnabled = DEFAULT_ENABLED;
82+
83+
// Set values with defaults
84+
DescribeEntities = describeEntities ?? DEFAULT_ENABLED;
85+
CreateRecord = createRecord ?? DEFAULT_ENABLED;
86+
ReadRecords = readRecords ?? DEFAULT_ENABLED;
87+
UpdateRecord = updateRecord ?? DEFAULT_ENABLED;
88+
DeleteRecord = deleteRecord ?? DEFAULT_ENABLED;
89+
ExecuteEntity = executeEntity ?? DEFAULT_ENABLED;
7290
}
7391

74-
// Set values with defaults and track user-provided status
75-
DescribeEntities = describeEntities ?? DEFAULT_ENABLED;
92+
// Track user-provided status - only true if the parameter was not null
7693
UserProvidedDescribeEntities = describeEntities is not null;
77-
78-
CreateRecord = createRecord ?? DEFAULT_ENABLED;
7994
UserProvidedCreateRecord = createRecord is not null;
80-
81-
ReadRecords = readRecords ?? DEFAULT_ENABLED;
8295
UserProvidedReadRecords = readRecords is not null;
83-
84-
UpdateRecord = updateRecord ?? DEFAULT_ENABLED;
8596
UserProvidedUpdateRecord = updateRecord is not null;
86-
87-
DeleteRecord = deleteRecord ?? DEFAULT_ENABLED;
8897
UserProvidedDeleteRecord = deleteRecord is not null;
89-
90-
ExecuteEntity = executeEntity ?? DEFAULT_ENABLED;
9198
UserProvidedExecuteEntity = executeEntity is not null;
9299
}
93100

94101
/// <summary>
95102
/// Creates a DmlToolsConfig with all tools set to the same state
103+
/// Used when user explicitly sets "dml-tools": true/false
96104
/// </summary>
97105
public static DmlToolsConfig FromBoolean(bool enabled)
98106
{
107+
// Only pass allToolsEnabled, leave individual tools as null
99108
return new DmlToolsConfig(
100109
allToolsEnabled: enabled,
101-
describeEntities: enabled,
102-
createRecord: enabled,
103-
readRecords: enabled,
104-
updateRecord: enabled,
105-
deleteRecord: enabled,
106-
executeEntity: enabled
110+
describeEntities: null,
111+
createRecord: null,
112+
readRecords: null,
113+
updateRecord: null,
114+
deleteRecord: null,
115+
executeEntity: null
107116
);
108117
}
109118

110119
/// <summary>
111120
/// Creates a default DmlToolsConfig with all tools enabled
121+
/// Used when dml-tools is not specified in config at all
112122
/// </summary>
113-
public static DmlToolsConfig Default => FromBoolean(DEFAULT_ENABLED);
123+
public static DmlToolsConfig Default => new(
124+
allToolsEnabled: null,
125+
describeEntities: null,
126+
createRecord: null,
127+
readRecords: null,
128+
updateRecord: null,
129+
deleteRecord: null,
130+
executeEntity: null
131+
);
114132

115133
/// <summary>
116134
/// Flag which informs CLI and JSON serializer whether to write all-tools-enabled
117135
/// property/value to the runtime config file.
118136
/// </summary>
119137
[JsonIgnore(Condition = JsonIgnoreCondition.Always)]
120138
[MemberNotNullWhen(true, nameof(AllToolsEnabled))]
121-
public bool UserProvidedAllToolsEnabled { get; init; } = false;
139+
public bool UserProvidedAllTools { get; init; } = false;
122140

123141
/// <summary>
124142
/// Flag which informs CLI and JSON serializer whether to write describe-entities

src/Config/ObjectModel/McpRuntimeOptions.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ public record McpRuntimeOptions
3232

3333
[JsonConstructor]
3434
public McpRuntimeOptions(
35-
bool Enabled = true,
35+
bool? Enabled = null,
3636
string? Path = null,
3737
DmlToolsConfig? DmlTools = null)
3838
{
39-
this.Enabled = Enabled;
39+
this.Enabled = Enabled ?? true;
4040

4141
if (Path is not null)
4242
{
@@ -51,7 +51,8 @@ public McpRuntimeOptions(
5151
// if DmlTools is null, set All tools enabled by default
5252
if (DmlTools is null)
5353
{
54-
this.DmlTools = DmlToolsConfig.FromBoolean(DmlToolsConfig.DEFAULT_ENABLED);
54+
// Use Default instead of FromBoolean to avoid setting UserProvided flags
55+
this.DmlTools = DmlToolsConfig.Default;
5556
}
5657
else
5758
{

0 commit comments

Comments
 (0)