Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
4fceba6
First look at MCP consumption
Bhavd13 Mar 6, 2026
30b24ff
added builtin mcp client manifest
Bhavd13 Mar 9, 2026
1edac21
Merge branch 'main' into bhavya/mcpconsumption
Bhavd13 Mar 9, 2026
7526ba3
createconnection in v1 designer
Bhavd13 Mar 9, 2026
0f98dd5
Merge branch 'bhavya/mcpconsumption' of https://github.com/Azure/Logi…
Bhavd13 Mar 9, 2026
ecb5ca8
calling list tool api in custom and managed connector
Bhavd13 Mar 11, 2026
1d1a799
Merge branch 'main' into bhavya/mcpconsumption
Bhavd13 Mar 11, 2026
d823324
Resolved comments
Bhavd13 Mar 11, 2026
5e7b758
Merge branch 'bhavya/mcpconsumption' of https://github.com/Azure/Logi…
Bhavd13 Mar 11, 2026
acda446
Undo changes in package file
Bhavd13 Mar 11, 2026
6364a25
Merge branch 'main' into bhavya/mcpconsumption
Bhavd13 Mar 12, 2026
7bfacc1
Builtin MCP tool fix
Bhavd13 Mar 16, 2026
4df7813
Merge branch 'bhavya/mcpconsumption' of https://github.com/Azure/Logi…
Bhavd13 Mar 16, 2026
0f3c574
Merge branch 'main' into bhavya/mcpconsumption
Bhavd13 Mar 16, 2026
df9a6fa
Delete extra files
Bhavd13 Mar 16, 2026
2bb4e26
fix code view native mcp
Bhavd13 Mar 16, 2026
0a238cd
Merge branch 'main' into bhavya/mcpconsumption
Bhavd13 Mar 16, 2026
4ab906f
small fix
Bhavd13 Mar 16, 2026
e1d5dbe
Merge branch 'bhavya/mcpconsumption' of https://github.com/Azure/Logi…
Bhavd13 Mar 16, 2026
da06286
validation error fix
Bhavd13 Mar 16, 2026
d29616d
Add debug logging to trace mcpclient in connections
Bhavd13 Mar 17, 2026
cefe76a
validation error fix
Bhavd13 Mar 17, 2026
f4e093a
Merge branch 'main' into bhavya/mcpconsumption
Bhavd13 Mar 17, 2026
a20e332
Removed connection ref from built in mcp code view
Bhavd13 Mar 17, 2026
32b0c0c
Merge branch 'main' of https://github.com/Azure/LogicAppsUX into bhav…
Bhavd13 Mar 17, 2026
bdafda0
Merge branch 'bhavya/mcpconsumption' of https://github.com/Azure/Logi…
Bhavd13 Mar 17, 2026
33a0ab2
Removed connection reference for built in mcp
Bhavd13 Mar 17, 2026
0599818
workflow code structure mcp builtin tool
Bhavd13 Mar 17, 2026
e5e7442
fixed tools loading error
Bhavd13 Mar 18, 2026
fa85f98
Removed logs and fix connector file
Bhavd13 Mar 18, 2026
a895b55
fix errors for save workflow
Bhavd13 Mar 18, 2026
54aa828
fix serializer files
Bhavd13 Mar 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
/* eslint-disable no-param-reassign */
import { isOpenApiSchemaVersion } from '@microsoft/logic-apps-designer';
import { clone } from '@microsoft/logic-apps-shared';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,7 @@ const DesignerEditorConsumption = () => {
...getSKUDefaultHostOptions(Constants.SKU.CONSUMPTION),
},
showPerformanceDebug,
mcpClientToolEnabled: true,
}}
>
{definition ? (
Expand Down
4 changes: 4 additions & 0 deletions libs/designer-v2/src/lib/core/state/workflow/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,10 @@ export const isManagedMcpOperation = (operation: { type?: string; kind?: string
return equals(operation?.type, Constants.NODE.TYPE.MCP_CLIENT) && equals(operation?.kind, Constants.NODE.KIND.MANAGED);
};

export const isBuiltInMcpOperation = (operation: { type?: string; kind?: string }) => {
return equals(operation?.type, Constants.NODE.TYPE.MCP_CLIENT) && !equals(operation?.kind, Constants.NODE.KIND.MANAGED);
};

export const isA2AWorkflow = (state: WorkflowState): boolean => {
const workflowKind = state.workflowKind;

Expand Down
14 changes: 13 additions & 1 deletion libs/designer-v2/src/lib/core/templates/utils/createhelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ interface WorkflowPayload {
connectionReferences?: ConnectionReferences;
}

const isBuiltInMcpConnectionReference = (connection: any): boolean => {
const apiId = connection?.api?.id?.toLowerCase?.() ?? '';
const connectionId = connection?.connection?.id?.toLowerCase?.() ?? '';
return apiId.includes('connectionproviders/mcpclient') || connectionId.includes('/connectionproviders/mcpclient/');
};

export const getConsumptionWorkflowPayloadForCreate = (
definition: LogicAppsV2.WorkflowDefinition,
parameterDefinitions: Record<string, Template.ParameterDefinition>,
Expand Down Expand Up @@ -149,11 +155,14 @@ const convertDesignerWorkflowToConsumptionWorkflow = (
} else {
// Move connection data to parameters
if (workflow?.connections) {
const filteredConnections = Object.fromEntries(
Object.entries(workflow.connections).filter(([, connection]) => !isBuiltInMcpConnectionReference(connection))
);
workflow.parameters = {
...workflow.parameters,
$connections: {
value: {
...workflow.connections,
...filteredConnections,
},
} as WorkflowParameter,
};
Expand All @@ -179,6 +188,9 @@ const convertDesignerWorkflowToConsumptionWorkflow = (
workflow.parameters.$connections = { type: 'Object', value: {} };
}
Object.entries(workflow.connectionReferences ?? {}).forEach(([key, connection]: [key: string, value: any]) => {
if (isBuiltInMcpConnectionReference(connection)) {
return;
}
workflow.parameters.$connections.value[key] = {
id: connection.api.id,
connectionId: connection.connection.id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
import {
ConnectionParameterEditorService,
ConnectionService,
ConsumptionConnectionService,
Capabilities,
ConnectionParameterTypes,
SERVICE_PRINCIPLE_CONSTANTS,
Expand Down Expand Up @@ -405,12 +406,23 @@ export const CreateConnection = (props: CreateConnectionProps) => {
}, [enabledCapabilities, parametersByCapability]);

// Don't show name for simple connections
const showNameInput = useMemo(
() =>
const showNameInput = useMemo(() => {
const isMcpClientConnection = connectorId?.toLowerCase().includes('mcpclient');

if (isMcpClientConnection) {
const connectionService = ConnectionService();
const isConsumptionSku = connectionService instanceof ConsumptionConnectionService;

if (isConsumptionSku) {
return false;
}
}

return (
!(isUsingOAuth && !isMultiAuth) &&
(isMultiAuth || Object.keys(capabilityEnabledParameters ?? {}).length > 0 || legacyManagedIdentitySelected),
[isUsingOAuth, isMultiAuth, capabilityEnabledParameters, legacyManagedIdentitySelected]
);
(isMultiAuth || Object.keys(capabilityEnabledParameters ?? {}).length > 0 || legacyManagedIdentitySelected)
);
}, [connectorId, isUsingOAuth, isMultiAuth, capabilityEnabledParameters, legacyManagedIdentitySelected]);

const validParams = useMemo(() => {
if (showNameInput && !connectionDisplayName) {
Expand Down
3 changes: 0 additions & 3 deletions libs/designer/src/lib/core/actions/bjsworkflow/serializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -903,7 +903,6 @@ const serializeHost = (
},
};
case ConnectionReferenceKeyFormat.OpenApiConnection: {
// eslint-disable-next-line no-case-declarations
const connectorSegments = connectorId.split('/');
return {
host: {
Expand Down Expand Up @@ -966,10 +965,8 @@ const serializeHost = (
const mergeHostWithInputs = (hostInfo: Record<string, any>, inputs: any): any => {
for (const [key, value] of Object.entries(hostInfo)) {
if (inputs[key]) {
// eslint-disable-next-line no-param-reassign
inputs[key] = { ...inputs[key], ...value };
} else {
// eslint-disable-next-line no-param-reassign
inputs[key] = value;
}
}
Expand Down
4 changes: 4 additions & 0 deletions libs/designer/src/lib/core/state/workflow/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,10 @@ export const isManagedMcpOperation = (operation: { type?: string; kind?: string
return equals(operation?.type, Constants.NODE.TYPE.MCP_CLIENT) && equals(operation?.kind, Constants.NODE.KIND.MANAGED);
};

export const isBuiltInMcpOperation = (operation: { type?: string; kind?: string }) => {
return equals(operation?.type, Constants.NODE.TYPE.MCP_CLIENT) && !equals(operation?.kind, Constants.NODE.KIND.MANAGED);
};

export const isA2AWorkflow = (state: WorkflowState): boolean => {
const workflowKind = state.workflowKind;

Expand Down
14 changes: 13 additions & 1 deletion libs/designer/src/lib/core/templates/utils/createhelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ interface WorkflowPayload {
connectionReferences?: ConnectionReferences;
}

const isBuiltInMcpConnectionReference = (connection: any): boolean => {
const apiId = connection?.api?.id?.toLowerCase?.() ?? '';
const connectionId = connection?.connection?.id?.toLowerCase?.() ?? '';
return apiId.includes('connectionproviders/mcpclient') || connectionId.includes('/connectionproviders/mcpclient/');
};

export const getConsumptionWorkflowPayloadForCreate = (
definition: LogicAppsV2.WorkflowDefinition,
parameterDefinitions: Record<string, Template.ParameterDefinition>,
Expand Down Expand Up @@ -149,11 +155,14 @@ const convertDesignerWorkflowToConsumptionWorkflow = (
} else {
// Move connection data to parameters
if (workflow?.connections) {
const filteredConnections = Object.fromEntries(
Object.entries(workflow.connections).filter(([, connection]) => !isBuiltInMcpConnectionReference(connection))
);
workflow.parameters = {
...workflow.parameters,
$connections: {
value: {
...workflow.connections,
...filteredConnections,
},
} as WorkflowParameter,
};
Expand All @@ -179,6 +188,9 @@ const convertDesignerWorkflowToConsumptionWorkflow = (
workflow.parameters.$connections = { type: 'Object', value: {} };
}
Object.entries(workflow.connectionReferences ?? {}).forEach(([key, connection]: [key: string, value: any]) => {
if (isBuiltInMcpConnectionReference(connection)) {
return;
}
// For dynamic connections, pull runtimeSource out to root level
const runtimeSource = connection?.connectionProperties?.runtimeSource;
const remainingConnectionProperties = connection?.connectionProperties
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
import {
ConnectionParameterEditorService,
ConnectionService,
ConsumptionConnectionService,
Capabilities,
ConnectionParameterTypes,
SERVICE_PRINCIPLE_CONSTANTS,
Expand Down Expand Up @@ -407,12 +408,23 @@ export const CreateConnection = (props: CreateConnectionProps) => {
}, [enabledCapabilities, parametersByCapability]);

// Don't show name for simple connections
const showNameInput = useMemo(
() =>
const showNameInput = useMemo(() => {
const isMcpClientConnection = connectorId?.toLowerCase().includes('mcpclient');

if (isMcpClientConnection) {
const connectionService = ConnectionService();
const isConsumptionSku = connectionService instanceof ConsumptionConnectionService;

if (isConsumptionSku) {
return false;
}
}

return (
!(isUsingOAuth && !isMultiAuth) &&
(isMultiAuth || Object.keys(capabilityEnabledParameters ?? {}).length > 0 || legacyManagedIdentitySelected),
[isUsingOAuth, isMultiAuth, capabilityEnabledParameters, legacyManagedIdentitySelected]
);
(isMultiAuth || Object.keys(capabilityEnabledParameters ?? {}).length > 0 || legacyManagedIdentitySelected)
);
}, [connectorId, isUsingOAuth, isMultiAuth, capabilityEnabledParameters, legacyManagedIdentitySelected]);

const validParams = useMemo(() => {
if (showNameInput && !connectionDisplayName) {
Expand Down
Loading
Loading