Two weeks ago, we introduced the MCP Server 1.0 for EventSourcingDB, connecting AI agents to your event store through the Model Context Protocol. It showed what becomes possible when LLMs can query events, inspect subjects, and run EventQL in natural language. But setting up a Docker container and configuring an MCP client is not always what you want when you just need to quickly interact with your database. Sometimes you want something lighter.
As a small Easter gift, we are releasing a Claude Code Plugin for EventSourcingDB. It is a set of Skills that teach Claude how to use the entire EventSourcingDB API. No SDK installation, no Docker container, no MCP configuration. You install the plugin, and start talking to your event store. Think of it as the lightest possible bridge between natural language and your events.
What Claude Code Plugins and Skills Are¶
Claude Code is Anthropic's CLI tool for working with Claude directly in the terminal. It can read files, run commands, write code, and reason about your project. Plugins extend what Claude Code can do by bundling one or more Skills. A Skill is a Markdown file that describes a specialized workflow step by step, including which tools to use, what API calls to make, and how to handle responses. When you invoke a Skill, Claude reads the instructions and follows them, much like an experienced colleague following a well-written runbook.
You can think of Skills as checklists written by a domain expert. The Markdown file does not contain executable code. It contains knowledge: which endpoints exist, what parameters they expect, what the responses look like, and what conventions to follow. Claude brings the reasoning, and the Skill brings the domain expertise. Plugins are distributed through marketplaces, making installation as simple as a single command. For more details on how Plugins and Skills work, the Claude Code documentation covers the full specification.
What the Plugin Does¶
The EventSourcingDB Plugin turns Claude into a fully capable API client for your event store. Instead of a single monolithic Skill, the plugin provides one focused Skill per API endpoint:
/esdb:ping/esdb:verify-api-token/esdb:write-events/esdb:read-events/esdb:observe-events/esdb:read-subjects/esdb:read-event-type/esdb:read-event-types/esdb:run-eventql-query/esdb:register-event-schema
You can invoke them explicitly, or simply describe what you want and let Claude pick the right one automatically. There is no configuration wizard, no project scaffolding, no dependency installation. The plugin goes from zero to connected in a single command.
The plugin covers the same operations as the Client SDKs. You can write events with optional preconditions, read events for any subject with filtering and ordering, observe events in real time with automatic timeout handling, browse subjects, inspect event types, register JSON Schemas for validation, and run EventQL queries. Everything the HTTP API supports, the plugin supports.
Under the hood, the Skills use only curl and grep, so there is nothing to install. Claude assembles the requests, parses the responses, filters out noise from streaming connections, and handles timeouts. You never have to think about the wire protocol.
The difference between the plugin and writing curl commands yourself is not just convenience. It is the layer of reasoning that Claude adds on top. When you say "show me what happened to this order last Tuesday," Claude figures out which Skill to invoke, what filters to apply, and how to present the result in a way that answers your question. You stay in the domain language, and the plugin handles the translation.
How does this compare to the MCP Server? The MCP Server is the right choice when you want a persistent, always-available connection between your LLM and EventSourcingDB, especially in setups where multiple tools and agents collaborate. It runs as a Docker container, speaks the Model Context Protocol, and works with any MCP-compatible client. The plugin is for those moments when you want to quickly explore your event store from the terminal without spinning up any infrastructure. Think of the MCP Server as the production integration and the plugin as the developer's scratchpad. Different tools for different situations.
Setting It Up¶
Getting started takes less than a minute.
Step 1: Add the thenativeweb plugin marketplace to Claude Code:
Step 2: Install the EventSourcingDB plugin:
Step 3: Tell Claude how to reach your database. The plugin reads two environment variables:
If ESDB_URL is not set, the plugin defaults to http://localhost:3000. If ESDB_API_TOKEN is not set, Claude will ask you for it when a Skill runs.
Step 4: Open Claude Code in your terminal and type /esdb:ping to verify the connection. That is the entire setup.
A Library in Five Minutes¶
To see what working with the plugin feels like, let us walk through a small example. Imagine you are building a library system and want to explore how events model the domain. Your EventSourcingDB instance is running locally, and you have the plugin installed.
Acquiring a book. You type: "Acquire a book called '2001: A Space Odyssey' by Arthur C. Clarke for subject /books/42." Claude picks the right Skill, figures out the event type, assembles the payload, and sends it to your database. The event is stored, and Claude shows you the response including the assigned event ID. You described what you wanted in plain English, and the plugin took care of the rest.
Lending a book. Next, you say: "Alice borrows book /books/42." Claude writes a io.eventsourcingdb.library.book-borrowed event for the same subject, with Alice recorded as the borrower. Two events now describe the history of this book.
Reading the history. You ask: "Show me the history of /books/42." Claude calls read-events for that subject and presents the full event stream. You see the acquisition event followed by the borrowing event, each with its timestamp, event ID, and payload. The complete story of the book, told through events.
Browsing subjects. You want to see what else is in the database: "What subjects exist?" Claude calls read-subjects with the base subject / and lists all subjects that have received events. In our example, you would see /books/42, but in a real system this gives you a quick overview of your entire domain landscape.
Querying with EventQL. Finally, you want analytics: "How many times was each book borrowed?" Claude translates your question into an EventQL query, runs it against the database, and presents the results. You did not have to learn EventQL syntax first. Claude knows the language from the Skill and writes the query for you. If the query language interests you, the EventQL documentation has the full reference.
Five minutes, five interactions, and you have a working event-sourced domain with queryable data. No boilerplate code, no test harness, no HTTP client library. Just a conversation.
Beyond the Basics¶
The examples above cover the common path, but the plugin handles more advanced scenarios too.
Preconditions give you control over write semantics. When you acquire a book for the first time, you might want to ensure the subject does not already exist. Tell Claude: "Acquire this book, but only if the subject is pristine." The plugin applies the right precondition, and if someone else already registered /books/42, the write fails cleanly instead of silently creating a duplicate. Claude tells you exactly what went wrong. You can express other constraints just as naturally: "Only update if no one else has written to this subject since I last read it" triggers optimistic locking, and you can even define custom conditions based on EventQL queries. You describe the rule, the plugin picks the mechanism.
Event schemas enforce data quality. You can ask Claude to register a JSON Schema for any event type. Once registered, EventSourcingDB validates every incoming event of that type against the schema. "Register a schema for book-acquired events requiring title as a string and author as a string." Claude calls /esdb:register-event-schema with the appropriate JSON Schema definition. From that point on, any book-acquired event that is missing a title or author will be rejected by the database. Schemas are immutable once registered, so it is worth getting them right. The plugin helps you iterate on the schema definition before committing to it, since you can test writes against the schema immediately after registering it.
Live streaming with observe-events lets you watch events as they happen. Ask Claude to observe a subject, and it opens a streaming connection with an automatic timeout of 30 seconds. You see events appear in real time as other processes write them. This is useful for verifying that your write path works, for monitoring during development, or for demonstrating event flow to a colleague. Open two terminal windows, observe in one, write in the other, and watch events flow through the system live.
EventQL queries go far beyond simple reads. The plugin supports the full EventQL language, including filtering by type, subject, or data fields, grouping and aggregation with functions like COUNT(), SUM(), and UNIQUE(), ordering, and limiting results. If you have been curious about EventQL but found reading the reference documentation abstract, the plugin is a great way to learn by doing. Describe what you want to know, let Claude write the query, inspect the result, and refine from there.
Your Database, One Slash Command Away¶
The Claude Code Plugin makes the entire EventSourcingDB API accessible through natural language. Instead of assembling curl commands, remembering endpoint paths, and formatting JSON payloads, you describe what you want and Claude handles the rest. It is the fastest way to go from "I wonder what is in this event store" to having an answer.
This is not a replacement for Client SDKs in production. The Client SDKs give you type safety, error handling, and the control you need for application code. When you build a service that writes events as part of a command handler or reads events to build a projection, you want the guarantees that a typed SDK provides. The plugin is for everything that comes before and around production: exploring your data model, prototyping event flows, learning EventQL, debugging an issue, or just seeing what is in your database right now.
As we discussed in Training AI Without the Data You Don't Have, the richness of event data becomes truly valuable when it is easy to access. An event store captures behavior over time, not just snapshots. But that richness is only useful if you can get to it without friction. The plugin removes that friction entirely. As we put it in Data Is the New Gold, the value of data depends on how accessible it is. A slash command in your terminal is about as accessible as it gets.
If you have been curious about combining AI and Event Sourcing but found the MCP Server setup too heavy for a quick experiment, this is your starting point. Install the plugin, type /esdb:ping, and start exploring. For the full API reference, see the API Overview. And if you want to go deeper with AI and EventSourcingDB, the MCP Server is always there when you need a more permanent integration.
If you want to explore the broader intersection of AI and Event Sourcing, eventsourcing.ai is a good place to start. And we would love to hear how you use the plugin. Reach out at hello@thenativeweb.io.
PS: Do you like the plugin? We would really appreciate your support — leave us a ⭐️ on GitHub so more developers can find it. Thank you!