{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_ckapa4w6m55n","handle":"artifact-publisher","url":"https://wellknown.network/agents/artifact-publisher","links":{"self":"https://wellknown.network/agents/artifact-publisher/record.json","html":"https://wellknown.network/agents/artifact-publisher","markdown":"https://wellknown.network/agents/artifact-publisher/record.md","api":"https://wellknown.network/api/v1/agents/artifact-publisher","status":"https://wellknown.network/api/v1/agents/artifact-publisher/status","claim":"https://wellknown.network/agents/artifact-publisher/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/artifact-publisher/claim.json","badge":"https://wellknown.network/agents/artifact-publisher/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/artifact-publisher/history","tools":"https://wellknown.network/api/v1/agents/artifact-publisher/tools"},"ard":{"identifier":"urn:air:app.artifactpublisher.com:server:artifact-publisher","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Artifact Publisher","summary":"Agents publish self-contained HTML to a stable review link, with page-level feedback and revoke.","description":"Agents publish self-contained HTML to a stable review link, with page-level feedback and revoke.","publisher":{"name":"com.artifactpublisher","url":null},"homepage":"https://artifactpublisher.com/docs/mcp/","repository":null,"version":"0.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://app.artifactpublisher.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-19T13:38:42.163152Z","publishedAt":"2026-10-19T13:38:42.163152Z","registryName":"com.artifactpublisher/mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"},{"slug":"code.execution","name":"Code Execution","confidence":0.51,"provenance":"derived"}],"categories":["code","content"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 2h ago.","lastOkAt":"2026-10-26T18:30:48.206Z","lastProbedAt":"2026-10-26T18:30:48.206Z","statusComputedAt":"2026-10-26T18:35:08.917Z","reliability30d":{"probes":18,"successRate":1,"p50Ms":404,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":18,"ok":18,"authBoundaryOk":0,"serviceOk":18,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-26T18:30:48.206Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1399,"error":null,"detail":{"tools":[{"name":"publish_artifact","description":"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 i"},{"name":"update_artifact","description":"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 vers"},{"name":"set_artifact_access","description":"Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist. artifact_id: id, slug or viewer URL."},{"name":"get_feedback","description":"Read reviewer comments on an artifact, oldest first; use after sharing or to poll. Filters: unresolved_only, since; version (default current) picks the version "},{"name":"reply_to_feedback","description":"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"},{"name":"list_artifacts","description":"List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page."},{"name":"revoke_artifact","description":"Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist. artifact_id: id, slug or viewer URL."},{"name":"configure_workspace","description":"Read or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read. Platform guardrails are refus"},{"name":"get_artifact_state","description":"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 key"},{"name":"set_artifact_state","description":"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: ArtifactRe"},{"name":"reset_artifact_state","description":"Clear all state, including board values; HTML is unchanged. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last w"},{"name":"get_authoring_guide","description":"Read before writing HTML: themes, ap-* layout classes, an example page, the snippet, size and sandbox rules. Optional theme (firn, firn@1) is validated and retu"}],"toolCount":12,"toolsHash":"5634121898e99a072334b9c3038c895fe4151fe98133d9ba53c2eef2384b4c23","serverName":"artifact-publisher","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-26T10:28:16.014Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":467,"error":null,"detail":{"tools":[{"name":"publish_artifact","description":"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 i"},{"name":"update_artifact","description":"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 vers"},{"name":"set_artifact_access","description":"Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist. artifact_id: id, slug or viewer URL."},{"name":"get_feedback","description":"Read reviewer comments on an artifact, oldest first; use after sharing or to poll. Filters: unresolved_only, since; version (default current) picks the version "},{"name":"reply_to_feedback","description":"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"},{"name":"list_artifacts","description":"List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page."},{"name":"revoke_artifact","description":"Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist. artifact_id: id, slug or viewer URL."},{"name":"configure_workspace","description":"Read or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read. Platform guardrails are refus"},{"name":"get_artifact_state","description":"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 key"},{"name":"set_artifact_state","description":"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: ArtifactRe"},{"name":"reset_artifact_state","description":"Clear all state, including board values; HTML is unchanged. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last w"},{"name":"get_authoring_guide","description":"Read before writing HTML: themes, ap-* layout classes, an example page, the snippet, size and sandbox rules. Optional theme (firn, firn@1) is validated and retu"}],"toolCount":12,"toolsHash":"5634121898e99a072334b9c3038c895fe4151fe98133d9ba53c2eef2384b4c23","serverName":"artifact-publisher","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-26T02:23:52.790Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":393,"error":null,"detail":{"tools":[{"name":"publish_artifact","description":"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 i"},{"name":"update_artifact","description":"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 vers"},{"name":"set_artifact_access","description":"Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist. artifact_id: id, slug or viewer URL."},{"name":"get_feedback","description":"Read reviewer comments on an artifact, oldest first; use after sharing or to poll. Filters: unresolved_only, since; version (default current) picks the version "},{"name":"reply_to_feedback","description":"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"},{"name":"list_artifacts","description":"List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page."},{"name":"revoke_artifact","description":"Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist. artifact_id: id, slug or viewer URL."},{"name":"configure_workspace","description":"Read or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read. Platform guardrails are refus"},{"name":"get_artifact_state","description":"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 key"},{"name":"set_artifact_state","description":"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: ArtifactRe"},{"name":"reset_artifact_state","description":"Clear all state, including board values; HTML is unchanged. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last w"},{"name":"get_authoring_guide","description":"Read before writing HTML: themes, ap-* layout classes, an example page, the snippet, size and sandbox rules. Optional theme (firn, firn@1) is validated and retu"}],"toolCount":12,"toolsHash":"5634121898e99a072334b9c3038c895fe4151fe98133d9ba53c2eef2384b4c23","serverName":"artifact-publisher","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-25T18:26:50.593Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":561,"error":null,"detail":{"tools":[{"name":"publish_artifact","description":"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 i"},{"name":"update_artifact","description":"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 vers"},{"name":"set_artifact_access","description":"Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist. artifact_id: id, slug or viewer URL."},{"name":"get_feedback","description":"Read reviewer comments on an artifact, oldest first; use after sharing or to poll. Filters: unresolved_only, since; version (default current) picks the version "},{"name":"reply_to_feedback","description":"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"},{"name":"list_artifacts","description":"List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page."},{"name":"revoke_artifact","description":"Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist. artifact_id: id, slug or viewer URL."},{"name":"configure_workspace","description":"Read or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read. Platform guardrails are refus"},{"name":"get_artifact_state","description":"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 key"},{"name":"set_artifact_state","description":"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: ArtifactRe"},{"name":"reset_artifact_state","description":"Clear all state, including board values; HTML is unchanged. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last w"},{"name":"get_authoring_guide","description":"Read before writing HTML: themes, ap-* layout classes, an example page, the snippet, size and sandbox rules. Optional theme (firn, firn@1) is validated and retu"}],"toolCount":12,"toolsHash":"5634121898e99a072334b9c3038c895fe4151fe98133d9ba53c2eef2384b4c23","serverName":"artifact-publisher","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-25T11:29:31.114Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":434,"error":null,"detail":{"tools":[{"name":"publish_artifact","description":"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 i"},{"name":"update_artifact","description":"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 vers"},{"name":"set_artifact_access","description":"Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist. artifact_id: id, slug or viewer URL."},{"name":"get_feedback","description":"Read reviewer comments on an artifact, oldest first; use after sharing or to poll. Filters: unresolved_only, since; version (default current) picks the version "},{"name":"reply_to_feedback","description":"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"},{"name":"list_artifacts","description":"List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page."},{"name":"revoke_artifact","description":"Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist. artifact_id: id, slug or viewer URL."},{"name":"configure_workspace","description":"Read or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read. Platform guardrails are refus"},{"name":"get_artifact_state","description":"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 key"},{"name":"set_artifact_state","description":"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: ArtifactRe"},{"name":"reset_artifact_state","description":"Clear all state, including board values; HTML is unchanged. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last w"},{"name":"get_authoring_guide","description":"Read before writing HTML: themes, ap-* layout classes, an example page, the snippet, size and sandbox rules. Optional theme (firn, firn@1) is validated and retu"}],"toolCount":12,"toolsHash":"5634121898e99a072334b9c3038c895fe4151fe98133d9ba53c2eef2384b4c23","serverName":"artifact-publisher","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-25T04:26:13.056Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":419,"error":null,"detail":{"tools":[{"name":"publish_artifact","description":"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 i"},{"name":"update_artifact","description":"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 vers"},{"name":"set_artifact_access","description":"Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist. artifact_id: id, slug or viewer URL."},{"name":"get_feedback","description":"Read reviewer comments on an artifact, oldest first; use after sharing or to poll. Filters: unresolved_only, since; version (default current) picks the version "},{"name":"reply_to_feedback","description":"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"},{"name":"list_artifacts","description":"List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page."},{"name":"revoke_artifact","description":"Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist. artifact_id: id, slug or viewer URL."},{"name":"configure_workspace","description":"Read or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read. Platform guardrails are refus"},{"name":"get_artifact_state","description":"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 key"},{"name":"set_artifact_state","description":"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: ArtifactRe"},{"name":"reset_artifact_state","description":"Clear all state, including board values; HTML is unchanged. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last w"},{"name":"get_authoring_guide","description":"Read before writing HTML: themes, ap-* layout classes, an example page, the snippet, size and sandbox rules. Optional theme (firn, firn@1) is validated and retu"}],"toolCount":12,"toolsHash":"5634121898e99a072334b9c3038c895fe4151fe98133d9ba53c2eef2384b4c23","serverName":"artifact-publisher","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-24T21:25:16.986Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":482,"error":null,"detail":{"tools":[{"name":"publish_artifact","description":"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 i"},{"name":"update_artifact","description":"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 vers"},{"name":"set_artifact_access","description":"Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist. artifact_id: id, slug or viewer URL."},{"name":"get_feedback","description":"Read reviewer comments on an artifact, oldest first; use after sharing or to poll. Filters: unresolved_only, since; version (default current) picks the version "},{"name":"reply_to_feedback","description":"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"},{"name":"list_artifacts","description":"List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page."},{"name":"revoke_artifact","description":"Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist. artifact_id: id, slug or viewer URL."},{"name":"configure_workspace","description":"Read or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read. Platform guardrails are refus"},{"name":"get_artifact_state","description":"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 key"},{"name":"set_artifact_state","description":"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: ArtifactRe"},{"name":"reset_artifact_state","description":"Clear all state, including board values; HTML is unchanged. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last w"},{"name":"get_authoring_guide","description":"Read before writing HTML: themes, ap-* layout classes, an example page, the snippet, size and sandbox rules. Optional theme (firn, firn@1) is validated and retu"}],"toolCount":12,"toolsHash":"5634121898e99a072334b9c3038c895fe4151fe98133d9ba53c2eef2384b4c23","serverName":"artifact-publisher","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-24T13:31:04.974Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":519,"error":null,"detail":{"tools":[{"name":"publish_artifact","description":"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 i"},{"name":"update_artifact","description":"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 vers"},{"name":"set_artifact_access","description":"Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist. artifact_id: id, slug or viewer URL."},{"name":"get_feedback","description":"Read reviewer comments on an artifact, oldest first; use after sharing or to poll. Filters: unresolved_only, since; version (default current) picks the version "},{"name":"reply_to_feedback","description":"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"},{"name":"list_artifacts","description":"List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page."},{"name":"revoke_artifact","description":"Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist. artifact_id: id, slug or viewer URL."},{"name":"configure_workspace","description":"Read or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read. Platform guardrails are refus"},{"name":"get_artifact_state","description":"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 key"},{"name":"set_artifact_state","description":"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: ArtifactRe"},{"name":"reset_artifact_state","description":"Clear all state, including board values; HTML is unchanged. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last w"},{"name":"get_authoring_guide","description":"Read before writing HTML: themes, ap-* layout classes, an example page, the snippet, size and sandbox rules. Optional theme (firn, firn@1) is validated and retu"}],"toolCount":12,"toolsHash":"5634121898e99a072334b9c3038c895fe4151fe98133d9ba53c2eef2384b4c23","serverName":"artifact-publisher","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-24T07:26:32.486Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":261,"error":null,"detail":{"tools":[{"name":"publish_artifact","description":"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 i"},{"name":"update_artifact","description":"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 vers"},{"name":"set_artifact_access","description":"Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist. artifact_id: id, slug or viewer URL."},{"name":"get_feedback","description":"Read reviewer comments on an artifact, oldest first; use after sharing or to poll. Filters: unresolved_only, since; version (default current) picks the version "},{"name":"reply_to_feedback","description":"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"},{"name":"list_artifacts","description":"List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page."},{"name":"revoke_artifact","description":"Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist. artifact_id: id, slug or viewer URL."},{"name":"configure_workspace","description":"Read or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read. Platform guardrails are refus"},{"name":"get_artifact_state","description":"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 key"},{"name":"set_artifact_state","description":"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: ArtifactRe"},{"name":"reset_artifact_state","description":"Clear all state, including board values; HTML is unchanged. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last w"},{"name":"get_authoring_guide","description":"Read before writing HTML: themes, ap-* layout classes, an example page, the snippet, size and sandbox rules. Optional theme (firn, firn@1) is validated and retu"}],"toolCount":12,"toolsHash":"5634121898e99a072334b9c3038c895fe4151fe98133d9ba53c2eef2384b4c23","serverName":"artifact-publisher","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-24T00:26:30.496Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":285,"error":null,"detail":{"tools":[{"name":"publish_artifact","description":"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 i"},{"name":"update_artifact","description":"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 vers"},{"name":"set_artifact_access","description":"Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist. artifact_id: id, slug or viewer URL."},{"name":"get_feedback","description":"Read reviewer comments on an artifact, oldest first; use after sharing or to poll. Filters: unresolved_only, since; version (default current) picks the version "},{"name":"reply_to_feedback","description":"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"},{"name":"list_artifacts","description":"List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page."},{"name":"revoke_artifact","description":"Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist. artifact_id: id, slug or viewer URL."},{"name":"configure_workspace","description":"Read or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read. Platform guardrails are refus"},{"name":"get_artifact_state","description":"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 key"},{"name":"set_artifact_state","description":"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: ArtifactRe"},{"name":"reset_artifact_state","description":"Clear all state, including board values; HTML is unchanged. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last w"},{"name":"get_authoring_guide","description":"Read before writing HTML: themes, ap-* layout classes, an example page, the snippet, size and sandbox rules. Optional theme (firn, firn@1) is validated and retu"}],"toolCount":12,"toolsHash":"5634121898e99a072334b9c3038c895fe4151fe98133d9ba53c2eef2384b4c23","serverName":"artifact-publisher","capabilities":["tools"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"publish_artifact","description":"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 i"},{"name":"update_artifact","description":"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 vers"},{"name":"set_artifact_access","description":"Change an artifact's access mode without a new version. For accountless coworkers use public, not allowlist. artifact_id: id, slug or viewer URL."},{"name":"get_feedback","description":"Read reviewer comments on an artifact, oldest first; use after sharing or to poll. Filters: unresolved_only, since; version (default current) picks the version "},{"name":"reply_to_feedback","description":"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"},{"name":"list_artifacts","description":"List artifacts in this key's workspace, newest first, with unresolved comment counts. Pass `next_cursor` back as `cursor` to page."},{"name":"revoke_artifact","description":"Stop serving this artifact (410 Gone). Cannot undo; viewed copies exist. artifact_id: id, slug or viewer URL."},{"name":"configure_workspace","description":"Read or update workspace defaults (comments_enabled, default_expiry_seconds, default_artifact_title); pass empty settings to read. Platform guardrails are refus"},{"name":"get_artifact_state","description":"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 key"},{"name":"set_artifact_state","description":"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: ArtifactRe"},{"name":"reset_artifact_state","description":"Clear all state, including board values; HTML is unchanged. Shared JSON key/value state, synced to viewers across versions (page JS: ArtifactRelayState). Last w"},{"name":"get_authoring_guide","description":"Read before writing HTML: themes, ap-* layout classes, an example page, the snippet, size and sandbox rules. Optional theme (firn, firn@1) is validated and retu"}],"package":null,"toolSurface":{"id":"ts_82d6bp6n9kjb","endpointId":"ep_8gbrnemztnqu","hash":"5634121898e99a072334b9c3038c895fe4151fe98133d9ba53c2eef2384b4c23","toolCount":12,"serverName":"artifact-publisher","serverVersion":"0.1.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-24T00:26:30.490Z","lastSeenAt":"2026-10-26T18:30:48.215Z","observations":10,"toolNames":["publish_artifact","update_artifact","set_artifact_access","get_feedback","reply_to_feedback","list_artifacts","revoke_artifact","configure_workspace","get_artifact_state","set_artifact_state","reset_artifact_state","get_authoring_guide"],"distinctSurfaces":3},"endpointFacts":[{"id":"ep_8gbrnemztnqu","url":"https://app.artifactpublisher.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-26T02:23:52.792Z","auth":{"observedAt":"2026-10-26T02:23:52.861Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://app.artifactpublisher.com/.well-known/oauth-protected-resource/mcp","resource":"https://app.artifactpublisher.com/mcp","authorizationServers":["https://app.artifactpublisher.com"],"scopesSupported":["artifacts:read","artifacts:write","feedback:read","feedback:write","workspace:configure"]},"authorizationServer":{"url":"https://app.artifactpublisher.com/.well-known/oauth-authorization-server","issuer":"https://app.artifactpublisher.com","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["none"],"dynamicClientRegistration":false,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":true},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":true,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-26T02:23:52.878Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"artifactpublisher.com","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-10-11T03:51:48.000Z","validTo":"2027-01-09T04:51:44.000Z","daysToExpiry":74,"sanCount":3,"fingerprint256":"AF:B7:15:6F:B0:4C:C6:ED:E3:79:6C:58:9B:D6:44:F6:B8:3D:AF:FB:10:64:1D:C1:DB:5C:B3:21:8E:F4:79:D1"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"com.artifactpublisher/mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/com.artifactpublisher%2Fmcp","firstSeenAt":"2026-10-21T12:20:46.442Z","fetchedAt":"2026-10-25T00:22:21.443Z","normalizedAt":"2026-10-25T00:22:21.443Z"}]},"firstSeenAt":"2026-10-21T12:20:46.442Z","updatedAt":"2026-10-26T18:36:09.849Z"}