The one place at Mindset for every customer logo. 122 companies, both on-light and on-dark variants, hand-verified and transparent. Use it from the browser, from Claude Code, from the API, or clone the repo and use the files directly. Every variant can be fetched in any format (PNG, WebP, JPG, or SVG) via the on-the-fly transcoder.
| What | Where |
|---|---|
| Gallery | mindset-logos.vercel.app |
| GitHub | MindsetConsulting/mindset-logos |
| Vercel | vercel.com/mindsetconsulting/mindset-logos |
| JSON list API | https://mindset-logos.vercel.app/api/logos |
| Transcoder API | https://mindset-logos.vercel.app/api/logos/{slug}/{variant}.{format} |
| MCP (Claude Code) | claude mcp add mindset-logos -- npx -y @mindsetconsulting/mindset-logos-mcp |
| MCP (claude.ai team) | Custom connector URL: https://mindset-logos.vercel.app/api/mcp |
| Raw files | https://mindset-logos.vercel.app/logos/{slug}-on-{light,dark}.{ext} |
Open the gallery. Search, filter by vertical, copy any logo's URL or download the file.
claude mcp add mindset-logos -- npx -y @mindsetconsulting/mindset-logos-mcpThe package ships via GitHub Packages. If you haven't already, add this once to your ~/.npmrc and export GITHUB_TOKEN in your shell profile (a PAT with read:packages is enough):
@mindsetconsulting:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}
Team owners add the MCP as a custom connector in the admin panel so every Mindset employee gets it automatically:
- Go to claude.ai → Settings → Connectors → Add custom connector.
- Name:
Mindset Logos. - URL:
https://mindset-logos.vercel.app/api/mcp - Transport: Streamable HTTP (default).
- Save and enable for the Mindset workspace.
No auth required. The endpoint is stateless and read-only.
Then in any Claude Code or claude.ai session, ask things like:
- "Grab the on-dark version of 3M and put it in the hero"
- "List our customers in the food & beverage vertical"
- "Build a customer-logo wall for all 119 of our customers"
The server exposes three tools: list_logos, get_logo(slug, variant), and search_logos(query).
curl https://mindset-logos.vercel.app/api/logosReturns every customer with their onLight and onDark file paths, website, industry, and verticals.
Every variant can be fetched in any format via /api/logos/{slug}/{variant}.{format}:
# PNG (transparent, universal)
https://mindset-logos.vercel.app/api/logos/abbott/on-light.png?w=800
# WebP (transparent, 3x smaller than PNG)
https://mindset-logos.vercel.app/api/logos/cargill/on-light.webp?w=800
# JPEG (flattened onto cream for on-light, navy for on-dark; override with &bg=ffffff)
https://mindset-logos.vercel.app/api/logos/3m/on-light.jpg?w=1200
# SVG (passthrough; only works when the source file is SVG, 415 otherwise)
https://mindset-logos.vercel.app/api/logos/anchorage/on-dark.svg
Why this exists: some downstream consumers (Google Slides API, older clients) only accept specific formats. Instead of hand-maintaining multiple files per customer, the transcoder reads whatever source we have (WebP, SVG, or PNG) and returns the format you asked for. Results are cached immutably on Vercel's CDN per URL, so the conversion runs exactly once per {slug, variant, format, width} combo.
Query params:
w— target width in pixels (default 800, max 2000). SVG sources rasterize at a density calibrated to this width so they stay sharp.bg— hex color for JPEG background (e.g.bg=ffffff). Defaults to cream foron-light, navy foron-dark. Ignored for PNG/WebP since those preserve alpha.
Extension omitted (/api/logos/abbott/on-light) defaults to PNG.
If you want the original source file in its native format:
https://mindset-logos.vercel.app/logos/3m-on-dark.png
https://mindset-logos.vercel.app/logos/agiliti-on-light.webp
https://mindset-logos.vercel.app/logos/bcbs-mn-on-light.svg
Use them in Markdown, Slack, decks, emails, anywhere that accepts whatever format the source happens to be.
- Add an entry to
public/logos/manifest.jsonwithslug,name,website,industry,verticals. bun run fetch <slug>— pulls both variants from Brandfetch with a fallback to vendor website scraping.bun run audit— check quality and variant classification.- If the automatic fetch produced flat/icon/tiny variants, follow the techniques in CLAUDE.md to re-source from the vendor site (logovectorseek, seeklogo, Wikipedia, or the header of the homepage). There are three documented techniques (trust existing alpha, Pillow pixel swap, SVG color swap) that cover every logo we've hit.
- Add the slug to
.pending-approval.jsonuntil visually verified, then remove it. - Commit and push. Vercel redeploys automatically.
See the three techniques in CLAUDE.md. The gist:
- Trust existing alpha — Brandfetch files are often already transparent; just trim and save, never
-alpha off. - Pillow pixel swap — for raster logos with visible theme colors, walk pixels with a per-channel rule (
b > r + 25,max(r,g,b) < 80, etc) and preserve the original alpha. - SVG color swap — for vendor SVGs with white-text/colored-emblem mixes, use a Python regex keyed on the path's starting M x-coordinate so you only swap text-region white fills.
app/— Next.js 16 gallery UI (Playfair Display + Inter + JetBrains Mono, Mindset brand theme).public/logos/— all logo files, themanifest.json,audit.json, pending/override lists.lib/logos.ts— reads the manifest and resolves each slug's variant file paths.scripts/—fetch-logos.ts,audit.ts,fix.ts,apply-approvals.ts. Run withbun run {fetch,audit,fix,apply-approvals}.mcp/— stdio MCP server that wraps the JSON API.CLAUDE.md— full technique reference, baked into the repo so any Claude Code session has the context.
Deployed to Vercel from main. The GitHub Actions pipeline rebuilds the @mindsetconsulting/brand asset on brand updates.