Brandfetch MCP Server
Officialby Brandfetch
README.md
# Brandfetch MCP Server
The official [Model Context Protocol](https://modelcontextprotocol.io) server for
[Brandfetch](https://brandfetch.com). It gives AI assistants access to brand
search, company data, logos and design assets, and LLM-ready brand context from
the Brandfetch API.
- Learn more: **https://brandfetch.com/developers/mcp**
- Full documentation: **https://docs.brandfetch.com/mcp/overview**
## Tools
| Tool | Description |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `brand_search` | Search for brands by name using Brandfetch's search index. |
| `get_brand` | Look up full brand data by domain, email, ticker, ISIN, or crypto symbol; renders the interactive brand card on MCP Apps hosts. |
| `get_brand_data` | The same brand data with no card — for data that feeds generated content, or one brand's full record. |
| `get_brands` | Up to 25 brands in one call, as compact records with no card — for logo walls, comparison tables, and lists of companies. |
| `enrich_transaction` | Identify a merchant brand from a credit-card or bank-statement string. |
| `get_brand_context` | Get LLM-ready brand context for a domain — voice, audience, positioning, style. |
| `build_logo_urls` | Construct Brandfetch Logo CDN URLs for one or more brands (no API call). |
| `send_feedback` | Report bugs, wrong or stale brand data, or missing capabilities to Brandfetch. |
## Interactive brand card (MCP Apps)
On hosts that support the [MCP Apps extension](https://modelcontextprotocol.io/docs/extensions/apps)
(claude.ai, Claude Desktop, ChatGPT, ...), `get_brand` results render as an interactive
brand card: logo preview, format switcher (SVG/PNG/WebP/...), download and
copy-URL actions. Hosts without Apps support fall back to the regular JSON tool
result. `get_brand_data` returns the same brand data without the card, and
`get_brands` fetches several brands in one call, so a logo wall of six brands is
one batch call rather than six cards; the model picks between the three by their
descriptions. The widget source lives in
[`ui/`](./ui/) and is served by the server as the
`ui://brandfetch/brand-card.<hash>.html` resource, named after a hash of
the built file so ChatGPT fetches each new build.
## Quick start (hosted server)
The easiest way to use this server is to connect to the Brandfetch-hosted
endpoint — no install, no infrastructure:
```
https://mcp.brandfetch.io/mcp
```
Authentication uses a Brandfetch MCP token (a `bf1.` bearer token). Generate one
from the **Keys and MCP** page in the
[Brandfetch dashboard](https://developers.brandfetch.com), or connect via OAuth
from a client that supports it.
### Claude Desktop / Claude Code
```json
{
"mcpServers": {
"brandfetch": {
"type": "http",
"url": "https://mcp.brandfetch.io/mcp",
"headers": {
"Authorization": "Bearer bf1.YOUR_TOKEN"
}
}
}
}
```
### Cursor
Add to `~/.cursor/mcp.json` (or the project `.cursor/mcp.json`):
```json
{
"mcpServers": {
"brandfetch": {
"url": "https://mcp.brandfetch.io/mcp",
"headers": {
"Authorization": "Bearer bf1.YOUR_TOKEN"
}
}
}
}
```
### ChatGPT
In ChatGPT, add a custom app (developer mode) with the server URL
`https://mcp.brandfetch.io/mcp` and OAuth authentication, then sign in with your
Brandfetch account.
Clients that support OAuth can instead point at `https://mcp.brandfetch.io/mcp`
with no token and complete the authorization flow in the browser.
## Quota errors
`get_brand`, `get_brand_data`, `get_brands`, `enrich_transaction`, and `get_brand_context` consume
API credits from your plan; `brand_search` and `build_logo_urls` don't and keep working
when your credits run out. `get_brands` uses one credit per brand it returns; every
other result is free.
- **429 "API quota exhausted"** — your key has used all of its API credits.
Check usage or upgrade in the [Brandfetch dashboard](https://developers.brandfetch.com).
- **429 "Not enough API credits left for this batch"** — `get_brands` asked for more
brands than your key has credits left; nothing was charged. Ask for fewer brands.
- **403 "Batch lookups need a paid plan or prepaid credits"** — `get_brands` is not
available on the free plan; `get_brand_data` fetches the same brands one at a time.
- **403 "Forbidden"** — the key has no available API credits or lacks access
to that endpoint. The key itself may be valid, so check your plan and key
status in the dashboard before rotating it.
## Self-hosting
This is an HTTP (streamable-http) MCP server built with
[FastMCP](https://github.com/jlowin/fastmcp). You can run your own instance with
Docker.
```bash
docker build -t brandfetch-mcp-server .
docker run --rm -p 8080:8080 brandfetch-mcp-server
```
The server then listens on `http://localhost:8080/mcp`. Point your MCP client at
that URL and send your Brandfetch credentials as a `Bearer` token.
> The `Dockerfile` bundles the [AWS Lambda Web Adapter](https://github.com/awslabs/aws-lambda-web-adapter)
> and a few `AWS_LWA_*` environment variables. These are inert outside of AWS
> Lambda and can be ignored (or removed) for a plain container/host deployment.
### Running without Docker
```bash
uv sync
uv run uvicorn src.main:app --host 0.0.0.0 --port 8080
```
## Development
Requires [uv](https://docs.astral.sh/uv/) and Python 3.14.
```bash
uv sync # install dependencies
uv run pytest # run the tests
uv run ruff check . # lint
uv run ruff format . # format
```
## License
[MIT](./LICENSE)
This server cannot be deployed
Maintenance
ActivityActive
ResponsivenessNo recent community issues