Artifact Publisher
Agents publish self-contained HTML to a stable review link, with page-level feedback and revoke.
我該用這個嗎
品質與安全性
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"mcp": {
"url": "https://app.artifactpublisher.com/mcp"
}
}
}遠端端點
https://app.artifactpublisher.com/mcpstreamable-http它能做什麼
工具清單
工具(12)
🟡publish_artifact(workspace_id, title, html, summary, expires_at, ...)
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.
輸入結構描述
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"title": {
"type": "string",
"maxLength": 200
},
"html": {
"type": "string",
"minLength": 1
},
"summary": {
"type": "string",
"maxLength": 1000
},
"expires_at": {
"description": "ISO 8601 UTC, 60 s to 365 days ahead; null = never; omit = workspace default.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"comments_enabled": {
"description": "Defaults to the workspace setting.",
"type": "boolean"
},
"visibility": {
"description": "public = anyone with link, no sign-in, not listed or searchable (alias: unlisted); private = owner only; allowlist = listed primary emails, account required. Default: public. `team` (some workspaces) = members only, may be the default; owners and admins can open private and allowlist pages (audited).",
"type": "string",
"enum": [
"public",
"private",
"allowlist",
"unlisted",
"team"
]
},
"allowed_emails": {
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 320
},
"description": "Required for allowlist; omit otherwise."
}
},
"required": [
"html"
],
"additionalProperties": false
}🔴update_artifact(workspace_id, artifact_id, html, title, expected_version, ...)
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.
輸入結構描述
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"artifact_id": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"html": {
"type": "string",
"minLength": 1
},
"title": {
"type": "string",
"maxLength": 200
},
"expected_version": {
"type": "integer",
"minimum": 1
},
"release_note": {
"type": "string",
"maxLength": 500
}
},
"required": [
"artifact_id",
"expected_version"
],
"additionalProperties": false
}🔴set_artifact_access(workspace_id, artifact_id, visibility, allowed_emails)
Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist.
輸入結構描述
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"artifact_id": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"visibility": {
"type": "string",
"enum": [
"public",
"private",
"allowlist",
"unlisted",
"team"
],
"description": "Modes as in publish_artifact.visibility."
},
"allowed_emails": {
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 320
},
"description": "Required for allowlist; omit otherwise."
}
},
"required": [
"artifact_id",
"visibility"
],
"additionalProperties": false
}🟢get_feedback(limit, cursor, version, workspace_id, artifact_id, ...)
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.
輸入結構描述
{
"type": "object",
"properties": {
"limit": {
"description": "Page size; default 50.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"description": "Pass next_cursor.",
"type": "string",
"maxLength": 2048
},
"version": {
"type": "integer",
"minimum": 1
},
"workspace_id": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"artifact_id": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"unresolved_only": {
"type": "boolean"
},
"since": {
"type": "string"
}
},
"required": [
"artifact_id"
],
"additionalProperties": false
}🟢reply_to_feedback(workspace_id, comment_id, message, resolve)
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.
輸入結構描述
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"comment_id": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"message": {
"type": "string",
"maxLength": 4000
},
"resolve": {
"type": "boolean"
}
},
"required": [
"comment_id",
"message"
],
"additionalProperties": false
}🟢list_artifacts(workspace_id, limit, cursor)
List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page.
輸入結構描述
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"type": "string",
"maxLength": 512
}
},
"additionalProperties": false
}🔴revoke_artifact(workspace_id, artifact_id, reason)
Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist.
輸入結構描述
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"artifact_id": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"reason": {
"type": "string",
"maxLength": 500
}
},
"required": [
"artifact_id"
],
"additionalProperties": false
}🔴configure_workspace(workspace_id, settings)
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.
輸入結構描述
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"settings": {
"type": "object",
"properties": {
"comments_enabled": {
"type": "boolean",
"description": "false = no link may enable comments."
},
"default_expiry_seconds": {
"anyOf": [
{
"type": "integer",
"minimum": 60,
"maximum": 31536000
},
{
"type": "null"
}
],
"description": "Used when publish omits expires_at; null = never."
},
"default_artifact_title": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"description": "Used when publish omits title."
}
},
"additionalProperties": {}
}
},
"required": [
"settings"
],
"additionalProperties": false
}🟢get_artifact_state(workspace_id, artifact_id)
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.
輸入結構描述
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"minLength": 1
},
"artifact_id": {
"type": "string",
"minLength": 1
}
},
"required": [
"artifact_id"
],
"additionalProperties": false
}🔴set_artifact_state(workspace_id, artifact_id, values)
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.
輸入結構描述
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"minLength": 1
},
"artifact_id": {
"type": "string",
"minLength": 1
},
"values": {
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9._:-]+$"
},
"additionalProperties": {},
"description": "Keys to JSON values; depth max 16."
}
},
"required": [
"artifact_id",
"values"
],
"additionalProperties": false
}🔴reset_artifact_state(workspace_id, artifact_id)
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.
輸入結構描述
{
"type": "object",
"properties": {
"workspace_id": {
"type": "string",
"minLength": 1
},
"artifact_id": {
"type": "string",
"minLength": 1
}
},
"required": [
"artifact_id"
],
"additionalProperties": false
}🟢get_authoring_guide(theme)
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.
輸入結構描述
{
"type": "object",
"properties": {
"theme": {
"description": "Validate one theme (firn, firn@1).",
"type": "string",
"minLength": 1,
"maxLength": 64
}
},
"additionalProperties": false
}社群
證據