artifact-store

Artifacta is an MCP server and artifact store built for AI agents.

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeRead-only

What it can do

  • Whoami: Return the calling tenant's identity, plan tier, current usage counters (storage bytes, monthly requests, active links), and rate limits. Use this once at the start of an agent run to confirm
  • List Artifacts: List artifacts owned by the calling tenant, newest first. Supports filters by `session_id`, `agent_id`, `filename` (exact match), `content_type`, `created_after` / `created_before` (IS
  • Get Artifact: Fetch metadata for a single artifact by ID: filename, content type, size, content hash, session/agent IDs, custom metadata, expiry, creation timestamp. Does NOT return the file bytes — c

What data it sees

Do you need an account

No: the server works without sign-in

Artifacta is an MCP server and artifact store built for AI agents. Connect via hosted OAuth at mcp.artifacta.io Upload, list, download, and share agent outputs across Claude Code, Cursor, and other MCP clients.

How to connect

How to connect artifact-store to Claude

The server address to paste into Claude settings:

https://artifact-store--artifacta.run.tools

  1. Open Claude (claude.ai or the desktop app).
  2. Go to Settings → Connectors.
  3. Click Add custom connector.
  4. Paste the server address copied below into Remote MCP server URL and click Add.
  5. In a chat, click + → Connectors and switch the new connector on.

Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.

Authorization

After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.

How to connect artifact-store to ChatGPT

The server address to paste into ChatGPT settings:

https://artifact-store--artifacta.run.tools

  1. Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
  2. Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
  3. Open Settings → Connectors and click Create.
  4. Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
  5. Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
  6. In a new chat open + → Apps/Connectors and enable the connector.

OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.

Authorization

On first use ChatGPT opens the service's sign-in window. Sign in and approve access.

How to connect artifact-store to Cursor

The server address to paste into Cursor settings:

https://artifact-store--artifacta.run.tools

Fastest: click Open in Cursor below and confirm the prompt.

Manually:

  1. In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
  2. Paste the JSON copied below into ~/.cursor/mcp.json (per project: .cursor/mcp.json in the repo root).
  3. Save the file. The server appears in the MCP list; authorize it there if asked.

Authorization

If the service needs sign-in, an authorize button appears next to the server in the MCP list.

Server tool list (13)

Raw names from tools/list. Only developers need these.

whoamiReturn the calling tenant's identity, plan tier, current usage counters (storage bytes, monthly requests, active links), and rate limits. Use this once at the start of an agent run to confirm authentication and to size subsequent operations against quota. Free of side effects and quota-cheap.
list_artifactsList artifacts owned by the calling tenant, newest first. Supports filters by `session_id`, `agent_id`, `filename` (exact match), `content_type`, `created_after` / `created_before` (ISO 8601), and one or more `metadata.<key>=<value>` pairs (multi-key requires Pro). Returns a page of artifact records and a `next_cursor` to fetch the next page. Use this to discover what an agent or pipeline produced when you only know a session or agent ID.
get_artifactFetch metadata for a single artifact by ID: filename, content type, size, content hash, session/agent IDs, custom metadata, expiry, creation timestamp. Does NOT return the file bytes — call `get_artifact_download_url` for that. Returns `artifact_not_found` for unknown IDs, `artifact_already_deleted` (HTTP 410) for soft-deleted ones, `artifact_expired` (410) for those past their TTL.
get_artifact_download_urlGenerate a short-lived presigned URL (1 hour) the agent can use to download the artifact's bytes directly from Cloudflare R2. Use this when the agent itself needs to consume the file. For sharing with humans, use `create_download_link` instead — that produces a stable `dl.artifacta.io/lnk_…` URL with configurable expiry.
list_sessionsList session IDs synthesized from the calling tenant's artifacts, ordered by most recent activity. Each entry includes artifact count, seal status, and first/last activity timestamps. Sessions are not first-class — they exist only as long as artifacts reference them.
store_artifactUpload a file as a new artifact in a single call. Provide EITHER up to ~10 MB of base64-encoded bytes via `content`, OR a local filesystem `path` that the MCP server reads and streams as multipart/form-data (up to 500 MB). For files larger than 500 MB, use `request_upload_url` (Pro only) instead — `store_artifact` returns `file_too_large` for them. Tags the artifact with `session_id` / `agent_id` / `metadata` for later retrieval and returns the full artifact record including its new `artifact_id` and `content_hash`. Path uploads are confined. The `path` argument is constrained to the launcher-configured allow-list (default: the MCP server's CWD). Paths outside the allow-list, paths traversing symlinks out of it, and paths to known-sensitive locations (`~/.ssh`, `~/.aws`, `/etc/`, etc.) are refused with `invalid_request`. For crash-safe retries, supply your own `idempotency_key` (any string ≤256 chars): a replay within 24h returns the original artifact and never double-bills. If you omit it, the server auto-generates one and returns it under `_meta.idempotency_key`, but that key protects only in-process retries within a single call — it is lost if the server restarts, so pre-commit your own key when durability matters. Provenance: if you omit `agent_id`, the server stamps a default (the connected MCP client's name, or "mcp") so that publishing this artifact later still produces a populated provenance receipt. Pass your own `model` (e.g. "claude-5", "gpt-5.5") to record which model generated this content — it is stored as `metadata.model` unless you already set that key yourself in `metadata`, in which case your explicit value wins.
request_upload_urlReserve a presigned R2 PUT URL for a file too large to send through `store_artifact` (over 500 MB up to 5 GB). Returns an `upload_url`, headers to include in the PUT, and an `artifact_id` in `pending` state. The agent (or its environment) PUTs the bytes directly to R2, then calls `complete_upload`. Pro plan only. Most agents should use `store_artifact` and let the MCP server pick the path automatically. Not retry-safe: this endpoint does not support idempotency keys, so on an HTTP 5xx or network error the reservation may or may not have been created. Do NOT blindly retry — the error guidance tells you to first call `list_artifacts` with the same `session_id`/`agent_id` to detect any pending artifact, so you don't create a duplicate.
complete_uploadFinalize an artifact previously reserved via `request_upload_url` after the bytes have been PUT to the presigned URL. Server verifies the blob, computes the content hash, transitions the artifact from `pending` to `active`, and increments tenant usage. Calling this on an already-active artifact is idempotent and returns the existing record. Calling before the PUT completes returns `upload_not_found` — wait and retry.
create_download_linkProduce a stable, human-shareable URL (`https://dl.artifacta.io/lnk_<id>`) that resolves to the artifact bytes for a chosen duration. Use this when an agent needs to hand off output to a human reviewer or downstream tool that cannot inject bearer headers. Default expiry is 7 days; max is plan-dependent (30d Free, 90d Pro). Active links are quota-limited (50 Free, 500 Pro).
delete_artifactSoft-delete an artifact. The artifact disappears from listings immediately and download URLs return `410 Gone`. Storage and the underlying R2 blob are hard-deleted by a background job 30 days later. There is no undo from the API — do not call without explicit user confirmation.
seal_sessionPermanently prevent further artifacts from being added to a session. Existing artifacts remain readable and downloadable. Sealing a session is **irreversible** — there is no `unseal` endpoint. Use this only when an agent's pipeline has confirmed completion and you want to harden the session against late-write corruption.
publish_artifactPublish an existing artifact as a polished, shareable public page at https://artifacta.io/a/{slug}. Composes with store_artifact (store first, then publish). Returns a public_url anyone can open without an Artifacta account. Default visibility is unlisted (link-only); pass visibility:"public" for gallery-eligible later. Idempotent: re-publishing the same artifact_id updates the existing page and keeps the same URL.
unpublish_artifactRemove the public page for an artifact, making the public URL inaccessible. The artifact itself is not deleted — only its shareable page is taken down. The URL stops resolving immediately. Idempotent: calling unpublish on an already-unpublished artifact is a no-op.