ArtifactSmith
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AM_HOST | No | Listen address for `artifactsmith serve`. Compose/image set `0.0.0.0` in-container. | 127.0.0.1 |
| AM_API_URL | No | URL written into cards and links. | http://127.0.0.1:8780 |
| AM_LLM_API | No | `chat` (Chat Completions) or `responses`. | chat |
| AM_LLM_KEY | No | LLM credential for the configured endpoint (alternative to OPENAI_API_KEY). | |
| AM_API_PORT | No | API listen port. | 8780 |
| AM_DATA_DIR | No | SQLite and the HMAC signing key. | /data |
| AM_LLM_BASE | No | OpenAI-compatible host root. With or without a trailing `/v1`. | https://api.openai.com |
| AM_SHARE_URL | No | URL written into cards and links. Empty `AM_SHARE_URL` uses `AM_PREVIEW_URL`. An `https://` API URL marks the My pages cookie Secure. | |
| AM_STORE_KEY | Yes | Object-store credentials. | |
| AM_BUILD_MODE | No | `full` or `fast` when `create` omits `mode`. `fast` is first-build HTML only. | full |
| AM_MAX_BUILDS | No | Concurrent workers. | 2 |
| AM_FAST_STYLES | No | Comma-separated styles (`house`, `bold`, …) that default to `fast` when `create` omits `mode`. Empty keeps `AM_BUILD_MODE` for every style. An explicit `mode` still wins. A finished HTML source, or a request to publish that HTML as-is, stays `full` when `mode` is omitted. Mentioning HTML beside "unchanged" does not. Other formats and edits stay `full`. An unknown name fails at startup. | |
| AM_LOGIN_LIMIT | No | Failed sign-ins per IPv4 address or IPv6 `/64` inside the window (seconds). | 8 |
| AM_PREVIEW_URL | No | URL written into cards and links. | http://127.0.0.1:8781 |
| AM_SECRETS_DIR | No | SQLite and the HMAC signing key. | /secrets |
| OPENAI_API_KEY | No | LLM credential for the configured endpoint. | |
| AM_BIND_ADDRESS | No | Host publish bind for ports `8780` and `8781` in `compose.yaml`. | 127.0.0.1 |
| AM_PREVIEW_PORT | No | Preview/share listen port. | 8781 |
| AM_STORE_BUCKET | No | Bucket name. | artifacts |
| AM_STORE_SECRET | Yes | Object-store credentials. | |
| AM_ALLOWED_HOSTS | No | Comma-separated Host values for MCP DNS-rebinding protection (on by default). | 127.0.0.1:<api_port>,localhost:<api_port> |
| AM_BUILD_TIMEOUT | No | Seconds for the whole job. | 900 |
| AM_COOKIE_SECURE | No | `true` or `false` forces the My pages cookie Secure flag. Leave it unset on local HTTP. Default follows `AM_API_URL`. | |
| AM_DEFAULT_MODEL | No | Model name sent to the LLM. | gpt-4o-mini |
| AM_DEFAULT_STYLE | No | HTML visual style when `create` omits `style`. | house |
| AM_LOGIN_WINDOW_S | No | Window in seconds for login limits. | 900 |
| AM_RENDER_TIMEOUT | No | Seconds for one renderer call. | 120 |
| AM_SHARE_TTL_DAYS | No | `0` means until revoked. | 30 |
| AM_STORE_ENDPOINT | Yes | S3-compatible object store. | |
| AM_ALLOWED_ORIGINS | No | Comma-separated Origin values for MCP DNS-rebinding protection. | |
| AM_BUILDS_PER_HOUR | No | Per-token quota. | 20 |
| AM_LLM_TEMPERATURE | No | Chat Completions temperature. Unset sends `0`; `none` omits the field. | |
| AM_TRUSTED_PROXIES | No | Comma-separated IPs or CIDRs that may set `X-Real-IP` or `X-Forwarded-For` for My pages login limits. Empty ignores those headers. | |
| AM_MAX_OUTPUT_BYTES | No | Rendered output cap. | 50 MiB |
| AM_LOGIN_PREFIX_LIMIT | No | Failed sign-ins per hashed token prefix inside the window (seconds). | 8 |
| AM_SHARE_TTL_MAX_DAYS | No | Cap on positive TTLs. | 365 |
| AM_BLOCK_PRIVATE_LINKS | No | Reject localhost, RFC1918, and link-local hosts in output. | true |
| AM_ALLOWED_LINK_DOMAINS | No | If set, every remaining host must match. | |
| AM_EDIT_PATCH_TIMEOUT_S | No | Seconds for the edit patch call. A timeout falls back to a full rewrite. | 45 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| createA | Queue a new artifact. Returns artifact_id, version, and job_id immediately. Then call status(job_id, wait=90). |
| editA | Build a new version from base_version (the latest done version) using the user's exact change request. Returns a conflict if base_version is stale. Inspect, then edit from the latest. |
| publishA | Store a page you have already finished. Use this when you already have the finished page. No model call. Returns artifact_id, version, and job_id immediately. Then call status(job_id, wait=90). When the job is done, status and inspect list safety_changes for each safety edit that changed the page. HTML publish does not turn bare URLs into links. The document title is stored as given and escaped in the page. note is optional. Inspect shows a non-empty note beside "Published a finished page." It is not the text a later edit sends to the model. A secret, private link, or over-long note is rejected before a row exists. |
| statusB | Build state (queued, building, done, failed, or needs_input). needs_input includes a missing message. Also returns progress and the presentation card. wait (0 to 90 seconds) holds the call open until the build finishes. |
| list_artifactsA | Catalog of artifacts in your workspace, newest first. Optional kind filter and text query on slug or title. |
| inspectA | Manifest, files, build log, request history, and share state. Defaults to the latest done version. |
| exportA | Download link for one rendered file (html, md, pdf, docx, or xlsx). |
| shareA | Publish a public link. Anyone with the link can open it. |
| unshareA | Revoke public share links. Takes effect immediately; the old URL returns 404. |
| revoke_previewsA | Expire private /p/ preview links for an artifact (or one version). Token revocation and signing-key rotation do not expire these database-backed capabilities; call this explicitly. |
| deleteA | Two-step purge of an artifact. Warn the user before the second call. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 11 tools
The three authoring tools are clearly separated by who writes the content (create = model builds, publish = you supply finished page, edit = new version from base_version), and status vs inspect vs list_artifacts have distinct roles. Minor overlap remains between create/publish (both accept format/style/html and queue jobs) and between unshare/revoke_previews (both revoke link types), but descriptions disambiguate them.
Mostly clean lowercase verbs (create, edit, publish, inspect, export, share, unshare, delete) with a couple of verb_noun names (list_artifacts, revoke_previews) and one noun (status). The pattern is readable and predictable despite the minor mix of single-verb and verb_noun forms.
Eleven tools is well-scoped for an artifact lifecycle server. Every tool maps to a distinct stage (create/edit/publish/status/list/inspect/export/share/unshare/revoke_previews/delete) with no redundant entries.
Full lifecycle coverage: creation (create/publish), versioning (edit), monitoring (status), discovery (list_artifacts), inspection (inspect), distribution (export/share), revocation (unshare/revoke_previews), and cleanup (delete). No obvious dead ends for the stated artifact-hosting purpose.