Version 1.1.0 Release Notes
Package version: 1.1.0
Release date: 2026-08-13
CrestApps.Core 1.1.0 was released on 2026-08-13.
Highlights
- upgrades the framework's dependency baseline, including YesSql 6.0 (new
ISession.SaveAsyncsignature), the Model Context Protocol 2.0 packages, the GitHub Copilot SDK 1.0.8 (newPermissionsApi.SetAllowAllAsyncmode-based API), Anthropic 12.39.0, OllamaSharp 5.4.30, the .NET 10.0.10 runtime/extension packages, and theMicrosoft.Extensions.AI10.8.3 packages
Breaking Changes
- MCP servers no longer expose tools by default. In 1.0.0 a server registered with
WithCrestAppsHandlers()listed and invoked registered tools by default. In 1.1.0 tool exposure is opt-in through the newMcpServerOptionssite settings: nothing is listed or callable until you either add the tool or tool instance name toMcpServerOptions.Toolsor setMcpServerOptions.ExposeAllToolstotrue. Hosts upgrading from 1.0.0 that relied on the previous "expose everything" behavior must setExposeAllTools = true(or populateTools) to keep exposing their tools. Prompts and resources are unaffected and are still always registered
MCP server tool exposure
- reworks tool exposure into an opt-in allow-list driven by the
McpServerOptionssite settings. Nothing is exposed by default: an MCP server lists and invokes only the tools and configured tool instances named inMcpServerOptions.Tools, or every tool and instance whenMcpServerOptions.ExposeAllToolsistrue. Only selectable tools participate: system tools (markedIsSystemTool) and hidden tools are never exposed, even whenExposeAllToolsistrue. The allow-list is enforced by both the list and call handlers, so a tool that is not exposed can neither be discovered nor invoked. BecauseMcpServerOptionsis backed by site settings, operators choose which tools to expose from the admin settings UI without redeploying. The MVC and Blazor sample hosts add an "Exposed tools" editor to their MCP server settings
Documentation search tool instances
- adds documentation search tool instance sources, so a host exposes one
callable search function per documentation site it configures. These are ordinary tool instance sources
registered on the tool instances builder with
AddDocumentationSearchSources()(or the individualAddSitemapDocumentationSource(),AddSearchIndexDocumentationSource(), andAddAlgoliaDocumentationSource()methods), so they can be used with or without the MCP server. Each configured instance binds one site and surfaces as a distinct function the AI model can call, and the instances are managed and persisted through the existing tool instance store (YesSql or Entity Framework Core) and UI. The MVC and Blazor sample-host tool instance editors add source-specific field groups so operators can configure a documentation site (base URL, sitemap or index URL, Algolia application/index/search-only key, and per-instance result limits) directly from the create and edit forms - ships three documentation search strategies, each as its own source and settings model: the sitemap
source crawls a site through its
sitemap.xml(for example a public Docusaurus site such ascore.crestapps.com), the search-index source downloads a prebuilt JSON search index (for example a MkDocs Materialsearch_index.json) and ranks it locally, and the Algolia source forwards queries to the hosted Algolia DocSearch API. A singleton materializer caches the crawled corpus or downloaded index per instance and rebuilds it only when the instance changes, so the corpus is reused across calls - exposes documentation search functions through the MCP server the same way as any other tool instance:
add the instance name to
McpServerOptions.Tools(or enableExposeAllTools) to make it discoverable and callable
Fixes
- stops the MCP server from exposing system tools.
WithCrestAppsHandlers()now lists and invokes only selectable tools, so tools markedIsSystemTool(which agents auto-include based on context) are never discoverable or callable over MCP, even whenMcpServerOptions.ExposeAllToolsistrue - makes the MCP tool allow-list respond to site-settings changes at runtime. The list and call handlers
now read
McpServerOptionsthroughIOptionsMonitorinstead of the cachedIOptions, so exposing or removing a tool from the admin settings page takes effect without restarting the host - lets an MCP client invoke a code tool advertised under a function name that differs from its registration key. The call handler resolves the tool by the published function name (mirroring the list handler) so a listed tool can always be called
- rethrows cancellation from the documentation search function instead of reporting it as a successful error result, and returns a stable, non-leaking failure message for other errors
- updates the MVC and Blazor sample hosts to load
@crestapps/bootstrap-select1.2.3 for Bootstrap select styling - protects Algolia DocSearch API keys for documentation search tool instances before persisting them, keeps existing keys when the edit form is saved with the key field blank, and unprotects the key only when the Algolia source is materialized for a search
- fixes post-session processing endlessly retrying and eventually failing when the AI returned a successful (HTTP 200) response that could not be parsed into structured task results. The no-tools structured output path now records a
Failedresult with a diagnostic message instead of silently returning no result, so these responses no longer exhaust all retry attempts. The unparseable-response case is now logged atWarning(including a preview of the raw AI response) instead of only atDebug, and the recorded task error message now explains that the AI produced no parseable result or there was no content to evaluate. - avoids issuing a post-session AI request when there is no meaningful user content to evaluate. Sessions whose user prompts are empty, whitespace-only, or system-generated are skipped, so a real AI call is only made when there is something to analyze.