An open source Brandfetch MCP server and shared CLI with 14 tools, isolated profiles and approved private assets.
Key takeaways
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 askingSearch 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.
Set up Brandfetch access
Two separate provider credentials
- 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.
- 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.
- 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.
- 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.
- 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.
Logo hotlinks versus private assets
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 --agentbrandfetch-cli doctor
brandfetch-cli doctor --network
brandfetch-cli list-accounts --agent
brandfetch-cli get-viewer --agent
brandfetch-cli get-brand --identifier example.com --cachedOnly --agentLocal 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 --agentThe 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:
| Flag | What it does |
|---|---|
| --json | Structured JSON |
| --compact | Single-line JSON |
| --agent | Compact JSON without prompts/color; never approval |
| --select a,b.c | Local result selection |
| --confirm | Approve the exact requested operation |
| --account NAME | Exact private profile |
| --cachedOnly | Native cache-only resolution |
| --allowNsfw | Optional native NSFW behavior |
| --identifiers | Repeat for bounded unique comparisons |
| --output-dir / --max-files | Existing private directory / bounded local assets |
A script can branch on the exit code:
| Exit code | What it means |
|---|---|
| 0 | Success or explicitly reported cache miss |
| 2 | Invalid input or refused operation |
| 3 | Provider not found |
| 4 | Authentication/permission failure |
| 5 | Provider/transport/content/file failure |
| 7 | Rate limit or explicit exhausted quota |
| 10 | Missing/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 --agentContext 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 --agentExplicit 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 --agentBounded 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 --agentApproved 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 --agentThe 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 --agentThe 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.
- Default
- Credentials
- What it does
- Private REST Brand API Bearer key; not an official MCP bf1 token
- Default
- Credentials
- What it does
- Absolute regular owner-only token file, at most 64 KiB; overrides key and cached until restart
- Default
- Credentials
- What it does
- Separate application client ID for search and browser-only hotlinks
- Default
- Credentials
- What it does
- Private named {name,api_key,token_file,client_id} profiles; no global fallback
- Default
- Credentials
- What it does
- Exact configured label; first profile by default
- Default
- Safety
- What it does
- 1/true hides and refuses two operations; reads can still consume quota
- Default
- Safety
- What it does
- 0/false refuses both confirmed operations
- Default
- Safety
- What it does
- Optional metadata-only guard log; no transaction guarantee
- Default
- Tuning
- What it does
- 100–300000; default 30000; asset timeout at most 5000; no replay
- 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 see | What to do |
|---|---|
| Exit10 | Exact profile’s own key/file/client ID, owner permissions and GUI environment. |
| 401 / ordinary403 | REST Brand API key; official MCP bf1 tokens differ. |
| 402 /429 /quota403 | Current provider balance/quota/rate settings; no replay. |
| 204 | Expected cachedOnly miss, reported explicitly. |
| HEAD202 | Crawl queued; completion is not proven. |
| Domain refuses URL/email | Use generic auto identifier routing. |
| Hotlink fetch blocked | Use browser display or approved original Brand API asset download. |
| Output directory refused | Existing canonical absolute owner-private directory; Windows owner ACL. |
| Partial download | Inspect reported completed/reserved files privately; no overwrite/retry. |
| Private asset src redacted | Intentional credential exclusion; use private download helper. |
| Desktop rejected | Actual 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.
- 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.
- 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.
- 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 listAccount 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 listUse 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
- Download
brandfetch-2.0.0.mcpbfrom GitHub Releases. - In a supported Claude Desktop build, open Settings > Extensions > Advanced settings > Install Extension… and select it.
- 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.
- 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:
| OS | Typical 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-cliCline 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 flag | Contract |
|---|---|
| tools / no command | Real current tool list, writes marked |
| COMMAND --help / schema COMMAND | Derived options / complete JSON Schema |
| --agent | Compact JSON, no prompts/color; --yes never means mutation confirmation |
| --select a,b.c | Local output selection; does not reduce provider reads/quota |
| --account NAME | Exact private profile label |
| --confirm | Approve the exact prefetch or private-download operation |
| --cachedOnly | Native cache-only option; CLI retains provider camel case |
| --identifier-type | auto/domain/ticker/isin/crypto for brand lookups |
| --identifiers | Repeat for two to five ordered unique comparison identifiers |
| --output-dir / --max-files | Existing 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| Exit | Meaning |
|---|---|
| 0 | Success, including an explicitly reported cache miss |
| 2 | Invalid arguments or refused operation |
| 3 | Provider not found |
| 4 | Authentication/permission failure |
| 5 | Provider, transport, content or file-persistence failure |
| 7 | Rate limit or explicit quota exhaustion |
| 10 | Missing/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.
- 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
| Component | Reviewed version / source |
|---|---|
| Owned wrapper / manifest | 2.0.0 |
| Brandfetch native API | V2 routes; OpenAPI info version 1.0.0 |
| OpenAPI snapshot | SHA-256 301955555b54cfdad90fcb655e70e7a8b5f6c53bf11362001b8d0b0de8d85bf0, October3 2026 |
| Official server source | pyproject 1.5.0 / 0995f0f39a43206d9082945d8b424c449dc6147d |
| Sourcescape external CLI | 0.1.2 published archive and injected handler fixtures |
| Community PyPI brandfetch | 0.4.0 metadata/README; not installed |
| Community npm MCP | brandfetch-mcp-server 1.0.0 inspected archive |
| @modelcontextprotocol/sdk | 1.32.0 |
| ajv | 8.20.0 |
| ajv-formats | 3.0.1 |
| typescript | 7.0.2 |
| vitest | 5.0.3 |
| vite | 8.3.2 |
| @anthropic-ai/mcpb | 2.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 tool | 2.0 behavior |
|---|---|
| search_brands | Same query name; uses selected profile client ID in native c, no global Bearer assumption |
| get_brand | Same identifier/type names; current native data plus cachedOnly/allowNsfw, private asset src redaction |
| get_brand_colors / get_brand_fonts | Focused return with native routing/options; same provider quota as a brand read |
| get_logo_url | Separates identifier route from asset type; legacy icon accepted exclusively; browser-only display |
| download_brand_logos | Mandatory confirmation, explicit existing private output_dir, bounded exclusive files; no implicit home directory or overwrite |
| compare_brands | Same 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 brandfetchnpx @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.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 newsletterThe 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.













