{"slug": "show-hn-artbucket-oss-brand-assets-and-portals-for-humans-and-ai-agents", "title": "Show HN: Artbucket – OSS brand assets and portals for humans and AI agents", "summary": "Artbucket launched as an open-source brand asset management system that serves the same answers to people, AI agents and code through a web app, MCP server, REST API, CLI and Git. The tool exposes MCP tools named search_assets, check_use and rendition_url at /api/v1/mcp, letting agents like Claude Code check usage rights — for example refusing a Spring hero image for paid-social use in Germany because its license expired after 2026-03-12 — and fetch renditions such as /a/{id}/w_1200,f_webp. The full core is free to self-host on Postgres and an S3-compatible bucket with Node 22+, pnpm and Docker, with no telemetry and no locked features.", "body_md": "**Your brand's source of truth, open source.**\n\nWhich logo is current? What colors should an agent use? Is this photo cleared for paid social in Germany?\n\nArtbucket keeps a brand's assets, rules, rights and releases together, and gives the same answer to people, AI agents and code. People read it in the web app and on portals, agents query it over MCP, code consumes it through the API, the CLI and Git.\n\n**Web app · MCP · REST API · CLI · Git**\n\n[Try Artbucket Cloud](https://artbucket.io) · [Live brand page](https://brand.artbucket.io/) · [Docs](https://docs.artbucket.io) · [Run it yourself](#run-it-yourself)\n\nFind the asset, ask whether it may run, get it at the size you need:\n\n``` bash\n$ npx artbucket search primary logo\n{id}  logo-primary.svg  #logo #primary\n\n$ npx artbucket check {spring-hero} --channel paid-social --territory DE\nrefused  Spring hero\n  x Replaced by Summer hero\n  x License expired after 2026-03-12\n  → Summer hero  https://assets.example.com/a/{summer-hero}  (Its replacement)\n\n$ npx artbucket url {id} --width 1200 --format webp\nhttps://assets.example.com/a/{id}/w_1200,f_webp\n```\n\nAgents make the same calls over MCP (`search_assets`, `check_use`,\n`rendition_url`), and code over the [REST API](https://docs.artbucket.io/developers/api) (`/api/v1`, with an OpenAPI\nspec). The web app is a client of that API, with zero private endpoints, so\neverything it does, you can script. See [May I use this?](https://docs.artbucket.io/guides/check) and the [CLI](https://docs.artbucket.io/developers/cli).\n\n`/api/v1/mcp` is an MCP server. Give the URL to any agent: it opens a consent\nscreen where you pick what it may do (Suggest, Read or Edit), and the agent\ngets a key bound to you, never more than you can do.\n\n```\nclaude mcp add --transport http artbucket https://app.artbucket.io/api/v1/mcp\n```\n\nThat is [Artbucket Cloud](https://artbucket.io); on your own server, use its URL. Then ask: *\"Give me\nthe approved logo for a dark background.\"* The agent checks the use and gets\nthe brand's dark-background variant, as a URL at the size it needs.\n\nThe Claude Code plugin adds a skill that teaches the workflow (brand rules\nfirst, a use check before publishing, provenance on anything generated):\n`/plugin marketplace add pwnera/artbucket`, then\n`/plugin install artbucket@artbucket`. Other agents: `npx skills add pwnera/artbucket`.\nSee [MCP](https://docs.artbucket.io/developers/mcp).\n\nThe whole core is here, free to self-host on Postgres and an S3-compatible bucket. Nothing held back, nothing to unlock, no telemetry. You need Node 22+, pnpm and Docker:\n\n```\ngit clone https://github.com/pwnera/artbucket.git\ncd artbucket\npnpm install\ncp .env.example .env\ndocker compose up -d      # Postgres and S3-compatible storage\npnpm dev                  # migrates the database, then serves\n```\n\nOpen [http://localhost:3000](http://localhost:3000) and make the first account: it is the admin of\neverything. No Node on the machine? Set `BETTER_AUTH_SECRET` in `.env`\n(`openssl rand -base64 32`) and run the published image with\n`docker compose --profile app up -d`. The [quick start](https://docs.artbucket.io/quickstart) takes it from there.\n\nTo put it on a server, follow the guide for [Render](https://docs.artbucket.io/installation/render), [Docker Compose](https://docs.artbucket.io/installation/docker-compose),\n[Docker](https://docs.artbucket.io/installation/docker), [Fly](https://docs.artbucket.io/installation/fly), [Kubernetes](https://docs.artbucket.io/installation/kubernetes), [Coolify](https://docs.artbucket.io/installation/coolify) or a [plain VPS](https://docs.artbucket.io/installation/vps). Any S3-compatible\nstorage works: AWS S3, Cloudflare R2, Backblaze B2, MinIO, Garage, SeaweedFS.\n\n- **Assets: what exists.** The library: search in milliseconds at 100,000\nassets, and any size or format from one original as a URL,`/a/{id}/w_1200,f_webp` , with no export and no duplicate.\n- **Rules: how to use it.** Colors, type, logo rules and don'ts as typed\nrecords with history, tied to the assets; guideline pages and design tokens\nare drawn from them.\n- **Rights: where it may run.** License, channels, territories, embargo and\nlast day of use on each asset. Ask before it runs: yes, or why not and what\nto use instead.\n- **Releases: what is current.** Release the brand like software, pin a\nrelease, roll back. Portals and BrandHub show the release.\n- **Access: who may use it.** Grants down to one asset, so an agency sees its\nslice. Single sign-on in every install, and viewers are never counted.\n- **Portals.** A press kit, partner hub or retailer portal on your own domain,\nplus share and upload links for people without an account.\n- **Review.** Uploads, tags and agent suggestions wait for a person's yes.\n- **Provenance.** C2PA Content Credentials read on ingest and kept, IPTC/XMP\nwritten back into the file on download. Your files leave with their metadata.\n- **Brand as code.** The brand as YAML in a Git repository, changed on either\nside and merged a rule at a time ([brand as code](https://docs.artbucket.io/guides/brand-as-code) ).\n- **Insights.** What gets used, by whom, on which release, counted without\ncookies.\n\nRead [CONTRIBUTING.md](https://github.com/pwnera/artbucket/blob/main/CONTRIBUTING.md) first. Bug fixes go straight to a pull request; for\nanything larger, open an issue before writing the code, since the roadmap is\nopinionated on purpose. The load-bearing choices, and why, are in the\n[decision records](https://github.com/pwnera/artbucket/blob/main/docs/decisions/index.mdx).\n\nBuilt with Next.js, React, Postgres and Drizzle, sharp, better-auth and Tailwind. No monorepo, no job queue, no Redis, no search cluster.\n\n```\npnpm test\npnpm typecheck\npnpm lint\n```\n\nStart with the [documentation](https://docs.artbucket.io). Questions and bugs go to\n[GitHub issues](https://github.com/pwnera/artbucket/issues), with the version you run, what you did and what you expected.\nSecurity reports never go in a public issue: see [SECURITY.md](https://github.com/pwnera/artbucket/blob/main/SECURITY.md).\n\n[ROADMAP.md](https://github.com/pwnera/artbucket/blob/main/ROADMAP.md) has what shipped, what is in progress and what is deferred on\npurpose. Artbucket is at v1: `/api/v1` and the MCP tools are frozen, and what\nworks against them keeps working on every 1.x release ([stability](https://docs.artbucket.io/developers/stability)).\n\n[AGPL-3.0](https://github.com/pwnera/artbucket/blob/main/LICENSE), copyright Pwnera SAS. Run it, change it, self-host it, for\nany purpose. If you offer a changed version as a network service, publish your\nchanges. Building a product on Artbucket, or need your own terms? Pwnera SAS\nalso licenses it commercially: [open an issue](https://github.com/pwnera/artbucket/issues) and ask. `ee/` is\nreserved for commercial code. See [decision 0013](https://github.com/pwnera/artbucket/blob/main/docs/decisions/0013-agpl-and-cla.mdx).", "url": "https://wpnews.pro/news/show-hn-artbucket-oss-brand-assets-and-portals-for-humans-and-ai-agents", "canonical_source": "https://github.com/pwnera/artbucket", "published_at": "2026-10-04 07:49:50+00:00", "updated_at": "2026-10-04 08:12:04.816844+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "developer-tools", "ai-tools"], "entities": ["Artbucket", "Artbucket Cloud", "MCP", "Claude Code", "Postgres", "GitHub", "Render", "Cloudflare R2"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-artbucket-oss-brand-assets-and-portals-for-humans-and-ai-agents", "markdown": "https://wpnews.pro/news/show-hn-artbucket-oss-brand-assets-and-portals-for-humans-and-ai-agents.md", "text": "https://wpnews.pro/news/show-hn-artbucket-oss-brand-assets-and-portals-for-humans-and-ai-agents.txt", "jsonld": "https://wpnews.pro/news/show-hn-artbucket-oss-brand-assets-and-portals-for-humans-and-ai-agents.jsonld"}}