Brandfetch MCP Server & CLI

An open source Brandfetch MCP server and shared CLI with 14 tools, isolated profiles and approved private assets.

Navid Moazzezby Navid Moazzez·Updated Oct 3, 2026·34 min read·
Rate this tool
key_takeaways.mdTL;DR

Key takeaways

One package provides the same tools through a task CLI, local MCP and versioned desktop bundle.
Named profiles use only their own Brand API key and separate Logo API client ID.
Comparison reads two to five chosen brands in order and stops on failure.
Prefetch and private downloads require approval, and read-only refuses direct write calls.
Browser hotlinks are display-only; approved local downloads use original Brand API asset credentials without returning those credentials.
Current official OAuth, rich cards and community CLI alternatives are compared fairly.

This free Brandfetch MCP server and CLI gives your AI real access to current brand data, interpreted context, transaction enrichment, bounded comparisons and private assets. Read the requested brands in the intended private profile, compare only the chosen identifiers and save only explicitly approved local assets.

It's one install with 2 ways in. Claude, Codex, Cursor or any other MCP app calls its 14 tools for you, and the same tools work as a CLI that agents like Claude Code, Codex and OpenCode run, or that you type yourself.

Here's what the Brandfetch MCP server and CLI is, how to set it up in each app, and every tool it has.

What is the Brandfetch MCP server & CLI?

The Brandfetch MCP server & CLI is a free, open source program that lets AI agents read brand data and context, enrich a requested descriptor and carry out approved prefetch/private downloads for you, in 2 ways. The MCP server is what an AI app like Claude, Codex or Cursor connects to, through MCP (Model Context Protocol), the open standard AI apps use to call outside tools.

You ask in plain language. Your AI picks the right tool, and the server makes the call directly to the fixed Brandfetch API; approved original assets use its allowed CDN.

The CLI is the same program as commands. brandfetch-cli get-brand runs the same code your AI runs when you deliberately retrieve the intended brand using the selected profile, whether an agent like Claude Code runs it or you do.

What can you ask it?

Once it's set up, you ask the way you'd ask an assistant. These are real prompts it handles:

Try asking
Search for this brand and let me select the intended domain.
Read only this brand’s colors without exposing asset credentials.
Compare these two requested brands in the work profile.
Read cached interpreted context and tell me if it is a cache miss.
Enrich this specific transaction label and country; do not make a payment.
Queue one approved brand prefetch.
Save at most two approved original logos in my private directory.

Brandfetch already offers a capable official OAuth/MCP Apps server and existing community CLIs. This owned companion adds a shared task CLI/local MCP with isolated named profiles, bounded ordered comparisons, selective credential-free output and approved exclusive private files. Official hosted OAuth, rich cards and image resources remain useful alternatives.

How to install the Brandfetch MCP server

Choose the shared task CLI, local MCP or versioned desktop bundle in the existing install controls. Codex is the primary documented agent; the complete client and OS setup follows below.

Before you start0/3

Set up Brandfetch access

Two separate provider credentials

  1. Open the Brandfetch developer portal. Obtain a Brand API key for brand data, context, transaction enrichment, prefetch and viewer reads. Check the account's current plan and quota.
  2. Obtain a separate Logo API client ID for Brand Search and browser-displayed Logo API URLs. It identifies the application and belongs in those browser URLs; it is not a Brand API Bearer key.
  3. Store the Brand API key outside repositories in an absolute owner-only token-only file, or configure BRANDFETCH_API_KEY in private local settings. Configure BRANDFETCH_CLIENT_ID separately. Official MCP bf1 tokens and hosted OAuth sessions are different credentials; do not pass them as REST API keys.
  4. Run brandfetch-cli doctor for local settings/presence. Deliberately run doctor --network to read the selected Brand API viewer; this verifies that request, not every feature or client. For a client-ID-only profile, test search instead of the Brand API viewer.
  5. Read the exact requested brand. Choose cachedOnly=true when a cache miss should remain a 204 without crawling. Approve prefetch or a private download only when requested.

Brand API keys go only to the fixed api.brandfetch.io REST origin in Authorization: Bearer. Search uses native query c and sends no Bearer header. Named profiles never inherit global keys or client IDs. login prints setup instructions; it does not open a browser, store credentials, purchase access, refresh tokens or implement OAuth. This package does not load .env files or official MCP sessions automatically.

On macOS/Linux, use an existing owner-private directory (0700) and a regular non-symlink token-only file (0600) at an absolute path, at most 64 KiB. Token-file credentials override the profile environment key and are cached until restart. On Windows, restrict file/directory ACLs to your user; POSIX mode checks do not validate Windows ACL protection. GUI apps and remote development environments may not inherit the terminal environment.

Plans, quota and paid reads

The AGPL wrapper is free. Brandfetch access, brand/context/transaction credits and provider terms remain separate. Check current pricing and your dashboard before using the API. Indexed Brand API reads can consume quota. A read may crawl on a cache miss unless cachedOnly=true. Local colors/fonts filtering and CLI --select reduce output only, not provider calls, bytes or credits.

Brand Search and Logo API use their own client-ID contract. Current Logo API documentation describes one million monthly hotlink requests on the free tier, with soft limits and traffic ceilings; this does not make Brand API reads free. Account eligibility, quotas and limits can change. HTTP 402/429 indicate payment/quota/rate constraints; a 403 with an explicit quota/credit/limit detail maps to exit 7, while ordinary 401/403 map to authentication/permission exit 4. HEAD errors may contain no JSON detail; inspect provider settings and status rather than assuming the cause.

The default local 200 ms pacing is per profile/process across API and asset requests, not a provider-wide quota reservation. Other processes and profiles using the same key share upstream limits. No request automatically retries on a timeout, redirect, 429 or 5xx. JSON bodies are capped at 1 MiB; each API response and asset at 5 MiB. Asset requests have a maximum five-second timeout. Comparisons make two to five ordered reads; downloads make one brand read and up to five original asset GETs.

get_logo_url constructs browser-display URLs locally. The provider blocks programmatic fetching of Logo API client-ID hotlinks. Do not spoof browser headers or download these URLs with scripts. For local files, download_brand_logos uses only original credentialed src URLs returned by the Brand API, preserving their path and per-request credential. API keys are never forwarded to the CDN. Redirects, arbitrary hosts, hotlink routes and missing/duplicated c parameters refuse.

Brand API src credentials are redacted from model output, including ordinary get_brand results. This preserves asset metadata but deliberately changes the legacy behavior of returning all credentialed src strings. The official MCP provides interactive cards and a bounded image resource stream when those capabilities are needed. Downloaded SVGs/images remain untrusted files; this wrapper does not execute or automatically render them.

Rotate and revoke

Rotate or revoke the intended Brand API key in Brandfetch, update private settings/files and restart clients. Update the client ID separately if its application configuration changes. Uninstalling npm does not revoke access, undo a provider crawl or delete private downloaded assets. Keep private profiles, keys, viewer metadata and per-request URLs out of public issues, screenshots and logs.

Check that it works

Run local checks, then deliberately verify the Brand API viewer using the selected private profile.

brandfetch-cli --version
brandfetch-cli doctor
brandfetch-cli doctor --network
brandfetch-cli list-accounts --agent
brandfetch-cli get-viewer --agent
brandfetch-cli doctor
brandfetch-cli doctor --network
brandfetch-cli list-accounts --agent
brandfetch-cli get-viewer --agent
brandfetch-cli get-brand --identifier example.com --cachedOnly --agent

Local doctor reports settings/presence and does not authenticate. Network doctor deliberately reads the selected Brand API viewer. A client-ID-only profile can search and construct browser URLs but cannot make Brand API reads. Cached misses are reported as status 204 / cachedMiss:true / data:null. Do not queue crawls or download assets merely to test installation. Read-only discovery returns 12 tools and refuses direct confirmed writes.

Use the Brandfetch CLI

The CLI is the same 14 tools as commands. AI agents that run commands, like Claude Code, Codex and OpenCode, use it on their own, and you can type the same commands in a terminal or a script.

Every tool name becomes a command with dashes, so get_brand runs as brandfetch-cli get-brand.

brandfetch-cli tools
brandfetch-cli get-brand --help
brandfetch-cli schema get-brand
brandfetch-cli get-brand --identifier example.com --cachedOnly --agent
brandfetch-cli get-brand-colors --identifier example.com --cachedOnly --agent

The bare brandfetch-cli lists every command, and brandfetch-cli <command> --help shows what a command takes. Both prefetch and private downloads require --confirm. --agent/--yes never approve execution. A read can still spend quota or crawl; native cachedOnly controls supported cache misses.

These flags work on every command:

FlagWhat it does
--jsonStructured JSON
--compactSingle-line JSON
--agentCompact JSON without prompts/color; never approval
--select a,b.cLocal result selection
--confirmApprove the exact requested operation
--account NAMEExact private profile
--cachedOnlyNative cache-only resolution
--allowNsfwOptional native NSFW behavior
--identifiersRepeat for bounded unique comparisons
--output-dir / --max-filesExisting private directory / bounded local assets

A script can branch on the exit code:

Exit codeWhat it means
0Success or explicitly reported cache miss
2Invalid input or refused operation
3Provider not found
4Authentication/permission failure
5Provider/transport/content/file failure
7Rate limit or explicit exhausted quota
10Missing/invalid private configuration

MCP server or CLI: which one?

Both surfaces call the same tools. Codex can connect to the local MCP server or run the CLI directly. Neither requires Claude Code.

MCP provides structured tool discovery; the CLI supports scripts, compact JSON, field selection and command/schema discovery. Official hosted MCP connection and local CLI authentication have different setup requirements.

Codex-specific token measurements are pending. Record the actual client/model versions, discovery configuration, input/output usage, caching, latency and equivalent successful outcomes. Standing definitions and full task cost are separate measurements; CLI commands, selected help, results and reasoning still consume tokens.

No efficiency percentage or Claude-derived figure is presented as a Codex result. Other-client benchmarks can be added separately.

Brand, context and transaction workflows

Resolve the requested identifier

Search returns candidate brands; select the intended domain before fetching. Generic lookup accepts domains, email addresses, URLs, Brand IDs, tickers, ISINs and crypto symbols. Provider resolution order is domain → ticker → ISIN → crypto; explicit identifier_type routes avoid ambiguity. Email/URL lookup resolves a registrable domain and does not establish that the domain is the person's employer. Explicit domain routes reject email/URL inputs locally.

brandfetch-cli search-brands --query Example --agent
brandfetch-cli get-brand --identifier example.com --identifier-type domain --cachedOnly --agent
brandfetch-cli get-brand-colors --identifier example.com --cachedOnly --agent
brandfetch-cli get-brand-fonts --identifier example.com --cachedOnly --agent
brandfetch-cli get-brand --identifier BTC --identifier-type crypto --agent

Context and enrichment

Brand Context returns interpreted positioning, voice and related information. Treat it as probabilistic interpretation requiring review. Use only the transaction descriptor requested by the user; it is sent to Brandfetch. This is a brand resolution API, not a payment or bank account workflow.

brandfetch-cli get-brand-context --domain example.com --cachedOnly --agent
brandfetch-cli enrich-transaction --transaction-label "EXAMPLE CAFE" --country-code US --agent

Explicit prefetch

prefetch_brand requires confirmation because HEAD can queue crawling. A 200 reports indexed and 202 reports crawlQueued; it does not guarantee a future lookup result, initiate polling or prove completion. There is no automatic payment, fallback purchase or wallet support.

brandfetch-cli prefetch-brand --identifier example.com --confirm --agent

Bounded comparison, private downloads and browser logos

Ordered comparison

compare_brands accepts two to five unique identifiers, prevalidates all of them before the first request, then reads sequentially in one exact selected profile. It returns name/domain/colors/fonts/logo counts and qualityScore, preserving input order. A 204 remains an explicit cache miss. A failure stops subsequent requests and reports completed results plus the failed/remaining identifiers. Earlier reads may have consumed quota. There is no persistent result cache, completeness claim or automatic continuation.

brandfetch-cli compare-brands --identifiers example.com --identifiers example.org --account work --cachedOnly --agent

Approved private files

Create an owner-private directory yourself before requesting a download. output_dir must be absolute, canonical and already present. Symlink directories and public POSIX permissions refuse before the brand lookup; Windows owners must restrict ACLs. No automatic directory creation or hidden default output directory is used.

mkdir -m 700 /absolute/private/brand-assets
brandfetch-cli download-brand-logos --identifier example.com --output-dir /absolute/private/brand-assets --format-preference svg --max-files 2 --confirm --agent

The helper performs one brand read, selects matching logo formats in provider order and downloads at most max_files (default three, maximum five). format_preference supports svg/png/all; all allows documented SVG, PNG, JPEG, WebP and GIF asset formats. Selection is bounded, not all-assets export. Each original credentialed CDN URL is validated before the first file download. Fixed allowed HTTPS CDN only; no redirects, key forwarding, browser-header spoofing or hotlink downloads. Each response is streamed under a 5 MiB cap and image Content-Type must match the selected declared format.

Files use random exclusive names and 0600 creation; existing files are never overwritten. SHA-256, actual bytes, format and local path are returned; credential URLs are not written to a manifest or model output. A failure stops subsequent downloads and reports completed files plus any reserved path; the reserved file may be empty or incomplete. Inspect it privately rather than retrying blindly. No rollback deletes earlier completed files, and nothing executes or previews downloaded SVGs.

Browser-only logo URLs

get_logo_url keeps identifier_type separate from asset type, fixing the legacy icon flag that discarded ticker/ISIN/crypto routing. The legacy icon flag remains but cannot be combined with type. Local integer dimensions are 1–2048; provider raster sizing clamps to 16–2048 and preserves aspect ratio. Light/dark describe asset color, not background color. This helper conservatively allows SVG for logo/symbol only; icon SVG lettermark exceptions remain an official API feature outside this local helper. Image fallbacks may return WebP regardless of a requested format.

brandfetch-cli get-logo-url --identifier BTC --identifier-type crypto --type icon --width 200 --fallback 404 --agent

The URL includes the application's client ID and is deliberately displayable, unlike a private per-request Brand API credential. Embed it directly in a browser. Do not fetch it programmatically; use the private download helper for original authenticated assets.

Every Brandfetch tool

Actual discovery returns 14 tools: 12 reads/helpers and 2 confirmed operations. Eleven native V2 operations are consolidated into shared task tools. All seven legacy names are retained with the documented migration changes.

Brand reads

get_brand
What it does
Current Brand API V2 data through generic or explicit routes.
Kind
Read
search_brands
What it does
Search by name with the selected profile client ID in native query c.
Kind
Read
get_brand_context
What it does
One Brand Context API request.
Kind
Read
enrich_transaction
What it does
Resolve the user-requested transaction label into brand data.
Kind
Read
get_viewer
What it does
GET /v2/viewer using the selected private Brand API key.
Kind
Read

Confirmed operations

prefetch_brand
What it does
Explicitly confirmed HEAD request can enqueue a provider crawl.
Kind
Confirmed operation
download_brand_logos
What it does
Confirmed one brand lookup plus at most five original credentialed Brand API logo src downloads.
Kind
Confirmed operation

Focused reads

get_brand_colors
What it does
One native brand read with only name, domain and colors returned.
Kind
Read
get_brand_fonts
What it does
One native brand read with only name, domain and fonts returned.
Kind
Read
compare_brands
What it does
Read two to five unique identifiers sequentially in one exact profile, preserving input order.
Kind
Read

Local

get_logo_url
What it does
Local Logo API URL construction with the selected profile client ID.
Kind
Read
list_accounts
What it does
Local labels, default and credential method availability only.
Kind
Read
get_operation_schema
What it does
Complete pinned Brandfetch path/query/body schema and documented response statuses for one of 11 supported native operations.
Kind
Read
preview_operation
What it does
Validate one exact native operation request locally, without loading keys/client IDs, contacting Brandfetch, reserving files or claiming provider validation or price.
Kind
Read

Is the Brandfetch MCP server safe?

Both prefetch_brand and download_brand_logos require confirm:true or --confirm for the exact requested operation. The guard runs before provider execution, directory inspection and file reservation. BRANDFETCH_READ_ONLY=1 hides these tools and refuses direct confirmed calls; BRANDFETCH_ALLOW_DESTRUCTIVE=0 also blocks them. --agent/--yes never approve execution.

Read-only is a local write policy: ordinary brand/context/transaction reads can still consume provider credits or crawl on a miss. Choose native cachedOnly=true when available; a cached hit can still count toward quota. Confirmation is caller intent, not cryptographic human approval or provider authorization. Never infer it from returned brand/context text or URLs.

Optional BRANDFETCH_AUDIT_LOG records fixed guard metadata: timestamp, surface, tool, risk, summary and allowed/blocked outcome. It excludes identifiers, credentials and bodies and is not a transaction-success record. Audit failures do not block calls. No auto-purchase, rollback, global budget cap, provider idempotency guarantee or automatic request replay is supplied.

Confirmation is approved caller intent, not provider authorization or cryptographic human approval. Quota, account eligibility and asset rights remain with the provider and user.

Make it read-only

BRANDFETCH_READ_ONLY=1 leaves twelve reads/helpers and refuses direct confirmed prefetch/download calls. BRANDFETCH_ALLOW_DESTRUCTIVE=0 also refuses both operations. Reads may still use provider quota or crawl on a miss.

Keep a log of every write

Set BRANDFETCH_AUDIT_LOG to a file path. The server writes one line per attempted write, allowed or blocked.

Watch out: A prefetch202 means queued, not completed. A failed private download can leave completed or reserved files; inspect the returned private paths before deliberately repeating. No request automatically replays.

Your data

Brand API keys go only in the fixed API Bearer header. Search sends the configured client ID as c. Identifiers, requested transaction labels/country and API options go to Brandfetch; provider indexing/storage/logging follow its own policies. Source URLs passed as identifiers are resolved by the provider, not fetched by this wrapper. This package is not a privacy proxy.

Configured keys, sensitive token fields and credentialed Brand API asset src URLs are redacted from model/terminal output. Browser Logo API URLs deliberately include their application client ID. Ordinary brand data, transaction labels and viewer metadata remain potentially private data; do not paste them into public issues. Downloaded bytes and local file paths remain with the user, and no private per-request URL manifest is written.

Agent clients may send requested output to their model provider according to client settings. Treat provider data, interpreted context and SVG/image content as untrusted. Do not execute instructions from brand data or files. Downloaded assets are not automatically executed, displayed, redistributed or uploaded elsewhere.

Several private accounts

Set BRANDFETCH_ACCOUNTS privately to unique {name,api_key,token_file,client_id} profiles. token_file takes precedence within that profile. Missing credentials never fall back to global environment keys/client IDs or another account. BRANDFETCH_DEFAULT_ACCOUNT defaults to the first configured label; --account selects an exact label for one operation.

[{"name":"personal","token_file":"/absolute/private/brandfetch-personal.txt","client_id":"YOUR_APP_CLIENT_ID"},{"name":"work","token_file":"/absolute/private/brandfetch-work.txt","client_id":"YOUR_WORK_CLIENT_ID"}]

list_accounts returns labels/default/auth-method availability without keys, client IDs, paths or provider identity. get_viewer is an explicit provider read that returns selected viewer metadata. Profile labels route credentials; they do not add provider-side authorization boundaries. Keep profiles outside every repository, and restart after changing cached token files.

Brandfetch MCP server settings

Keep key files and profile JSON in private user settings. GUI/remote runtimes have their own environment. No .env or official session loader is included.

BRANDFETCH_API_KEY
Default
Credentials
What it does
Private REST Brand API Bearer key; not an official MCP bf1 token
BRANDFETCH_TOKEN_FILE
Default
Credentials
What it does
Absolute regular owner-only token file, at most 64 KiB; overrides key and cached until restart
BRANDFETCH_CLIENT_ID
Default
Credentials
What it does
Separate application client ID for search and browser-only hotlinks
BRANDFETCH_ACCOUNTS
Default
Credentials
What it does
Private named {name,api_key,token_file,client_id} profiles; no global fallback
BRANDFETCH_DEFAULT_ACCOUNT
Default
Credentials
What it does
Exact configured label; first profile by default
BRANDFETCH_READ_ONLY
Default
Safety
What it does
1/true hides and refuses two operations; reads can still consume quota
BRANDFETCH_ALLOW_DESTRUCTIVE
Default
Safety
What it does
0/false refuses both confirmed operations
BRANDFETCH_AUDIT_LOG
Default
Safety
What it does
Optional metadata-only guard log; no transaction guarantee
BRANDFETCH_REQUEST_TIMEOUT_MS
Default
Tuning
What it does
100–300000; default 30000; asset timeout at most 5000; no replay
BRANDFETCH_MIN_REQUEST_INTERVAL_MS
Default
Tuning
What it does
0–10000; default 200; per-profile/process pacing

Troubleshooting

Run the doctor first. It names the step that failed and the fix.

What you seeWhat to do
Exit10Exact profile’s own key/file/client ID, owner permissions and GUI environment.
401 / ordinary403REST Brand API key; official MCP bf1 tokens differ.
402 /429 /quota403Current provider balance/quota/rate settings; no replay.
204Expected cachedOnly miss, reported explicitly.
HEAD202Crawl queued; completion is not proven.
Domain refuses URL/emailUse generic auto identifier routing.
Hotlink fetch blockedUse browser display or approved original Brand API asset download.
Output directory refusedExisting canonical absolute owner-private directory; Windows owner ACL.
Partial downloadInspect reported completed/reserved files privately; no overwrite/retry.
Private asset src redactedIntentional credential exclusion; use private download helper.
Desktop rejectedActual host/runtime/custom-extension policy.

If the server doesn't show up in your app at all, run the command your app runs, in a terminal, and read the error.

Every tool argument and native input

All tools/arguments below come from actual shared discovery. Confirmation is enforced before handler execution, beyond ordinary required-key validation. Unknown declared arguments refuse. Bounds are explicit local limits, not provider entitlement guarantees.

get_brand
CLI command
brandfetch-cli get-brand
Policy
Read / local helper
search_brands
CLI command
brandfetch-cli search-brands
Policy
Read / local helper
get_brand_context
CLI command
brandfetch-cli get-brand-context
Policy
Read / local helper
enrich_transaction
CLI command
brandfetch-cli enrich-transaction
Policy
Read / local helper
get_viewer
CLI command
brandfetch-cli get-viewer
Policy
Read / local helper
prefetch_brand
CLI command
brandfetch-cli prefetch-brand
Policy
Explicit confirmation
get_brand_colors
CLI command
brandfetch-cli get-brand-colors
Policy
Read / local helper
get_brand_fonts
CLI command
brandfetch-cli get-brand-fonts
Policy
Read / local helper
compare_brands
CLI command
brandfetch-cli compare-brands
Policy
Read / local helper
get_logo_url
CLI command
brandfetch-cli get-logo-url
Policy
Read / local helper
download_brand_logos
CLI command
brandfetch-cli download-brand-logos
Policy
Explicit confirmation
list_accounts
CLI command
brandfetch-cli list-accounts
Policy
Read / local helper
get_operation_schema
CLI command
brandfetch-cli get-operation-schema
Policy
Read / local helper
preview_operation
CLI command
brandfetch-cli preview-operation
Policy
Read / local helper

get_brand

brandfetch-cli get-brand

Current Brand API V2 data through generic or explicit routes. One request; credentialed asset src URLs are redacted from output. Provider reads may spend quota or crawl on a miss.

identifier
Required
Yes
Type
string
Details
Domain, email, URL, Brand ID, ticker, ISIN or crypto symbol. Explicit types accept only their identifier format. minLength: 1. maxLength: 2048.
identifier_type
Required
No; body and guard rules apply
Type
string
Details
Explicit provider route avoids identifier collisions. Values: auto, domain, ticker, isin, crypto. default: auto.
allowNsfw
Required
No; body and guard rules apply
Type
boolean
Details
Optional provider NSFW behavior; absence differs from false.
cachedOnly
Required
No; body and guard rules apply
Type
boolean
Details
True avoids crawling a cache miss; 204 is reported as cachedMiss. Indexed reads still consume quota. default: False.
account
Required
No; body and guard rules apply
Type
string
Details
Exact private profile label. Never inherits another profile or global key/client ID.

search_brands

brandfetch-cli search-brands

Search by name with the selected profile client ID in native query c. No Brand API Bearer key sent. One request; no pagination or retries.

query
Required
Yes
Type
string
Details
Brand name to search. minLength: 1. maxLength: 512.
account
Required
No; body and guard rules apply
Type
string
Details
Exact private profile label. Never inherits another profile or global key/client ID.

get_brand_context

brandfetch-cli get-brand-context

One Brand Context API request. Context is probabilistic interpretation, not verified company facts. Accepts domain/email/URL; cachedOnly avoids crawling a miss.

domain
Required
Yes
Type
string
Details
Domain, URL or email address. minLength: 1. maxLength: 2048.
cachedOnly
Required
No; body and guard rules apply
Type
boolean
Details
True avoids crawling a cache miss; 204 is reported as cachedMiss. Indexed reads still consume quota. default: False.
account
Required
No; body and guard rules apply
Type
string
Details
Exact private profile label. Never inherits another profile or global key/client ID.

enrich_transaction

brandfetch-cli enrich-transaction

Resolve the user-requested transaction label into brand data. Sends the label and country to Brandfetch and may consume credits; does not create a charge, bank connection or payment.

transaction_label
Required
Yes
Type
string
Details
Only the specific transaction label requested by the user. minLength: 1. maxLength: 4096.
country_code
Required
Yes
Type
string
Details
ISO 3166-1 alpha-2 country code, uppercase. pattern: ^[A-Z]{2}$.
account
Required
No; body and guard rules apply
Type
string
Details
Exact private profile label. Never inherits another profile or global key/client ID.

get_viewer

brandfetch-cli get-viewer

GET /v2/viewer using the selected private Brand API key. Returns provider viewer metadata; does not purchase access or expose the key.

account
Required
No; body and guard rules apply
Type
string
Details
Exact private profile label. Never inherits another profile or global key/client ID.

prefetch_brand

brandfetch-cli prefetch-brand

Explicitly confirmed HEAD request can enqueue a provider crawl. Generic or domain route only. Return 200 indexed / 202 crawl queued; never poll, purchase or resubmit automatically.

identifier
Required
Yes
Type
string
Details
Domain, email, URL, Brand ID, ticker, ISIN or crypto symbol. Explicit types accept only their identifier format. minLength: 1. maxLength: 2048.
identifier_type
Required
No; body and guard rules apply
Type
string
Details
See the full input schema. Values: auto, domain. default: auto.
account
Required
No; body and guard rules apply
Type
string
Details
Exact private profile label. Never inherits another profile or global key/client ID.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact provider crawl request.

get_brand_colors

brandfetch-cli get-brand-colors

One native brand read with only name, domain and colors returned. Filtering is local: provider quota and crawling behavior are unchanged.

identifier
Required
Yes
Type
string
Details
Domain, email, URL, Brand ID, ticker, ISIN or crypto symbol. Explicit types accept only their identifier format. minLength: 1. maxLength: 2048.
identifier_type
Required
No; body and guard rules apply
Type
string
Details
Explicit provider route avoids identifier collisions. Values: auto, domain, ticker, isin, crypto. default: auto.
allowNsfw
Required
No; body and guard rules apply
Type
boolean
Details
Optional provider NSFW behavior; absence differs from false.
cachedOnly
Required
No; body and guard rules apply
Type
boolean
Details
True avoids crawling a cache miss; 204 is reported as cachedMiss. Indexed reads still consume quota. default: False.
account
Required
No; body and guard rules apply
Type
string
Details
Exact private profile label. Never inherits another profile or global key/client ID.

get_brand_fonts

brandfetch-cli get-brand-fonts

One native brand read with only name, domain and fonts returned. Filtering is local: provider quota and crawling behavior are unchanged.

identifier
Required
Yes
Type
string
Details
Domain, email, URL, Brand ID, ticker, ISIN or crypto symbol. Explicit types accept only their identifier format. minLength: 1. maxLength: 2048.
identifier_type
Required
No; body and guard rules apply
Type
string
Details
Explicit provider route avoids identifier collisions. Values: auto, domain, ticker, isin, crypto. default: auto.
allowNsfw
Required
No; body and guard rules apply
Type
boolean
Details
Optional provider NSFW behavior; absence differs from false.
cachedOnly
Required
No; body and guard rules apply
Type
boolean
Details
True avoids crawling a cache miss; 204 is reported as cachedMiss. Indexed reads still consume quota. default: False.
account
Required
No; body and guard rules apply
Type
string
Details
Exact private profile label. Never inherits another profile or global key/client ID.

compare_brands

brandfetch-cli compare-brands

Read two to five unique identifiers sequentially in one exact profile, preserving input order. Return colors/fonts/logo counts; stop at the first failure with completed results. No retries, cross-account mixing or complete-market claim.

identifiers
Required
Yes
Type
array
Details
Two to five distinct identifiers in requested order. minItems: 2. maxItems: 5. Items: string.
identifier_type
Required
No; body and guard rules apply
Type
string
Details
Explicit provider route avoids identifier collisions. Values: auto, domain, ticker, isin, crypto. default: auto.
allowNsfw
Required
No; body and guard rules apply
Type
boolean
Details
Optional provider NSFW behavior; absence differs from false.
cachedOnly
Required
No; body and guard rules apply
Type
boolean
Details
True avoids crawling a cache miss; 204 is reported as cachedMiss. Indexed reads still consume quota. default: False.
account
Required
No; body and guard rules apply
Type
string
Details
Exact private profile label. Never inherits another profile or global key/client ID.

get_logo_url

brandfetch-cli get-logo-url

Local Logo API URL construction with the selected profile client ID. Direct browser display only; programmatic fetching these hotlinks is prohibited/blocked. No provider call or automatic download.

identifier
Required
Yes
Type
string
Details
Domain, email, URL, Brand ID, ticker, ISIN or crypto symbol. Explicit types accept only their identifier format. minLength: 1. maxLength: 2048.
identifier_type
Required
No; body and guard rules apply
Type
string
Details
See the full input schema. Values: domain, ticker, isin, crypto. default: domain.
type
Required
No; body and guard rules apply
Type
string
Details
Explicit asset type; separate from identifier_type. Values: icon, logo, symbol. default: logo.
icon
Required
No; body and guard rules apply
Type
boolean
Details
Legacy compatibility: true selects icon. Do not combine with type.
width
Required
No; body and guard rules apply
Type
integer
Details
See the full input schema. minimum: 1. maximum: 2048.
height
Required
No; body and guard rules apply
Type
integer
Details
See the full input schema. minimum: 1. maximum: 2048.
theme
Required
No; body and guard rules apply
Type
string
Details
See the full input schema. Values: light, dark.
fallback
Required
No; body and guard rules apply
Type
string
Details
See the full input schema. Values: brandfetch, transparent, lettermark, 404. default: 404.
format
Required
No; body and guard rules apply
Type
string
Details
SVG allowed only for logo or symbol. Values: png, jpeg, webp, svg.
account
Required
No; body and guard rules apply
Type
string
Details
Exact private profile label. Never inherits another profile or global key/client ID.

download_brand_logos

brandfetch-cli download-brand-logos

Confirmed one brand lookup plus at most five original credentialed Brand API logo src downloads. Owner-private directory and exclusive files only; cap 5 MiB each, fixed CDN, no redirects/Bearer forwarding/hotlink evasion/retries. Stop on failure, retain and report completed/reserved files.

identifier
Required
Yes
Type
string
Details
Domain, email, URL, Brand ID, ticker, ISIN or crypto symbol. Explicit types accept only their identifier format. minLength: 1. maxLength: 2048.
identifier_type
Required
No; body and guard rules apply
Type
string
Details
Explicit provider route avoids identifier collisions. Values: auto, domain, ticker, isin, crypto. default: auto.
allowNsfw
Required
No; body and guard rules apply
Type
boolean
Details
Optional provider NSFW behavior; absence differs from false.
cachedOnly
Required
No; body and guard rules apply
Type
boolean
Details
True avoids crawling a cache miss; 204 is reported as cachedMiss. Indexed reads still consume quota. default: False.
account
Required
No; body and guard rules apply
Type
string
Details
Exact private profile label. Never inherits another profile or global key/client ID.
output_dir
Required
Yes
Type
string
Details
Existing canonical absolute owner-private directory. minLength: 1. maxLength: 2048.
format_preference
Required
No; body and guard rules apply
Type
string
Details
See the full input schema. Values: svg, png, all. default: all.
max_files
Required
No; body and guard rules apply
Type
integer
Details
See the full input schema. minimum: 1. maximum: 5. default: 3.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Approve exactly this provider lookup and bounded private local downloads.

list_accounts

brandfetch-cli list-accounts

Local labels, default and credential method availability only. No keys, client IDs, private paths or network.

None
Required
No
Type
None
Details
No arguments

get_operation_schema

brandfetch-cli get-operation-schema

Complete pinned Brandfetch path/query/body schema and documented response statuses for one of 11 supported native operations. Local only; agent purchases excluded.

operation
Required
Yes
Type
string
Details
See the full input schema. Values: getBrandData, prefetchBrand, getBrandDataByDomain, prefetchBrandByDomain, getBrandDataByTicker, getBrandDataByIsin, getBrandDataByCrypto, searchBrands, getBrandContext, getBrandFromTransaction, getViewer.

preview_operation

brandfetch-cli preview-operation

Validate one exact native operation request locally, without loading keys/client IDs, contacting Brandfetch, reserving files or claiming provider validation or price. Search c is added from private profile at execution.

operation
Required
Yes
Type
string
Details
See the full input schema. Values: getBrandData, prefetchBrand, getBrandDataByDomain, prefetchBrandByDomain, getBrandDataByTicker, getBrandDataByIsin, getBrandDataByCrypto, searchBrands, getBrandContext, getBrandFromTransaction, getViewer.
arguments
Required
Yes
Type
object
Details
Native path/query arguments and transaction payload. Inspect get_operation_schema first.

Complete native operations and request shapes

get_brand consolidates six GET routes through identifier_type; prefetch_brand consolidates two HEAD routes. get_operation_schema returns these exact native parameter/body facts. preview_operation uses native parameter names: search name; transaction payload.transactionLabel and payload.countryCode. Execution tools use their documented friendly flags. Search c is supplied from the private selected profile.

##### getBrandData

GET /v2/brands/{identifier}. Documented statuses: 200, 204, 400, 401, 402, 404, 429.

identifier
Required
Yes
Type
string
Details
Native path parameter. minLength: 1. maxLength: 2048.
allowNsfw
Required
No; body and guard rules apply
Type
boolean
Details
Native query parameter.
cachedOnly
Required
No; body and guard rules apply
Type
boolean
Details
Native query parameter. default: False.

##### prefetchBrand

HEAD /v2/brands/{identifier}. Documented statuses: 200, 202, 400, 401, 403, 404, 429, 503.

identifier
Required
Yes
Type
string
Details
Native path parameter. minLength: 1. maxLength: 2048.

##### getBrandDataByDomain

GET /v2/brands/domain/{domain}. Documented statuses: 200, 204, 400, 401, 402, 404, 429.

domain
Required
Yes
Type
string
Details
Native path parameter. minLength: 1. maxLength: 2048.
allowNsfw
Required
No; body and guard rules apply
Type
boolean
Details
Native query parameter.
cachedOnly
Required
No; body and guard rules apply
Type
boolean
Details
Native query parameter. default: False.

##### prefetchBrandByDomain

HEAD /v2/brands/domain/{domain}. Documented statuses: 200, 202, 400, 401, 403, 404, 429, 503.

domain
Required
Yes
Type
string
Details
Native path parameter. minLength: 1. maxLength: 2048.

##### getBrandDataByTicker

GET /v2/brands/ticker/{ticker}. Documented statuses: 200, 204, 400, 401, 402, 404, 429.

ticker
Required
Yes
Type
string
Details
Native path parameter. minLength: 1. maxLength: 512.
allowNsfw
Required
No; body and guard rules apply
Type
boolean
Details
Native query parameter.
cachedOnly
Required
No; body and guard rules apply
Type
boolean
Details
Native query parameter. default: False.

##### getBrandDataByIsin

GET /v2/brands/isin/{isin}. Documented statuses: 200, 204, 400, 401, 402, 404, 429.

isin
Required
Yes
Type
string
Details
Native path parameter. minLength: 1. maxLength: 512.
allowNsfw
Required
No; body and guard rules apply
Type
boolean
Details
Native query parameter.
cachedOnly
Required
No; body and guard rules apply
Type
boolean
Details
Native query parameter. default: False.

##### getBrandDataByCrypto

GET /v2/brands/crypto/{symbol}. Documented statuses: 200, 204, 400, 401, 402, 404, 429.

symbol
Required
Yes
Type
string
Details
Native path parameter. minLength: 1. maxLength: 512.
allowNsfw
Required
No; body and guard rules apply
Type
boolean
Details
Native query parameter.
cachedOnly
Required
No; body and guard rules apply
Type
boolean
Details
Native query parameter. default: False.

##### searchBrands

GET /v2/search/{name}. Documented statuses: 429, 503, 200.

name
Required
Yes
Type
string
Details
Native path parameter. minLength: 1. maxLength: 512.
c
Required
Yes
Type
string
Details
Native query parameter. minLength: 1. maxLength: 512.

##### getBrandContext

GET /v2/context/{domain}. Documented statuses: 200, 204, 400, 401, 402, 404, 429.

domain
Required
Yes
Type
string
Details
Native path parameter. minLength: 1. maxLength: 2048.
cachedOnly
Required
No; body and guard rules apply
Type
boolean
Details
Native query parameter. default: False.

##### getBrandFromTransaction

POST /v2/brands/transaction. Documented statuses: 200, 400, 401, 402, 404, 429, 503.

None
Required
No
Type
None
Details
No arguments

Native transaction JSON body:

transactionLabel
Required
Yes
Type
string
Details
See the full input schema. minLength: 1. maxLength: 4096.
countryCode
Required
Yes
Type
string
Details
See the full input schema. pattern: ^[A-Z]{2}$.

##### getViewer

GET /v2/viewer. Documented statuses: 200, 401, 403.

None
Required
No
Type
None
Details
No arguments

Complete client, OS and desktop setup

Codex

Codex is the current validation priority. Private token paths must exist in the process or remote environment where the server runs.

codex mcp add brandfetch -- npx -y @thenavidm/brandfetch-mcp-cli@latest
codex mcp list

Account credentials must reach the server through private environment settings. codex mcp add --env NAME=value stores values in your local config, so never commit that config or put secrets in a shared command. In TOML, the equivalent server is:

[mcp_servers.brandfetch]
command = "npx"
args = ["-y", "@thenavidm/brandfetch-mcp-cli@latest"]
env_vars = ["BRANDFETCH_API_KEY", "BRANDFETCH_TOKEN_FILE", "BRANDFETCH_CLIENT_ID", "BRANDFETCH_ACCOUNTS", "BRANDFETCH_DEFAULT_ACCOUNT", "BRANDFETCH_READ_ONLY", "BRANDFETCH_ALLOW_DESTRUCTIVE"]

env_vars forwards those names from the environment available to Codex. If that environment does not contain them, configure private env settings locally. Codex can also call the CLI directly with SKILL.md and --agent output.

Claude Code

For a user-scoped connection, after privately configuring credentials:

claude mcp add --scope user brandfetch -- npx -y @thenavidm/brandfetch-mcp-cli@latest
claude mcp list

Use the client's private local environment settings for the account variable if they are not inherited. Claude's -e NAME=value registration option writes values into its config; only use it locally through your secret manager, with no shared command transcript. Never place credentials in a project .mcp.json. Reconnect and ask Claude to verify credentials.

Alternatively install the CLI, make SKILL.md available to Claude, and use shell commands. Registering both surfaces is optional.

Claude Desktop

Install the .mcpb extension

  1. Download brandfetch-2.0.0.mcpb from GitHub Releases.
  2. In a supported Claude Desktop build, open Settings > Extensions > Advanced settings > Install Extension… and select it.
  3. Enter a private Brand API key in the sensitive setting, or an absolute private token-file path. Configure the separate client ID for search/browser URLs. Leave the unused credential method empty. Brand API requests use Authorization: Bearer at the fixed API origin; search uses the separate client ID. Use the intended Brand API key; named profiles are configured separately in private client environments.
  4. Enable read-only if you want only the 12 read operations. Reconnect and ask for account verification.

The bundle includes production dependencies and no credentials. Use a regular private token-only file if you prefer file-based credentials. The manifest requires Node 22 or newer from a compatible host. Organization policy may restrict custom extensions. Manual bundle updates require installing the new version; no automatic directory updates are promised. GUI installation remains unverified separately from archive/protocol checks.

Manual config

Open Settings > Developer > Edit Config, or use your platform's config file:

OSTypical config path
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json; confirm the location through Edit Config in your installed build
{
"mcpServers": {
"brandfetch": {
"command": "npx",
"args": ["-y", "@thenavidm/brandfetch-mcp-cli@latest"],
"env": {
"BRANDFETCH_API_KEY": "YOUR_PRIVATE_API_KEY",
"BRANDFETCH_TOKEN_FILE": "",
"BRANDFETCH_CLIENT_ID": "YOUR_APP_CLIENT_ID"
}
}
}
}

Replace the placeholders only in your private file. Merge the server entry into an existing mcpServers object instead of replacing other integrations. Fully quit and reopen Claude Desktop. Do not enable an extension and a manual entry with the same name; choose one route.

If a Windows launcher cannot execute npx directly, use "command": "cmd" with "args": ["/c", "npx", "-y", "@thenavidm/brandfetch-mcp-cli@latest"]. An absolute node executable and installed dist/index.js path also avoids launcher/PATH problems.

Cursor

Use private user settings at ~/.cursor/mcp.json, or Settings > Tools & MCP. Cursor documents environment interpolation and envFile support.

{
"mcpServers": {
"brandfetch": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/brandfetch-mcp-cli@latest"],
"env": {
"BRANDFETCH_API_KEY": "${env:BRANDFETCH_API_KEY}",
"BRANDFETCH_TOKEN_FILE": "${env:BRANDFETCH_TOKEN_FILE}"
}
}
}
}

The environment values must exist for the Cursor process. If you use envFile, keep that file private and outside version control. A project's .cursor/mcp.json must not contain actual credentials. Reconnect the server after saving.

VS Code and Copilot

Use MCP: Open User Configuration. VS Code uses servers and secure inputs, rather than a mcpServers root:

{
"inputs": [
{"type": "promptString", "id": "brandfetch-api-token", "description": "Brandfetch API key (leave empty for a private token file)", "password": true},
{"type": "promptString", "id": "brandfetch-token-file", "description": "Optional private token-file path (leave empty for API key)"}
],
"servers": {
"brandfetch": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/brandfetch-mcp-cli@latest"],
"env": {
"BRANDFETCH_API_KEY": "${input:brandfetch-api-token}",
"BRANDFETCH_TOKEN_FILE": "${input:brandfetch-token-file}"
}
}
}
}

Start Brandfetch through the MCP controls, approve trust if prompted, and enter credentials in the private input prompts. Workspace .vscode/mcp.json may contain this placeholder-only structure, but never resolved secret values. Remote development runs the server in the selected remote environment, so local file paths refer to that environment.

Windsurf

Open Cascade's MCP settings or edit the private user file ~/.codeium/windsurf/mcp_config.json. Use the Claude Desktop manual mcpServers block above with your locally configured env values. See Windsurf's current MCP documentation. Restart or reconnect Brandfetch in Cascade; project files must not contain secrets.

Zed

Open Settings > AI > MCP Servers > Add Server > Add Local Server, or your user settings file. Zed uses context_servers:

{
"context_servers": {
"brandfetch": {
"command": "npx",
"args": ["-y", "@thenavidm/brandfetch-mcp-cli@latest"],
"env": {
"BRANDFETCH_API_KEY": "YOUR_PRIVATE_API_KEY",
"BRANDFETCH_TOKEN_FILE": "",
"BRANDFETCH_CLIENT_ID": "YOUR_APP_CLIENT_ID"
}
}
}
}

Enter actual values only in private user settings. Check the active-server indicator before prompting. Do not wrap command and args inside a nested command object from older Zed examples.

Gemini CLI

Merge the Claude Desktop manual mcpServers block into your private ~/.gemini/settings.json. Configure the private credential values locally, then restart Gemini CLI and inspect /mcp. See Gemini CLI's MCP configuration. Its project settings must not contain real credentials. You can instead use the CLI from an agent shell.

Other local stdio clients use the same command and arguments, adapted to their config format. A client that only accepts a remote MCP URL cannot connect directly: this package does not ship a public HTTP listener. ChatGPT's remote connector setup is not a substitute for local stdio installation.

Docker

Build locally from the reviewed source; no prebuilt registry image is claimed:

git clone https://github.com/thenavidm/brandfetch-mcp-cli.git
cd brandfetch-mcp-cli
docker build -t brandfetch-mcp-cli .
docker run --rm -i -e BRANDFETCH_API_KEY brandfetch-mcp-cli

Cline and other local MCP clients

Use the client's Add MCP server flow with command npx, arguments -y and @thenavidm/brandfetch-mcp-cli@latest, stdio transport, and private local BRANDFETCH_API_KEY or BRANDFETCH_TOKEN_FILE settings. UI names depend on the installed client. Reconnect and discover tools before an account call. Browser-only clients need a remote HTTPS connector; use Brandfetch's official server rather than this local stdio command.

Output, flags and exit codes

MCP uses underscore names; CLI uses derived hyphen names from the same schemas and handlers. Both return native data unless a focused helper explicitly documents its wrapper. Per-request asset credentials and configured keys are removed before output.

Command or flagContract
tools / no commandReal current tool list, writes marked
COMMAND --help / schema COMMANDDerived options / complete JSON Schema
--agentCompact JSON, no prompts/color; --yes never means mutation confirmation
--select a,b.cLocal output selection; does not reduce provider reads/quota
--account NAMEExact private profile label
--confirmApprove the exact prefetch or private-download operation
--cachedOnlyNative cache-only option; CLI retains provider camel case
--identifier-typeauto/domain/ticker/isin/crypto for brand lookups
--identifiersRepeat for two to five ordered unique comparison identifiers
--output-dir / --max-filesExisting private directory / one to five asset cap
brandfetch-cli get-brand --identifier example.com --agent --select name,domain,colors
brandfetch-cli compare-brands --identifiers example.com --identifiers example.org --cachedOnly --agent
ExitMeaning
0Success, including an explicitly reported cache miss
2Invalid arguments or refused operation
3Provider not found
4Authentication/permission failure
5Provider, transport, content or file-persistence failure
7Rate limit or explicit quota exhaustion
10Missing/invalid private configuration

Partial comparisons/download failures return errors and retain completed results/file paths inside the diagnostic. No automatic rollback or retry is performed. Native cachedOnly=true affects provider resolution; colors/fonts/--select affect only local output.

Official and community comparisons

Reviewed surface
Hosted OAuth / MCP bf1 tokens and official Python server source
Strengths and limits
Seven documented/current source tools: brand_search, get_brand, get_brand_data, get_brand_context, enrich_transaction, build_logo_urls and send_feedback. Provider maintained, interactive MCP Apps brand cards and bounded bf://asset streaming. No official runtime/tool discovery or hosted account login is claimed here.
Reviewed surface
pyproject version 1.5.0, commit 0995f0f39a43206d9082945d8b424c449dc6147d
Strengths and limits
Python >=3.11,<3.12; HTTP deployment and per-request credential context. Its source already caps image streaming, checks allowed CDN hosts and distinguishes browser hotlinks from authenticated asset sources. These are not invented missing safeguards.
Reviewed surface
@sourcescape/external 0.1.2; external / stc-ext
Strengths and limits
Actual published Brandfetch service source includes brand, search and svg purpose commands. Injected brand/search fixtures use global environment key/client ID and return full data. They have no named account argument, timeout signal or redirect policy in those handlers. Other generic service/router capabilities are not claimed absent.
Reviewed surface
PyPI brandfetch 0.4.0 metadata/README
Strengths and limits
Browser scraping and WHOIS CLI plus lookup_brand/search_brands/whois_lookup MCP tools. Different data and runtime approach; not an official REST SDK. No installation/provider benchmark is claimed.
Reviewed surface
brandfetch-mcp-server 1.0.0 published source
Strengths and limits
MCP binary alternative. Inspected package declares no standalone task CLI. No live provider behavior or complete equivalence is claimed.
This owned integration
Reviewed surface
Shared task CLI, local stdio MCP, versioned desktop bundle
Strengths and limits
Fourteen shared tools, twelve reads/helpers and two mandatory-confirmation operations. Isolated named profiles, bounded ordered comparison, local output selection and approved exclusive private asset files. No hosted OAuth, MCP Apps card, feedback telemetry or automatic payment.

Checked October 3, 2026. The actual Sourcescape published brand/search handlers ran with injected fetch and fixture-only credentials; no provider account was contacted. Their full fixture brand output retained a per-request credentialed asset src. Our equivalent fixture excludes that credential from output, routes named accounts without global fallback, derives CLI options from the same MCP schema and supports bounded comparison/private downloads. This demonstrates useful local workflow and output-policy differences, not overall product superiority.

The official MCP is a strong alternative when provider-managed OAuth, rich brand cards, resource streaming or feedback are the desired workflow. Its built_logo_urls supports multiple identifiers already. Our useful recurring task is scriptable brand/context/transaction retrieval and comparison across isolated accounts, followed by explicitly requested private file delivery. The shared MCP also makes those exact bounded local workflows available to stdio clients. More tool names and SEO alone do not justify this build.

The published OpenAPI search path embeds ?c={clientId}; this package routes c as a query parameter from the selected profile. The agent overview describes keyless search while the endpoint reference requires c; the package follows the endpoint's explicit client-ID contract and fails locally when it is missing. We have not tested credential-free provider search. Agent access/payment endpoints are deliberately excluded: no wallet, card, auto-purchase or credential rotation.

No matched successful Codex task/token measurements, live provider outcomes or desktop GUI installation are claimed. Source/fixture evidence is recorded separately from public artifact and CMS release checks. Official and community versions should be rechecked for every update.

Versions and legacy migration

ComponentReviewed version / source
Owned wrapper / manifest2.0.0
Brandfetch native APIV2 routes; OpenAPI info version 1.0.0
OpenAPI snapshotSHA-256 301955555b54cfdad90fcb655e70e7a8b5f6c53bf11362001b8d0b0de8d85bf0, October3 2026
Official server sourcepyproject 1.5.0 / 0995f0f39a43206d9082945d8b424c449dc6147d
Sourcescape external CLI0.1.2 published archive and injected handler fixtures
Community PyPI brandfetch0.4.0 metadata/README; not installed
Community npm MCPbrandfetch-mcp-server 1.0.0 inspected archive
@modelcontextprotocol/sdk1.32.0
ajv8.20.0
ajv-formats3.0.1
typescript7.0.2
vitest5.0.3
vite8.3.2
@anthropic-ai/mcpb2.1.2

Private legacy 1.0.0 declares seven MCP tools and no standalone task CLI. Private history remains separate; no earlier owned public npm/tag release is assumed. All seven names survive, but 2.0 intentionally changes unsafe/obsolete behavior:

Legacy tool2.0 behavior
search_brandsSame query name; uses selected profile client ID in native c, no global Bearer assumption
get_brandSame identifier/type names; current native data plus cachedOnly/allowNsfw, private asset src redaction
get_brand_colors / get_brand_fontsFocused return with native routing/options; same provider quota as a brand read
get_logo_urlSeparates identifier route from asset type; legacy icon accepted exclusively; browser-only display
download_brand_logosMandatory confirmation, explicit existing private output_dir, bounded exclusive files; no implicit home directory or overwrite
compare_brandsSame identifiers; sequential bounded profile workflow, stops/reports failure rather than silent parallel partial success

BRANDFETCH_OUTPUT_DIR is retired; supply output_dir explicitly. CLI spelling uses hyphens while MCP names remain underscores. No automatic credential migration, payment or key rotation. Preserve and inspect old local outputs privately.

For maintenance, recheck official MCP/CLI alternatives and the native docs, review a fresh OpenAPI checksum, run source-input comparison and matched fixtures, regenerate runtime/docs/CMS input tables, align root/lock/manifest/tag, scan public source/artifacts, run platform CI and verify actual anonymous install/desktop/read-only/client/CMS rendering. Never execute downloaded vendor code as a schema updater or infer provider success from a metadata hash.

Updates and removal

npm install -g @thenavidm/brandfetch-mcp-cli@latest
brandfetch-cli --version
npm uninstall -g @thenavidm/brandfetch-mcp-cli
codex mcp remove brandfetch

npx @latest resolves on process startup; reconnect/restart for updates. Global npm and desktop archives require explicit updates. Install the new versioned .mcpb and confirm its reported version. Remove client entries/extensions and revoke the provider key separately when access should end. Removal does not delete private files, undo crawls or revoke application client IDs.

Validation and remaining evidence

Typecheck/build, 47 behavior/shared-CLI tests, actual full/read-only stdio discovery and thirteen real CLI process fixtures pass. Every invalid/unconfigured/refused CLI case makes zero provider requests; HTTP error cases make exactly one injected request. Native schema maintenance verifies the pinned source/checksum without executing downloaded vendor code. Source/npm/desktop secret scans and production dependency audit report zero findings. Codex CLI0.159.3 accepts the documented registration in an isolated credential-free configuration.

Actual public artifacts, platform CI and saved/live CMS checks are recorded in the maintained release proof. Provider account outcomes, desktop GUI installation, fresh matched successful Codex task/token usage and the private site scene/shared installation helper deployment remain separately pending. No blanket superiority or measured token saving is claimed.

More tools for your creative workflow

Connect the tools needed for the exact work you want to do.

Brandfetch MCP Server & CLI FAQs

Official/community alternatives, brand data and context, private profiles, quota, cache misses, browser hotlinks, approved assets, desktop setup and maintenance.

Fourteen shared CLI/local MCP tools, twelve reads/helpers and two confirmed operations covering eleven current native V2 operations.

It includes a versioned desktop bundle.

Yes.

It provides hosted OAuth/MCP tokens, brand data/context/search/enrichment, rich MCP Apps cards and bounded asset resources.

The current source is compared explicitly.

For a shared task CLI and bounded local workflows with isolated private profiles, selective output and approved exclusive local assets.

Official hosted/card strengths remain useful.

Yes.

Sourcescape external 0.1.2 has published Brandfetch commands; PyPI brandfetch 0.4.0 uses browser scraping/WHOIS.

We do not claim CLI support is unique.

Use the private stdio configuration or the CLI/SKILL route in INSTALL.md.

Fresh matched successful task/token measurements remain pending.

The versioned .mcpb bundles production dependencies.

Actual archive protocol checks and GUI installation are tracked separately.

Manual Node22+ paths target macOS, Windows and Linux.

CI checks all three on Node22/24.

Windows private-file ACL protection must be configured by the owner.

Brand API reads need a private REST API key.

Search and browser logo construction need a separate application client ID.

Official MCP bf1 tokens are not interchangeable.

No.

It prints private setup instructions and does not store keys, refresh sessions, purchase access or use a wallet.

No.

Every selected profile uses only its own key/file/client ID.

Missing credentials fail locally rather than falling back.

No.

It hides/refuses prefetch and local downloads, while ordinary brand/context/transaction reads can still use quota or crawl. cachedOnly controls supported cache misses.

The brand/context was not cached.

The wrapper returns status204, cachedMiss:true and data:null without treating it as malformed JSON.

No.

A confirmed HEAD can return202 queued or200 indexed.

It never waits, polls or retries automatically.

No.

Client-ID hotlinks are intended for direct browser display and programmatic fetching is blocked.

Private downloads use original Brand API asset src URLs.

They remain inside the request client, are redacted from get_brand/model output and are used only for approved CDN requests.

No credential URL manifest is saved.

No.

It requires an existing owner-private directory and creates random files exclusively.

Failure reports completed and reserved paths without deleting earlier results.

No.

It reads two to five unique identifiers in order and stops on the first failure, reporting completed and remaining work.

No.

Brand Context is probabilistic interpretation.

Review it; email/URL resolution also does not prove a person’s employer.

No fresh matched Codex measurements are available.

Local output selection is proven, but counts or character estimates do not prove token savings.

Restart npx @latest, update global npm or install the new desktop bundle.

Remove client entries and revoke provider credentials separately; private downloaded files remain.

Navid Moazzez

AI business strategist & AI OS builder

Navid Moazzez helps creators and founders master AI and build their own AI Operating System (AI OS) to automate their business and life.

Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Learn more.

More MCP servers & CLIs

Related free tools

Free AI newsletter

The most actionable AI newsletter for founders

Every week, get proven AI strategies, curated tools, and step-by-step systems to grow your audience, create better content, and build a profitable creator business.

No fluff, no filler, no BS. Just five minutes each week that might level up your online business and life.

P.S. Sign up now to get free access to my ultimate AI tools guide for creators.

Loved by 10,000+ readers