/v1 read API, and exposes eleven tools. It stores nothing
of its own, so installing it means building it and telling the host where it is.
The eleven tools sit on three rungs, and an agent pays for what it opens:
find names what exists and never returns a captured value,
shape returns one trace’s or one function’s full structure, and
values returns the captured bytes of the slots you ask for. Every tool
wraps one read route, so the process cannot change anything on the server, mint a token, or
reach storage directly.
Requirements
- Node.js 20 or later.
package.jsondeclares"node": ">=20"; the build below ran on 26.12.0. - A running Vexlo server, reachable from the machine the host launches the child on.
- A
read-role API token for that server.
Authorization header on every call, so a server outside loopback has
to be reached over TLS: install and run the server covers that rule and the
flag that waives it.
Build from a checkout
@vexlo/mcp is not published to the npm registry yet, so there is no npx form and no
npm install @vexlo/mcp:
vexlo-mcp instead. npm ci installs dependencies and writes no
dist/; npm run build compiles src/ to dist/ and prepends the shebang that lets the host
execute dist/index.js directly:
dist/index.js is the file the host runs, and npm run build is the only build step. The
build is tsc, not a bundler: dist/index.js imports @modelcontextprotocol/sdk and zod by
name, so it resolves both from the node_modules/ that npm ci wrote beside it. Keep the
checkout as it is. Copying dist/ somewhere on its own leaves the process dead before it
reaches the handshake, and no exit code in the next page’s table
applies:
Mint a read token
Every tool calls a read-role route, so the process refuses to start with any other role. On the machine that holds the server storage directory:-team a,b),
and that set is the token’s team-set. The tools narrow within it, never past it: a tool asked
only for teams outside the team-set sends no request at all and answers with an empty result
that carries a scope_note naming what it dropped. An empty result is therefore not by itself
proof that the request ran, which find reads in full. Mint the token for
every team the agent should see, since the process reads both variables once and never widens
its own team-set afterwards. Authentication and tokens covers minting,
roles, and revocation.
Configure your client
Point the host at the built file by absolute path, and pass both environment variables:
Both are read once, at startup, by one module. Changing either means restarting the process.
Verify
Send oneinitialize request on stdin. The process runs its startup handshake against the
server first, so a reply proves the URL, the token, and the server version all check out:
tools/list on the same session returns all eleven tools with their argument schemas. Some of
the numbers in them are read from the server’s own /v1/capabilities during startup, and some
are fixed in this client:
A fixed number does not move when the server reports a larger one. The seeded server behind every
example on these pages reports
search_limit_max: 500, and vexlo_search_traces still refuses
limit: 101. The three tool pages give each tool’s bounds as the schemas carry them.