This website requires JavaScript to run properly.

Tools Reference

Complete API reference for Yoku's MCP tools.

Overview

Yoku's MCP server provides two powerful tools for accessing brand intelligence data. This reference documents all parameters, response formats, and usage examples.

Available Tools

brand.get

Retrieve complete brand identity data by domain, company name, stock ticker, or ISIN code.

Purpose

Use brand.get when you need comprehensive information about a specific brand, including:

  • Visual assets (logos, icons)
  • Brand colors and typography
  • Company metadata
  • Social media profiles
  • Customer ratings and reviews
  • Industry classification

Input Schema

{
  domain?: string;      // Company domain (e.g., "stripe.com")
  name?: string;        // Company name (e.g., "Stripe")
  ticker?: string;      // Stock ticker (e.g., "AAPL")
  isin?: string;        // ISIN code (e.g., "US0378331005")
}

Parameters:

ParameterTypeRequiredDescriptionExample
domainstringNo*Company's primary domain"stripe.com"
namestringNo*Company or brand name"Stripe"
tickerstringNo*Stock exchange ticker symbol"AAPL"
isinstringNo*International Securities ID"US0378331005"

*At least one parameter is required. If multiple are provided, the query will attempt to match on any of them.

Response Format

{
  "id": "uuid",
  "title": "Stripe",
  "canonicalDomain": "stripe.com",
  "description": "Stripe is a technology company that builds economic infrastructure for the internet.",
  "slogan": "Payments infrastructure for the internet",
  "email": "support@stripe.com",
  "phone": "+1-888-926-2289",
  "industryLabel": "Financial Technology",
  "subindustryLabel": "Payment Processing",
  "naicsPrimaryCode": "522320",
  "countryCode": "US",
  "isNsfw": false,
  "status": "ACTIVE",
  "reviewStatus": "APPROVED",
  "websiteUrl": "https://stripe.com",
  "careersUrl": "https://stripe.com/jobs",
  "privacyUrl": "https://stripe.com/privacy",
  "termsUrl": "https://stripe.com/terms",
  "contactUrl": "https://stripe.com/contact",
  "blogUrl": "https://stripe.com/blog",
  "pricingUrl": "https://stripe.com/pricing",
  "identifiers": [
    {
      "type": "DOMAIN",
      "value": "stripe.com"
    },
    {
      "type": "TICKER",
      "value": "STRIPE"
    }
  ],
  "assets": [
    {
      "id": "asset-uuid",
      "url": "https://cdn.yoku.app/assets/asset-uuid",
      "type": "LOGO",
      "width": 512,
      "height": 512,
      "mimeType": "image/png",
      "fileSize": 12345
    }
  ],
  "colors": [
    {
      "hex": "#635BFF",
      "name": "Stripe Purple",
      "usage": "PRIMARY",
      "confidence": 0.95,
      "weight": 1.0,
      "source": "OFFICIAL"
    }
  ],
  "socials": [
    {
      "type": "TWITTER",
      "url": "https://twitter.com/stripe",
      "handle": "@stripe"
    },
    {
      "type": "LINKEDIN",
      "url": "https://linkedin.com/company/stripe",
      "handle": "stripe"
    }
  ],
  "ratings": [
    {
      "source": "TRUSTPILOT",
      "sourceUrl": "https://trustpilot.com/review/stripe.com",
      "rating": 4.5,
      "reviewCount": 1234
    }
  ]
}

Response Fields

Core Fields:

FieldTypeDescription
idstringUnique brand identifier (UUID)
titlestringOfficial brand/company name
canonicalDomainstringPrimary domain for the brand
descriptionstringCompany description (AI-friendly)
sloganstringBrand tagline or slogan

Contact Information:

FieldTypeDescription
emailstringOfficial contact email
phonestringContact phone number
websiteUrlstringMain website URL
careersUrlstringCareers/jobs page URL
privacyUrlstringPrivacy policy URL
termsUrlstringTerms of service URL
contactUrlstringContact page URL
blogUrlstringCompany blog URL
pricingUrlstringPricing page URL

Classification:

FieldTypeDescription
industryLabelstringPrimary industry category
subindustryLabelstringMore specific industry segment
naicsPrimaryCodestringNAICS industry code
countryCodestringISO 3166-1 alpha-2 country code

Status:

FieldTypeDescription
statusstringBrand status: ACTIVE, INACTIVE, ACQUIRED
reviewStatusstringReview status: APPROVED, PENDING, REJECTED
isNsfwbooleanWhether content is NSFW

Identifiers Array:

FieldTypeDescription
typestringType: DOMAIN, COMPANY_NAME, TICKER, ISIN
valuestringThe identifier value

Assets Array:

FieldTypeDescription
idstringAsset UUID
urlstringCDN URL for the asset
typestringType: LOGO, ICON, WORDMARK, etc.
widthnumberImage width in pixels
heightnumberImage height in pixels
mimeTypestringMIME type (e.g., "image/png")
fileSizenumberFile size in bytes

Colors Array:

FieldTypeDescription
hexstringColor in hex format (#RRGGBB)
namestringColor name or description
usagestringUsage: PRIMARY, SECONDARY, ACCENT, etc.
confidencenumberConfidence score (0-1)
weightnumberVisual weight in brand palette
sourcestringSource: OFFICIAL, DERIVED, EXTRACTED

Socials Array:

FieldTypeDescription
typestringPlatform: TWITTER, LINKEDIN, FACEBOOK, INSTAGRAM, etc.
urlstringFull profile URL
handlestringUsername/handle on the platform

Ratings Array:

FieldTypeDescription
sourcestringRating platform: TRUSTPILOT, G2, CAPTERRA, etc.
sourceUrlstringURL to the review page
ratingnumberRating value (scale varies by source)
reviewCountnumberTotal number of reviews

Usage Examples

By Domain:

Get brand details for stripe.com

By Company Name:

Get brand information for "Netflix"

By Stock Ticker:

Fetch brand data for ticker AAPL

By ISIN:

Get brand using ISIN US0378331005

Multiple Identifiers:

Get brand for Spotify (domain: spotify.com or ticker: SPOT)

Example AI Prompts

"Use brand.get to fetch Stripe's logo and brand colors"

"Get complete brand information for netflix.com including social profiles"

"Fetch brand data for Apple using ticker AAPL and show me their color palette"

"Get brand details for domain shopify.com and list all available assets"

"Use brand.get with name 'Tesla' and show the company description"

Error Responses

Brand Not Found:

{
  "found": false
}

Missing Parameters:

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32602,
    "message": "Invalid params: at least one identifier required"
  },
  "id": null
}

brand.search

Perform fuzzy search to discover brands, with support for filtering and pagination.

Purpose

Use brand.search when you need to:

  • Find brands by partial name or keyword
  • Discover companies in a specific industry
  • Filter brands by country
  • Provide autocomplete suggestions
  • Explore brand catalogs

Input Schema

{
  q: string;           // Search query (required)
  limit?: number;      // Results per page (default: 10, max: 100)
  offset?: number;     // Pagination offset (default: 0)
  country?: string;    // ISO 3166-1 alpha-2 country code
}

Parameters:

ParameterTypeRequiredDescriptionExample
qstringYesSearch query (1-255 chars)"fintech"
limitnumberNoResults per page (1-100)10
offsetnumberNoSkip N results for pagination0
countrystringNoFilter by 2-letter country code"US"

Response Format

{
  "total": 42,
  "results": [
    {
      "id": "uuid",
      "title": "Stripe",
      "title_normalized": "stripe",
      "canonical_domain": "stripe.com",
      "description": "Stripe is a technology company...",
      "country_code": "US",
      "industry_label": "Financial Technology",
      "subindustry_label": "Payment Processing",
      "status": "ACTIVE",
      "is_nsfw": false,
      "created_at": "2024-01-15T10:30:00Z",
      "updated_at": "2024-02-20T15:45:00Z"
    }
    // ... more results
  ]
}

Response Fields

FieldTypeDescription
totalnumberTotal number of results found
resultsarrayArray of brand objects

Brand Object Fields:

FieldTypeDescription
idstringBrand UUID
titlestringOfficial brand name
title_normalizedstringNormalized name for search
canonical_domainstringPrimary domain
descriptionstringBrand description
country_codestringISO country code
industry_labelstringPrimary industry
subindustry_labelstringSubindustry category
statusstringACTIVE, INACTIVE, ACQUIRED
is_nsfwbooleanNSFW flag
created_atstringISO timestamp
updated_atstringISO timestamp

Search Behavior

Fuzzy Matching:

  • Uses PostgreSQL trigram similarity
  • Tolerates typos and partial matches
  • Example: "spotfy" will match "Spotify"

Ranking Algorithm:

  1. Exact matches ranked first
  2. Similarity score (higher = better match)
  3. Title length (shorter titles preferred for ambiguous queries)

Search Targets:

  • Brand titles
  • Company name identifiers
  • Normalized variations

Usage Examples

Basic Search:

Search for "stripe"

With Limit:

Search for "fintech" with limit 5

With Pagination:

Search for "technology" with limit 20 and offset 40

Country Filter:

Search for "tech" in Germany (country: DE)

Complex Query:

Find French fintech companies (query: "fintech", country: "FR", limit: 10)

Example AI Prompts

"Search for payment processing companies"

"Find all brands matching 'spotify'"

"Search for tech companies in the US, limit to 5 results"

"Find German automotive brands"

"Search for 'stream' and show the first 3 results"

"Look for fintech companies, skip the first 10 results (offset 10)"

"Find brands in France containing 'luxury'"

Pagination Example

To paginate through results:

Page 1 (results 1-10):

{
  "q": "technology",
  "limit": 10,
  "offset": 0
}

Page 2 (results 11-20):

{
  "q": "technology",
  "limit": 10,
  "offset": 10
}

Page 3 (results 21-30):

{
  "q": "technology",
  "limit": 10,
  "offset": 20
}

Error Responses

Invalid Query Length:

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32602,
    "message": "Invalid params: query must be 1-255 characters"
  },
  "id": null
}

Invalid Limit:

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32602,
    "message": "Invalid params: limit must be between 1 and 100"
  },
  "id": null
}

Invalid Country Code:

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32602,
    "message": "Invalid params: country must be 2-letter ISO code"
  },
  "id": null
}

Best Practices

1. Choose the Right Tool

  • Use brand.get when you know a specific identifier (domain, name, ticker)
  • Use brand.search for discovery, exploration, or autocomplete

2. Optimize Search Queries

Good queries:

  • "stripe" - Clear, specific
  • "fintech payment" - Descriptive keywords
  • "automotive germany" - Industry + location

Avoid:

  • "a" - Too vague
  • "the best company" - Subjective, not searchable
  • Very long queries (>255 chars)

3. Handle Empty Results

Always check if results exist:

const result = await brand_get({ domain: "example.com" });
if (!result.found) {
  console.log("Brand not found");
}

4. Use Pagination Wisely

For large result sets:

  • Start with reasonable page sizes (10-20)
  • Only fetch more if needed
  • Cache results when possible

5. Respect Rate Limits

  • Monitor your quota in the dashboard
  • Implement exponential backoff for retries
  • Cache frequently accessed data
  • Batch similar queries together

6. Leverage Country Filters

When searching specific markets:

Search for "fashion" in country "FR"

This is more efficient than searching all brands then filtering client-side.

7. Combine Tools Effectively

Pattern: Search then Get

  1. Use brand.search to find candidates
  2. Use brand.get to fetch complete details
"Search for 'payment processors', then get full details for the top result"

Tool Comparison

Featurebrand.getbrand.search
PurposeGet specific brandDiscover brands
InputIdentifiersKeywords/query
ReturnsComplete dataBasic info list
Best ForKnown brandsExploration
PaginationN/ASupported
FilteringN/ABy country
Response SizeLarge (~5-20 KB)Small (~1-5 KB)

Common Workflows

Workflow 1: Brand Lookup

1. User provides domain: "stripe.com"
2. Call: brand.get({ domain: "stripe.com" })
3. Display logo, colors, description

Workflow 2: Autocomplete

1. User types: "spot"
2. Call: brand.search({ q: "spot", limit: 5 })
3. Show dropdown with matches
4. User selects "Spotify"
5. Call: brand.get({ domain: "spotify.com" })
6. Show full details

Workflow 3: Industry Analysis

1. Call: brand.search({ q: "fintech", limit: 50 })
2. Iterate through results
3. For each interesting brand:
   Call: brand.get({ domain: result.canonical_domain })
4. Analyze and compare

Workflow 4: Geographic Market Research

1. Call: brand.search({ q: "automotive", country: "DE", limit: 100 })
2. Collect all German automotive brands
3. For top brands:
   Call: brand.get() to get detailed data
4. Generate market report

Next Steps

Need Help?

Questions about the tools?

Pro Tip: Test in Cursor First

Before building complex integrations, test tool calls interactively in Cursor to understand response formats and behavior. This makes debugging much easier.