I see, that's really cool it just uses uvx like that. And, that the
MCP server just needs the server info, basically. Very tidy.

I think that it should be a separate repo within the Apache namespace.
This is what we did for the JDBC driver (asterix-clients). Maybe it
can go there, or be it's own repo (asterix-mcp)?
@Suryaa any thoughts/suggestions?

On Wed, Jul 15, 2026 at 7:15 PM Vivek Gangavarapu
<[email protected]> wrote:
>
> Hi Ian,
>
> Good news is it's not chaotic anymore — this settled over the last year or
> so. For Python servers the norm is a PyPI package that clients run with uvx
> (uv's tool runner — it pulls the package, resolves deps into a throwaway
> venv, and runs it, all in one command). Node servers do the same dance with
> npm and npx — MongoDB's MCP server ships that way. And there's now an
> official MCP Registry (registry.modelcontextprotocol.io) that sits on top:
> it doesn't host code, just verified metadata pointing at the PyPI/npm
> package, so clients can discover servers. Docker images show up too, mostly
> for hosted deployments.
>
> So for your Claude Code example, once we publish to PyPI it's literally one
> command:
>
> claude mcp add asterixdb --env 
> ASTERIXDB_MCP_CC_BASE_URL=http://<cc-host>:19002
> -- uvx asterixdb-mcp-server
>
> That runs the MCP server on the machine where Claude Code runs (which
> matches your instinct — it lives with the agent, not the cluster) and it
> talks to the remote cluster over the regular query API on 19002. Everything
> is env-var configured, so pointing at a different cluster is just that one
> URL.
>
> For the case where a team wants one shared server near the cluster instead,
> the HTTP transport already exists (with bearer/OAuth auth), and then
> clients just add the URL. Same package either way.
>
> The only real decision left is what namespace we publish under — PyPI name
> and registry namespace — which is probably an Team-level call.
>
> Vivek
>
> On Thu, 16 Jul 2026 at 02:55, Ian Maxon <[email protected]> wrote:
>
> > Hi Vivek,
> > I agree it makes sense to keep the MCP server separate from the CC.
> > It's more tightly tied with the lifecycle of the agent using it than
> > it is the cluster.
> > I don't know that it should start with the server either. Generally, I
> > would imagine the MCP server running wherever the agent is, rather
> > than where the cluster is.
> > I think having it follow whatever packaging idioms these follow would
> > make the most sense. Have you found a typical way this happens? Or is
> > it all kind of chaotic still? For example, say I wanted to use Claude
> > Code with this MCP server, against a real AsterixDB cluster, not just
> > a local instance. How would I get and configure the MCP server for
> > that?
> >
> > - Ian
> >
> > On Wed, Jul 8, 2026 at 9:10 AM Vivek Gangavarapu
> > <[email protected]> wrote:
> > >
> > > Hi all,
> > >
> > > Ship the MCP server as a standalone sidecar process, not embedded in the
> > > Cluster Controller.
> > >
> > > Concretely:
> > > - It's a separate module in the tree and packaged into the asterix-server
> > > binary assembly.
> > > - It launches from the same start script that brings up NC/CC
> > > (start-sample-cluster.sh), gated behind an enable flag.
> > > - Flag off (the default) => the cluster is byte-identical to today: no
> > > extra process, no new port, nothing launched.
> > > - The sidecar talks to the CC only through the existing stateless
> > > /query/service REST endpoint.
> > >
> > > So: one command brings up the wired stack when you want it, and teardown
> > > mirrors it — but a normal deployment that doesn't care about MCP is
> > > completely unaffected.
> > >
> > > Why keep it out of the CC? The honest reason is that MCP is a stateful,
> > > streaming protocol and the CC is deliberately not. An MCP session holds
> > > long-lived SSE streams and per-session state (session IDs, output
> > streams).
> > > If we host that inside the CC we'd be pushing exactly the kind of
> > long-held
> > > connections and session state that the control plane is designed to
> > avoid —
> > > and it works directly against the CC's stateless failover behavior.
> > >
> > > What I'm asking
> > >
> > > 1. Does "sidecar in the assembly, launched by the start script behind a
> > > flag" sit right with how the community wants optional components to ship?
> > > Or would you rather it stay a fully external, separately-installed thing?
> > > 2. Any objection to the flag-off-is-a-no-op contract as the safety
> > default?
> > > 3. Anything about the module layout or the assembly packaging I should
> > line
> > > up with existing conventions before I put up a patch.
> > >
> > > Thanks,
> > >
> > > Vivek
> >

Reply via email to