Hello all,

A short update on the MCP server work under ASTERIXDB-3695, so the dev list
knows what's coming over the next few weeks.

The goal is an MCP server for AsterixDB. MCP (Model Context Protocol) is
the emerging standard that lets LLMs and AI agents — Claude Desktop, IDE
assistants, and similar clients — call external tools in a structured way.
The server lets one of these agents explore an AsterixDB instance and run
queries against it, without anyone writing custom glue for each client. It
runs as a separate sidecar process and talks to the cluster over the
existing HTTP API, so nothing inside AsterixDB itself has to change.

A few principles are shaping the design. The server is strictly read-only —
every query is sent with readonly=true, so the CC itself rejects anything
that isn't a query; there are no writes and no DDL. The cluster stays the
single source of truth: the gateway keeps no query state of its own, so it
can't drift out of sync with the CC. Output is bounded by default, with
time and size limits on every query, so an agent can't accidentally pull an
unbounded result into its context window. And the tooling is columnar-aware
— when it reports a dataset's schema it also reports whether the dataset is
row- or column-formatted, so the agent can reason about access patterns
instead of guessing.

Beyond running queries, a big part of the value is giving the agent
accurate context so it stops guessing. Two directions here. First,
functions: the plan is to expose the built-in function catalog along with
full signatures — argument counts, types, return shape — plus any
user-defined functions read from the metadata, so the agent uses real
function names and arities instead of inventing them. Second, query plans:
the query service can already return the optimized logical plan and the
Hyracks job (the same ones the web UI visualizes), and feeding those back
to the agent as context is a genuinely interesting lever — it lets the
model see how its query was actually compiled and executed, reason about
index usage, and refine the query rather than guessing blindly. That
plan/job introspection is one of the things I'm most keen to build out.

On where it stands: there's an early prototype working end-to-end against a
live cluster. For development and testing I'm driving it with a local
Ollama model (a small quantized 7B), so the full loop — natural-language
request to tool call to executed SQL++ and back — can be exercised offline
without depending on a hosted model. An LLM client can already list the
datasets in an instance, inspect a chosen dataset's schema, and run a query
through the server and get results back; that path is proven, not just
mocked. That first slice covers query execution plus schema and dataset
discovery. The next slices build on it: asynchronous handling for
long-running queries, the function catalog and plan/index introspection
above, and the remaining safety guardrails. It's written in Python on the
official MCP SDK; I'll share the repo and a README once the layout settles.

Early feedback is very welcome — especially from people who know the query
service and metadata internals well, since that's where I most want to
avoid wrong assumptions. Happy to take questions.

Thanks,
 Vivek

Reply via email to