Artifact Publisher
by artifactpublisher.com · remote · no sign-in to list tools · v0.1.0 · published by com.artifactpublisher
Agents publish self-contained HTML to a stable review link, with page-level feedback and revoke.
12 tools: 6 can delete or cancel things, 2 do something that can't be undone and 4 only read.
Scanned Oct 21, 2026
- Deletes or cancels6Claude Code: deny: see these tools
- Can't be undone2Claude Code: ask: see these tools
- Changes things0Claude Code: ask
- Only reads4Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http artifactpublisher https://app.artifactpublisher.com/mcp --header 'Authorization: <your-authorization>'Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
12 tools
Deletes or cancels 6Claude Code: deny
configure_workspaceRead or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read.No findings
Why it is in this group
- The description's first verb is "read": a word for reading.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Read or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read. Platform guardrails are refused with an error: max_artifact_bytes, storage_bytes_limit, monthly_versions_limit, rate_limits, comment_rate_limit, publish_rate_limit, isolation, origins, artifact_origin, control_origin, storage_key_prefix, object_key_prefix, security_headers, content_security_policy. Not available in every workspace.
Annotations the server declares
- destructiveHint: true
- openWorldHint: false
reset_artifact_stateClear all state, including board values; HTML is unchanged.No findings
Why it is in this group
- The name "reset_artifact_state" says "reset": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Clear all state, including board values; HTML is unchanged. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last write wins per key. Limits: 200 keys, 16 KiB per value, 64 KiB total. artifact_id: id, slug or viewer URL.
Annotations the server declares
- destructiveHint: true
- openWorldHint: false
revoke_artifactStop serving this artifact (410 Gone).No findings
Why it is in this group
- The name "revoke_artifact" says "revoke": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist. artifact_id: id, slug or viewer URL.
Annotations the server declares
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
set_artifact_accessChange an artifact's access mode without a new version.No findings
Why it is in this group
- The name "set_artifact_access" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist. artifact_id: id, slug or viewer URL.
Annotations the server declares
- destructiveHint: true
- openWorldHint: false
set_artifact_stateSet the given keys atomically; other keys stay.No findings
Why it is in this group
- The name "set_artifact_state" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Set the given keys atomically; other keys stay. Null is stored, not deleted. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last write wins per key. Limits: 200 keys, 16 KiB per value, 64 KiB total. Page JS: ArtifactRelayState.subscribe(fn)/set(k,v)/patch(obj); callbacks get {revision, values, resetAt}; set/patch reject on failure; whole-value writes, no increments or nested merges. artifact_id: id, slug or viewer URL.
Annotations the server declares
- destructiveHint: true
- openWorldHint: false
update_artifactAppend a new immutable version to an existing artifact.No findings
Why it is in this group
- The name "update_artifact" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Append a new immutable version to an existing artifact. `expected_version` must equal the current version; the share link moves to the new version; earlier versions stay readable at their pinned URL. Optional `title` renames; with no `html` only the title changes. Each version counts toward the free 50 version cap. For styling, add <meta name="ap-theme" content="firn"> to <head>; call get_authoring_guide for themes and layout classes. artifact_id: id, slug or viewer URL.
Annotations the server declares
- destructiveHint: true
- openWorldHint: false
Can't be undone 2Claude Code: ask
publish_artifactPublish self-contained HTML as version 1; return a share link.No findings
Why it is in this group
- The name "publish_artifact" says "publish": a word for a change that another call does not undo.
Description, as the server wrote it Publish self-contained HTML as version 1; return a share link. Optional Idempotency-Key HTTP header. Limit 10 MiB UTF-8; larger on some paid plans. No network in sandbox; inline assets. Free: 5 active artifacts, 50 versions. For styling, add <meta name="ap-theme" content="firn"> to <head>; call get_authoring_guide for themes and layout classes.
Annotations the server declares
- destructiveHint: false
- openWorldHint: false
reply_to_feedbackReply once to a comment (a second reply fails with conflict); resolve: true also marks it resolved.No findings
Why it is in this group
- The name "reply_to_feedback" says "reply": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it Reply once to a comment (a second reply fails with conflict); resolve: true also marks it resolved. Anyone who can open the artifact can read the reply. Refused on revoked or expired artifacts. Returns the comment.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 4Claude Code: allow
get_artifact_stateRead an artifact's state.No findings
Why it is in this group
- The name "get_artifact_state" says "get": a word for reading.
Description, as the server wrote it Read an artifact's state. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last write wins per key. Limits: 200 keys, 16 KiB per value, 64 KiB total. artifact_id: id, slug or viewer URL.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
get_authoring_guideRead before writing HTML or a routine: themes, ap-* layout classes, an example page, the snippet, size, sandbox and routine rules.No findings
Why it is in this group
- The name "get_authoring_guide" says "get": a word for reading.
Description, as the server wrote it Read before writing HTML or a routine: themes, ap-* layout classes, an example page, the snippet, size, sandbox and routine rules. Optional theme (firn, firn@1) is validated and returned as selected.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
get_feedbackRead reviewer comments on an artifact, oldest first; use after sharing or to poll.No findings
Why it is in this group
- The name "get_feedback" says "get": a word for reading.
Description, as the server wrote it Read reviewer comments on an artifact, oldest first; use after sharing or to poll. Filters: unresolved_only, since; version (default current) picks the version anchor_status is checked against. Page with limit and cursor. Returns comments, unresolved_count, next_cursor. artifact_id: id, slug or viewer URL.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
list_artifactsList artifacts in this key's workspace, newest first, with unresolved comment counts.No findings
Why it is in this group
- The name "list_artifacts" says "list": a word for reading.
Description, as the server wrote it List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http artifactpublisher https://app.artifactpublisher.com/mcp --header 'Authorization: <your-authorization>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__artifactpublisher__get_feedback",
"mcp__artifactpublisher__list_artifacts",
"mcp__artifactpublisher__get_artifact_state",
"mcp__artifactpublisher__get_authoring_guide"
],
"ask": [
"mcp__artifactpublisher__publish_artifact",
"mcp__artifactpublisher__reply_to_feedback"
],
"deny": [
"mcp__artifactpublisher__update_artifact",
"mcp__artifactpublisher__set_artifact_access",
"mcp__artifactpublisher__revoke_artifact",
"mcp__artifactpublisher__configure_workspace",
"mcp__artifactpublisher__set_artifact_state",
"mcp__artifactpublisher__reset_artifact_state"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as artifactpublisher. Review it before you use it.