Connect your MCP client¶
Every client runs the same command:
uvx --from b123d-print b123d-print-mcp --workspace <folder>
The workspace is the folder that holds your parts (parts/<name>/<name>.py); it is created
if missing. Without --workspace the server uses $B123D_PRINT_WORKSPACE, else the folder the
client starts it in.
Which version¶
--from b123d-print runs the latest release from PyPI.
In place of b123d-print in any config on this page:
--from |
Runs |
|---|---|
b123d-print |
the latest release (uvx caches it; see Updating) |
b123d-print==0.2.0 |
exactly that release |
git+https://github.com/KD5RYN/b123d-print |
the latest unreleased code on main |
Server options¶
| Option | Default | Does |
|---|---|---|
--workspace <folder> |
$B123D_PRINT_WORKSPACE, else the current folder |
where parts and the workspace config live |
--timeout <seconds> |
$B123D_PRINT_TIMEOUT, else 120 |
time limit for each build, render, section or export |
--check-timeout <seconds> |
$B123D_PRINT_CHECK_TIMEOUT, else 300 (or --timeout if longer) |
time limit for each check, which builds the part and runs every check (a remix's original too); shortly before it, the checks stop and return what they found, with a timeout FAIL naming the check that was running (time limit) |
--max-builds <n> |
$B123D_PRINT_MAX_BUILDS, else half the CPU cores |
build processes at once, across all clients and all of this user's server processes (one per SSH connection); more calls wait. A check splits over up to this many (parallel checks) |
--transport <mode> |
$B123D_PRINT_TRANSPORT, else stdio |
stdio or http; http serves Streamable HTTP at /mcp: see Over the network |
--host <address> |
$B123D_PRINT_HOST, else 127.0.0.1 |
HTTP: address to bind |
--port <port> |
$B123D_PRINT_PORT, else 8000 |
HTTP: port |
--allowed-hosts <names> |
$B123D_PRINT_ALLOWED_HOSTS |
HTTP: comma-separated Host header values to accept (DNS-rebinding check, behind a proxy) |
--shutdown-grace <seconds> |
$B123D_PRINT_SHUTDOWN_GRACE, else 30 |
HTTP: on SIGTERM or Ctrl-C, how long running calls may finish before their builds are killed |
--public-url <url> |
$B123D_PRINT_PUBLIC_URL |
HTTP: the base URL clients reach the server at, used in download links (e.g. https://cad.example.com); default: the request's Host, and proxy headers for hosts in --allowed-hosts |
--link-ttl <seconds> |
$B123D_PRINT_LINK_TTL, else 3600 |
HTTP: how long a download link stays valid |
--retention-days <days> |
$B123D_PRINT_RETENTION_DAYS, else 30 |
HTTP: remove a named workspace nobody has used for this many days (checked at startup and hourly, never while in use); 0 = never |
--tokens-file <path> |
$B123D_PRINT_TOKENS_FILE |
HTTP: named tokens, each limited to workspaces; re-read when it changes |
--job-queue <folder> |
$B123D_PRINT_JOB_QUEUE |
HTTP: hand builds to a separate worker process through this folder (the Compose setup's network-less worker) |
--insecure-no-auth |
off | HTTP: run without a token (otherwise $B123D_PRINT_TOKEN or $B123D_PRINT_TOKEN_FILE is required) |
--healthcheck |
check a running HTTP server's /health and exit (the Docker image's health check) |
Subcommands: b123d-print-mcp token add|list|revoke manages the tokens file, and
b123d-print-mcp worker --queue <folder> runs the builds a server with --job-queue hands over
(--check exits 0 while a worker's heartbeat is fresh; the Compose health check).
The full --help output is in the Reference.
Claude Desktop¶
Settings → Developer → Edit Config (claude_desktop_config.json): the block in
Quick start. Always pass --workspace. If the server fails with "uvx not
found", use the full path from which uvx (Windows: where.exe uvx) as command (desktop apps don't see your shell's
PATH).
Claude Code¶
claude mcp add b123d-print -- uvx --from b123d-print b123d-print-mcp --workspace ~/parts
Or the plugin (MCP server + skill; uses the project folder as workspace), in one command:
claude plugin install b123d-print --marketplace KD5RYN/b123d-print
Inside a Claude Code session the same works as /plugin install b123d-print --marketplace KD5RYN/b123d-print.
On older Claude Code versions use two steps: /plugin marketplace add KD5RYN/b123d-print, then
/plugin install b123d-print@b123d-print. Update later with claude plugin update b123d-print@b123d-print.
The server is also listed in the MCP Registry as
io.github.KD5RYN/b123d-print; clients that read the registry start it with uvx b123d-print mcp.
Gemini CLI¶
~/.gemini/settings.json (or .gemini/settings.json in a project):
{
"mcpServers": {
"b123d-print": {
"command": "uvx",
"args": ["--from", "b123d-print", "b123d-print-mcp", "--workspace", "/Users/you/parts"]
}
}
}
Cursor¶
~/.cursor/mcp.json, or .cursor/mcp.json in a project: the same mcpServers block as for
Gemini CLI.
VS Code (Copilot agent mode)¶
.vscode/mcp.json:
{
"servers": {
"b123d-print": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "b123d-print", "b123d-print-mcp", "--workspace", "${workspaceFolder}"]
}
}
}
Codex CLI¶
~/.codex/config.toml:
[mcp_servers.b123d-print]
command = "uvx"
args = ["--from", "b123d-print", "b123d-print-mcp", "--workspace", "/Users/you/parts"]
Other clients¶
Any client that can start a stdio MCP server: command uvx, arguments as above. To keep the
parts on another machine, such as a home server, see Remote over SSH; for many agents
sharing one server, Over the network (HTTP).
To run the server in a container instead of through uvx, see Docker.