Stream 4.2 ships the Abilities API: ask your audit log a question

For over a decade, Stream has answered one question well: what just happened on this WordPress site? The Stream admin page is where on-call engineers, editors, and compliance reviewers go after the fact, when troubleshooting is needed, such as a post vanishes, a setting flips, or a role changes and nobody remembers why.

Stream 4.2.0, which was recently released, iterates upon this approach. The Stream admin page is still there. The same data is now also exposed as a set of WordPress Abilities, and any MCP-aware client can read and act on it: Claude Desktop, Claude Code, Cursor, ChatGPT, anything that speaks the Model Context Protocol. The Stream audit log has evolved from being scrolled through to being able to answer questions through AI.

Watch demo


A one-line prompt (“something looks off, set up an alert and give me a summary”) and the model walks the Stream audit log, names the suspect user, asks one clarifying question about which alert to create, installs two alerts, and writes the incident summary. No SQL or knowledge of the schema is needed.

Why this release matters

The Abilities API landed in WordPress 6.9. It gives plugins a single, declarative way to publish capabilities (read, write, destructive) with proper permission callbacks and JSON schemas. The WordPress MCP Adapter walks through every registered ability and turns it into an MCP tool. It’s worth noting that plugins don’t ship an MCP server – they ship abilities. The adapter does the rest.

Stream 4.2.0 registers eleven abilities under the stream/ namespace, gated by the existing Stream capability model:

  • Reads: get-records, get-record, get-alerts, get-connectors, get-settings, get-exclusion-rules
  • Writes: create-alert, create-exclusion-rule, update-settings
  • Destructive (capability + explicit confirm): purge-records, delete-alert

This works off the same data and permissions as the WordPress admin. Now able to be queried from a chat box.

What the video doesn’t show

Two things worth flagging because they don’t fit in 90 seconds of screen capture:

The model pushes back before writing. When the prompt said “set up an alert,” the agent paused and asked which trigger to use. That’s not Claude being chatty. It’s the ability advertising destructiveHint: false but still requiring manage_options, and the model treating any state change as a clarification point. The same shape protects you from “purge all records” prompts: stream/purge-records requires confirm: true and the MCP layer surfaces that as a destructive annotation. Conforming clients prompt before calling.

The model reads metadata, not just summaries. The video shows the agent calling out that the scripted edits came from 127.0.0.1 while Devon’s login came from 192.168.97.1. That’s user_meta.agent + ip on each record, exposed through the ability’s output schema. The LLM didn’t have to guess at the data model. It had a schema-described object and used it.

What is being shipped in 4.2.0

  • Every ability declares an input and output schema. The adapter advertises them to the LLM, so bad calls fail at validation, not at runtime.
  • Reads run through the same capability the records page uses (view_stream). If your role can’t see records in wp-admin, the LLM can’t see them through MCP either.
  • Writes run through WP_STREAM_SETTINGS_CAPABILITY (manage_options by default). Same gate as the settings screen.
  • purge-records requires confirm: true in the parameters. The MCP layer surfaces that as a destructive annotation; conforming clients prompt before calling.
  • On network-activated multisite, settings reads and writes go through the network option, not per-site duplicates. The LLM sees the same truth the network admin sees.

This release is focused on extending the existing functionality that Stream has had within the WordPress admin for over a decade and extends it to a new interface.

Try it on your own site

Update to Stream 4.2.0 and follow the Connecting an MCP Client to Stream wiki to wire up your MCP client of choice.

Then ask your site a question you’ve always wondered about. Who edited the homepage last quarter? Which plugin changed that cron schedule? Was there a spike in failed comment moderation last Friday? The answers were already in Stream. They were just locked behind a list-table UI and a query string.

The Stream audit log has been the go-to resource after something broke. With the Abilities API in 4.2.0, it’s now somewhere you can observe and query in real time, and ask, in your own words, what to do next.

Note: the incident in the video is a fabricated demo scenario built on a seeded local site. No real users were promoted, and no real posts were trashed. The plugin, the abilities, and the MCP wiring all shipped in Stream v4.2.0.