Repository files navigation

@imqueue/mcp

smithery badge

A Model Context Protocol server for @imqueue. It lets AI coding agents (Claude Code, ChatGPT, Codex, Cursor, VS Code, JetBrains, …) search the @imqueue documentation, scaffold typed services & clients, and drive the imq CLI — so they generate correct, idiomatic @imqueue code instead of guessing.

📖 Full documentation: imqueue.org/mcp — per-client setup, complete tools reference, agent workflows and the safety model.

Tools

Two surfaces, and they are not the same. The local server (npx -y @imqueue/mcp) has all 14 tools. The hosted server (mcp.imqueue.org/mcp) has seven, all read-only — see below for why.

Hosted + local

ToolWhat it does
search_docsSearch the official docs (guides, tutorial, CLI manual, API reference, articles) and return the most relevant pages + URLs.
get_docFetch the full markdown of a doc page by URL.
list_packagesList the documented @imqueue packages with install commands, current versions and licences.
package_statusThe current version, licence, minimum Node and last release date of any published @imqueue package, or all of them.
scaffold_serviceGenerate an IMQService subclass with @expose()d, JSDoc-typed methods + a bootstrap (offline, no CLI needed).
scaffold_clientShow how to generate and use the fully-typed client for a service (offline).

All six are read-only: they fetch or generate text and write nothing.

All five also declare an MCP outputSchema and return structuredContent alongside the human-readable markdown, so a client can consume results as data — take results[0].url from search_docs and hand it to get_doc, or write scaffold_service's files[] straight to disk — instead of parsing prose and code fences. For the scaffolders and the catalogue the markdown is rendered from that same structure, so the two can't drift.

get_doc's schema is metadata only, on purpose — and that turns out to be the more interesting design than having no schema at all. A schema obliges the server to send structuredContent, but nothing says structuredContent must repeat what is in content: it describes the structured part of the answer. So the page travels once, in content, and the schema carries url (the mirror actually fetched, which is not always the URL you passed), mimeType, bytes (so a caller can decide before reading) and truncated. Putting markdown in there as well would have doubled the largest response the server can produce — measured on /api/rpc/latest/, 16.6 kB of text plus 16.6 kB of structure for one read. The absence of a body field is itself self-describing: a caller reading the schema sees no content field and knows the page is in content, which is where every client already looks.

The CLI-backed tools have no schema: they return imq stdout, which has no shape worth promising.

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.

ToolWhat it does
cli_statusDetect imq and report its version.
cli_installInstall @imqueue/cli globally (npm i -g @imqueue/cli) when it's missing.
cli_helpimq <command> --help — exact, version-accurate flags (no side effects).
create_serviceimq service createdry-run by default (writes nothing); pass apply: true to actually create the project.
generate_clientimq client generate <Service> — the real typed client (the service must be running).
fleetimq ctl <start|stop|restart|status> — manage a directory of service repos. status is read-only.
configimq config <check|get|set|init> — read/write CLI configuration (set for automation; init is interactive).
logsimq logdump current fleet logs (never follows; capped) or clean them.

Calls run with stdin closed and a timeout, so a missing-flag prompt fails fast instead of hanging. If imq isn't installed, run cli_install or use the offline scaffold_* tools.

Docs are fetched live from imqueue.org's machine-readable feeds, so the server never ships stale content: /llms.txt for the curated page index, per-page …/index.md mirrors for bodies, /search-index.json, /search-text.json and /search-sections.json for the search corpus, and /status.json for package versions and licences. imqueue.com's /llms.txt and peer feeds are read too, for the commercial pages. Nothing outside those two hosts is ever fetched — the allowlist is enforced in src/docs.ts and refuses anything else.

Versions and licences come from that last feed rather than being compiled in, deliberately: @imqueue releases far more often than this server does, so a baked-in version would be wrong within days and wrong with total confidence. npmjs.com serves bot detection to an unattended fetch, which is why imqueue.org reads the registry at build time and republishes the answer where anything can read it.

Install

Requires Node.js ≥ 18. No build step for users — run straight from npm:

npx -y @imqueue/mcp

Claude Code

claude mcp add imqueue -- npx -y @imqueue/mcp

ChatGPT & Codex

@imqueue is listed in OpenAI's plugin directory — shared by ChatGPT and Codex. In ChatGPT, open the Plugins tab and install it; in the Codex CLI, run /plugins. No config file, no Node.

That route installs the hosted server, so it is the seven read-only tools and none of the CLI bridge (see below). Codex can run the local server alongside it — MCP servers live under mcp_servers in ~/.codex/config.toml, in TOML rather than the usual JSON:

[mcp_servers.imqueue]
command = "npx"args = ["-y", "@imqueue/mcp"]

ChatGPT connects to MCP servers over HTTP only, so it has no local option; the plugin is all of it there.

Other clients (Cursor, Claude Desktop, JetBrains, Windsurf, Zed, …)

Add to your MCP config (.cursor/mcp.json, claude_desktop_config.json, …):

{
"mcpServers": {
"imqueue": {
"command": "npx",
"args": ["-y", "@imqueue/mcp"]
}
}
}

VS Code and Visual Studio use a top-level servers key with "type": "stdio" instead of mcpServers. See imqueue.org/mcp/installation for the exact config file path and snippet for every client.

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:

{ "mcpServers": { "imqueue": { "url": "https://mcp.imqueue.org/mcp" } } }

It serves seven tools, all read-only: the six above plus local_install_guide, which returns the setup steps for the local install. This is also what OpenAI's plugin directory installs for ChatGPT and Codex — the same endpoint under the same limits, packaged as one click.

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

npm install
npm run build # tsc -> dist/
npm run dev # run from source with tsx
npm test# unit tests (node:test under tsx) — no network needed
npm run smoke # local surface: handshake + tools/list + annotations + tool calls
npm run verify # all of the above plus both type-checks; also the publish gate

The unit tests cover what does not need the network: the ranker on a fixed corpus, the exact identifiers the scaffolders emit, URL resolution, telemetry, and the hosted Worker's HTTP surface — worker/worker.ts is a plain fetch handler, so it is called with a Request and asserted on the Response, with no wrangler and no deploy.

The hosted surface has its own check, because it is a different contract:

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 seven-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

User:"Create an @imqueue user service with a getUser(id) method."

The agent calls scaffold_service({ name: "user", methods: [{ name: "getUser", params: [{ name: "id", type: "number" }], returns: "User" }] }) and gets a ready-to-paste UserService + bootstrap, then search_docs("run a service") / get_doc(...) to wire it up.

License

GPL-3.0 — free and open source.

Commercial licensing

Need to use @imqueue/mcp in a closed-source product, or want commercial support? A commercial license is available — see imqueue.com. Full docs: imqueue.org/mcp. See SPEC.md for the design and registry-distribution plan.

About

Model Context Protocol (MCP) server for @imqueue — lets AI coding agents (Claude Code, Cursor and others) search the docs, scaffold typed services & clients and use @imqueue/cli live.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

@imqueue/mcp

smithery badge

A Model Context Protocol server for @imqueue. It lets AI coding agents (Claude Code, ChatGPT, Codex, Cursor, VS Code, JetBrains, …) search the @imqueue documentation, scaffold typed services & clients, and drive the imq CLI — so they generate correct, idiomatic @imqueue code instead of guessing.

📖 Full documentation: imqueue.org/mcp — per-client setup, complete tools reference, agent workflows and the safety model.

Tools

Two surfaces, and they are not the same. The local server (npx -y @imqueue/mcp) has all 14 tools. The hosted server (mcp.imqueue.org/mcp) has seven, all read-only — see below for why.

Hosted + local

ToolWhat it does
search_docsSearch the official docs (guides, tutorial, CLI manual, API reference, articles) and return the most relevant pages + URLs.
get_docFetch the full markdown of a doc page by URL.
list_packagesList the documented @imqueue packages with install commands, current versions and licences.
package_statusThe current version, licence, minimum Node and last release date of any published @imqueue package, or all of them.
scaffold_serviceGenerate an IMQService subclass with @expose()d, JSDoc-typed methods + a bootstrap (offline, no CLI needed).
scaffold_clientShow how to generate and use the fully-typed client for a service (offline).

All six are read-only: they fetch or generate text and write nothing.

All five also declare an MCP outputSchema and return structuredContent alongside the human-readable markdown, so a client can consume results as data — take results[0].url from search_docs and hand it to get_doc, or write scaffold_service's files[] straight to disk — instead of parsing prose and code fences. For the scaffolders and the catalogue the markdown is rendered from that same structure, so the two can't drift.

get_doc's schema is metadata only, on purpose — and that turns out to be the more interesting design than having no schema at all. A schema obliges the server to send structuredContent, but nothing says structuredContent must repeat what is in content: it describes the structured part of the answer. So the page travels once, in content, and the schema carries url (the mirror actually fetched, which is not always the URL you passed), mimeType, bytes (so a caller can decide before reading) and truncated. Putting markdown in there as well would have doubled the largest response the server can produce — measured on /api/rpc/latest/, 16.6 kB of text plus 16.6 kB of structure for one read. The absence of a body field is itself self-describing: a caller reading the schema sees no content field and knows the page is in content, which is where every client already looks.

The CLI-backed tools have no schema: they return imq stdout, which has no shape worth promising.

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.

ToolWhat it does
cli_statusDetect imq and report its version.
cli_installInstall @imqueue/cli globally (npm i -g @imqueue/cli) when it's missing.
cli_helpimq <command> --help — exact, version-accurate flags (no side effects).
create_serviceimq service createdry-run by default (writes nothing); pass apply: true to actually create the project.
generate_clientimq client generate <Service> — the real typed client (the service must be running).
fleetimq ctl <start|stop|restart|status> — manage a directory of service repos. status is read-only.
configimq config <check|get|set|init> — read/write CLI configuration (set for automation; init is interactive).
logsimq logdump current fleet logs (never follows; capped) or clean them.

Calls run with stdin closed and a timeout, so a missing-flag prompt fails fast instead of hanging. If imq isn't installed, run cli_install or use the offline scaffold_* tools.

Docs are fetched live from imqueue.org's machine-readable feeds, so the server never ships stale content: /llms.txt for the curated page index, per-page …/index.md mirrors for bodies, /search-index.json, /search-text.json and /search-sections.json for the search corpus, and /status.json for package versions and licences. imqueue.com's /llms.txt and peer feeds are read too, for the commercial pages. Nothing outside those two hosts is ever fetched — the allowlist is enforced in src/docs.ts and refuses anything else.

Versions and licences come from that last feed rather than being compiled in, deliberately: @imqueue releases far more often than this server does, so a baked-in version would be wrong within days and wrong with total confidence. npmjs.com serves bot detection to an unattended fetch, which is why imqueue.org reads the registry at build time and republishes the answer where anything can read it.

Install

Requires Node.js ≥ 18. No build step for users — run straight from npm:

npx -y @imqueue/mcp

Claude Code

claude mcp add imqueue -- npx -y @imqueue/mcp

ChatGPT & Codex

@imqueue is listed in OpenAI's plugin directory — shared by ChatGPT and Codex. In ChatGPT, open the Plugins tab and install it; in the Codex CLI, run /plugins. No config file, no Node.

That route installs the hosted server, so it is the seven read-only tools and none of the CLI bridge (see below). Codex can run the local server alongside it — MCP servers live under mcp_servers in ~/.codex/config.toml, in TOML rather than the usual JSON:

[mcp_servers.imqueue]
command = "npx"args = ["-y", "@imqueue/mcp"]

ChatGPT connects to MCP servers over HTTP only, so it has no local option; the plugin is all of it there.

Other clients (Cursor, Claude Desktop, JetBrains, Windsurf, Zed, …)

Add to your MCP config (.cursor/mcp.json, claude_desktop_config.json, …):

{
"mcpServers": {
"imqueue": {
"command": "npx",
"args": ["-y", "@imqueue/mcp"]
}
}
}

VS Code and Visual Studio use a top-level servers key with "type": "stdio" instead of mcpServers. See imqueue.org/mcp/installation for the exact config file path and snippet for every client.

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:

{ "mcpServers": { "imqueue": { "url": "https://mcp.imqueue.org/mcp" } } }

It serves seven tools, all read-only: the six above plus local_install_guide, which returns the setup steps for the local install. This is also what OpenAI's plugin directory installs for ChatGPT and Codex — the same endpoint under the same limits, packaged as one click.

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

npm install
npm run build # tsc -> dist/
npm run dev # run from source with tsx
npm test# unit tests (node:test under tsx) — no network needed
npm run smoke # local surface: handshake + tools/list + annotations + tool calls
npm run verify # all of the above plus both type-checks; also the publish gate

The unit tests cover what does not need the network: the ranker on a fixed corpus, the exact identifiers the scaffolders emit, URL resolution, telemetry, and the hosted Worker's HTTP surface — worker/worker.ts is a plain fetch handler, so it is called with a Request and asserted on the Response, with no wrangler and no deploy.

The hosted surface has its own check, because it is a different contract:

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 seven-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

User:"Create an @imqueue user service with a getUser(id) method."

The agent calls scaffold_service({ name: "user", methods: [{ name: "getUser", params: [{ name: "id", type: "number" }], returns: "User" }] }) and gets a ready-to-paste UserService + bootstrap, then search_docs("run a service") / get_doc(...) to wire it up.

License

GPL-3.0 — free and open source.

Commercial licensing

Need to use @imqueue/mcp in a closed-source product, or want commercial support? A commercial license is available — see imqueue.com. Full docs: imqueue.org/mcp. See SPEC.md for the design and registry-distribution plan.

About

Model Context Protocol (MCP) server for @imqueue — lets AI coding agents (Claude Code, Cursor and others) search the docs, scaffold typed services & clients and use @imqueue/cli live.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

@imqueue/mcp

smithery badge

A Model Context Protocol server for @imqueue. It lets AI coding agents (Claude Code, ChatGPT, Codex, Cursor, VS Code, JetBrains, …) search the @imqueue documentation, scaffold typed services & clients, and drive the imq CLI — so they generate correct, idiomatic @imqueue code instead of guessing.

📖 Full documentation: imqueue.org/mcp — per-client setup, complete tools reference, agent workflows and the safety model.

Tools

Two surfaces, and they are not the same. The local server (npx -y @imqueue/mcp) has all 14 tools. The hosted server (mcp.imqueue.org/mcp) has seven, all read-only — see below for why.

Hosted + local

ToolWhat it does
search_docsSearch the official docs (guides, tutorial, CLI manual, API reference, articles) and return the most relevant pages + URLs.
get_docFetch the full markdown of a doc page by URL.
list_packagesList the documented @imqueue packages with install commands, current versions and licences.
package_statusThe current version, licence, minimum Node and last release date of any published @imqueue package, or all of them.
scaffold_serviceGenerate an IMQService subclass with @expose()d, JSDoc-typed methods + a bootstrap (offline, no CLI needed).
scaffold_clientShow how to generate and use the fully-typed client for a service (offline).

All six are read-only: they fetch or generate text and write nothing.

All five also declare an MCP outputSchema and return structuredContent alongside the human-readable markdown, so a client can consume results as data — take results[0].url from search_docs and hand it to get_doc, or write scaffold_service's files[] straight to disk — instead of parsing prose and code fences. For the scaffolders and the catalogue the markdown is rendered from that same structure, so the two can't drift.

get_doc's schema is metadata only, on purpose — and that turns out to be the more interesting design than having no schema at all. A schema obliges the server to send structuredContent, but nothing says structuredContent must repeat what is in content: it describes the structured part of the answer. So the page travels once, in content, and the schema carries url (the mirror actually fetched, which is not always the URL you passed), mimeType, bytes (so a caller can decide before reading) and truncated. Putting markdown in there as well would have doubled the largest response the server can produce — measured on /api/rpc/latest/, 16.6 kB of text plus 16.6 kB of structure for one read. The absence of a body field is itself self-describing: a caller reading the schema sees no content field and knows the page is in content, which is where every client already looks.

The CLI-backed tools have no schema: they return imq stdout, which has no shape worth promising.

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.

ToolWhat it does
cli_statusDetect imq and report its version.
cli_installInstall @imqueue/cli globally (npm i -g @imqueue/cli) when it's missing.
cli_helpimq <command> --help — exact, version-accurate flags (no side effects).
create_serviceimq service createdry-run by default (writes nothing); pass apply: true to actually create the project.
generate_clientimq client generate <Service> — the real typed client (the service must be running).
fleetimq ctl <start|stop|restart|status> — manage a directory of service repos. status is read-only.
configimq config <check|get|set|init> — read/write CLI configuration (set for automation; init is interactive).
logsimq logdump current fleet logs (never follows; capped) or clean them.

Calls run with stdin closed and a timeout, so a missing-flag prompt fails fast instead of hanging. If imq isn't installed, run cli_install or use the offline scaffold_* tools.

Docs are fetched live from imqueue.org's machine-readable feeds, so the server never ships stale content: /llms.txt for the curated page index, per-page …/index.md mirrors for bodies, /search-index.json, /search-text.json and /search-sections.json for the search corpus, and /status.json for package versions and licences. imqueue.com's /llms.txt and peer feeds are read too, for the commercial pages. Nothing outside those two hosts is ever fetched — the allowlist is enforced in src/docs.ts and refuses anything else.

Versions and licences come from that last feed rather than being compiled in, deliberately: @imqueue releases far more often than this server does, so a baked-in version would be wrong within days and wrong with total confidence. npmjs.com serves bot detection to an unattended fetch, which is why imqueue.org reads the registry at build time and republishes the answer where anything can read it.

Install

Requires Node.js ≥ 18. No build step for users — run straight from npm:

npx -y @imqueue/mcp

Claude Code

claude mcp add imqueue -- npx -y @imqueue/mcp

ChatGPT & Codex

@imqueue is listed in OpenAI's plugin directory — shared by ChatGPT and Codex. In ChatGPT, open the Plugins tab and install it; in the Codex CLI, run /plugins. No config file, no Node.

That route installs the hosted server, so it is the seven read-only tools and none of the CLI bridge (see below). Codex can run the local server alongside it — MCP servers live under mcp_servers in ~/.codex/config.toml, in TOML rather than the usual JSON:

[mcp_servers.imqueue]
command = "npx"args = ["-y", "@imqueue/mcp"]

ChatGPT connects to MCP servers over HTTP only, so it has no local option; the plugin is all of it there.

Other clients (Cursor, Claude Desktop, JetBrains, Windsurf, Zed, …)

Add to your MCP config (.cursor/mcp.json, claude_desktop_config.json, …):

{
"mcpServers": {
"imqueue": {
"command": "npx",
"args": ["-y", "@imqueue/mcp"]
}
}
}

VS Code and Visual Studio use a top-level servers key with "type": "stdio" instead of mcpServers. See imqueue.org/mcp/installation for the exact config file path and snippet for every client.

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:

{ "mcpServers": { "imqueue": { "url": "https://mcp.imqueue.org/mcp" } } }

It serves seven tools, all read-only: the six above plus local_install_guide, which returns the setup steps for the local install. This is also what OpenAI's plugin directory installs for ChatGPT and Codex — the same endpoint under the same limits, packaged as one click.

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

npm install
npm run build # tsc -> dist/
npm run dev # run from source with tsx
npm test# unit tests (node:test under tsx) — no network needed
npm run smoke # local surface: handshake + tools/list + annotations + tool calls
npm run verify # all of the above plus both type-checks; also the publish gate

The unit tests cover what does not need the network: the ranker on a fixed corpus, the exact identifiers the scaffolders emit, URL resolution, telemetry, and the hosted Worker's HTTP surface — worker/worker.ts is a plain fetch handler, so it is called with a Request and asserted on the Response, with no wrangler and no deploy.

The hosted surface has its own check, because it is a different contract:

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 seven-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

User:"Create an @imqueue user service with a getUser(id) method."

The agent calls scaffold_service({ name: "user", methods: [{ name: "getUser", params: [{ name: "id", type: "number" }], returns: "User" }] }) and gets a ready-to-paste UserService + bootstrap, then search_docs("run a service") / get_doc(...) to wire it up.

License

GPL-3.0 — free and open source.

Commercial licensing

Need to use @imqueue/mcp in a closed-source product, or want commercial support? A commercial license is available — see imqueue.com. Full docs: imqueue.org/mcp. See SPEC.md for the design and registry-distribution plan.

About

Model Context Protocol (MCP) server for @imqueue — lets AI coding agents (Claude Code, Cursor and others) search the docs, scaffold typed services & clients and use @imqueue/cli live.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

@imqueue/mcp

smithery badge

A Model Context Protocol server for @imqueue. It lets AI coding agents (Claude Code, ChatGPT, Codex, Cursor, VS Code, JetBrains, …) search the @imqueue documentation, scaffold typed services & clients, and drive the imq CLI — so they generate correct, idiomatic @imqueue code instead of guessing.

📖 Full documentation: imqueue.org/mcp — per-client setup, complete tools reference, agent workflows and the safety model.

Tools

Two surfaces, and they are not the same. The local server (npx -y @imqueue/mcp) has all 14 tools. The hosted server (mcp.imqueue.org/mcp) has seven, all read-only — see below for why.

Hosted + local

ToolWhat it does
search_docsSearch the official docs (guides, tutorial, CLI manual, API reference, articles) and return the most relevant pages + URLs.
get_docFetch the full markdown of a doc page by URL.
list_packagesList the documented @imqueue packages with install commands, current versions and licences.
package_statusThe current version, licence, minimum Node and last release date of any published @imqueue package, or all of them.
scaffold_serviceGenerate an IMQService subclass with @expose()d, JSDoc-typed methods + a bootstrap (offline, no CLI needed).
scaffold_clientShow how to generate and use the fully-typed client for a service (offline).

All six are read-only: they fetch or generate text and write nothing.

All five also declare an MCP outputSchema and return structuredContent alongside the human-readable markdown, so a client can consume results as data — take results[0].url from search_docs and hand it to get_doc, or write scaffold_service's files[] straight to disk — instead of parsing prose and code fences. For the scaffolders and the catalogue the markdown is rendered from that same structure, so the two can't drift.

get_doc's schema is metadata only, on purpose — and that turns out to be the more interesting design than having no schema at all. A schema obliges the server to send structuredContent, but nothing says structuredContent must repeat what is in content: it describes the structured part of the answer. So the page travels once, in content, and the schema carries url (the mirror actually fetched, which is not always the URL you passed), mimeType, bytes (so a caller can decide before reading) and truncated. Putting markdown in there as well would have doubled the largest response the server can produce — measured on /api/rpc/latest/, 16.6 kB of text plus 16.6 kB of structure for one read. The absence of a body field is itself self-describing: a caller reading the schema sees no content field and knows the page is in content, which is where every client already looks.

The CLI-backed tools have no schema: they return imq stdout, which has no shape worth promising.

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.

ToolWhat it does
cli_statusDetect imq and report its version.
cli_installInstall @imqueue/cli globally (npm i -g @imqueue/cli) when it's missing.
cli_helpimq <command> --help — exact, version-accurate flags (no side effects).
create_serviceimq service createdry-run by default (writes nothing); pass apply: true to actually create the project.
generate_clientimq client generate <Service> — the real typed client (the service must be running).
fleetimq ctl <start|stop|restart|status> — manage a directory of service repos. status is read-only.
configimq config <check|get|set|init> — read/write CLI configuration (set for automation; init is interactive).
logsimq logdump current fleet logs (never follows; capped) or clean them.

Calls run with stdin closed and a timeout, so a missing-flag prompt fails fast instead of hanging. If imq isn't installed, run cli_install or use the offline scaffold_* tools.

Docs are fetched live from imqueue.org's machine-readable feeds, so the server never ships stale content: /llms.txt for the curated page index, per-page …/index.md mirrors for bodies, /search-index.json, /search-text.json and /search-sections.json for the search corpus, and /status.json for package versions and licences. imqueue.com's /llms.txt and peer feeds are read too, for the commercial pages. Nothing outside those two hosts is ever fetched — the allowlist is enforced in src/docs.ts and refuses anything else.

Versions and licences come from that last feed rather than being compiled in, deliberately: @imqueue releases far more often than this server does, so a baked-in version would be wrong within days and wrong with total confidence. npmjs.com serves bot detection to an unattended fetch, which is why imqueue.org reads the registry at build time and republishes the answer where anything can read it.

Install

Requires Node.js ≥ 18. No build step for users — run straight from npm:

npx -y @imqueue/mcp

Claude Code

claude mcp add imqueue -- npx -y @imqueue/mcp

ChatGPT & Codex

@imqueue is listed in OpenAI's plugin directory — shared by ChatGPT and Codex. In ChatGPT, open the Plugins tab and install it; in the Codex CLI, run /plugins. No config file, no Node.

That route installs the hosted server, so it is the seven read-only tools and none of the CLI bridge (see below). Codex can run the local server alongside it — MCP servers live under mcp_servers in ~/.codex/config.toml, in TOML rather than the usual JSON:

[mcp_servers.imqueue]
command = "npx"args = ["-y", "@imqueue/mcp"]

ChatGPT connects to MCP servers over HTTP only, so it has no local option; the plugin is all of it there.

Other clients (Cursor, Claude Desktop, JetBrains, Windsurf, Zed, …)

Add to your MCP config (.cursor/mcp.json, claude_desktop_config.json, …):

{
"mcpServers": {
"imqueue": {
"command": "npx",
"args": ["-y", "@imqueue/mcp"]
}
}
}

VS Code and Visual Studio use a top-level servers key with "type": "stdio" instead of mcpServers. See imqueue.org/mcp/installation for the exact config file path and snippet for every client.

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:

{ "mcpServers": { "imqueue": { "url": "https://mcp.imqueue.org/mcp" } } }

It serves seven tools, all read-only: the six above plus local_install_guide, which returns the setup steps for the local install. This is also what OpenAI's plugin directory installs for ChatGPT and Codex — the same endpoint under the same limits, packaged as one click.

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

npm install
npm run build # tsc -> dist/
npm run dev # run from source with tsx
npm test# unit tests (node:test under tsx) — no network needed
npm run smoke # local surface: handshake + tools/list + annotations + tool calls
npm run verify # all of the above plus both type-checks; also the publish gate

The unit tests cover what does not need the network: the ranker on a fixed corpus, the exact identifiers the scaffolders emit, URL resolution, telemetry, and the hosted Worker's HTTP surface — worker/worker.ts is a plain fetch handler, so it is called with a Request and asserted on the Response, with no wrangler and no deploy.

The hosted surface has its own check, because it is a different contract:

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 seven-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

User:"Create an @imqueue user service with a getUser(id) method."

The agent calls scaffold_service({ name: "user", methods: [{ name: "getUser", params: [{ name: "id", type: "number" }], returns: "User" }] }) and gets a ready-to-paste UserService + bootstrap, then search_docs("run a service") / get_doc(...) to wire it up.

License

GPL-3.0 — free and open source.

Commercial licensing

Need to use @imqueue/mcp in a closed-source product, or want commercial support? A commercial license is available — see imqueue.com. Full docs: imqueue.org/mcp. See SPEC.md for the design and registry-distribution plan.

About

Model Context Protocol (MCP) server for @imqueue — lets AI coding agents (Claude Code, Cursor and others) search the docs, scaffold typed services & clients and use @imqueue/cli live.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

@imqueue/mcp

smithery badge

A Model Context Protocol server for @imqueue. It lets AI coding agents (Claude Code, ChatGPT, Codex, Cursor, VS Code, JetBrains, …) search the @imqueue documentation, scaffold typed services & clients, and drive the imq CLI — so they generate correct, idiomatic @imqueue code instead of guessing.

📖 Full documentation: imqueue.org/mcp — per-client setup, complete tools reference, agent workflows and the safety model.

Tools

Two surfaces, and they are not the same. The local server (npx -y @imqueue/mcp) has all 14 tools. The hosted server (mcp.imqueue.org/mcp) has seven, all read-only — see below for why.

Hosted + local

ToolWhat it does
search_docsSearch the official docs (guides, tutorial, CLI manual, API reference, articles) and return the most relevant pages + URLs.
get_docFetch the full markdown of a doc page by URL.
list_packagesList the documented @imqueue packages with install commands, current versions and licences.
package_statusThe current version, licence, minimum Node and last release date of any published @imqueue package, or all of them.
scaffold_serviceGenerate an IMQService subclass with @expose()d, JSDoc-typed methods + a bootstrap (offline, no CLI needed).
scaffold_clientShow how to generate and use the fully-typed client for a service (offline).

All six are read-only: they fetch or generate text and write nothing.

All five also declare an MCP outputSchema and return structuredContent alongside the human-readable markdown, so a client can consume results as data — take results[0].url from search_docs and hand it to get_doc, or write scaffold_service's files[] straight to disk — instead of parsing prose and code fences. For the scaffolders and the catalogue the markdown is rendered from that same structure, so the two can't drift.

get_doc's schema is metadata only, on purpose — and that turns out to be the more interesting design than having no schema at all. A schema obliges the server to send structuredContent, but nothing says structuredContent must repeat what is in content: it describes the structured part of the answer. So the page travels once, in content, and the schema carries url (the mirror actually fetched, which is not always the URL you passed), mimeType, bytes (so a caller can decide before reading) and truncated. Putting markdown in there as well would have doubled the largest response the server can produce — measured on /api/rpc/latest/, 16.6 kB of text plus 16.6 kB of structure for one read. The absence of a body field is itself self-describing: a caller reading the schema sees no content field and knows the page is in content, which is where every client already looks.

The CLI-backed tools have no schema: they return imq stdout, which has no shape worth promising.

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.

ToolWhat it does
cli_statusDetect imq and report its version.
cli_installInstall @imqueue/cli globally (npm i -g @imqueue/cli) when it's missing.
cli_helpimq <command> --help — exact, version-accurate flags (no side effects).
create_serviceimq service createdry-run by default (writes nothing); pass apply: true to actually create the project.
generate_clientimq client generate <Service> — the real typed client (the service must be running).
fleetimq ctl <start|stop|restart|status> — manage a directory of service repos. status is read-only.
configimq config <check|get|set|init> — read/write CLI configuration (set for automation; init is interactive).
logsimq logdump current fleet logs (never follows; capped) or clean them.

Calls run with stdin closed and a timeout, so a missing-flag prompt fails fast instead of hanging. If imq isn't installed, run cli_install or use the offline scaffold_* tools.

Docs are fetched live from imqueue.org's machine-readable feeds, so the server never ships stale content: /llms.txt for the curated page index, per-page …/index.md mirrors for bodies, /search-index.json, /search-text.json and /search-sections.json for the search corpus, and /status.json for package versions and licences. imqueue.com's /llms.txt and peer feeds are read too, for the commercial pages. Nothing outside those two hosts is ever fetched — the allowlist is enforced in src/docs.ts and refuses anything else.

Versions and licences come from that last feed rather than being compiled in, deliberately: @imqueue releases far more often than this server does, so a baked-in version would be wrong within days and wrong with total confidence. npmjs.com serves bot detection to an unattended fetch, which is why imqueue.org reads the registry at build time and republishes the answer where anything can read it.

Install

Requires Node.js ≥ 18. No build step for users — run straight from npm:

npx -y @imqueue/mcp

Claude Code

claude mcp add imqueue -- npx -y @imqueue/mcp

ChatGPT & Codex

@imqueue is listed in OpenAI's plugin directory — shared by ChatGPT and Codex. In ChatGPT, open the Plugins tab and install it; in the Codex CLI, run /plugins. No config file, no Node.

That route installs the hosted server, so it is the seven read-only tools and none of the CLI bridge (see below). Codex can run the local server alongside it — MCP servers live under mcp_servers in ~/.codex/config.toml, in TOML rather than the usual JSON:

[mcp_servers.imqueue]
command = "npx"args = ["-y", "@imqueue/mcp"]

ChatGPT connects to MCP servers over HTTP only, so it has no local option; the plugin is all of it there.

Other clients (Cursor, Claude Desktop, JetBrains, Windsurf, Zed, …)

Add to your MCP config (.cursor/mcp.json, claude_desktop_config.json, …):

{
"mcpServers": {
"imqueue": {
"command": "npx",
"args": ["-y", "@imqueue/mcp"]
}
}
}

VS Code and Visual Studio use a top-level servers key with "type": "stdio" instead of mcpServers. See imqueue.org/mcp/installation for the exact config file path and snippet for every client.

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:

{ "mcpServers": { "imqueue": { "url": "https://mcp.imqueue.org/mcp" } } }

It serves seven tools, all read-only: the six above plus local_install_guide, which returns the setup steps for the local install. This is also what OpenAI's plugin directory installs for ChatGPT and Codex — the same endpoint under the same limits, packaged as one click.

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

npm install
npm run build # tsc -> dist/
npm run dev # run from source with tsx
npm test# unit tests (node:test under tsx) — no network needed
npm run smoke # local surface: handshake + tools/list + annotations + tool calls
npm run verify # all of the above plus both type-checks; also the publish gate

The unit tests cover what does not need the network: the ranker on a fixed corpus, the exact identifiers the scaffolders emit, URL resolution, telemetry, and the hosted Worker's HTTP surface — worker/worker.ts is a plain fetch handler, so it is called with a Request and asserted on the Response, with no wrangler and no deploy.

The hosted surface has its own check, because it is a different contract:

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 seven-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

User:"Create an @imqueue user service with a getUser(id) method."

The agent calls scaffold_service({ name: "user", methods: [{ name: "getUser", params: [{ name: "id", type: "number" }], returns: "User" }] }) and gets a ready-to-paste UserService + bootstrap, then search_docs("run a service") / get_doc(...) to wire it up.

License

GPL-3.0 — free and open source.

Commercial licensing

Need to use @imqueue/mcp in a closed-source product, or want commercial support? A commercial license is available — see imqueue.com. Full docs: imqueue.org/mcp. See SPEC.md for the design and registry-distribution plan.

About

Model Context Protocol (MCP) server for @imqueue — lets AI coding agents (Claude Code, Cursor and others) search the docs, scaffold typed services & clients and use @imqueue/cli live.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

@imqueue/mcp

smithery badge

A Model Context Protocol server for @imqueue. It lets AI coding agents (Claude Code, ChatGPT, Codex, Cursor, VS Code, JetBrains, …) search the @imqueue documentation, scaffold typed services & clients, and drive the imq CLI — so they generate correct, idiomatic @imqueue code instead of guessing.

📖 Full documentation: imqueue.org/mcp — per-client setup, complete tools reference, agent workflows and the safety model.

Tools

Two surfaces, and they are not the same. The local server (npx -y @imqueue/mcp) has all 14 tools. The hosted server (mcp.imqueue.org/mcp) has seven, all read-only — see below for why.

Hosted + local

ToolWhat it does
search_docsSearch the official docs (guides, tutorial, CLI manual, API reference, articles) and return the most relevant pages + URLs.
get_docFetch the full markdown of a doc page by URL.
list_packagesList the documented @imqueue packages with install commands, current versions and licences.
package_statusThe current version, licence, minimum Node and last release date of any published @imqueue package, or all of them.
scaffold_serviceGenerate an IMQService subclass with @expose()d, JSDoc-typed methods + a bootstrap (offline, no CLI needed).
scaffold_clientShow how to generate and use the fully-typed client for a service (offline).

All six are read-only: they fetch or generate text and write nothing.

All five also declare an MCP outputSchema and return structuredContent alongside the human-readable markdown, so a client can consume results as data — take results[0].url from search_docs and hand it to get_doc, or write scaffold_service's files[] straight to disk — instead of parsing prose and code fences. For the scaffolders and the catalogue the markdown is rendered from that same structure, so the two can't drift.

get_doc's schema is metadata only, on purpose — and that turns out to be the more interesting design than having no schema at all. A schema obliges the server to send structuredContent, but nothing says structuredContent must repeat what is in content: it describes the structured part of the answer. So the page travels once, in content, and the schema carries url (the mirror actually fetched, which is not always the URL you passed), mimeType, bytes (so a caller can decide before reading) and truncated. Putting markdown in there as well would have doubled the largest response the server can produce — measured on /api/rpc/latest/, 16.6 kB of text plus 16.6 kB of structure for one read. The absence of a body field is itself self-describing: a caller reading the schema sees no content field and knows the page is in content, which is where every client already looks.

The CLI-backed tools have no schema: they return imq stdout, which has no shape worth promising.

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.

ToolWhat it does
cli_statusDetect imq and report its version.
cli_installInstall @imqueue/cli globally (npm i -g @imqueue/cli) when it's missing.
cli_helpimq <command> --help — exact, version-accurate flags (no side effects).
create_serviceimq service createdry-run by default (writes nothing); pass apply: true to actually create the project.
generate_clientimq client generate <Service> — the real typed client (the service must be running).
fleetimq ctl <start|stop|restart|status> — manage a directory of service repos. status is read-only.
configimq config <check|get|set|init> — read/write CLI configuration (set for automation; init is interactive).
logsimq logdump current fleet logs (never follows; capped) or clean them.

Calls run with stdin closed and a timeout, so a missing-flag prompt fails fast instead of hanging. If imq isn't installed, run cli_install or use the offline scaffold_* tools.

Docs are fetched live from imqueue.org's machine-readable feeds, so the server never ships stale content: /llms.txt for the curated page index, per-page …/index.md mirrors for bodies, /search-index.json, /search-text.json and /search-sections.json for the search corpus, and /status.json for package versions and licences. imqueue.com's /llms.txt and peer feeds are read too, for the commercial pages. Nothing outside those two hosts is ever fetched — the allowlist is enforced in src/docs.ts and refuses anything else.

Versions and licences come from that last feed rather than being compiled in, deliberately: @imqueue releases far more often than this server does, so a baked-in version would be wrong within days and wrong with total confidence. npmjs.com serves bot detection to an unattended fetch, which is why imqueue.org reads the registry at build time and republishes the answer where anything can read it.

Install

Requires Node.js ≥ 18. No build step for users — run straight from npm:

npx -y @imqueue/mcp

Claude Code

claude mcp add imqueue -- npx -y @imqueue/mcp

ChatGPT & Codex

@imqueue is listed in OpenAI's plugin directory — shared by ChatGPT and Codex. In ChatGPT, open the Plugins tab and install it; in the Codex CLI, run /plugins. No config file, no Node.

That route installs the hosted server, so it is the seven read-only tools and none of the CLI bridge (see below). Codex can run the local server alongside it — MCP servers live under mcp_servers in ~/.codex/config.toml, in TOML rather than the usual JSON:

[mcp_servers.imqueue]
command = "npx"args = ["-y", "@imqueue/mcp"]

ChatGPT connects to MCP servers over HTTP only, so it has no local option; the plugin is all of it there.

Other clients (Cursor, Claude Desktop, JetBrains, Windsurf, Zed, …)

Add to your MCP config (.cursor/mcp.json, claude_desktop_config.json, …):

{
"mcpServers": {
"imqueue": {
"command": "npx",
"args": ["-y", "@imqueue/mcp"]
}
}
}

VS Code and Visual Studio use a top-level servers key with "type": "stdio" instead of mcpServers. See imqueue.org/mcp/installation for the exact config file path and snippet for every client.

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:

{ "mcpServers": { "imqueue": { "url": "https://mcp.imqueue.org/mcp" } } }

It serves seven tools, all read-only: the six above plus local_install_guide, which returns the setup steps for the local install. This is also what OpenAI's plugin directory installs for ChatGPT and Codex — the same endpoint under the same limits, packaged as one click.

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

npm install
npm run build # tsc -> dist/
npm run dev # run from source with tsx
npm test# unit tests (node:test under tsx) — no network needed
npm run smoke # local surface: handshake + tools/list + annotations + tool calls
npm run verify # all of the above plus both type-checks; also the publish gate

The unit tests cover what does not need the network: the ranker on a fixed corpus, the exact identifiers the scaffolders emit, URL resolution, telemetry, and the hosted Worker's HTTP surface — worker/worker.ts is a plain fetch handler, so it is called with a Request and asserted on the Response, with no wrangler and no deploy.

The hosted surface has its own check, because it is a different contract:

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 seven-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

User:"Create an @imqueue user service with a getUser(id) method."

The agent calls scaffold_service({ name: "user", methods: [{ name: "getUser", params: [{ name: "id", type: "number" }], returns: "User" }] }) and gets a ready-to-paste UserService + bootstrap, then search_docs("run a service") / get_doc(...) to wire it up.

License

GPL-3.0 — free and open source.

Commercial licensing

Need to use @imqueue/mcp in a closed-source product, or want commercial support? A commercial license is available — see imqueue.com. Full docs: imqueue.org/mcp. See SPEC.md for the design and registry-distribution plan.

About

Model Context Protocol (MCP) server for @imqueue — lets AI coding agents (Claude Code, Cursor and others) search the docs, scaffold typed services & clients and use @imqueue/cli live.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

@imqueue/mcp

smithery badge

A Model Context Protocol server for @imqueue. It lets AI coding agents (Claude Code, ChatGPT, Codex, Cursor, VS Code, JetBrains, …) search the @imqueue documentation, scaffold typed services & clients, and drive the imq CLI — so they generate correct, idiomatic @imqueue code instead of guessing.

📖 Full documentation: imqueue.org/mcp — per-client setup, complete tools reference, agent workflows and the safety model.

Tools

Two surfaces, and they are not the same. The local server (npx -y @imqueue/mcp) has all 14 tools. The hosted server (mcp.imqueue.org/mcp) has seven, all read-only — see below for why.

Hosted + local

ToolWhat it does
search_docsSearch the official docs (guides, tutorial, CLI manual, API reference, articles) and return the most relevant pages + URLs.
get_docFetch the full markdown of a doc page by URL.
list_packagesList the documented @imqueue packages with install commands, current versions and licences.
package_statusThe current version, licence, minimum Node and last release date of any published @imqueue package, or all of them.
scaffold_serviceGenerate an IMQService subclass with @expose()d, JSDoc-typed methods + a bootstrap (offline, no CLI needed).
scaffold_clientShow how to generate and use the fully-typed client for a service (offline).

All six are read-only: they fetch or generate text and write nothing.

All five also declare an MCP outputSchema and return structuredContent alongside the human-readable markdown, so a client can consume results as data — take results[0].url from search_docs and hand it to get_doc, or write scaffold_service's files[] straight to disk — instead of parsing prose and code fences. For the scaffolders and the catalogue the markdown is rendered from that same structure, so the two can't drift.

get_doc's schema is metadata only, on purpose — and that turns out to be the more interesting design than having no schema at all. A schema obliges the server to send structuredContent, but nothing says structuredContent must repeat what is in content: it describes the structured part of the answer. So the page travels once, in content, and the schema carries url (the mirror actually fetched, which is not always the URL you passed), mimeType, bytes (so a caller can decide before reading) and truncated. Putting markdown in there as well would have doubled the largest response the server can produce — measured on /api/rpc/latest/, 16.6 kB of text plus 16.6 kB of structure for one read. The absence of a body field is itself self-describing: a caller reading the schema sees no content field and knows the page is in content, which is where every client already looks.

The CLI-backed tools have no schema: they return imq stdout, which has no shape worth promising.

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.

ToolWhat it does
cli_statusDetect imq and report its version.
cli_installInstall @imqueue/cli globally (npm i -g @imqueue/cli) when it's missing.
cli_helpimq <command> --help — exact, version-accurate flags (no side effects).
create_serviceimq service createdry-run by default (writes nothing); pass apply: true to actually create the project.
generate_clientimq client generate <Service> — the real typed client (the service must be running).
fleetimq ctl <start|stop|restart|status> — manage a directory of service repos. status is read-only.
configimq config <check|get|set|init> — read/write CLI configuration (set for automation; init is interactive).
logsimq logdump current fleet logs (never follows; capped) or clean them.

Calls run with stdin closed and a timeout, so a missing-flag prompt fails fast instead of hanging. If imq isn't installed, run cli_install or use the offline scaffold_* tools.

Docs are fetched live from imqueue.org's machine-readable feeds, so the server never ships stale content: /llms.txt for the curated page index, per-page …/index.md mirrors for bodies, /search-index.json, /search-text.json and /search-sections.json for the search corpus, and /status.json for package versions and licences. imqueue.com's /llms.txt and peer feeds are read too, for the commercial pages. Nothing outside those two hosts is ever fetched — the allowlist is enforced in src/docs.ts and refuses anything else.

Versions and licences come from that last feed rather than being compiled in, deliberately: @imqueue releases far more often than this server does, so a baked-in version would be wrong within days and wrong with total confidence. npmjs.com serves bot detection to an unattended fetch, which is why imqueue.org reads the registry at build time and republishes the answer where anything can read it.

Install

Requires Node.js ≥ 18. No build step for users — run straight from npm:

npx -y @imqueue/mcp

Claude Code

claude mcp add imqueue -- npx -y @imqueue/mcp

ChatGPT & Codex

@imqueue is listed in OpenAI's plugin directory — shared by ChatGPT and Codex. In ChatGPT, open the Plugins tab and install it; in the Codex CLI, run /plugins. No config file, no Node.

That route installs the hosted server, so it is the seven read-only tools and none of the CLI bridge (see below). Codex can run the local server alongside it — MCP servers live under mcp_servers in ~/.codex/config.toml, in TOML rather than the usual JSON:

[mcp_servers.imqueue]
command = "npx"args = ["-y", "@imqueue/mcp"]

ChatGPT connects to MCP servers over HTTP only, so it has no local option; the plugin is all of it there.

Other clients (Cursor, Claude Desktop, JetBrains, Windsurf, Zed, …)

Add to your MCP config (.cursor/mcp.json, claude_desktop_config.json, …):

{
"mcpServers": {
"imqueue": {
"command": "npx",
"args": ["-y", "@imqueue/mcp"]
}
}
}

VS Code and Visual Studio use a top-level servers key with "type": "stdio" instead of mcpServers. See imqueue.org/mcp/installation for the exact config file path and snippet for every client.

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:

{ "mcpServers": { "imqueue": { "url": "https://mcp.imqueue.org/mcp" } } }

It serves seven tools, all read-only: the six above plus local_install_guide, which returns the setup steps for the local install. This is also what OpenAI's plugin directory installs for ChatGPT and Codex — the same endpoint under the same limits, packaged as one click.

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

npm install
npm run build # tsc -> dist/
npm run dev # run from source with tsx
npm test# unit tests (node:test under tsx) — no network needed
npm run smoke # local surface: handshake + tools/list + annotations + tool calls
npm run verify # all of the above plus both type-checks; also the publish gate

The unit tests cover what does not need the network: the ranker on a fixed corpus, the exact identifiers the scaffolders emit, URL resolution, telemetry, and the hosted Worker's HTTP surface — worker/worker.ts is a plain fetch handler, so it is called with a Request and asserted on the Response, with no wrangler and no deploy.

The hosted surface has its own check, because it is a different contract:

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 seven-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

User:"Create an @imqueue user service with a getUser(id) method."

The agent calls scaffold_service({ name: "user", methods: [{ name: "getUser", params: [{ name: "id", type: "number" }], returns: "User" }] }) and gets a ready-to-paste UserService + bootstrap, then search_docs("run a service") / get_doc(...) to wire it up.

License

GPL-3.0 — free and open source.

Commercial licensing

Need to use @imqueue/mcp in a closed-source product, or want commercial support? A commercial license is available — see imqueue.com. Full docs: imqueue.org/mcp. See SPEC.md for the design and registry-distribution plan.

About

Model Context Protocol (MCP) server for @imqueue — lets AI coding agents (Claude Code, Cursor and others) search the docs, scaffold typed services & clients and use @imqueue/cli live.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

@imqueue/mcp

smithery badge

A Model Context Protocol server for @imqueue. It lets AI coding agents (Claude Code, ChatGPT, Codex, Cursor, VS Code, JetBrains, …) search the @imqueue documentation, scaffold typed services & clients, and drive the imq CLI — so they generate correct, idiomatic @imqueue code instead of guessing.

📖 Full documentation: imqueue.org/mcp — per-client setup, complete tools reference, agent workflows and the safety model.

Tools

Two surfaces, and they are not the same. The local server (npx -y @imqueue/mcp) has all 14 tools. The hosted server (mcp.imqueue.org/mcp) has seven, all read-only — see below for why.

Hosted + local

ToolWhat it does
search_docsSearch the official docs (guides, tutorial, CLI manual, API reference, articles) and return the most relevant pages + URLs.
get_docFetch the full markdown of a doc page by URL.
list_packagesList the documented @imqueue packages with install commands, current versions and licences.
package_statusThe current version, licence, minimum Node and last release date of any published @imqueue package, or all of them.
scaffold_serviceGenerate an IMQService subclass with @expose()d, JSDoc-typed methods + a bootstrap (offline, no CLI needed).
scaffold_clientShow how to generate and use the fully-typed client for a service (offline).

All six are read-only: they fetch or generate text and write nothing.

All five also declare an MCP outputSchema and return structuredContent alongside the human-readable markdown, so a client can consume results as data — take results[0].url from search_docs and hand it to get_doc, or write scaffold_service's files[] straight to disk — instead of parsing prose and code fences. For the scaffolders and the catalogue the markdown is rendered from that same structure, so the two can't drift.

get_doc's schema is metadata only, on purpose — and that turns out to be the more interesting design than having no schema at all. A schema obliges the server to send structuredContent, but nothing says structuredContent must repeat what is in content: it describes the structured part of the answer. So the page travels once, in content, and the schema carries url (the mirror actually fetched, which is not always the URL you passed), mimeType, bytes (so a caller can decide before reading) and truncated. Putting markdown in there as well would have doubled the largest response the server can produce — measured on /api/rpc/latest/, 16.6 kB of text plus 16.6 kB of structure for one read. The absence of a body field is itself self-describing: a caller reading the schema sees no content field and knows the page is in content, which is where every client already looks.

The CLI-backed tools have no schema: they return imq stdout, which has no shape worth promising.

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.

ToolWhat it does
cli_statusDetect imq and report its version.
cli_installInstall @imqueue/cli globally (npm i -g @imqueue/cli) when it's missing.
cli_helpimq <command> --help — exact, version-accurate flags (no side effects).
create_serviceimq service createdry-run by default (writes nothing); pass apply: true to actually create the project.
generate_clientimq client generate <Service> — the real typed client (the service must be running).
fleetimq ctl <start|stop|restart|status> — manage a directory of service repos. status is read-only.
configimq config <check|get|set|init> — read/write CLI configuration (set for automation; init is interactive).
logsimq logdump current fleet logs (never follows; capped) or clean them.

Calls run with stdin closed and a timeout, so a missing-flag prompt fails fast instead of hanging. If imq isn't installed, run cli_install or use the offline scaffold_* tools.

Docs are fetched live from imqueue.org's machine-readable feeds, so the server never ships stale content: /llms.txt for the curated page index, per-page …/index.md mirrors for bodies, /search-index.json, /search-text.json and /search-sections.json for the search corpus, and /status.json for package versions and licences. imqueue.com's /llms.txt and peer feeds are read too, for the commercial pages. Nothing outside those two hosts is ever fetched — the allowlist is enforced in src/docs.ts and refuses anything else.

Versions and licences come from that last feed rather than being compiled in, deliberately: @imqueue releases far more often than this server does, so a baked-in version would be wrong within days and wrong with total confidence. npmjs.com serves bot detection to an unattended fetch, which is why imqueue.org reads the registry at build time and republishes the answer where anything can read it.

Install

Requires Node.js ≥ 18. No build step for users — run straight from npm:

npx -y @imqueue/mcp

Claude Code

claude mcp add imqueue -- npx -y @imqueue/mcp

ChatGPT & Codex

@imqueue is listed in OpenAI's plugin directory — shared by ChatGPT and Codex. In ChatGPT, open the Plugins tab and install it; in the Codex CLI, run /plugins. No config file, no Node.

That route installs the hosted server, so it is the seven read-only tools and none of the CLI bridge (see below). Codex can run the local server alongside it — MCP servers live under mcp_servers in ~/.codex/config.toml, in TOML rather than the usual JSON:

[mcp_servers.imqueue]
command = "npx"args = ["-y", "@imqueue/mcp"]

ChatGPT connects to MCP servers over HTTP only, so it has no local option; the plugin is all of it there.

Other clients (Cursor, Claude Desktop, JetBrains, Windsurf, Zed, …)

Add to your MCP config (.cursor/mcp.json, claude_desktop_config.json, …):

{
"mcpServers": {
"imqueue": {
"command": "npx",
"args": ["-y", "@imqueue/mcp"]
}
}
}

VS Code and Visual Studio use a top-level servers key with "type": "stdio" instead of mcpServers. See imqueue.org/mcp/installation for the exact config file path and snippet for every client.

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:

{ "mcpServers": { "imqueue": { "url": "https://mcp.imqueue.org/mcp" } } }

It serves seven tools, all read-only: the six above plus local_install_guide, which returns the setup steps for the local install. This is also what OpenAI's plugin directory installs for ChatGPT and Codex — the same endpoint under the same limits, packaged as one click.

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

npm install
npm run build # tsc -> dist/
npm run dev # run from source with tsx
npm test# unit tests (node:test under tsx) — no network needed
npm run smoke # local surface: handshake + tools/list + annotations + tool calls
npm run verify # all of the above plus both type-checks; also the publish gate

The unit tests cover what does not need the network: the ranker on a fixed corpus, the exact identifiers the scaffolders emit, URL resolution, telemetry, and the hosted Worker's HTTP surface — worker/worker.ts is a plain fetch handler, so it is called with a Request and asserted on the Response, with no wrangler and no deploy.

The hosted surface has its own check, because it is a different contract:

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 seven-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

User:"Create an @imqueue user service with a getUser(id) method."

The agent calls scaffold_service({ name: "user", methods: [{ name: "getUser", params: [{ name: "id", type: "number" }], returns: "User" }] }) and gets a ready-to-paste UserService + bootstrap, then search_docs("run a service") / get_doc(...) to wire it up.

License

GPL-3.0 — free and open source.

Commercial licensing

Need to use @imqueue/mcp in a closed-source product, or want commercial support? A commercial license is available — see imqueue.com. Full docs: imqueue.org/mcp. See SPEC.md for the design and registry-distribution plan.

About

Model Context Protocol (MCP) server for @imqueue — lets AI coding agents (Claude Code, Cursor and others) search the docs, scaffold typed services & clients and use @imqueue/cli live.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages