diff --git a/copilot/declarative-agent/v1.6/schema.json b/copilot/declarative-agent/v1.6/schema.json
index 1a50253c..a3bd5293 100644
--- a/copilot/declarative-agent/v1.6/schema.json
+++ b/copilot/declarative-agent/v1.6/schema.json
@@ -80,6 +80,30 @@
}
]
}
+ },
+ "worker_agents": {
+ "type": "array",
+ "description": "Optional. A list of objects that identify declarative agents to act as worker agents.",
+ "minItems": 1,
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/worker-agent-object"
+ }
+ ]
+ }
+ },
+ "user_overrides": {
+ "type": "array",
+ "description": "Optional. A list of objects that allow the DA author to specify capabilities that can be modified by users and the allowed actions.",
+ "minItems": 1,
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/$defs/user-override-object"
+ }
+ ]
+ }
}
},
"required": [
@@ -100,6 +124,8 @@
"behavior_overrides",
"conversation_starters",
"actions",
+ "worker_agents",
+ "user_overrides",
"$schema"
]
},
@@ -226,17 +252,12 @@
},
"embedded-knowledge": {
"type": "object",
- "description": "A JSON object whose presence indicates that the DA will be able to use files locally in the app package as knowledge. The object MUST contain either a files member or a embedded_resource_snapshot_id member, but not both.",
+ "description": "A JSON object whose presence indicates that the DA will be able to use files locally in the app package as knowledge.",
"properties": {
"name": {
"const": "EmbeddedKnowledge",
"description": "Required. Must be set to EmbeddedKnowledge."
},
- "embedded_resource_snapshot_id": {
- "type": "string",
- "description": "A JSON string identifier provisioned by a an external file container storage service that can be used to locate the embedded knowledge files.",
- "pattern": "^(?!\\[\\[)(.*?)(?Released in: November 2025
+Notes:
+- Image visual improvements
+- Azure maps custom markers
+
### 2.3.0
Released in: October 2025
diff --git a/fabric/item/report/definitionProperties/2.0.0/schema.json b/fabric/item/report/definitionProperties/2.0.0/schema.json
new file mode 100644
index 00000000..53734071
--- /dev/null
+++ b/fabric/item/report/definitionProperties/2.0.0/schema.json
@@ -0,0 +1,81 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "https://developer.microsoft.com/json-schemas/fabric/item/report/definitionProperties/2.0.0/schema.json",
+ "title": "ReportDefinition",
+ "description": "The ReportDefinition is stored as definition.pbir. It contains metadata about the overall file structure, holds core settings, and holds a reference to the semantic model used by this report. This file is required.",
+ "definitions": {
+ "DatasetReference": {
+ "title": "DatasetReference",
+ "description": "The DatasetReference defines the semantic model that is bound to this report. It is required to have exactly one of either the byPath or byConnection properties. The byConnection property would typically be used for LiveConnect scenarios whereas byPath would point at a local semantic model.",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "byPath": {
+ "$ref": "#/definitions/ReportDatasetReferenceByPath"
+ },
+ "byConnection": {
+ "$ref": "#/definitions/ReportDatasetReferenceByConnection"
+ }
+ }
+ },
+ "ReportDatasetReferenceByConnection": {
+ "title": "ByConnection",
+ "description": "Provides a reference to a remote semantic model using a connection string. The connection string must point to a semantic model hosted in the Microsoft Fabric service. Connections to other Analysis Services semantic models must use a byPath reference to a semantic model definition containing a modelReference.json file.",
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "connectionString": {
+ "title": "ConnectionString",
+ "description": "The connection string referring to the remote semantic model.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "connectionString"
+ ]
+ },
+ "ReportDatasetReferenceByPath": {
+ "title": "ByPath",
+ "description": "Provides a reference to a local dataset artifact definition.",
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "path": {
+ "title": "Path",
+ "description": "A relative path from this file to the target semantic model artifact folder. Uses ‘/’ as a directory separator.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "path"
+ ]
+ }
+ },
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "$schema": {
+ "type": "string",
+ "pattern": "^https://developer.microsoft.com/json-schemas/fabric/item/report/definitionProperties/2.[0-9]+.[0-9]+/schema.json$"
+ },
+ "version": {
+ "title": "Version",
+ "description": "Version of the report artifact file format. This also serves as the version number for the .pbir file format.",
+ "type": "string"
+ },
+ "datasetReference": {
+ "$ref": "#/definitions/DatasetReference"
+ }
+ },
+ "required": [
+ "$schema",
+ "version",
+ "datasetReference"
+ ]
+}
\ No newline at end of file
diff --git a/fabric/item/semanticModel/copilot/examplePrompts/1.0.0/schema.json b/fabric/item/semanticModel/copilot/examplePrompts/1.0.0/schema.json
new file mode 100644
index 00000000..db1981be
--- /dev/null
+++ b/fabric/item/semanticModel/copilot/examplePrompts/1.0.0/schema.json
@@ -0,0 +1,28 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "https://developer.microsoft.com/json-schemas/fabric/item/semanticModel/copilot/examplePrompts/1.0.0/schema.json",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "$schema": {
+ "type": "string"
+ },
+ "prompts": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 500
+ },
+ "maxItems": 10000
+ }
+ },
+ "required": [
+ "$schema"
+ ]
+}
\ No newline at end of file
diff --git a/fabric/item/semanticModel/copilot/schema/1.0.0/schema.json b/fabric/item/semanticModel/copilot/schema/1.0.0/schema.json
new file mode 100644
index 00000000..119ed346
--- /dev/null
+++ b/fabric/item/semanticModel/copilot/schema/1.0.0/schema.json
@@ -0,0 +1,299 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "https://developer.microsoft.com/json-schemas/fabric/item/semanticModel/copilot/schema/1.0.0/schema.json",
+ "definitions": {
+ "CopilotSchemaColumn": {
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 512
+ },
+ "name": {
+ "type": "string",
+ "maxLength": 512
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "Auto",
+ "Visible",
+ "Hidden"
+ ]
+ },
+ "index": {
+ "type": "string",
+ "enum": [
+ "Default",
+ "All",
+ "None"
+ ]
+ },
+ "synonyms": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 1024
+ },
+ "maxItems": 1024
+ }
+ },
+ "required": [
+ "name"
+ ]
+ },
+ "CopilotSchemaHierarchy": {
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 512
+ },
+ "name": {
+ "type": "string",
+ "maxLength": 512
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "Auto",
+ "Visible",
+ "Hidden"
+ ]
+ },
+ "levels": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "$ref": "#/definitions/CopilotSchemaLevel"
+ },
+ "maxItems": 15999
+ },
+ "synonyms": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 1024
+ },
+ "maxItems": 1024
+ }
+ },
+ "required": [
+ "name"
+ ]
+ },
+ "CopilotSchemaLevel": {
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 512
+ },
+ "name": {
+ "type": "string",
+ "maxLength": 512
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "Auto",
+ "Visible",
+ "Hidden"
+ ]
+ },
+ "synonyms": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 1024
+ },
+ "maxItems": 1024
+ }
+ },
+ "required": [
+ "name"
+ ]
+ },
+ "CopilotSchemaMeasure": {
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 512
+ },
+ "name": {
+ "type": "string",
+ "maxLength": 512
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "Auto",
+ "Visible",
+ "Hidden"
+ ]
+ },
+ "synonyms": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 1024
+ },
+ "maxItems": 1024
+ }
+ },
+ "required": [
+ "name"
+ ]
+ },
+ "CopilotSchemaTable": {
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 512
+ },
+ "name": {
+ "type": "string",
+ "maxLength": 512
+ },
+ "visibility": {
+ "type": "string",
+ "enum": [
+ "Auto",
+ "Visible",
+ "Hidden"
+ ]
+ },
+ "columns": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "$ref": "#/definitions/CopilotSchemaColumn"
+ },
+ "maxItems": 15999
+ },
+ "measures": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "$ref": "#/definitions/CopilotSchemaMeasure"
+ },
+ "maxItems": 15999
+ },
+ "hierarchies": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "$ref": "#/definitions/CopilotSchemaHierarchy"
+ },
+ "maxItems": 15999
+ },
+ "synonyms": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 1024
+ },
+ "maxItems": 1024
+ }
+ },
+ "required": [
+ "name"
+ ]
+ }
+ },
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "$schema": {
+ "type": "string"
+ },
+ "tables": {
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "$ref": "#/definitions/CopilotSchemaTable"
+ },
+ "maxItems": 16000
+ }
+ },
+ "required": [
+ "$schema"
+ ]
+}
\ No newline at end of file
diff --git a/fabric/item/semanticModel/copilot/settings/1.0.0/schema.json b/fabric/item/semanticModel/copilot/settings/1.0.0/schema.json
new file mode 100644
index 00000000..189b782d
--- /dev/null
+++ b/fabric/item/semanticModel/copilot/settings/1.0.0/schema.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "https://developer.microsoft.com/json-schemas/fabric/item/semanticModel/copilot/settings/1.0.0/schema.json",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "$schema": {
+ "type": "string"
+ },
+ "indexingEnabled": {
+ "type": [
+ "boolean",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "$schema"
+ ]
+}
\ No newline at end of file
diff --git a/fabric/item/version/1.0.0/schema.json b/fabric/item/version/1.0.0/schema.json
new file mode 100644
index 00000000..9aab8dd1
--- /dev/null
+++ b/fabric/item/version/1.0.0/schema.json
@@ -0,0 +1,18 @@
+{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "$id": "https://developer.microsoft.com/json-schemas/fabric/item/version/1.0.0/schema.json",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "$schema": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "$schema",
+ "version"
+ ]
+}
\ No newline at end of file
diff --git a/teams/vDevPreview/MicrosoftTeams.AgenticUser.schema.json b/teams/vDevPreview/MicrosoftTeams.AgenticUser.schema.json
new file mode 100644
index 00000000..157ad0a6
--- /dev/null
+++ b/teams/vDevPreview/MicrosoftTeams.AgenticUser.schema.json
@@ -0,0 +1,44 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "type": "object",
+ "title": "Microsoft 365 Agentic User Template Schema",
+ "description": "Schema for Microsoft 365 Agentic User Template configuration - Development Preview version 0.1.0",
+ "required": [
+ "id",
+ "schemaVersion",
+ "agentIdentityBlueprintId"
+ ],
+ "properties": {
+ "$schema": {
+ "type": "string",
+ "description": "The JSON schema reference for this manifest"
+ },
+ "id": {
+ "type": "string",
+ "description": "Unique identifier for the agentic user template. Must contain only alphanumeric characters, dots, underscores, and hyphens.",
+ "pattern": "^[a-zA-Z0-9._-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "schemaVersion": {
+ "type": "string",
+ "const": "0.1.0-preview",
+ "description": "Version of the agentic user template schema."
+ },
+ "agentIdentityBlueprintId": {
+ "type": "string",
+ "description": "Agent Identity Blueprint ID registered in Azure AD portal. Must be a valid GUID.",
+ "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
+ "format": "uuid"
+ },
+ "communicationProtocol": {
+ "type": "string",
+ "description": "Protocol used for communicating with the agentic user.",
+ "enum": [
+ "activityProtocol"
+ ],
+ "default": "activityProtocol"
+ }
+ },
+ "additionalProperties": false
+}
diff --git a/teams/vDevPreview/MicrosoftTeams.Localization.schema.json b/teams/vDevPreview/MicrosoftTeams.Localization.schema.json
index 2523016a..c5a8f525 100644
--- a/teams/vDevPreview/MicrosoftTeams.Localization.schema.json
+++ b/teams/vDevPreview/MicrosoftTeams.Localization.schema.json
@@ -201,6 +201,14 @@
"type": "string",
"maxLength": 32
},
+ "^extensions\\[[0-9]\\]\\.runtimes\\[[1]?[0-9]\\]\\.customFunctions\\.enums\\[[0-9]\\]\\.values\\[[0-9]\\]\\.name$": {
+ "type": "string",
+ "maxLength": 256
+ },
+ "^extensions\\[[0-9]\\]\\.runtimes\\[[1]?[0-9]\\]\\.customFunctions\\.enums\\[[0-9]\\]\\.values\\[[0-9]\\]\\.tooltip$": {
+ "type": "string",
+ "maxLength": 256
+ },
"^extensions\\[[0]\\]\\.keyboardShortcuts\\[[0-9]\\]\\.shortcuts\\[[0-9]\\]\\.key\\.default$": {
"type": "string",
"maxLength": 32
diff --git a/teams/vDevPreview/MicrosoftTeams.schema.json b/teams/vDevPreview/MicrosoftTeams.schema.json
index fa14ee6d..1c46a156 100644
--- a/teams/vDevPreview/MicrosoftTeams.schema.json
+++ b/teams/vDevPreview/MicrosoftTeams.schema.json
@@ -84,15 +84,15 @@
"maxLength": 10
},
"websiteUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "The url to the page that provides support information for the app."
},
"privacyUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "The url to the page that provides privacy information for the app."
},
"termsOfUseUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "The url to the page that provides the terms of use for the app."
},
"contactInfo": {
@@ -253,7 +253,7 @@
"maxLength": 64
},
"configurationUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "The url to use when configuring the tab."
},
"canUpdateConfiguration": {
@@ -355,7 +355,7 @@
"maxLength": 128
},
"contentUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "The url which points to the entity UI to be displayed in the Teams canvas."
},
"contentBotId": {
@@ -363,11 +363,11 @@
"description": "The Microsoft App ID specified for the bot in the Bot Framework portal (https://dev.botframework.com/bots)"
},
"websiteUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "The url to point at if a user opts to view in a browser."
},
"searchUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "The url to direct a user's search queries."
},
"scopes": {
@@ -500,6 +500,11 @@
"description": "A value indicating whether the bot supports video calling.",
"default": false
},
+ "supportsSessions": {
+ "type": "boolean",
+ "description": "A property set by developers to opt-in to sessions.",
+ "default": false
+ },
"scopes": {
"type": "array",
"description": "Specifies whether the bot offers an experience in the context of a channel in a team, in a group chat (groupChat), an experience scoped to an individual user alone (personal) OR within Copilot surfaces. These options are non-exclusive.",
@@ -618,7 +623,7 @@
"maxLength": 64
},
"configurationUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "The url to use for configuring the connector using the inline configuration experience."
},
"scopes": {
@@ -1105,7 +1110,7 @@
"description": "Specify the app's Graph connector configuration. If this is present then webApplicationInfo.id must also be specified.",
"properties": {
"notificationUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "The url where Graph-connector notifications for the application should be sent."
}
},
@@ -1235,7 +1240,7 @@
"default": false
},
"publisherDocsUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "The url to the page that provides additional app information for the admins"
},
"defaultInstallScope": {
@@ -1497,6 +1502,20 @@
"required": [
"text"
]
+ },
+ "functionsAs": {
+ "type": "string",
+ "enum": [
+ "agentOnly",
+ "agenticUserOnly",
+ "agentOrAgenticUser"
+ ],
+ "default": "agentOnly",
+ "description": "Possible values: 'agenticUserOnly', 'agentOnly', or 'agentOrAgenticUser'. 'agenticUserOnly' means the customEngineAgent must be hired and cannot be installed as a regular agent. 'agentOrAgenticUser' means the customEngineAgent supports both being installed as a regular agent and being hired. 'agentOnly' means it supports being installed as a regular agent only (default)."
+ },
+ "agenticUserTemplateId": {
+ "type": "string",
+ "description": "Unique identifier for the agentic user template. This id must match the id specified in an agentic user template in the agenticUserTemplates node"
}
},
"required": [
@@ -1523,6 +1542,15 @@
}
]
},
+ "agenticUserTemplates": {
+ "type": "array",
+ "description": "An array of agentic user templates references.",
+ "items": {
+ "$ref": "#/definitions/agenticUserTemplateRef"
+ },
+ "minimum": 1,
+ "maxItems": 1
+ },
"elementRelationshipSet": {
"type": "object",
"properties": {
@@ -1566,7 +1594,7 @@
"description": "Optional property within backgroundLoadConfiguration containing tab settings for background loading. Setting tabConfiguration indicates that the app supports background loading of tabs.",
"properties": {
"contentUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "Required URL for background loading. This can be the same contentUrl from the staticTabs section or an alternative endpoint used for background loading."
}
},
@@ -1575,6 +1603,175 @@
}
},
"additionalProperties": false
+ },
+ "agentConnectors": {
+ "type": "array",
+ "description": "A list of agent connector objects to included in the Unified App Manifest.",
+ "maxItems": 10,
+ "items": {
+ "type": "object",
+ "description": "An agent connector represents a mechanism to enable agents to access information from systems outside of Microsoft 365, often via an MCP Server. Other mechanisms include using OpenAPI descriptions for calling external HTTP APIs. The role of the agent connector is to provide the necessary configuration information to agents or other M365 applications to connect to these external systems. An agent connector can be provided for use by other elements described within the same Unified App Manifest, or as a standalone resource that can be referenced in the Unified App Manifest of other M365 applications.",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "Unique identifier for the agent connector",
+ "maxLength": 64
+ },
+ "reusable": {
+ "type": "boolean",
+ "description": "Indicates whether this connector can be reused by other applications.",
+ "default": false
+ },
+ "displayName": {
+ "type": "string",
+ "description": "A user-friendly name for the connector, which can be displayed in UIs.",
+ "maxLength": 128
+ },
+ "description": {
+ "type": "string",
+ "description": "A brief description of the connector's purpose and functionality.",
+ "maxLength": 4000
+ },
+ "toolSource": {
+ "type": "object",
+ "description": "Configuration details for connectors that provide tools for agents, either via a plugin, a remote MCP server or a local MCP server. One and only one of the above properties MUST be defined within a tool source object.",
+ "properties": {
+ "plugin": {
+ "type": "object",
+ "description": "Configuration details for connectors that leverage a Plugin Manifest. Either both id and file properties must be provided (for external plugin reference), or only the description property must be provided (for inline plugin manifest).",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "The unique identifier of the plugin that provides the tools.",
+ "maxLength": 64
+ },
+ "file": {
+ "$ref": "#/definitions/relativePath",
+ "description": "The relative path to the plugin manifest file within the app package."
+ },
+ "description": {
+ "type": "object",
+ "description": "An inlined Plugin Manifest object for simple plugins that do not require a separate file. It should conform to the Plugin Manifest schema https://spec-hub.azurewebsites.net/specifications/PluginManifest-2.3.html ."
+ }
+ },
+ "additionalProperties": false
+ },
+ "remoteMcpServer": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "mcpServerUrl": {
+ "$ref": "#/definitions/secureHttpUrl",
+ "description": "The URL of the remote MCP Server."
+ },
+ "mcpToolDescription": {
+ "type": "object",
+ "description": "Configuration for MCP tool descriptions, either by file reference or inline content (but not both). When this property is present it indicates that dynamic discovery will not be used.",
+ "properties": {
+ "file": {
+ "$ref": "#/definitions/relativePath",
+ "description": "The relative path to the MCP tool description file within the app package."
+ },
+ "description": {
+ "type": "object",
+ "description": "An inline JSON object containing the tool descriptions directly. The contents match the results of calling the 'tools/list' method on the MCP Server."
+ }
+ },
+ "additionalProperties": false
+ },
+ "authorization": {
+ "type": "object",
+ "description": "Authorization configuration for connecting to the local MCP server. The design mirrors that of Plugin Manifests https://spec-hub.azurewebsites.net/specifications/PluginManifest-2.3.html",
+ "additionalProperties": false,
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [ "None", "OAuthPluginVault", "ApiKeyPluginVault", "DynamicClientRegistration" ],
+ "description": "The type of authorization required to invoke the MCP server. Supported values are: 'None' (anonymous access), 'OAuthPluginVault' (OAuth flow with referenceId), 'ApiKeyPluginVault' (API Key with referenceId), 'DynamicClientRegistration' (dynamic client registration with referenceId)."
+ },
+ "referenceId": {
+ "type": "string",
+ "maxLength": 128,
+ "description": "A reference identifier used when type is OAuthPluginVault, ApiKeyPluginVault, or DynamicClientRegistration. The referenceId value is acquired independently when providing the necessary authorization configuration values. This mechanism exists to prevent the need for storing secret values in the plugin manifest."
+ }
+ },
+ "required": [ "type" ],
+ "if": {
+ "properties": {
+ "type": {
+ "enum": [ "OAuthPluginVault", "ApiKeyPluginVault", "DynamicClientRegistration" ]
+ }
+ }
+ },
+ "then": {
+ "required": [ "referenceId" ]
+ }
+ }
+ },
+ "required": [ "mcpServerUrl" ]
+ },
+ "localMcpServer": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "mcpServerIdentifier": {
+ "type": "string",
+ "maxLength": 128,
+ "description": "The unique identifier of the local MCP Server deployed via some secure mechanism to the user's desktop."
+ },
+ "mcpToolDescription": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "Configuration for MCP tool descriptions, either by file reference or inline content (but not both). When this property is present it indicates that dynamic discovery will not be used.",
+ "properties": {
+ "file": {
+ "$ref": "#/definitions/relativePath",
+ "description": "The relative path to the MCP tool description file within the app package."
+ },
+ "description": {
+ "type": "object",
+ "description": "An inline JSON object containing the tool descriptions directly. The contents match the results of calling the 'tools/list' method on the MCP Server."
+ }
+ }
+ },
+ "authorization": {
+ "type": "object",
+ "description": "Authorization configuration for connecting to the local MCP server. The design mirrors that of Plugin Manifests https://spec-hub.azurewebsites.net/specifications/PluginManifest-2.3.html",
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [ "None", "OAuthPluginVault", "ApiKeyPluginVault", "DynamicClientRegistration" ],
+ "description": "The type of authorization required to invoke the MCP server. Supported values are: 'None' (anonymous access), 'OAuthPluginVault' (OAuth flow with referenceId), 'ApiKeyPluginVault' (API Key with referenceId), 'DynamicClientRegistration' (dynamic client registration with referenceId)."
+ },
+ "referenceId": {
+ "type": "string",
+ "maxLength": 128,
+ "description": " (maxLength: 128)\tA reference identifier used when type is OAuthPluginVault, ApiKeyPluginVault, or DynamicClientRegistration. The referenceId value is acquired independently when providing the necessary authorization configuration values. This mechanism exists to prevent the need for storing secret values in the plugin manifest."
+ }
+ },
+ "additionalProperties": false,
+ "required": [ "type" ],
+ "if": {
+ "properties": {
+ "type": {
+ "enum": [ "OAuthPluginVault", "ApiKeyPluginVault", "DynamicClientRegistration" ]
+ }
+ }
+ },
+ "then": {
+ "required": [ "referenceId" ]
+ }
+ }
+ },
+ "required": [ "mcpServerIdentifier" ]
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": [ "id", "displayName" ],
+ "additionalProperties": false
+ }
}
},
"required": [
@@ -1592,11 +1789,16 @@
"type": "string",
"maxLength": 2048
},
- "httpsUrl": {
+ "anyHttpUrl": {
"type": "string",
"maxLength": 2048,
"pattern": "^[Hh][Tt][Tt][Pp][Ss]?://"
},
+ "secureHttpUrl": {
+ "type": "string",
+ "maxLength": 2048,
+ "pattern": "^[Hh][Tt][Tt][Pp][Ss]://"
+ },
"semver": {
"type": "string",
"maxLength": 256,
@@ -1632,7 +1834,7 @@
"description": "Dialog height - either a number in pixels or default layout such as 'large', 'medium', or 'small'."
},
"url": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "Initial webview URL."
}
}
@@ -1667,7 +1869,7 @@
"$ref": "#/definitions/extensionAlternateVersionsArray"
},
"audienceClaimUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "The url for your extension, used to validate Exchange user identity tokens."
},
"appDeeplinks": {
@@ -1927,12 +2129,72 @@
"default": false
},
"metadataUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/secureHttpUrl",
"description": "The full URL of a metadata json file with default locale."
+ },
+ "enums": {
+ "type": "array",
+ "description": "Array of custom defined enum objects.",
+ "items": {
+ "$ref": "#/definitions/enum"
+ },
+ "maxItems": 20000
}
},
"additionalProperties": false
},
+ "enum": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "A unique ID for the enum.",
+ "maxLength": 64,
+ "minLength": 3,
+ "pattern": "^[A-Za-z][A-Za-z0-9._]*$"
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of the values in this enum.",
+ "enum": [ "number", "string" ]
+ },
+ "values": {
+ "type": "array",
+ "description": "Array that defines the constants for the enum.",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "A brief description of the constant.",
+ "maxLength": 256
+ },
+ "numberValue": {
+ "type": ["number", "null"],
+ "description": "When enum type is number, the actual number value of the constant."
+ },
+ "stringValue": {
+ "type": "string",
+ "description": "When enum type is string, the actual string value of the constant."
+ },
+ "tooltip": {
+ "type": "string",
+ "description": "Additional information about the constant, intended to provide more context or details.",
+ "maxLength": 256
+ }
+ },
+ "additionalProperties": false,
+ "required": [ "name" ]
+ }
+ }
+ },
+ "required": [
+ "id",
+ "type",
+ "values"
+ ],
+ "additionalProperties": false
+ },
"extensionCustomFunctionsNamespace": {
"type": "object",
"description": "Defines the namespace for your custom functions. A namespace prepends itself to your custom functions to help customers identify your functions as part of your add-in.",
@@ -1981,11 +2243,8 @@
"maxLength": 128
},
"helpUrl": {
- "type": "string",
- "format": "uri",
"description": "URL that provides information about the function. (It is displayed in a task pane.)",
- "minLength": 1,
- "maxLength": 2048
+ "$ref": "#/definitions/secureHttpUrl"
},
"parameters": {
"type": "array",
@@ -2023,6 +2282,31 @@
"type": "boolean",
"description": "If true, your custom function can access the addresses of the function's input parameters. This property must be used in combination with the dimensionality property of the result object, and dimensionality must be set to matrix.",
"default": false
+ },
+ "requiresStreamAddress": {
+ "type": "boolean",
+ "default": false,
+ "description": "If `true`, the function can access the address of the cell calling the streaming function. The `address` property of the invocation parameter contains the address of the cell that invoked your streaming function. "
+ },
+ "requiresStreamParameterAddresses": {
+ "type": "boolean",
+ "description": "If `true`, the function can access the parameter addresses of the cell calling the streaming function. The `parameterAddresses` property of the invocation parameter contains the parameter addresses for your streaming function.",
+ "default": false
+ },
+ "capturesCallingObject": {
+ "type": "boolean",
+ "description": "If `true`, the data type being referenced by the custom function is passed as the first argument to the custom function.",
+ "default": false
+ },
+ "excludeFromAutoComplete": {
+ "type": "boolean",
+ "description": "If `true`, the custom function will not appear in the formula AutoComplete menu in Excel.",
+ "default": false
+ },
+ "linkedEntityLoadService": {
+ "type": "boolean",
+ "description": "If `true`, it designates that the function is a linked entity load service that returns linked entity cell values for linked entity IDs requested by Excel.",
+ "default": false
}
},
"required": [
@@ -2062,14 +2346,13 @@
"doublecellvalue",
"entitycellvalue",
"errorcellvalue",
- "formattednumbercellvalue",
"linkedentitycellvalue",
"localimagecellvalue",
"stringcellvalue",
"webimagecellvalue",
null
],
- "description": "A subfield of the type property. Specifies the Excel data types accepted by the custom function. Accepts the values cellvalue, booleancellvalue, doublecellvalue, entitycellvalue, errorcellvalue, formattednumbercellvalue, linkedentitycellvalue, localimagecellvalue, stringcellvalue, webimagecellvalue"
+ "description": "A subfield of the type property. Specifies the Excel data types accepted by the custom function. Accepts the values cellvalue, booleancellvalue, doublecellvalue, entitycellvalue, errorcellvalue, linkedentitycellvalue, localimagecellvalue, stringcellvalue, webimagecellvalue"
},
"dimensionality": {
"type": "string",
@@ -2089,6 +2372,11 @@
"type": "boolean",
"default": false,
"description": "If true, parameters populate from a specified array. Note that functions all repeating parameters are considered optional parameters by definition."
+ },
+ "customEnumId": {
+ "type": "string",
+ "description": "|The `id` of the enum in the `enums` array. This associates the custom enum with the function and enables Excel to display the enum members in the formula AutoComplete menu.",
+ "maxLength": 64
}
},
"required": [ "name" ]
@@ -2155,11 +2443,11 @@
"additionalProperties": false,
"properties": {
"shortcutsUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/secureHttpUrl",
"description": "The full URL of the JSON file that will contain the keyboard combination configuration on Office application and platform combinations that don't directly support the unified manifest."
},
"localizationResourceUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/secureHttpUrl",
"description": "The full URL of a file that provides supplemental resource, such as localized strings, for the file specified in the shortcutsUrl attribute."
}
},
@@ -2606,7 +2894,7 @@
]
},
"url": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "Url to the icon."
},
"scale": {
@@ -2664,7 +2952,7 @@
]
},
"url": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "Absolute Url to the icon."
}
},
@@ -3046,7 +3334,7 @@
"maxLength": 250
},
"learnMoreUrl": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "A URL to a page that explains the add-in in detail."
}
},
@@ -3062,11 +3350,11 @@
"type": "object",
"properties": {
"page": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "URL of the .html page to be loaded in browser-based runtimes."
},
"script": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "URL of the .js script file to be loaded in UI-less runtimes."
}
},
@@ -3313,7 +3601,7 @@
"description": "Icon size in pixels."
},
"url": {
- "$ref": "#/definitions/httpsUrl",
+ "$ref": "#/definitions/anyHttpUrl",
"description": "URL for the icon."
}
},
@@ -3591,6 +3879,27 @@
],
"additionalProperties": false
},
+ "agenticUserTemplateRef": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "Unique identifier for the agentic user template. Must contain only alphanumeric characters, dots, underscores, and hyphens.",
+ "pattern": "^[a-zA-Z0-9._-]+$",
+ "minLength": 1,
+ "maxLength": 64
+ },
+ "file": {
+ "$ref": "#/definitions/relativePath",
+ "description": "Relative file path to this agentic user template element file in the application package."
+ }
+ },
+ "required": [
+ "id",
+ "file"
+ ],
+ "additionalProperties": false
+ },
"elementReference": {
"type": "object",
"properties": {