Skip to main content
Version: Latest

AI Tools

The shared tool system is documented primarily in CrestApps.Core:

This page is the Orchard-specific catalog for the AI functions registered or documented in this repository. Shared framework utilities that are not registered by Orchard features in this repo, along with external MCP and A2A tools, continue to be documented in the shared Core docs.

Within Orchard Core, tools become useful through the modules that register or expose them:

Orchard-specific AI function catalog

Use this catalog to see which Orchard feature makes each AI function available and what it does. When the codebase adds, removes, renames, or re-describes an AI function, update this page together with the related feature docs so the catalog stays synchronized with the current registrations.

Tools marked as hidden in the shared Core registry are not shown in Orchard Core capability pickers such as AI Profile, AI Profile Template, Chat Interaction, workflow-task, or post-session tool selectors. Hidden tools are reserved for internal orchestration paths such as system agents that reference them explicitly by name.

This catalog only lists functions registered in code. Functions created by administrators from a tool instance source are not listed here because they are tenant data rather than code registrations. See AI Tool Instances for that surface.

System tools

Available when: CrestApps.OrchardCore.AI.Agent

FunctionDescription
listTimeZonesRetrieves a list of the available time zones in the system.
listAIProfilesLists AI profiles with optional filters for type, analytics, data extraction, and post-session processing.
viewAIProfileRetrieves detailed configuration for a specific AI profile by ID or name.

Recipe tools

Available when: CrestApps.OrchardCore.AI.Agent + OrchardCore.Recipes.Core

FunctionDescription
applySiteSettingsApplies predefined system configurations and settings using AI assistance.
getOrchardCoreRecipeJsonSchemaReturns the Orchard Core recipe root JSON Schema with a steps array. It can limit the schema to one step definition while still exposing every valid recipe step name. Call it first before building recipe JSON.
listOrchardCoreRecipeStepsAndSchemasLists all available Orchard Core recipe steps and returns their JSON schema definitions.
importOrchardCoreRecipeImports and runs Orchard Core recipes within your site. Call getOrchardCoreRecipeJsonSchema first and match that schema.
listNonStartupRecipesRetrieves all available Orchard Core recipes that are not executed during startup.
executeNonStartupRecipeExecutes Orchard Core recipes that are not configured to run at application startup.

Tenant tools

Available when: CrestApps.OrchardCore.AI.Agent + OrchardCore.Tenants

FunctionDescription
listStartupRecipesRetrieves a list of Orchard Core recipes configured to run at application startup.
createTenantCreates a new tenant in the Orchard Core application.
getTenantRetrieves detailed information about a specific tenant.
listTenantReturns information about all tenants in the system.
enableTenantEnables a tenant that is currently disabled.
disableTenantDisables a tenant that is currently active.
removeTenantRemoves an existing tenant that can be safely deleted.
reloadTenantReloads the configuration and state of an existing tenant.
setupTenantSets up new tenants.

Content tools

Available when: CrestApps.OrchardCore.AI.Agent + OrchardCore.Contents

FunctionDescription
searchForContentItemsSearches for content items.
getSampleContentItemForContentTypeGenerates a structured sample content item for a specified content type.
getContentItemSchemaReturns the current content-item JSON schema for one or more Orchard Core content types. Call it immediately before createOrUpdateContentItem whenever that tool is available.
publishContentItemPublishes a draft or previously unpublished content item.
unpublishContentItemUnpublishes a currently published content item.
getContentItemByIdRetrieves a specific content item by its ID or type.
deleteContentItemDeletes a content item from the system.
cloneContentItemCreates a duplicate of an existing content item.
createOrUpdateContentItemCreates a new content item or updates an existing one. Before calling it, call getContentItemSchema first whenever available, then call it once for the top-level item and include nested or contained items in the same payload.
getLinkForContentItemRetrieves a link for a content item.

getOrchardCoreRecipeJsonSchema should be called immediately before importOrchardCoreRecipe whenever recipe-backed JSON needs to be generated. Its response always describes the root recipe object with a steps array; when you request a specific step, the schema still lists every valid step name in steps[].name but only expands the selected step's payload contract. If you ask for an unknown step, the tool returns an error that includes the available step names so the request can be retried with a valid identifier.

When createOrUpdateContentItem is available alongside recipe-backed content schema support, call getContentItemSchema immediately before it and request the parent content type plus any nested content types that will appear in the payload so the model can inspect the current content-item contract.

createOrUpdateContentItem must be called for the parent content item only. When the payload contains nested or contained content items such as BagPart, FlowPart, widgets, or blocks, include those child items inside the parent JSON instead of invoking the tool once per child item. During creation, the tool now initializes each nested content item with Orchard Core's NewAsync() flow before merging the authored payload, so nested handlers run for child items too. The tool also rejects payloads when the submitted JSON does not match the expected Orchard Core content-item shape. By default it uses dropped-value detection after ContentItem mapping to catch misplaced or unmapped values. If CrestApps.OrchardCore.Recipes is enabled, the tool validates the payload against the content type's recipe-backed JSON schema as authored, uses the registered contained-part schema metadata to find nested child payloads recursively, and returns the same schema contract in its corrective guidance so the model can retry with the correct structure.

Content definition tools

Available when: CrestApps.OrchardCore.AI.Agent + OrchardCore.ContentTypes

FunctionDescription
getContentTypeDefinitionRetrieves the definitions of all available content types.
getContentPartDefinitionRetrieves the definitions of all available content parts.
listContentTypesDefinitionsProvides a list of available content type definitions.
listContentPartsDefinitionsProvides a list of available content part definitions.
listContentFieldDefinitionsProvides a list of available content fields.

Content definition recipe tools

Available when: CrestApps.OrchardCore.AI.Agent + OrchardCore.ContentTypes + OrchardCore.Recipes.Core

FunctionDescription
removeContentTypeDefinitionRemoves the content type definition.
removeContentPartDefinitionRemoves the content part definition.
applyContentTypeDefinitionFromRecipeCreates a new content type definition or updates an existing one.

Feature management tools

Available when: CrestApps.OrchardCore.AI.Agent + OrchardCore.Features

FunctionDescription
disableSiteFeatureDisables site features.
enableSiteFeatureEnables site features.
searchSiteFeatureSearches available features for a match.
listSiteFeatureRetrieves available site features.
getSiteFeatureRetrieves info about a feature.

Communication tools

Available when: CrestApps.OrchardCore.AI.Agent + one or more communication features

FunctionRequired featureDescription
sendNotificationOrchardCore.NotificationsSends a notification message to a user.
sendEmailOrchardCore.EmailSends an email message on behalf of the logged-in user.
sendSmsMessageOrchardCore.SmsSends an SMS message to a user.

User and role tools

Available when: CrestApps.OrchardCore.AI.Agent + the matching user-management feature

FunctionRequired featureDescription
getUserInfoOrchardCore.UsersGets information about a user.
searchForUsersOrchardCore.UsersSearches the system for users.
getRoleInfoOrchardCore.RolesGets information about a role.

Workflow tools

Available when: CrestApps.OrchardCore.AI.Agent + the matching workflow feature set

FunctionRequired feature(s)Description
getWorkflowTypeOrchardCore.WorkflowsGets information about a workflow type.
listWorkflowTypesOrchardCore.WorkflowsLists information about workflow types.
createOrUpdateWorkflowOrchardCore.Workflows + OrchardCore.Recipes.CoreCreates or updates a workflow.
listWorkflowActivitiesOrchardCore.Workflows + OrchardCore.Recipes.CoreLists all available tasks and activities for workflows.

Analytics tools

Available when: CrestApps.OrchardCore.AI.Agent + CrestApps.OrchardCore.AI.Chat.Analytics

FunctionDescription
queryChatSessionMetricsQueries aggregated chat session analytics metrics with optional date range and profile filters, returning statistics for charts and reports.

Memory tools

Available when: CrestApps.OrchardCore.AI.Memory is enabled and user memory is enabled for the current authenticated user

FunctionDescription
Search User MemoriesSemantic search across the current user's saved memories.
List User MemoriesEnumerates the current user's existing memories.
Save User MemoryCreates or updates a named memory entry for the current user.
Remove User MemoryRemoves a saved memory entry when it should be forgotten.

Tool permissions

Tool access is authorized separately from profile access. Granting a role permission to query a profile is not enough to let that role use the tools the profile is configured with.

PermissionDescription
QueryAnyAIProfile (or QueryAIProfile_{profileName})Allows the identity to query the AI profile.
AccessAnyAIToolAllows the identity to use every registered AI function. This permission is security critical and is granted only to the Administrator role by default.
AccessAITool_{toolName}Allows the identity to use one specific AI function.

When the current identity is not authorized for a configured tool, the tool is excluded from the request instead of failing it. The model then answers without that capability, which usually looks like an incomplete or degraded answer. Each excluded tool is reported in the logs with a Warning entry that lists the tool names and the permissions to grant, so check the application log first when a profile behaves correctly for an administrator but not for another role.

tip

Custom roles and OpenID applications that query tool-enabled profiles need AccessAnyAITool, or the matching AccessAITool_{toolName} permission for every tool the profile uses, in addition to the profile query permission.

How the caller is resolved

The identity used for these checks comes from the framework's IUserAccessor rather than from IHttpContextAccessor. This matters for SignalR: HttpContext is frequently unavailable inside hub invocations on long-lived transports, on backplane-delivered messages, and behind hosted SignalR services, so resolving the caller from the HTTP request could not be relied upon there. The AI chat and chat interaction hubs publish the connection's principal for the duration of every invocation, which means tool permissions are evaluated the same way over SignalR as they are over a regular HTTP request.

Two cases are treated differently:

  • No caller at all, such as a background task, a workflow, or a recipe. Permission checks are skipped and every configured tool stays available, because trusted server-side code is not a security boundary.
  • An unauthenticated caller, such as an anonymous visitor using a public chat widget. The permission check still runs, so whatever you grant the Anonymous role continues to apply exactly as it does elsewhere in Orchard Core.

Invocation Context (AIInvocationScope)

AIInvocationScope is the shared per-request context for references, tool state, and other invocation-scoped data. For the framework-level explanation, see the shared Core documentation: