Logo.dev MCP server for AI agents

Live

BEARER TOKEN

BRAND DATA

CRM & Sales

Logo.dev gives your agent brand data for any company: look up a brand's profile, colors, and social links from a domain, ticker, or name, fetch its logo or brandmark, and search brands by name.

  • Per-user credentials: each call uses the actual user's access token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Logo.dev
agent · Acme Q3
Run
Get the logo and brand colors for notion.so.
S
logodev_get_brand
88ms
Brand data agent
Notion's profile includes its description, 2 brand colors with hex values, 4 social profile URLs, and a logo download link valid for about 24 hours.
Sources: Logo.dev brand profile
logodev
1 brand
18:29
Message Claude...

Tools your brand data agent reaches for on Logo.dev, scoped per user.

CALL ANY TOOL
5 tools for brand data in Logo.dev: look up brand profiles by domain, ticker, ISIN, crypto symbol, name, or brand id, fetch logos and brandmarks, and search brands by name.
logodev_get_brand
Get brand
Look up a brand's full profile on Logo.dev from one identifier: a domain, stock ticker, ISIN, crypto symbol or company name. Returns the brand id, name, domain, description, brand colors (hex, RGB and OKLCH, most dominant first), social profile URLs, and the logo, brandmark and social banners as temporary download URLs (valid about 24 hours) with dimensions and format, plus metadata.resolution showing how the identifier was matched. A brand Logo.dev has not indexed yet returns data.status not_indexed with metadata.pending; wait retry_after_seconds and call again (pending responses and retries are not billed). Use this to enrich a company record. Use logodev_get_logo or logodev_get_brandmark when you only need one image, logodev_search_brands to choose between several companies with similar names, and logodev_get_brand_by_id when you already stored the brand id.
Parameters
Name
Type
Required
Description
crypto
string
Optional
Crypto token symbol, case-insensitive. Send exactly one of domain, ticker, isin, crypto or name. Example: BTC
domain
string
Optional
Company website domain. A subdomain is reduced to its registrable domain, so www.stripe.com looks up stripe.com. Send exactly one of domain, ticker, isin, crypto or name. Example: stripe.com
isin
string
Optional
International Securities Identification Number of the company's security, 12 characters, case-insensitive. Send exactly one of domain, ticker, isin, crypto or name. Example: US0378331005
name
string
Optional
Company or brand name. Logo.dev resolves it to the top search match, so use logodev_search_brands first when the name could mean several companies. Send exactly one of domain, ticker, isin, crypto or name. Example: Stripe
nosubscribe
string
Optional
Set to true to skip the automatic webhook subscription to this brand. It only matters when webhooks are turned on for your Logo.dev account; leave it empty otherwise. Example: true. One of: `true`.
ticker
string
Optional
Stock or ETF ticker symbol, in any case, with no exchange prefix. A bare symbol resolves against US exchanges; for a listing on another exchange add its suffix, such as 7203.T for Tokyo. Send exactly one of domain, ticker, isin, crypto or name. Example: AAPL
logodev_get_brand_by_id
Get brand by id
logodev_get_brandmark
Get brandmark
logodev_get_logo
Get logo
logodev_search_brands
Search brands
Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Logo.dev tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["logodev"], toolNames: [
    "logodev_search_brands",
    "logodev_get_brand",
    "logodev_get_logo"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Get the logo and brand colors for notion.so" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["logodev"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Get the logo and brand colors for notion.so" }],
  tools,
});

// Execute the tool call with the user's vaulted Logo.dev access token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["logodev"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Get the logo and brand colors for notion.so" }],
  tools,
});

// Tool call runs with the user's vaulted Logo.dev access token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["logodev"] }, pageSize: 100,
});

const agent = new Agent({
  name: "brand_data_agent",
  model: "gemini-2.5-pro",
  instruction: "Logo.dev tools scoped to this user",
  tools,
});

await agent.run("Get the logo and brand colors for notion.so");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Logo.dev tool. Click to copy, paste into your agent, done.
Brand profiles
Copy the prompt
Copied
Get the brand colors and description for notion.so.
Copy the prompt
Copied
Look up the brand behind the ticker AAPL.
Copy the prompt
Copied
Fetch the profile for this stored Logo.dev brand id.
Logos
Copy the prompt
Copied
Get the square logo for stripe.com.
Copy the prompt
Copied
Get the wide brandmark for linear.app.
Copy the prompt
Copied
Fetch logos for these 10 customer domains.
Search
Copy the prompt
Copied
Search Logo.dev for brands named Mercury.
Copy the prompt
Copied
Show the candidate brands for Delta and pick the airline.
Copy the prompt
Copied
Find the domain for a company called Ramp.
SEE HOW AUTH WORKS
Each user connects their own Logo.dev access token once, and Scalekit sends it with every call. Tokens stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Logo.dev
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Logo.dev
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Logo.dev
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Logo.dev
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other design and search connectors.
GTM and RevOps Teams
CRM AI agent
Reads the Granola transcript after every call, extracts next steps and updates the HubSpot record, drafts the follow-up in Gmail, and confirms in Slack, all on the rep's own delegated OAuth.
GTM and RevOps Teams
Competitive intelligence briefing agent
Scans Gong calls for competitor mentions, matches each one to its Notion battlecard, and DMs every affected rep a single Slack digest per cycle. Every call runs as the PMM who owns the briefing, never a shared bot.
Test other agents
See the same per-user auth pattern across other design and search connectors.
GTM
CRM AI agent
Turn each Granola call transcript into a HubSpot record update, a drafted Gmail follow-up, and a Slack recap.
GTM
Competitive intelligence briefing agent
Scan Gong calls for competitor mentions, match each one to its Notion battlecard, and DM every affected rep a single Slack digest.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Logo.dev access token looks fine in a demo. In production every brand lookup looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Logo.dev today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Logo.dev as the user or through a shared access token?
As the user. Each user connects their own Logo.dev access token once, and Scalekit sends it with every call. Audit logs attribute every brand lookup to that user, not a shared service account.
Where is the Logo.dev access token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate it, the user reconnects with a new access token. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Logo.dev?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example logodev_get_logo alone for a logo picker. Every Logo.dev tool is read-only, so the agent cannot change anything in the account. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Logo.dev access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Does Logo.dev return image files?
No. logodev_get_logo and logodev_get_brandmark return JSON with a temporary signed download URL, valid for about 24 hours, plus size and format details. A brand Logo.dev has not indexed yet returns a not_indexed status, and pending responses are not billed.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""logodev"": {
""url"": ""https://mcp.scalekit.com/logodev"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.logodev]
url = ""https://mcp.scalekit.com/logodev""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""logodev"": {
""url"": ""https://mcp.scalekit.com/logodev"",
""type"": ""http""
}
}
}