🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@imqueue/mcp

Package Overview
Dependencies
Maintainers
2
Versions
34
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@imqueue/mcp - npm Package Compare versions

Comparing version
2.3.0
to
3.0.0
+3
-3
dist/server.d.ts

@@ -44,3 +44,3 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";

}
/** How to install the full local server — surfaced by the remote hand-off + install_locally. */
/** How to install the full local server — the payload of local_install_guide. */
export declare const LOCAL_INSTALL: string;

@@ -50,4 +50,4 @@ /**

* @param version Version string to report (kept in sync with package.json by the caller).
* @param mode "local" (full) or "remote" (docs+scaffold, CLI tools hand off to local).
* @param cli CLI-backed handlers; required for the real tools in local mode.
* @param mode "local" (docs + scaffold + CLI tools) or "remote" (docs + scaffold + install guide).
* @param cli CLI-backed handlers; required for the CLI tools to be registered at all.
*/

@@ -54,0 +54,0 @@ export declare function createServer(opts: {

// Shared @imqueue MCP server factory. Every tool is registered here once and the
// server runs in one of two modes:
//
// * "local" — runs on the developer's machine (stdio entry: index.ts). The
// CLI-backed tools drive the real `imq` binary. Their handlers are
// INJECTED via `cli` so this module never imports node:child_process
// (keeps the remote/edge bundle clean).
// * "remote" — hosted over HTTP (worker/worker.ts, e.g. mcp.imqueue.org). Docs
// search + scaffolding work fully; the CLI/fleet tools can't touch
// the user's machine, so they return a "run me locally" hand-off —
// and, where it makes sense, the equivalent offline scaffold inline.
// * "local" — runs on the developer's machine (stdio entry: index.ts). Serves
// the shared docs/scaffold tools PLUS the CLI-backed tools, which
// drive the real `imq` binary. Their handlers are INJECTED via
// `cli` so this module never imports node:child_process (keeps the
// remote/edge bundle clean).
// * "remote" — hosted over HTTP (worker/worker.ts, e.g. mcp.imqueue.org). Serves
// the shared tools plus a setup guide. The CLI-backed tools are NOT
// REGISTERED here: a hosted server cannot reach the caller's machine,
// so offering them would advertise a capability it does not have.
//
// Registration is gated by mode rather than the handlers branching on it, which is
// what keeps the hosted surface honest: every tool it lists it can actually run,
// and all of them are read-only. Both directories (OpenAI's app directory and the
// Anthropic Connectors Directory) check that a tool's name, description and
// annotations match its real behaviour, and Anthropic rejects outright any single
// tool that spans safe and unsafe operations. See worker/README.md.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";

@@ -22,2 +30,26 @@ import { z } from "zod";

});
/**
* Tool metadata: a human-facing title plus the behaviour hints.
*
* `title` is emitted BOTH at the top level (current spec) and inside `annotations`
* (where older clients look), so every client shows a real name.
*
* The hints are not decoration — clients use `readOnlyHint` to decide what may run
* without asking the user, and both public directories require all three to be
* present AND to match observable behaviour. Understating is the dangerous
* direction: it reads as mislabelling.
*
* `openWorld` means the tool touches something outside this process whose state is
* not ours — a public website, the npm registry, a running service. Reading a
* catalogue compiled into the build is NOT open-world; fetching a page from
* imqueue.org is, because the page can change between two identical calls.
*/
function meta(title, kind, openWorld) {
const hints = {
readOnlyHint: kind === "read",
destructiveHint: kind === "destructive",
openWorldHint: openWorld,
};
return { title, annotations: { title, ...hints } };
}
const methodSchema = z

@@ -44,3 +76,3 @@ .object({

.strict();
/** How to install the full local server — surfaced by the remote hand-off + install_locally. */
/** How to install the full local server — the payload of local_install_guide. */
export const LOCAL_INSTALL = [

@@ -57,21 +89,9 @@ "Install the full @imqueue MCP server locally — it runs via `npx`, no build step:",

].join("\n");
/** Build a "this tool is local-only on the hosted server" response, optionally with an inline offline equivalent. */
const handoff = (tool, why, offlineEquivalent) => text(`\`${tool}\` runs on **your machine** ${why}, so it isn't available on the hosted (\`mcp.imqueue.org\`) server.\n\n` +
LOCAL_INSTALL +
(offlineEquivalent
? `\n\n---\n\nMeanwhile, here's an offline equivalent you can use right now:\n\n${offlineEquivalent}`
: ""));
/**
* Create a fully-configured @imqueue MCP server.
* @param version Version string to report (kept in sync with package.json by the caller).
* @param mode "local" (full) or "remote" (docs+scaffold, CLI tools hand off to local).
* @param cli CLI-backed handlers; required for the real tools in local mode.
* Docs search, package catalogue and offline scaffolding. Identical in both modes,
* and read-only throughout — nothing here writes a file or runs a process.
*/
export function createServer(opts) {
const { version, mode, cli } = opts;
const server = new McpServer({ name: "imqueue", version });
const local = mode === "local" && !!cli;
// --- Stateless tools: identical in both modes ----------------------------
function registerSharedTools(server) {
server.registerTool("search_docs", {
title: "Search @imqueue documentation",
...meta("Search @imqueue documentation", "read", true), // reads live pages from imqueue.org
description:

@@ -84,3 +104,3 @@ // Do NOT name the covered packages here. The symbol index is fetched from

// reason to search for a symbol that is in fact indexed.
"Search the official @imqueue docs (guides, tutorial, CLI manual, articles) and every exported symbol of every @imqueue package that publishes a generated API reference, returning the most relevant pages with their URLs. Each result names the package it belongs to. Takes a plain question or an exact symbol name such as 'RedisQueue.send', 'PgPubSub.listen' or 'watcherCheckDelay'. Use this first when asked how to do something in @imqueue, or to confirm a signature before writing code against it, then get_doc to read a page in full.",
"Search the official @imqueue docs (guides, tutorial, CLI manual, articles) and every exported symbol of every @imqueue package that publishes a generated API reference, returning the most relevant pages with their URLs. Each result names the package it belongs to. Takes a plain question or an exact symbol name such as 'RedisQueue.send', 'PgPubSub.listen' or 'watcherCheckDelay'. Answers 'how do I do X in @imqueue' and confirms a signature before code is written against it. Every result carries the page URL, which get_doc reads in full.",
inputSchema: {

@@ -103,4 +123,4 @@ query: z.string().describe("A question or a symbol name, e.g. 'expose a service method', 'delayed jobs' or 'IMQOptions.safeDelivery'"),

server.registerTool("get_doc", {
title: "Read an @imqueue doc page",
description: "Fetch the full markdown of an @imqueue documentation page by its URL (as returned by search_docs). Returns plain markdown suitable for reading and quoting.",
...meta("Read an @imqueue doc page", "read", true), // fetches a live page from imqueue.org (host-locked)
description: "Fetch the full markdown of an @imqueue documentation page by its URL (as returned by search_docs). Returns plain markdown suitable for reading and quoting. Only imqueue.org URLs are fetched; anything else is refused.",
inputSchema: {

@@ -119,3 +139,3 @@ url: z.string().describe("An imqueue.org page URL, e.g. https://imqueue.org/get-started/"),

server.registerTool("list_packages", {
title: "List @imqueue packages",
...meta("List @imqueue packages", "read", false), // renders a catalogue compiled into the build
description: "Return the main @imqueue packages with a one-line summary and install command, so you can pick the right one.",

@@ -132,4 +152,4 @@ inputSchema: {},

server.registerTool("scaffold_service", {
title: "Scaffold an @imqueue service",
description: "Generate an idiomatic @imqueue/rpc service (an IMQService subclass with @expose()d, JSDoc-typed methods) plus a bootstrap that starts it. Provide the methods you want, or omit them for a starter template.",
...meta("Scaffold an @imqueue service", "read", false), // returns generated source text; writes nothing
description: "Generate an idiomatic @imqueue/rpc service (an IMQService subclass with @expose()d, JSDoc-typed methods) plus a bootstrap that starts it. Provide the methods you want, or omit them for a starter template. Returns source text only — it writes no files.",
inputSchema: {

@@ -148,4 +168,4 @@ name: z.string().describe("Service name, e.g. 'user' or 'UserService'"),

server.registerTool("scaffold_client", {
title: "Scaffold an @imqueue typed client",
description: "Show how to generate and use the fully-typed client for an @imqueue service. @imqueue generates the real client from a running service (via `imq client generate`), so this returns that command plus an illustrative usage snippet.",
...meta("Scaffold an @imqueue typed client", "read", false), // returns generated source text; writes nothing
description: "Show how to generate and use the fully-typed client for an @imqueue service. @imqueue generates the real client from a running service (via `imq client generate`), so this returns that command plus an illustrative usage snippet. Returns text only — it writes no files.",
inputSchema: {

@@ -163,23 +183,24 @@ service: z.string().describe("The service to call, e.g. 'user' or 'UserService'"),

});
// --- CLI-backed tools ------------------------------------------------------
// In local mode they drive the real `imq`. In remote mode each returns a
// hand-off to the local install (with an inline scaffold where one exists).
}
/**
* The CLI-backed tools — LOCAL MODE ONLY. Every one of these acts on the machine
* the server runs on: its `imq` binary, its project files, its service processes,
* its logs. That is exactly why they are not registered on the hosted server.
*/
function registerCliTools(server, cli) {
server.registerTool("cli_status", {
title: "Check the @imqueue CLI",
description: "Detect whether the `imq` CLI (@imqueue/cli) is installed locally and report its version. Call this before create_service/generate_client; if it's missing, fall back to scaffold_service/scaffold_client.",
...meta("Check the @imqueue CLI", "read", false), // inspects a local binary
description: "Detect whether the `imq` CLI (@imqueue/cli) is installed on this machine and report its version. create_service and generate_client need it; the scaffold_service and scaffold_client tools do not.",
inputSchema: {},
}, async () => {
if (local) {
try {
return text(await cli.cliStatus());
}
catch (e) {
return fail(e);
}
try {
return text(await cli.cliStatus());
}
return handoff("cli_status", "(it inspects the `imq` binary installed on your machine)");
catch (e) {
return fail(e);
}
});
server.registerTool("cli_help", {
title: "Show @imqueue CLI help",
description: "Run `imq [command] --help` and return the exact, version-accurate flags for a command (e.g. 'service create', 'client generate'). Use this to discover the flags to pass to create_service. No side effects.",
...meta("Show @imqueue CLI help", "read", false), // shells out to a local binary, read-only
description: "Run `imq [command] --help` and return the exact, version-accurate flags for a command (e.g. 'service create', 'client generate'). The flags it lists are the ones create_service accepts. Read-only: it prints help and exits.",
inputSchema: {

@@ -189,15 +210,15 @@ command: z.string().optional().describe("A subcommand, e.g. 'service create' (omit for top-level help)"),

}, async ({ command }) => {
if (local) {
try {
return text(await cli.cliHelp(command));
}
catch (e) {
return fail(e);
}
try {
return text(await cli.cliHelp(command));
}
return handoff("cli_help", "(it shells out to your local `imq` for version-accurate flags)");
catch (e) {
return fail(e);
}
});
server.registerTool("create_service", {
title: "Create an @imqueue service with the CLI",
description: "Scaffold a real, provider-wired @imqueue service via `imq service create`. Runs as a DRY-RUN by default (shows the plan, writes nothing). Set apply=true to actually create it — that writes files and may init git / configure CI / push to a remote, so only apply with the user's intent. Pass CLI flags (see cli_help) to avoid interactive prompts. Requires `imq` (see cli_status). On the hosted server this returns an offline scaffold instead.",
// Not "destructive" — it creates a new project rather than damaging an
// existing one — but it is open-world, because apply=true can configure a
// VCS remote and push to it.
...meta("Create an @imqueue service with the CLI", "write", true),
description: "Scaffold a real, provider-wired @imqueue service via `imq service create`. Runs as a DRY-RUN by default: it shows the plan and writes nothing. With apply=true it writes files into the target directory and may initialise git, configure CI and push to a remote. Accepts `imq` flags (cli_help lists them) to avoid interactive prompts. Requires the `imq` CLI.",
inputSchema: {

@@ -214,15 +235,12 @@ name: z.string().describe("Service name, e.g. 'user'"),

}, async ({ name, path, flags, cwd, apply }) => {
if (local) {
try {
return text(await cli.createService({ name, path, flags, cwd, apply }));
}
catch (e) {
return fail(e);
}
try {
return text(await cli.createService({ name, path, flags, cwd, apply }));
}
return handoff("create_service", "(it writes files into your project and can init git / configure CI / push to a remote)", scaffoldService(name));
catch (e) {
return fail(e);
}
});
server.registerTool("generate_client", {
title: "Generate a typed client with the CLI",
description: "Run `imq client generate <Service>` to emit the real, fully-typed client. The target service must be RUNNING (the CLI introspects the live service). Requires `imq` (see cli_status). On the hosted server this returns an offline client snippet instead.",
...meta("Generate a typed client with the CLI", "write", true), // introspects a live service over its queue
description: "Run `imq client generate <Service>` to emit the real, fully-typed client, writing it into the output directory. The target service must be RUNNING — the CLI introspects the live service over its message queue. Requires the `imq` CLI.",
inputSchema: {

@@ -234,15 +252,14 @@ service: z.string().describe("Service name to generate a client for, e.g. 'User' / 'UserService'"),

}, async ({ service, path, cwd }) => {
if (local) {
try {
return text(await cli.generateClient(service, path, cwd));
}
catch (e) {
return fail(e);
}
try {
return text(await cli.generateClient(service, path, cwd));
}
return handoff("generate_client", "(it introspects a service running on your machine to emit the real typed client)", scaffoldClient(service));
catch (e) {
return fail(e);
}
});
server.registerTool("cli_install", {
title: "Install the @imqueue CLI",
description: "Install @imqueue/cli globally via `npm install -g @imqueue/cli`. Use when cli_status reports it's missing. A global install may require a user-writable npm prefix or elevated permissions.",
// Destructive: a global install replaces whatever `imq` is already there.
// Open-world: it downloads from the npm registry.
...meta("Install the @imqueue CLI", "destructive", true),
description: "Install @imqueue/cli globally via `npm install -g @imqueue/cli`, replacing any `imq` already installed. cli_status reports whether it is already present. A global install may require a user-writable npm prefix or elevated permissions.",
inputSchema: {

@@ -252,15 +269,14 @@ version: z.string().optional().describe("npm version/tag to install (default 'latest')"),

}, async ({ version: v }) => {
if (local) {
try {
return text(await cli.installCli(v));
}
catch (e) {
return fail(e);
}
try {
return text(await cli.installCli(v));
}
return handoff("cli_install", "(it installs the `imq` binary onto your machine with npm)");
catch (e) {
return fail(e);
}
});
server.registerTool("fleet", {
title: "Control the local @imqueue services fleet",
description: "Run `imq ctl <action>` over a directory of service repositories. `status` is read-only; `start`/`stop`/`restart` change running processes. Requires `imq` (see cli_status).",
// `status` is read-only but `stop`/`restart` kill running processes, and the
// hint describes the worst case the tool accepts.
...meta("Control the local @imqueue services fleet", "destructive", false),
description: "Run `imq ctl <action>` over a directory of service repositories. `status` reports what is running and changes nothing; `start`, `stop` and `restart` change which processes are running on this machine. Requires the `imq` CLI.",
inputSchema: {

@@ -276,15 +292,13 @@ action: z.enum(["start", "stop", "restart", "status"]).describe("What to do to the fleet"),

}, async ({ action, path, services, update, calm, verbose, cwd }) => {
if (local) {
try {
return text(await cli.fleet({ action, path, services, update, calm, verbose, cwd }));
}
catch (e) {
return fail(e);
}
try {
return text(await cli.fleet({ action, path, services, update, calm, verbose, cwd }));
}
return handoff("fleet", "(it starts/stops and inspects @imqueue service processes running on your machine)");
catch (e) {
return fail(e);
}
});
server.registerTool("config", {
title: "Manage @imqueue CLI configuration",
description: "Run `imq config <action>`. `check` = is config initialized; `get [option]` = read a value (or list all); `set option value` = write a value (nested keys use a dot-path, e.g. 'ci.provider'); `init` = interactive setup (prefer `set` for automation — `init` will time out non-interactively). Requires `imq` (see cli_status).",
// `set` overwrites an existing value; `init` rewrites the file.
...meta("Manage @imqueue CLI configuration", "destructive", false),
description: "Run `imq config <action>`. `check` = is config initialized; `get [option]` = read a value (or list all); `set option value` = overwrite a value (nested keys use a dot-path, e.g. 'ci.provider'); `init` = interactive setup, which will time out when run non-interactively, so `set` is the automatable one. Requires the `imq` CLI.",
inputSchema: {

@@ -297,15 +311,13 @@ action: z.enum(["check", "get", "set", "init"]).describe("Config operation"),

}, async ({ action, option, value, cwd }) => {
if (local) {
try {
return text(await cli.config({ action, option, value, cwd }));
}
catch (e) {
return fail(e);
}
try {
return text(await cli.config({ action, option, value, cwd }));
}
return handoff("config", "(it reads/writes the `imq` CLI configuration on your machine)");
catch (e) {
return fail(e);
}
});
server.registerTool("logs", {
title: "Read or clean @imqueue fleet logs",
description: "Work with logs of services started by `imq ctl`. action='dump' (default) returns the current combined logs and exits — it never follows/streams, and output is capped. action='clean' deletes collected logs. Requires `imq` (see cli_status).",
// `clean` deletes the collected logs.
...meta("Read or clean @imqueue fleet logs", "destructive", false),
description: "Work with logs of services started by `imq ctl`. action='dump' (default) returns the current combined logs and exits — it never follows/streams, and output is capped. action='clean' deletes the collected log files. Requires the `imq` CLI.",
inputSchema: {

@@ -318,23 +330,45 @@ action: z.enum(["dump", "clean"]).optional().describe("dump = read current logs (default); clean = delete collected logs"),

}, async ({ action, services, prefix, cwd }) => {
if (local) {
try {
return text(await cli.logs({ action, services, prefix, cwd }));
}
catch (e) {
return fail(e);
}
try {
return text(await cli.logs({ action, services, prefix, cwd }));
}
return handoff("logs", "(it reads logs of @imqueue services running on your machine)");
catch (e) {
return fail(e);
}
});
// --- Remote-only helper ----------------------------------------------------
// A discoverable "how do I get the full thing" tool on the hosted server.
if (!local) {
server.registerTool("install_locally", {
title: "Install the full @imqueue MCP locally",
description: "Return the exact steps to install the full @imqueue MCP server on your machine (needed for the CLI/fleet tools, which act on your local project and services). The hosted server covers docs search and scaffolding; everything else runs locally.",
inputSchema: {},
}, async () => text(LOCAL_INSTALL));
}
/**
* Remote-only. The hosted server does not offer the CLI-backed tools, so it needs
* a discoverable answer to "how do I get the ones that act on my machine?".
* Returns instructions — it installs nothing, which is why it is not called
* `install_locally`.
*/
function registerInstallGuide(server) {
server.registerTool("local_install_guide", {
...meta("How to install the @imqueue MCP server locally", "read", false), // returns static text
description: "Return the setup instructions for running the full @imqueue MCP server on your own machine. The local server adds the CLI-backed tools, which act on your project files and running services and so cannot be offered by a hosted server. Returns instructions only — it installs nothing.",
inputSchema: {},
}, async () => text(LOCAL_INSTALL));
}
/**
* Create a fully-configured @imqueue MCP server.
* @param version Version string to report (kept in sync with package.json by the caller).
* @param mode "local" (docs + scaffold + CLI tools) or "remote" (docs + scaffold + install guide).
* @param cli CLI-backed handlers; required for the CLI tools to be registered at all.
*/
export function createServer(opts) {
const { version, mode, cli } = opts;
const server = new McpServer({ name: "imqueue", version });
registerSharedTools(server);
// `cli` is what actually makes the CLI tools work, so it — not the mode string
// alone — decides whether they are advertised. A "local" server built without
// handlers falls back to the hosted surface instead of listing tools that would
// throw.
if (mode === "local" && cli) {
registerCliTools(server, cli);
}
else {
registerInstallGuide(server);
}
return server;
}
//# sourceMappingURL=server.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
{
"name": "@imqueue/mcp",
"version": "2.3.0",
"version": "3.0.0",
"mcpName": "org.imqueue/mcp",

@@ -42,2 +42,3 @@ "description": "Model Context Protocol server for @imqueue — lets AI coding agents search the docs and scaffold typed services & clients.",

"smoke": "node scripts/smoke.mjs",
"smoke:remote": "node scripts/remote-smoke.mjs",
"version": "node scripts/sync-version.mjs && git add server.json",

@@ -44,0 +45,0 @@ "prepublishOnly": "npm run build",

@@ -11,2 +11,6 @@ # @imqueue/mcp

Two surfaces, and they are not the same. The **local** server (`npx -y @imqueue/mcp`) has all 13 tools. The **hosted** server ([`mcp.imqueue.org/mcp`](#hosted-server-no-install)) has six, all read-only — see [below](#hosted-server-no-install) for why.
### Hosted + local
| Tool | What it does |

@@ -20,6 +24,8 @@ |---|---|

### CLI-backed tools (require `@imqueue/cli` on PATH)
All five are read-only: they fetch or generate text and write nothing.
When the `imq` CLI is installed locally, these drive the **real** CLI:
### CLI-backed tools — local only (require `@imqueue/cli` on PATH)
These drive the **real** CLI, so they act on the machine the server runs on. They exist in the local install only; the hosted server does not register them.
| Tool | What it does |

@@ -71,2 +77,14 @@ |---|---|

## Hosted server (no install)
If your client supports remote MCP servers and you only need docs and scaffolding, point it at the hosted endpoint instead:
```json
{ "mcpServers": { "imqueue": { "url": "https://mcp.imqueue.org/mcp" } } }
```
It serves six tools, **all read-only**: the five above plus `local_install_guide`, which returns the setup steps for the local install.
**It does not offer the CLI-backed tools, by design.** Those act on *your* machine — your project files, your running services, your CLI config — which a server running on Cloudflare's edge cannot reach. Advertising them there would mean listing tools that can never do what their names say, so they are not registered at all in remote mode. If you need them, install locally.
## Develop

@@ -78,5 +96,15 @@

npm run dev # run from source with tsx
npm run smoke # JSON-RPC handshake + tools/list + tool calls
npm run smoke # local surface: handshake + tools/list + annotations + tool calls
```
The hosted surface has its own check, because it is a different contract:
```bash
npm run dev:worker # wrangler dev on :8787
node scripts/remote-smoke.mjs http://localhost:8787/mcp
npm run smoke:remote # or against production
```
It asserts the **exact** six-tool list and that every one of them is read-only — the assertion that stops a future refactor from quietly re-exposing a CLI tool on the hosted endpoint.
## Example

@@ -83,0 +111,0 @@

+18
-6

@@ -12,3 +12,3 @@ # @imqueue/mcp — design spec

Three capabilities, thirteen tools:
Three capabilities, thirteen tools locally:

@@ -22,2 +22,6 @@ - **Docs access** — `search_docs`, `get_doc`, `list_packages`

The first two capabilities are read-only and run anywhere; the CLI bridge acts on the
machine the server runs on, so the hosted endpoint carries the first two plus a
`local_install_guide` and nothing else — six read-only tools.
## 2. Architecture

@@ -36,3 +40,6 @@

- **Transport:** stdio (the universal local-MCP transport; works with every host
today). A hosted **Streamable HTTP** variant is a later option (§7).
today). The hosted **Streamable HTTP** variant since planned in §7 now exists at
`mcp.imqueue.org/mcp`; it shares this code and serves the read-only subset
(docs + scaffolding + a local-install guide), because the CLI-backed tools act on
the caller's own machine. See `worker/README.md`.
- **Runtime:** Node ≥ 18, TypeScript, `@modelcontextprotocol/sdk` high-level

@@ -127,9 +134,14 @@ `McpServer`, `zod` input schemas. Ships as an npm bin (`npx -y @imqueue/mcp`).

`npm run smoke` spawns the built server and drives the JSON-RPC handshake:
`initialize` → `tools/list` (asserts all five) → `tools/call` for `scaffold_service`
and `list_packages` (offline) and `search_docs` (live). CI can run it on every push.
`initialize` → `tools/list` (asserts the exact local tool list, plus a title and
all three behaviour hints on every tool) → `tools/call` for `scaffold_service` and
`list_packages` (offline) and `search_docs` (live). CI can run it on every push.
`node scripts/remote-smoke.mjs [url]` does the same for the hosted endpoint, where
the contract is stricter: the exact six-tool list and `readOnlyHint: true` on all
of them.
## 7. Roadmap
- **Streamable HTTP** deployment (a hosted endpoint) for zero-install use and for
hosts that prefer remote servers.
- ~~**Streamable HTTP** deployment (a hosted endpoint) for zero-install use and for
hosts that prefer remote servers.~~ — shipped: `mcp.imqueue.org/mcp`.
- **`generate_client` for real** — spin up against a reachable running service and

@@ -136,0 +148,0 @@ return the actual generated client.