Skip to content

Commit 3b48c49

Browse files
souvikghosh04CopilotJerryNixon
authored
Expand ALL permissions in MCP describe_entities to explicit operations (#2951)
The MCP `describe_entities` tool returns `"ALL"` for wildcard permissions, which confuses LLM consumers that need explicit operation lists. ### Changes Modified `DescribeEntitiesTool.BuildPermissionsInfo()` to expand `EntityActionOperation.All`: - **Tables/Views**: Expands to `["CREATE", "DELETE", "READ", "UPDATE"]` via `EntityAction.ValidPermissionOperations` - **Stored Procedures**: Expands to `["EXECUTE"]` via `EntityAction.ValidStoredProcedurePermissionOperations` ### Example **Before:** ```json { "name": "Todo", "permissions": ["ALL"] } ``` **After:** ```json { "name": "Todo", "permissions": ["CREATE", "DELETE", "READ", "UPDATE"] } ``` <!-- START COPILOT CODING AGENT SUFFIX --> <details> <summary>Original prompt</summary> > > ---- > > *This section details on the original issue you should resolve* > > <issue_title>[Bug]: MCP `describe_entities` permissions value `ALL` needs to be expanded.</issue_title> > <issue_description>## What? > > Models are confused by `ALL`. > > ```json > { > "entities": [ > { > "name": "Todo", > "description": "This table contains the list of todo items.", > "fields": [ ], > "permissions": [ > "ALL" // this is the problem > ] > } > ], > "count": 1, > "mode": "full", > "status": "success" > } > ``` > > ## Solution > > When table/view. > > ```json > { > "permissions: [ > "CREATE", > "DELETE", > "READ", > "UPDATE" > ] > } > ``` > > When stored procedure. > > ```json > { > "permissions: [ > "EXECUTE" > ] > } > ``` > </issue_description> > > ## Comments on the Issue (you are @copilot in this section) > > <comments> > </comments> > </details> - Fixes #2935 --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: JerryNixon <[email protected]>
1 parent 7228e60 commit 3b48c49

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

src/Azure.DataApiBuilder.Mcp/BuiltInTools/DescribeEntitiesTool.cs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -368,13 +368,30 @@ private static List<object> BuildParameterMetadataInfo(List<ParameterMetadata>?
368368
/// <returns>A list of permissions available to the entity</returns>
369369
private static string[] BuildPermissionsInfo(Entity entity)
370370
{
371-
HashSet<string> permissions = new();
371+
if (entity.Permissions == null)
372+
{
373+
return Array.Empty<string>();
374+
}
375+
376+
bool isStoredProcedure = entity.Source.Type == EntitySourceType.StoredProcedure;
377+
HashSet<EntityActionOperation> validOperations = isStoredProcedure
378+
? EntityAction.ValidStoredProcedurePermissionOperations
379+
: EntityAction.ValidPermissionOperations;
372380

373-
if (entity.Permissions != null)
381+
HashSet<string> permissions = new(StringComparer.OrdinalIgnoreCase);
382+
383+
foreach (EntityPermission permission in entity.Permissions)
374384
{
375-
foreach (EntityPermission permission in entity.Permissions)
385+
foreach (EntityAction action in permission.Actions)
376386
{
377-
foreach (EntityAction action in permission.Actions)
387+
if (action.Action == EntityActionOperation.All)
388+
{
389+
foreach (EntityActionOperation op in validOperations)
390+
{
391+
permissions.Add(op.ToString().ToUpperInvariant());
392+
}
393+
}
394+
else
378395
{
379396
permissions.Add(action.Action.ToString().ToUpperInvariant());
380397
}

0 commit comments

Comments
 (0)