What's New With 8.1.0

April 14, 2026

ColdBox 8.1.0 is a minor release that brings targeted improvements, bug fixes, and new features across the ColdBox platform, WireBox, and CacheBox.

Major Highlights

🤖 AI & MCP Routing — toAi() and toMCP()

ColdBox now ships with two powerful new routing terminators that bring first-class BoxLang AI and MCP support directly into the router. Think of toAi() as the AI equivalent of resources() — a single line of routing code that automatically scaffolds a complete, standardized REST API for any BoxLang IAiRunnable so you can build chat agents, embedding endpoints, or custom AI tools in seconds. Meanwhile, toMCP() exposes any BoxLang MCP server as an HTTP endpoint, making it easy to connect your BoxLang tools and resources to external AI assistants like Claude or GitHub Copilot.

toAi() — Auto-scaffolded AI REST API

Calling .toAi( runnable ) on any route pattern registers four sub-endpoints automatically:

Verb
Endpoint
Description

POST

{base}/invoke

Synchronous execution — calls runnable.run( input, params, options ) and returns JSON

POST

{base}/stream

SSE streaming — calls runnable.stream() and pushes chunks via BoxLang's SSE() BIF

POST

{base}/batch

Batch execution — runs the runnable over an array of inputs[] in parallel, returning all results

GET

{base}/info

Self-describing metadata — returns the runnable name, description, and a list of all generated endpoints

The runnable can be a WireBox ID string (resolved lazily at request time) or a live IAiRunnable instance. All route modifiers you chain before toAi() — conditions, domain restrictions, SSL, headers — are automatically inherited by every sub-route.

// One line → four REST endpoints for your AI agent
route( "/api/chat" ).toAi( "MyChatAgent" );

// Using a direct WireBox instance
route( "/api/embeddings" ).toAi( getInstance( "EmbeddingRunnable" ) );

// With auth guard inherited by all four sub-routes
route( "/api/chat" )
    .withCondition( ( route, params, event ) => event.isAuthenticated() )
    .toAi( "MyChatAgent" );

The generated invoke endpoint accepts a JSON body with input, params, and options keys. The stream endpoint uses Server-Sent Events (SSE) and sends chunk events as the response streams. The batch endpoint accepts an inputs[] array and returns an outputs[] array, with per-item error recovery. The info endpoint is a self-discovery endpoint any client can call to learn what is available.

circle-info

toAi() requires BoxLang as the active runtime and the bxai module installed (box install bxai). Both are verified at route-registration time so misconfigurations surface on startup, not at request time.

toMCP() — Expose MCP Servers Over HTTP/HTTPS

toMCP() exposes a registered BoxLang Model Context Protocol (MCP) server as an HTTP endpoint that any MCP-compatible AI client (Claude, GitHub Copilot, Cursor, etc.) can connect to. The entire HTTP request is delegated to the server's MCPRequestProcessor, making your BoxLang tools, resources, and prompts available to external AI assistants.

Combined, these two terminators mean you can go from zero to a fully-functional, streaming-capable AI API and an MCP-compliant tool server with just a few lines of routing configuration.

⏰ Scheduler Enhancements

Schedulers now expose two new properties — started (boolean) and startedAt (datetime) — so you can programmatically check whether a scheduler is running and when it was started. This is especially useful for health checks and cluster-aware task management.

🔒 Cluster Lock Algorithm Upgrade

The scheduled task server fixation algorithm for cluster locking has been upgraded, resolving long-standing edge cases when tasks are distributed across multiple servers.

🌐 BoxLang Engine Agnosticism

Several internal CF-specific variable names and entries have been renamed to engine-agnostic alternatives, further aligning ColdBox with BoxLang as a first-class runtime and reducing CFML-only assumptions in the codebase.

🗑️ Module cfmapping Deprecation

this.cfmapping in ModuleConfig.cfc is now deprecated in favor of this.classMapping, which works consistently across both CFML and BoxLang runtimes.

Release Notes

The full release notes per library can be found below. Just click on the library tab and explore their release notes:

New Features

COLDBOX-1378arrow-up-right Schedulers now have a started and startedAt properties

COLDBOX-1382arrow-up-right toAi() and toMCP() routing for BoxLang AI Routables

Improvements

COLDBOX-1376arrow-up-right AbstractCacheProvider updates to interface completion and fine tuning

COLDBOX-1377arrow-up-right Update to use new docbox types

COLDBOX-1383arrow-up-right Check whether the object is already in JSON format to avoid double serialization

COLDBOX-1386arrow-up-right Renaming of dedicated CF variables and entries to engine-agnostic ones for BoxLang

Bugs

COLDBOX-1047arrow-up-right Scheduled tasks server fixation upgraded algorithm for cluster lock

COLDBOX-1370arrow-up-right renderData not sending encoding with content-type header

COLDBOX-1375arrow-up-right Whoops using external URL for alpinejs instead of local one

COLDBOX-1380arrow-up-right MockRequestContext.getResponseHeaders() returns empty struct in integration tests after setup()

COLDBOX-1384arrow-up-right ColdBox proxy not disallowing .bxm proxies

Tasks

COLDBOX-1387arrow-up-right Deprecate this.cfmapping on module configuration and use this.classMapping instead

Last updated

Was this helpful?