Skip to main content
Glama
creatordb-mcp-server

creatordb-mcp-server

Official
by CreatorDB

creatordb-mcp-server

A Model Context Protocol server that exposes the CreatorDB V3 API to any MCP-compatible client (Claude Code, Claude Desktop, Cursor, etc.).

48 tools across seven surfaces:

  • Creator-side data — profile, performance, audience demographics, contact, content-detail, performance history for YouTube, Instagram, and TikTok

  • Creator search — natural-language search across all three platforms, plus structured filter search per platform (country, language, follower thresholds, niches, hashtags, audience demographics, etc.)

  • Brand-side / sponsor intelligence (YouTube + Instagram only — TikTok brand data is not indexed) — search CreatorDB's 10K+ indexed brands, pull a brand's full profile, list every creator a brand has sponsored, get aggregated audience demographics across a brand's sponsored creator pool, and cross-platform spend / CPM / CPE rollups. The heavier sponsor reads (get_sponsor_creators, get_sponsor_performance, get_sponsor_audience, get_sponsor_summary) cost 15 credits each — use deliberately. get_sponsor_information is 2, search_sponsors 2, list_sponsors 1.

  • Content search — find individual posts (YouTube videos, shorts and streams; Instagram reels and posts; TikTok videos) by content-level filters (captions, hashtags, publish date, engagement thresholds, sponsorship) and creator-level filters, or within one creator's content. Different from creator search — this returns posts, not channels. Each call has a fixed price from a grid (time window, caption filter, follower floor, content type); with no window it searches the last 30 days.

  • Topic + niche taxonomies — paged, searchable catalogs (~490 topics per platform, ~16K YT niches, ~40K each on IG/TT) for resolving the per-creator topic/niche IDs returned in profile responses. Pass search to resolve a phrase to entry IDs rather than paging; search filters take the id.

  • Bulk vetting — vet_creators returns engagement, audience and sponsor details for up to 150 creators in one call.

  • Account — credit usage broken down by endpoint and platform.

Every tool returns the underlying V3 JSON plus a Credits used: N | Remaining: M footer line, so the AI knows exactly what it's spending.

Working with Claude Code? Open this README in Claude Code (or paste the URL into a Claude session) and say "set up this MCP for me." The steps below are written so an AI assistant can follow them top to bottom.

Quick start

There are two ways to connect, depending on your client:

  • Local clients (Claude Code, Claude Desktop, Cursor) run the server as a subprocess via npx — see Install (local / stdio).

  • Web / desktop / mobile clients connect to the hosted endpoint, or add CreatorDB straight from Claude's connector directory — see Remote connector.

Both expose the same 48 tools. Both need a CreatorDB V3 API key.

  1. Prerequisites

    • For the local route: Node.js 22 or newer (node -v to check)

    • A CreatorDB V3 API key — get one from https://creatordb.app account settings, or ask your team admin

  2. Pick a connection method below

  3. Restart your MCP client so it picks up the new tools

  4. Verify by running /mcp in Claude Code — creatordb should appear with status connected

Related MCP server: Influship MCP

Install (local / stdio)

For Claude Code, Claude Desktop, and Cursor. The server reads one environment variable: CREATORDB_API_KEY (your V3 key).

Method A — npx from npm (recommended)

The package is published to npm as @creatordbai/mcp-server. No local clone, no SSH key, no GitHub access required:

Claude Code:

claude mcp add creatordb -s user \
  -e CREATORDB_API_KEY=YOUR_CREATORDB_API_KEY \
  -- npx -y @creatordbai/mcp-server

Claude Desktop — edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "creatordb": {
      "command": "npx",
      "args": ["-y", "@creatordbai/mcp-server"],
      "env": { "CREATORDB_API_KEY": "YOUR_CREATORDB_API_KEY" }
    }
  }
}

If you have GitHub org access and want to track main instead of the npm release, swap the npm name for git+ssh://git@github.com/CreatorDB/creatordb-mcp-server.git — the repo's prepare script will build on install.

Method B — clone and build locally

Good if you want to read/modify the source, or if npx from git doesn't work in your environment.

git clone https://github.com/CreatorDB/creatordb-mcp-server.git
cd creatordb-mcp-server
npm install
npm run build

# Then register with Claude Code:
claude mcp add creatordb -s user \
  -e CREATORDB_API_KEY=YOUR_CREATORDB_API_KEY \
  -- node "$(pwd)/dist/index.js"

For Claude Desktop, use the same JSON as Method A but swap command + args:

"command": "node",
"args": ["/absolute/path/to/creatordb-mcp-server/dist/index.js"],

Method C — project-scoped via .mcp.json (best for teams)

Drop a .mcp.json into a CreatorDB project repo. Anyone who opens that repo in Claude Code gets prompted to enable the MCP — no per-person setup commands.

{
  "mcpServers": {
    "creatordb": {
      "command": "npx",
      "args": ["-y", "git+ssh://git@github.com/CreatorDB/creatordb-mcp-server.git"],
      "env": { "CREATORDB_API_KEY": "${CREATORDB_API_KEY}" }
    }
  }
}

${CREATORDB_API_KEY} reads from the user's shell environment, so the key stays out of git. Each teammate sets it once in their .zshrc/.bash_profile:

export CREATORDB_API_KEY=YOUR_CREATORDB_API_KEY

Remote connector (Claude web, desktop, mobile)

Claude clients that can't spawn a local subprocess connect to the hosted endpoint instead of running npx. There are two ways in.

From the connector directory (easiest). CreatorDB is listed in Claude's connector directory. In Claude: Settings → Connectors → Add → Browse connectors, search CreatorDB, open CreatorDB MCP, and click Connect to Claude.

Add it manually. You can also add it directly: Settings → Connectors → Add → Add custom connector, and enter the URL:

https://mcp.creatordb.app/mcp

Leave the Advanced OAuth Client ID / Secret fields empty — the server registers the client automatically.

Either way, you'll be prompted to enter your CreatorDB API key when you connect, and the same 48 tools appear.

Notes:

  • You'll be prompted to enter your key when you connect; the connector seals it into an encrypted session token and keeps no separate copy. CreatorDB stores the key only as the credential it issued you.

  • Programmatic clients calling the endpoint directly can instead send Authorization: Bearer <your CreatorDB V3 API key>.

  • Health check: https://mcp.creatordb.app/health (no auth, 0 credits) — returns {"status":"ok",...} when the service is up.

  • Hosted as a Firebase Cloud Function (gen 2) in asia-northeast1; source is in functions/.

  • Don't have a key? Get one at https://app.creatordb.app or email hello@creatordb.app.

Changing your API key

You don't update a key inside the MCP server — it doesn't store keys. You change it in your client's MCP configuration and restart.

Local install (Claude Code, Claude Desktop, Cursor)

Edit the same config file you used during setup:

  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)

  • Cursor: ~/.cursor/mcp.json (or the in-app MCP settings UI)

  • Claude Code: ~/.mcp.json or your project's .mcp.json

Change the CREATORDB_API_KEY value, then fully restart the client (⌘Q + reopen for Claude Desktop, restart the Cursor app, etc.). MCP clients only read the key at process startup.

If you set the key from your shell environment (Method C above, with ${CREATORDB_API_KEY} syntax), update ~/.zshrc / ~/.bash_profile and restart your terminal before restarting the client.

Remote connector (Claude web, desktop, mobile)

In Settings → Connectors → CreatorDB, disconnect and reconnect, then enter the new key when prompted. (A programmatic client sending a Bearer token just starts sending the new key.)

One thing to know about rotating a leaked key

Changing the key on the client side only swaps which key your tools authenticate with. It does NOT invalidate the previous key. If you're rotating because the old key was exposed:

  1. Go to your CreatorDB account and revoke the old key there — that's what actually kills it at the V3 API layer.

  2. Then update the MCP client to use the new key as above.

The MCP server never persists your key past a single request, so there's no server-side "stored key" to purge.

Verify it works

After install, restart Claude Code (or your MCP client) and:

  1. Run /mcp — you should see creatordb listed with status connected

  2. Ask Claude something that uses the tools, e.g. "use creatordb to look up the YouTube profile for MrBeast (channelId UCX6OQ3DkcsbYNE6H8uQQuVA)"

  3. The response should include creator data and a Credits used: 2 | Remaining: … footer

Troubleshooting

Symptom

Cause

Fix

/mcp shows creatordb as failed or connecting forever

API key missing or wrong

Re-add with claude mcp remove creatordb && claude mcp add … using the correct key

Tools work but every response ends Credits used: undefined

Stale tool schema from an older build of this server

Restart the MCP client — clients cache the schema at session start

Error: VALIDATION_ERROR on Instagram tools

Passing userId instead of uniqueId

IG endpoints take the handle as uniqueId. Older clients with stale schemas hit this most

npx install fails with EACCES: permission denied

npx cache permission issue

rm -rf ~/.npm/_npx and re-run

Error: ENOENT or cannot find dist/index.js

Method B didn't run npm run build

cd into the repo and run npm install && npm run build

Tool descriptions seem outdated vs this README

Schema cached from an old version

claude mcp remove creatordb && claude mcp add … to force a re-fetch

Why restarts matter — MCP clients fetch the tool list once at session start. Server updates (new tools, renamed params, fixed costs) only show up after the client reconnects. This is the single most common confusion.

Upgrading to a newer published version? npx caches packages by exact version, so a configured client keeps running whatever version it first downloaded. To force-pull the latest, either pin to @latest in your config (npx -y @creatordbai/mcp-server@latest re-resolves each launch) or clear the npx cache once (rm -rf ~/.npm/_npx). Then restart the MCP client.

Releasing (maintainers)

The .github/workflows/release.yml workflow publishes to npm whenever a v*.*.* tag is pushed.

# bump version, commit, tag, push
npm version patch              # or minor / major
git push && git push --tags

The workflow validates that the tag matches package.json version, runs npm ci, builds, and publishes via npm Trusted Publishing with sigstore provenance attestation. No long-lived NPM_TOKEN is stored — the workflow exchanges a GitHub OIDC token for a short-lived npm publish token at runtime.

Roadmap

  • Goal: list in the MCP registry and Claude's MCP marketplace so the server shows up when users browse MCP servers from inside their client.

  • Contributions, issues, and feedback welcome — see Getting help below.

Tools

48 tools across six categories. Every tool returns a structured JSON payload plus a Credits used: N | Remaining: M footer line.

Account (1)

Tool

Cost

Notes

get_api_usage

0

Daily request counts and credit consumption by endpoint. Defaults to last 7 days; takes optional start/end Unix-ms timestamps.

Search (5)

Tool

Cost

Notes

search_creators_nls

dynamic (token-based)

Natural-language search across all three platforms, converting one sentence into filters in a single pass. For explicit natural-language requests; structured search is the default.

search_youtube

1 per 10 filters

Structured filter search. Use totalSubscribers for count thresholds.

search_instagram

1 per 10 filters

Structured filter search. Use totalFollowers for count thresholds.

search_tiktok

1 per 10 filters

Structured filter search. Use totalFollowers for count thresholds.

vet_creators

~13–17 per creator found

Check up to 150 creators (any mix of platforms) in one call: followers, country, language, bio, recent posts, engagement, median views or likes, posting frequency, audience countries / gender / age, and recent sponsors (YouTube and Instagram). Replaces per-creator profile, performance, audience and sponsorship calls when shortlisting.

Filter type gotcha: numeric ops (>, <, = on subscriber/follower/rate fields) require a number value, not a numeric string. "1000000" → VALIDATION_ERROR; 1000000 → ok.

Niche and topic values: the niches and topics filters take taxonomy IDs (e.g. id_canva_Education). A display name (Canva) or the Name/Category form is converted to the matching IDs and the result says what it was converted to; the first conversion per taxonomy costs 1 credit and is then cached. A name with no exact match returns the closest IDs instead of running the search.

Enrichment (fields): add data from other endpoints to each result, billed per result at fractional prices, e.g. { "profile": ["bio", "niches", "country", "mainLanguage"], "content-detail": { "recentVideos": 3 } } = 0.7 credits per result. Useful for checking fit without a profile call per creator.

Empty results: a search with no matches returns a note on how to widen it.

Server instructions: the server sends instructions at connect time describing how the data works (exact filters, taxonomy IDs, country-level location) and the search method that returns the most relevant creators: gather candidates with several searches that use different topic signals and sort orders, enrich them with fields, then keep only creators whose own content shows they fit. A thorough search this way typically uses 50-150 credits. Agents state their plan before searching, share a preview of clear fits when early results allow, make independent calls together in the same turn, list only clear fits, stop once they have the number of creators the user asked for, and check shortlisted creators with one vet_creators call instead of per-creator lookups. When the user asks for speed they take a quick path: map niches for every platform in one turn, run two searches per platform together, keep the clear fits. Clients connected before an update see new instructions after reconnecting.

Result size: enriched search results are shortened in steps to stay within what MCP clients show to the model (long descriptions and bios first, then top-10 hashtag and niche lists, then recent posts reduced to their essentials). The result says what was shortened; get_*_profile and get_*_content_detail return full text. Tool results are compact JSON.

Filter value notes: hashtag values match with or without a leading # and are case-insensitive. Ratio and percentile fields (audienceMaleRatio, audienceFemaleRatio, and YouTube's *Percentile fields) take a decimal from 0 to 1, not 0-100: 0.6 = 60%, 0.9 = top 10%.

Sponsors / brand data (8)

Brand-side intelligence: which brands sponsor creators, how much they spend, which creators they work with. Sponsor data covers YouTube and Instagram only — TikTok is not indexed for brands.

Brand-key: brandId, typically the brand's primary domain (e.g. "acer.com", "nike.com").

Tool

Cost

Returns

search_sponsors

2 per page

Brand search by structured filters. Lean records (brandId, name, logo, industries, country).

list_sponsors

1 per page

Paginated directory of all 10K+ indexed brands.

get_sponsor_information

2

Full brand profile: aliases, keyPeople, industries, location, website, socialMedia, competitors.

get_sponsor_creators

25 per page

Inverse of get_*_sponsorship — which creators has this brand sponsored. Returns followers, lastSponsoredDate, sponsoredCount, topics, niches per creator.

get_sponsor_performance

25 per page

Per-content sponsorship perf. Three stats scopes per creator (creatorTotal, allSponsored lifetime, this-brand-only). YT-only: estimatedCost, CPM.

get_sponsor_audience

25

Aggregated audience demographics across the brand's sponsored creator pool. IG block reserved but null today (backend YT-only).

get_sponsor_summary

25

Cross-platform rollup: totalSponsoredCreators/Content, per-platform creators + performance + growth30d.

submit_sponsor

1 (0 if duplicate)

Submit a brand for indexing. Rate-limited 100/day per key. Returns submissionId + status.

Cost warning — get_sponsor_creators, get_sponsor_performance, get_sponsor_audience, get_sponsor_summary each cost 25 credits per call. Use search_sponsors / list_sponsors / get_sponsor_information for cheap exploration first.

YouTube creator data (7 + 5 platform-specific)

Creator-key: channelId (the UC… form — @handle / /c/ / /user/ URLs are not accepted; resolve first).

Tool

Cost

Returns

get_youtube_profile

2

Identity, subscribers, country, language, linked socials, channel categories, plus the creator's topics and niches.

get_youtube_contact

15

Email addresses.

get_youtube_performance

3

R20 (last 20 videos) + all-time (up to 800) engagement metrics; consistency scores; 30d/90d view windows.

get_youtube_performance_history

3

Daily snapshots over the past N days. Takes pastDayRange (string integer, 1–365).

get_youtube_audience

10

Age buckets, gender split, top countries.

get_youtube_content_detail

3

Recent videos + shorts with per-item engagement.

get_youtube_sponsorship

5

Sponsored content grouped by indexed brand (recent posts only — empty list ≠ "no sponsors").

search_youtube_content

1–97 (grid)

Search individual videos, shorts and streams (different from search_youtube, which searches creators). Last 30 days by default; timeRange for any window; channelId filter for one channel. 30-day search: 3, or 17 with a description filter; less with postType or followers > 100000.

list_youtube_topics

1

The YT TOPIC taxonomy (~490 entries with channelCount), paged. Same taxonomy as list_instagram_topics / list_tiktok_topics, with YouTube IDs (_youtube). search, category, minChannelCount, pageSize, offset.

list_youtube_niches

1

The YT NICHE taxonomy (~16K entries with channelCount), paged. search, category, minChannelCount, pageSize, offset.

get_youtube_subtitles_meta

1

Per-video subtitle track listing. Takes videoId (not channelId).

get_youtube_subtitles_download

3

Subtitle text for one video. Takes videoId, optional language (ISO 639-3).

Instagram creator data (7 + 3)

Creator-key: uniqueId (the handle, no @).

Tool

Cost

Returns

get_instagram_profile

2

Identity, followers, country, language, isBusinessAccount, linked socials, hashtags, account categories, plus the creator's topics and niches.

get_instagram_contact

15

Email addresses.

get_instagram_performance

2

First-page image + reels engagement; consistency scores.

get_instagram_performance_history

3

Daily snapshots over the past N days. Takes pastDayRange.

get_instagram_audience

10

Age buckets, gender split, top countries.

get_instagram_content_detail

2

Recent images + reels with per-item engagement.

get_instagram_sponsorship

5

Sponsored content grouped by indexed brand (recent posts only).

search_instagram_content

1–92 (grid)

Search individual reels and posts (different from search_instagram, which searches creators). Last 30 days by default; timeRange for any window; uniqueId filter for one creator. 30-day search: 4, or 17 with a description filter; less with postType or followers > 100000.

list_instagram_niches

1

The IG NICHE taxonomy (~40K entries), paged. For topics, use list_instagram_topics. search, minChannelCount, pageSize, offset.

list_instagram_topics

1

The IG TOPIC taxonomy (~490 entries with channelCount), paged. Same taxonomy as YouTube with Instagram IDs (_instagram) and counts. Profile topics may omit the suffix; search accepts both. search, category, minChannelCount, pageSize, offset.

TikTok creator data (7 + 2)

Creator-key: uniqueId (the handle, no @).

Tool

Cost

Returns

get_tiktok_profile

2

Identity, followers, country, language, hashtags, plus the creator's topics and niches.

get_tiktok_contact

15

Email addresses.

get_tiktok_performance

2

Recent videos engagement (views, likes, comments, shares); consistency scores.

get_tiktok_performance_history

3

Daily snapshots over the past N days. Takes pastDayRange.

get_tiktok_audience

10

Age buckets, gender split, top countries.

get_tiktok_content_detail

2

Recent videos with audio metadata, duet/stitch/commerce flags, per-item engagement.

search_tiktok_content

1–28 (grid)

Search individual VIDEOS (different from search_tiktok, which searches creators). Last 30 days by default; timeRange for any window; uniqueId filter for one creator. 30-day search: 2, or 4 with a description filter. NO isSponsored/partneredBrands (TT brand-attribution not implemented). Filter terminology uses diggs but response normalizes to likes.

list_tiktok_niches

1

The TT NICHE taxonomy (~40K entries), paged. For topics, use list_tiktok_topics. TikTok does NOT expose a per-brand sponsorship endpoint. search, minChannelCount, pageSize, offset.

list_tiktok_topics

1

The TT TOPIC taxonomy (~490 entries with channelCount), paged. Same taxonomy as YouTube with TikTok IDs (_tiktok) and counts. search, category, minChannelCount, pageSize, offset.

Cross-platform differences cheat-sheet

Dimension

YouTube

Instagram

TikTok

Creator parameter

channelId (UC…)

uniqueId (handle)

uniqueId (handle)

Follower field

totalSubscribers

totalFollowers

totalFollowers

Has a topic taxonomy

✅ list_youtube_topics

✅ list_instagram_topics

✅ list_tiktok_topics

Has a niche taxonomy

✅ list_youtube_niches

✅ list_instagram_niches

✅ list_tiktok_niches

Per-creator niches in /profile

✅

✅

✅

Per-creator topics in /profile

✅

✅

✅

Sponsorship per-brand endpoint

✅

✅

❌

Content types in /content-detail

videos + shorts

images + reels

videos

/content-detail cost

3

2

2

Performance windows

R20 + all-time (up to 800)

First-page

Recent

Engagement formula

(L+C+V) / subscribers

(L+C) / followers

(L+C+Shares) / followers

Subtitles endpoints

✅

❌

❌

Content-search endpoint

✅

✅

✅

Brand-side sponsor data

✅

✅

❌

Niche IDs are not interchangeable across platforms — id_vlog_PeopleBlogs (YT) and id_love_All (IG) live in different namespaces. Niche/topic IDs follow the pattern id_{slug}_{Category}, so you can group by category by splitting on the last _.

Response shape highlights

These are the fields that aren't obvious from the endpoint name but you'll reach for constantly. All confirmed against live responses.

/profile

Shared across YT/IG/TT:

  • subscriberGrowth: { g7, g30, g90 } — % change in subscribers/followers over the last 7/30/90 days. Free trend signal — no need to call performance-history if you only want the headline number.

  • hashtags: [{ name, contentCount }] — hashtags the creator uses (note: name carries the # on IG/TT).

  • niches: ["id_vlog_PeopleBlogs", …] — per-creator niche IDs. To resolve the human-readable name + category + channelCount, cross-reference list_{platform}_niches.

  • relatedCreators — accounts the platform itself recommends or lists as related to the creator. YT: UC channelIds of channels YouTube recommends alongside this channel's videos, most frequent first. IG/TT: handles, passed through as the platform provides them. On TikTok the list often includes the creator's own handle. Cheap way to expand a seed list.

  • hasEmail — whether get_{platform}_contact would return an email. Request it via fields (0.1 credit) before paying 15 for contact.

  • isAgencyRepresented — true when CreatorDB has a record of agency representation; false also covers creators with no record.

  • lastPublishTime / lastDbUpdateTime — Unix-ms; pair them to know how stale the snapshot is vs how recently the creator posted.

  • country — ISO 3166-1 alpha-3 (e.g. "USA", "JPN"). On IG this value is derived from a content classifier rather than a self-declared field, and can occasionally be wrong for creators with multi-country presence — cross-check against audienceLocations and the creator's bio if accuracy matters.

YT-only:

  • topics: ["id_challenges_Comedy", …] — coarse topic IDs (~490 per platform). Resolve via list_{youtube,instagram,tiktok}_topics.

  • totalViews — lifetime channel views, as shown on the channel's About panel.

  • joinedDate — when the channel was created (Unix ms, day precision).

  • Sponsored video / shorts CPM and rate bands (videoPrice, shortsPrice) are no longer on profile; they're on get_youtube_performance.

  • categoryBreakdown: [{ category, share }] — share of recent content by YouTube native category.

  • hasMemberOnlyContents — boolean.

IG-only:

  • isBusinessAccount, isPrivateAccount — flags worth checking before promising audience data; private accounts can't be scraped.

  • otherLinks — bio links array.

  • imageLastPublishTime / reelsLastPublishTime — latest image post and latest reel (Unix ms); lastPublishTime is the later of the two.

TT-only:

  • otherLinks — bio link (TikTok allows one).

  • joinedDate — when the account was created (Unix ms).

/audience

Identical shape across platforms:

  • audienceLocations: [{ country, share }] — top 6 countries with shares summing to roughly 1.0.

  • audienceGender: { maleRatio, femaleRatio } — sums to ~1.0; binary split only.

  • audienceAvgAge — integer.

  • audienceAgeBreakdown: [{ ageRange, share }] — fixed buckets 13-17 | 18-24 | 25-34 | 35-44 | 45-54 | 55-64 | 65+. Always 7 entries; placeholder rows are all-zero (see footgun list below).

/performance

The R20-vs-all distinction is YT-only:

  • YT returns four sibling objects: videosPerformanceRecent, videosPerformanceAll, shortsPerformanceRecent, shortsPerformanceAll. "Recent" = R20 (last 20). "All" = up to 800. Each has likes/comments/views (with avg/median/min/max/percentile25/percentile75/iqr) and an engagement block.

  • IG returns imagesPerformanceRecent + reelsPerformanceRecent. No all-time window.

  • TT returns videosPerformanceRecent. No all-time window.

  • Every engagement block ends with engagementConsistency: { cv, medianVsMean, topBottomRatio, consistencyScore, consistencyLevel }. consistencyScore is 0–100; consistencyLevel is "high" (81–100), "moderate" (51–80), or "low" (0–50). Requires ≥6 content pieces, otherwise the consistency block is absent.

  • ranking block carries global, country, language percentile ranks for totalSubscribers/totalFollowers and avgEngagementRate — useful for "is this creator above average for their country" without separate benchmarking.

  • recentVideosGrowth.g7/g30/g90 — engagement-rate delta over 7/30/90 days. Negative numbers mean engagement is declining.

  • contentCountByDays: { 7d, 30d, 90d } — how many posts in each window (use to detect dormant creators).

/content-detail

Per-item objects across platforms:

  • publishTime (Unix-ms), contentId, likes, comments, views (YT/TT only — IG images have no view count), engagementRate (rounded to 4 decimals).

  • hashtags: ["#example", …] — already includes # prefix.

Platform-specific extras:

  • YT: length (seconds), isMemberOnly, content mix includes both videos and shorts.

  • IG: mentionedCreators — @-mentions in caption.

  • TT: audioId, audioTitle, audioAuthor, audioAlbum, isDuetEnabled, isAd, length (seconds), shares. The audio block is the cheapest way to find trending sounds.

Freshness rule — content published within the last 4 days is excluded from all metric calculations (all platforms). Pinned-post rule — on IG/TT, a pinned post older than 90 days is excluded if it would be the oldest item in the sample.

/sponsorship

YT and IG only — TikTok does not have a per-brand sponsorship endpoint.

  • sponsorList: [{ brandName, brandId, brandIgIds, sponsoredVideos, sponsoredVideosPerformance }].

  • brandIgIds — the brand's IG handles. Use this to follow a brand from a sponsored creator back to the brand's own profile.

  • sponsoredVideos includes each sponsored content's full per-item engagement (same shape as /content-detail).

  • Important caveat — only scans the most recent ~20–30 posts and only detects brands already indexed in CreatorDB. An empty sponsorList is not proof the creator has no sponsors; it's "we didn't find indexed sponsors in their recent posts."

Structured search response:

  • creatorList: [{ displayName, uniqueId, channelId (YT only), avatarUrl, totalSubscribers | totalFollowers }] — minimal projection; hydrate with get_*_profile for full data.

  • totalResults — total matching the filter set, not just the page.

  • hasNextPage + nextOffset — pagination idiom. Pass nextOffset as the next request's offset to advance.

NLS response:

  • Same creatorList shape as structured search, plus a platform: "youtube" | "instagram" | "tiktok" field telling you which platform the AI routed to.

  • Streamed over SSE under the hood; the MCP layer collects the final data: event and returns it as one payload.

  • Dynamic pricing — typically 1–10 credits depending on input + output token count.

/usage

  • records: [{ date (YYYYMMDD), requestCount, totalQuotaUsed, endpoints: { …per-endpoint counts }, platforms: { …per-platform counts }, quotaByPlatform }].

  • totalQuotaUsed can be fractional (e.g. 4.49 for an NLS call).

  • endpoints keys are camelCase: getYoutubeProfile, getInstagramAudience, searchYoutube, getNLS, etc. Useful for building a spend dashboard.

Common footguns

  • Placeholder demographics: when CreatorDB doesn't have real audience data, /audience returns the all-zero shape (audienceGender: { maleRatio: 0, femaleRatio: 0 }, age buckets all 0.0). Treat any row where male+female=0 as missing, not as "no gender data."

  • Empty sponsorList ≠ no sponsors (see above).

  • relatedCreators is unranked — order is not significance. Don't slice the first N and call them "top related"; sample or rerank by your own metric.

  • Freshness lag — lastDbUpdateTime is when CreatorDB last refreshed. If it's older than ~14 days, the profile may not reflect recent breakout content.

  • Niche channelCount drifts — list_*_niches is updated daily; don't cache it longer than that or your "creators in X niche" count will lag reality.

  • Search the taxonomy, don't page it — list_*_niches returns one page at a time (100 by default, largest first) because the full taxonomies run to ~40,000 entries on Instagram and TikTok. Both are a single flat "All" category with no structure to browse, and the top 100 entries account for only ~18% of creator assignments, so paging rarely gets you anywhere. Pass search to resolve a phrase to niche IDs instead (the search filter takes each entry's id). Matching is whole-word, so skin will not find Skincare; CamelCase names are split (StreetFood matches street food) and common variants are folded (vloggers→vlog, japanese→japan). On TikTok ~44% of niches have under 100 creators — minChannelCount trims that tail.

  • IG country is modelled, not self-declared — YouTube and TikTok return the country a creator set on their own profile; for Instagram, CreatorDB's location model supplies it, so IG has country coverage where the profile states nothing.

Filter reference (search tools)

Common fields across all three platforms:

  • displayName — string, supports fuzzy

  • uniqueId — string, exact

  • country — string, ISO 3166-1 alpha-3 (e.g. "USA", "JPN", "GBR")

  • mainLanguage — string, ISO 639-3 (e.g. "eng", "jpn", "zhs")

  • hashtags — string (with # prefix on IG/TT)

  • niches — string (use IDs from the platform's list_*_niches)

  • mainAudienceLocation / mainAudienceAge / mainAudienceGender — string

  • hasSponsors — boolean

Platform-specific:

  • YouTube: totalSubscribers (number), topics (string from list_youtube_topics)

  • Instagram / TikTok: totalFollowers (number)

Operators: >, <, = for numbers; =, in for strings; = for booleans. in takes an array of up to 100 values. pageSize max 100; filters max 10 per request.

Response envelope

Every tool returns the underlying CreatorDB V3 envelope:

{
  "data": { },
  "creditsUsed": 2,
  "creditsAvailable": 953270.5,
  "traceId": "abc-123",
  "timestamp": 1779722787120,
  "errorCode": "",
  "errorDescription": "",
  "success": true
}

On error, the envelope carries errorCode, error, message, and details. The MCP layer flattens that into a clean error message with a TraceId: line for support.

Development

npm run dev   # tsc --watch
npm run build # tsc once
npm start     # node dist/index.js

Source layout:

src/
  index.ts                 # registers all tools, stdio transport
  tools/
    account.ts             # 1 tool
    search.ts              # 4 tools (NLS + 3 platform creator searches)
    youtube.ts             # 13 tools (incl. search_youtube_content)
    instagram.ts           # 10 tools (incl. search_instagram_content)
    tiktok.ts              # 9 tools (incl. search_tiktok_content)
    sponsors.ts            # 8 tools (brand-side sponsor intelligence)
  util/
    api-client.ts          # fetch wrapper for REST + SSE
    response.ts            # MCP result formatter (credits, errors)

Getting help

License

MIT

Available Tools

42 tools
get_api_usageAInspect

Get your CreatorDB API usage. Returns records: [{ date (YYYYMMDD), requestCount, totalQuotaUsed (can be fractional, e.g. NLS), endpoints (camelCase per-endpoint counts: getYoutubeProfile, searchInstagram, getNLS, etc.), platforms, quotaByPlatform }]. Free to call (0 credits). Defaults to last 7 days; pass start/end as Unix-ms strings to widen the window.

NameRequiredDescriptionDefault
startNoStart date as Unix timestamp in milliseconds
endNoEnd date as Unix timestamp in milliseconds
get_instagram_audienceAInspect

Get an Instagram creator's audience demographics: audienceLocations (top 6 countries with shares), audienceGender (maleRatio + femaleRatio, binary only), audienceAvgAge (integer), audienceAgeBreakdown (fixed 7 buckets: 13-17/18-24/25-34/35-44/45-54/55-64/65+). When data is missing the endpoint returns the placeholder shape (all 0.0) — treat male+female=0 as missing, not "no gender data." Costs 10 credits.

NameRequiredDescriptionDefault
uniqueIdYesInstagram handle (e.g. "natgeo"). No "@" prefix and no URL.
get_instagram_contactAInspect

Get an Instagram creator's contact email addresses (business/public-listed emails). Costs 15 credits.

NameRequiredDescriptionDefault
uniqueIdYesInstagram handle (e.g. "natgeo"). No "@" prefix and no URL.
get_instagram_content_detailAInspect

Get an Instagram creator's recent content (images + reels) with per-item engagement: likes, comments, views (reels only — images have no view count), caption, hashtags (with "#"), mentionedCreators (@-mentions), publishTime (Unix-ms), engagementRate. Content from the last 4 days is excluded from metric calculations. Pinned posts >90 days old are excluded if they would be the oldest item. Costs 2 credits.

NameRequiredDescriptionDefault
uniqueIdYesInstagram handle (e.g. "natgeo"). No "@" prefix and no URL.
get_instagram_performanceAInspect

Get an Instagram creator's engagement metrics on first-page content. Returns imagesPerformanceRecent + reelsPerformanceRecent with avg/median/min/max likes, comments, and (for reels) views, plus an engagement block using (L+C)/followers and consistencyScore (0–100; bands: high 81–100, moderate 51–80, low 0–50; requires ≥6 posts). ranking block carries global/country/language percentiles. recentReelsGrowth.g7/g30/g90 shows engagement-rate trend. contentCountByDays.7d/30d/90d shows posting cadence. IG has no all-time window (YouTube-only). Costs 2 credits.

NameRequiredDescriptionDefault
uniqueIdYesInstagram handle (e.g. "natgeo"). No "@" prefix and no URL.
get_instagram_performance_historyAInspect

Get daily metric snapshots (followers, content count, first-page engagement) for an Instagram creator. Returns the histories array of timestamped snapshots over the past N days. Costs 3 credits.

NameRequiredDescriptionDefault
uniqueIdYesInstagram handle (e.g. "natgeo"). No "@" prefix and no URL.
pastDayRangeYesHow many past days of daily snapshots to return. String integer, 1–365.
get_instagram_profileAInspect

Get an Instagram creator's profile: display name, follower count, biography, isVerified/isBusinessAccount flags, country (ISO 3166-1 alpha-3), main language, linked socials (YouTube/TikTok), hashtags used, account-level categories, and the creator's AI-classified niches. To browse the full IG niche taxonomy use list_instagram_niches. Costs 2 credits.

NameRequiredDescriptionDefault
uniqueIdYesInstagram handle (e.g. "natgeo"). No "@" prefix and no URL.
get_instagram_sponsorshipAInspect

Get an Instagram creator's sponsored content grouped by brand. Returns sponsorList: [{ brandName, brandId, brandIgIds, sponsoredVideos, sponsoredVideosPerformance }]. Each sponsoredVideo carries per-item engagement (same shape as content-detail). CAVEAT: only scans the most recent ~20–30 posts AND only detects brands already indexed — an empty sponsorList is NOT proof the creator has no sponsors. Costs 5 credits.

NameRequiredDescriptionDefault
uniqueIdYesInstagram handle (e.g. "natgeo"). No "@" prefix and no URL.
get_sponsor_audienceAInspect

Aggregated audience demographics across all creators a brand has sponsored. Returns data.youtube and/or data.instagram (each may be null) with audienceLocations (top 5 countries), audienceGender (maleRatio + femaleRatio), audienceAvgAge, audienceAgeBreakdown (fixed 7 buckets: 13-17/18-24/25-34/35-44/45-54/55-64/65+). IG block is reserved but always null today — backend only aggregates YT audience. Omit platform to request both. EXPENSIVE: costs 25 credits.

NameRequiredDescriptionDefault
brandIdYesBrand ID (e.g. "acer.com").
platformNoPlatform scope. NOTE: TikTok sponsor data is not available — only YouTube and Instagram.
get_sponsor_creatorsAInspect

List creators a brand has sponsored (inverse of get_*_sponsorship). Returns each creator with displayName, country, followers, sponsoredContent[] (URLs), topics, niches, sponsoredCount, lastSponsoredDate, avgRecentSponsoredEngagementRate (cross-brand aggregate: lifetime window on Instagram, R20 window on YouTube). EXPENSIVE: costs 25 credits per page.

NameRequiredDescriptionDefault
brandIdYesBrand ID (e.g. "acer.com").
platformYesPlatform scope. NOTE: TikTok sponsor data is not available — only YouTube and Instagram.
pageSizeNoResults per page (max 100).
offsetNoNumber of records to skip for pagination.
sortByNoSort field.lastSponsoredDate
descNoSort descending (true) or ascending (false).
get_sponsor_informationAInspect

Get a single brand's full profile: name, alias[], logo, description, companySize, keyPeople[], industries[], country, location, website, socialMedia[] (with platform-tagged URLs), competitors[], totalSponsoredContent, sponsoringPlatforms. Costs 2 credits.

NameRequiredDescriptionDefault
brandIdYesBrand ID (typically the brand's primary domain, e.g. "acer.com", "nike.com").
get_sponsor_performanceAInspect

Detailed per-content sponsorship performance for a brand. Returns sponsoredCreators[] each with three stats scopes (creatorTotalStats = all content, creatorAllSponsoredStats = all sponsored content lifetime, creatorSpecificSponsoredStats = for this brand only) plus estimatedCost / estimatedCreatorCPM (YouTube-only — null for Instagram) and a content[] array with per-item views7d/30d/90d/Lifetime, likes, comments, engagementRate. EXPENSIVE: costs 25 credits per page.

NameRequiredDescriptionDefault
brandIdYesBrand ID (e.g. "acer.com").
platformYesPlatform scope. NOTE: TikTok sponsor data is not available — only YouTube and Instagram.
pageSizeNoResults per page (max 100).
offsetNoNumber of records to skip for pagination.
sortByNoSort field. Numeric sorts use per-creator averages; `views` uses viewsLifetime.publishTime
descNoSort descending (true) or ascending (false).
get_sponsor_summaryAInspect

Cross-platform sponsorship rollup for a brand. Returns data.summary with totalSponsoredCreators, totalSponsoredContent, and per-platform youtube + instagram sub-objects each carrying a creators block (sponsoredCreators, sponsoredContent30d, top-5 creatorLocationBreakdown, top-5 creatorLanguageBreakdown) and a performance block (estimatedTotalSpend 7d/30d/90d, estimatedCPM30d, estimatedCPE30d, views/likes/comments aggregates, growth30d deltas). Instagram spend/CPM/CPE always null today. EXPENSIVE: costs 25 credits.

NameRequiredDescriptionDefault
brandIdYesBrand ID (e.g. "acer.com").
get_tiktok_audienceAInspect

Get a TikTok creator's audience demographics: audienceLocations (top 6 countries with shares), audienceGender (maleRatio + femaleRatio, binary only), audienceAvgAge (integer), audienceAgeBreakdown (fixed 7 buckets: 13-17/18-24/25-34/35-44/45-54/55-64/65+). When data is missing the endpoint returns the placeholder shape (all 0.0) — treat male+female=0 as missing. Costs 10 credits.

NameRequiredDescriptionDefault
uniqueIdYesTikTok handle (e.g. "charlidamelio"). No "@" prefix and no URL.
get_tiktok_contactAInspect

Get a TikTok creator's contact email addresses (public-listed). Costs 15 credits.

NameRequiredDescriptionDefault
uniqueIdYesTikTok handle (e.g. "charlidamelio"). No "@" prefix and no URL.
get_tiktok_content_detailAInspect

Get a TikTok creator's recent videos with per-item engagement: views, likes, comments, shares, engagementRate, length (seconds), isAd, hashtags (with "#"), publishTime (Unix-ms). Each item also carries TT-only audio metadata (audioId, audioTitle, audioAuthor, audioAlbum) and isDuetEnabled — the audio block is the cheapest hook into trending-sound analysis. Content from the last 4 days is excluded from metric calculations. Pinned posts >90 days old are excluded if they would be the oldest item. Costs 2 credits.

NameRequiredDescriptionDefault
uniqueIdYesTikTok handle (e.g. "charlidamelio"). No "@" prefix and no URL.
get_tiktok_performanceAInspect

Get a TikTok creator's engagement metrics on recent videos. Returns videosPerformanceRecent with avg/median/min/max views, likes, comments, shares, plus an engagement block using (L+C+Shares)/followers and consistencyScore (0–100; bands: high 81–100, moderate 51–80, low 0–50; requires ≥6 videos). ranking block carries global/country/language percentiles. recentVideosGrowth.g7/g30/g90 shows engagement-rate trend. contentCountByDays.7d/30d/90d shows posting cadence. TikTok has no all-time window (YouTube-only). Costs 2 credits.

NameRequiredDescriptionDefault
uniqueIdYesTikTok handle (e.g. "charlidamelio"). No "@" prefix and no URL.
get_tiktok_performance_historyBInspect

Get daily metric snapshots (followers, content count, recent engagement) for a TikTok creator. Returns the histories array of timestamped snapshots over the past N days. Costs 3 credits.

NameRequiredDescriptionDefault
uniqueIdYesTikTok handle (e.g. "charlidamelio"). No "@" prefix and no URL.
pastDayRangeYesHow many past days of daily snapshots to return. String integer, 1–365.
get_tiktok_profileAInspect

Get a TikTok creator's profile: display name, follower count, biography, isVerified flag, country (ISO 3166-1 alpha-3), main language, linked socials, hashtags, and the creator's AI-classified niches. To browse the full TT niche taxonomy use list_tiktok_niches. Costs 2 credits.

NameRequiredDescriptionDefault
uniqueIdYesTikTok handle (e.g. "charlidamelio"). No "@" prefix and no URL.
get_youtube_audienceAInspect

Get a YouTube creator's audience demographics: audienceLocations (top 6 countries with shares), audienceGender (maleRatio + femaleRatio, binary only), audienceAvgAge (integer), audienceAgeBreakdown (fixed 7 buckets: 13-17/18-24/25-34/35-44/45-54/55-64/65+). When data is missing the endpoint returns the placeholder shape (all 0.0) — treat male+female=0 as missing. Costs 10 credits.

NameRequiredDescriptionDefault
channelIdYesYouTube channel ID (the immutable UC… form, e.g. "UCX6OQ3DkcsbYNE6H8uQQuVA"). "@handle", "/c/vanity", and "/user/legacy" URLs are NOT accepted here — resolve them to a UC channelId first.
get_youtube_contactAInspect

Get a YouTube creator's contact email addresses (channel "for business" + public). Costs 15 credits.

NameRequiredDescriptionDefault
channelIdYesYouTube channel ID (the immutable UC… form, e.g. "UCX6OQ3DkcsbYNE6H8uQQuVA"). "@handle", "/c/vanity", and "/user/legacy" URLs are NOT accepted here — resolve them to a UC channelId first.
get_youtube_content_detailAInspect

Get a YouTube creator's recent content (videos + shorts) with per-item engagement: views, likes, comments, length (seconds), isMemberOnly flag (filter for member-only content), hashtags (with "#"), publishTime (Unix-ms), engagementRate. Content from the last 4 days is excluded from metric calculations. Costs 3 credits.

NameRequiredDescriptionDefault
channelIdYesYouTube channel ID (the immutable UC… form, e.g. "UCX6OQ3DkcsbYNE6H8uQQuVA"). "@handle", "/c/vanity", and "/user/legacy" URLs are NOT accepted here — resolve them to a UC channelId first.
get_youtube_performanceAInspect

Get a YouTube creator's engagement metrics. Returns four sibling objects: videosPerformanceRecent + shortsPerformanceRecent (R20: last 20 of each) and videosPerformanceAll + shortsPerformanceAll (up to 800). Each has avg/median/min/max/percentile25/percentile75/iqr for likes/comments/views, plus an engagement block with (L+C+V)/subscribers and consistencyScore (0–100; bands: high 81–100, moderate 51–80, low 0–50; requires ≥6 content pieces). ranking block carries global/country/language percentiles. recentVideosGrowth.g7/g30/g90 shows engagement-rate trend. contentCountByDays.7d/30d/90d shows posting cadence. Costs 2 credits.

NameRequiredDescriptionDefault
channelIdYesYouTube channel ID (the immutable UC… form, e.g. "UCX6OQ3DkcsbYNE6H8uQQuVA"). "@handle", "/c/vanity", and "/user/legacy" URLs are NOT accepted here — resolve them to a UC channelId first.
get_youtube_performance_historyAInspect

Get daily metric snapshots (subscribers, total content count, all-time performance) for a YouTube creator. Returns the histories array of timestamped snapshots over the past N days. Costs 3 credits.

NameRequiredDescriptionDefault
channelIdYesYouTube channel ID (the immutable UC… form, e.g. "UCX6OQ3DkcsbYNE6H8uQQuVA"). "@handle", "/c/vanity", and "/user/legacy" URLs are NOT accepted here — resolve them to a UC channelId first.
pastDayRangeYesHow many past days of daily snapshots to return. String integer, 1–365.
get_youtube_profileAInspect

Get a YouTube creator's profile: display name, subscriber count, description, isVerified, country (ISO 3166-1 alpha-3), main language, linked socials, channel-level hashtags, YouTube native channel categories, AI-classified topics (coarse) and niches (granular), subscriberGrowth.g7/g30/g90 trend deltas, relatedCreators UC IDs for discovery, and sponsored videoPrice + shortsPrice blocks with low/raw/high CPM and dollar bands (YouTube-only — IG/TT do not return pricing). Use list_youtube_topics / list_youtube_niches to resolve topic/niche IDs to human names. Costs 2 credits.

NameRequiredDescriptionDefault
channelIdYesYouTube channel ID (the immutable UC… form, e.g. "UCX6OQ3DkcsbYNE6H8uQQuVA"). "@handle", "/c/vanity", and "/user/legacy" URLs are NOT accepted here — resolve them to a UC channelId first.
get_youtube_sponsorshipAInspect

Get a YouTube creator's sponsored content grouped by brand. Returns sponsorList: [{ brandName, brandId, brandIgIds, sponsoredVideos, sponsoredVideosPerformance }]. brandIgIds are the brand's Instagram handles — useful to pivot from a sponsored creator back to the brand's own IG profile. sponsoredVideos carries per-item engagement (same shape as content-detail). CAVEAT: only scans the most recent ~20–30 posts AND only detects brands already indexed in CreatorDB — an empty sponsorList is NOT proof of no sponsorships. Costs 5 credits.

NameRequiredDescriptionDefault
channelIdYesYouTube channel ID (the immutable UC… form, e.g. "UCX6OQ3DkcsbYNE6H8uQQuVA"). "@handle", "/c/vanity", and "/user/legacy" URLs are NOT accepted here — resolve them to a UC channelId first.
get_youtube_subtitles_downloadAInspect

Download the subtitle track for a specific YouTube video. Per-video — pass videoId, not channelId. Costs 3 credits per download.

NameRequiredDescriptionDefault
videoIdYesYouTube video ID (the v= value in a watch URL)
languageNoSubtitle language code (ISO 639-3, e.g. "eng", "jpn"). Defaults to the primary track.
get_youtube_subtitles_metaAInspect

List available subtitle tracks for a SINGLE YouTube video: language codes, auto-generated vs human-uploaded. Per-video, not per-channel — pass the videoId of one video at a time. Use this before calling get_youtube_subtitles_download to know what languages exist. Costs 1 credit.

NameRequiredDescriptionDefault
videoIdYesYouTube video ID (the v= value in a watch URL)
list_instagram_nichesAInspect

List the full Instagram NICHE taxonomy used by CreatorDB — every available niche with channelCount per niche (the response is large: ~10K+ entries). NICHES are granular subcategories (e.g. "love/All", "fashion/All"). To see which niches a specific creator is classified under, use get_instagram_profile and read the niches field. Per-platform: IG/YT/TT each have their own niche taxonomy — they are not interchangeable. Instagram does NOT have a "topics" taxonomy (that is YouTube-only). Takes no parameters. Costs 1 credit.

NameRequiredDescriptionDefault

No parameters

list_sponsorsAInspect

Paginated directory of every brand indexed in CreatorDB (10K+ brands). Returns brandId, name, logo, industries, country, sponsoringPlatforms (TitleCase strings: "YouTube", "Instagram"), totalSponsoredContent. Use search_sponsors when you need filtering; this is for browsing the full catalog. Costs 1 credit per page.

NameRequiredDescriptionDefault
pageSizeNoResults per page (max 100).
offsetNoNumber of records to skip for pagination.
sortByNoSort field.name
descNoSort descending (true) or ascending (false).
list_tiktok_nichesAInspect

List the full TikTok NICHE taxonomy used by CreatorDB — every available niche with channelCount per niche (the response is large: ~10K+ entries). NICHES are granular subcategories (e.g. "Capcut/All", "Dance/All"). To see which niches a specific creator is classified under, use get_tiktok_profile and read the niches field. Per-platform: TT/YT/IG each have their own niche taxonomy — they are not interchangeable. TikTok does NOT have a "topics" taxonomy (that is YouTube-only) and does NOT have a per-brand sponsorship endpoint. Takes no parameters. Costs 1 credit.

NameRequiredDescriptionDefault

No parameters

list_youtube_nichesAInspect

List the full YouTube NICHE taxonomy used by CreatorDB — every available niche (14000+ entries) with channelCount per niche. NICHES are granular subcategories (e.g. "Vlog/People Blogs", "ASMR/People Blogs"). To see which niches a specific creator is classified under, use get_youtube_profile and read the niches field. Per-platform: YT/IG/TT each have their own niche taxonomy — they are not interchangeable. Takes no parameters. Costs 1 credit.

NameRequiredDescriptionDefault

No parameters

list_youtube_topicsAInspect

List the full YouTube TOPIC taxonomy used by CreatorDB — every available topic (~470+ entries) with channelCount per topic. TOPICS are a coarse, evolving classification (e.g. "Academic", "Finance", "Health Education"). YOUTUBE-ONLY: Instagram and TikTok do not have a topic taxonomy. To see which topics a specific creator is classified under, use get_youtube_profile and read the topics field. Takes no parameters. Costs 1 credit.

NameRequiredDescriptionDefault

No parameters

search_creators_nlsAInspect

Search for creators using natural language across YouTube, Instagram, and TikTok. The AI determines the platform from your query and converts it into structured filters. Response includes creatorList AND a platform field telling you which platform was chosen. Best for exploratory queries where you don't know exact filter names — fall back to search_youtube/instagram/tiktok when you need precise control over filters. Credit cost is dynamic (token-based, typically 1–10 credits).

NameRequiredDescriptionDefault
descriptionYesNatural language search query, e.g. "Find US-based YouTube beauty creators with over 1M subscribers".
search_instagramAInspect

Search Instagram creators using structured filters. Costs 1 credit per 10 filters (max 10). Use totalFollowers (NOT totalSubscribers) for count thresholds. IG has niches but NOT topics (YouTube-only). Hashtag values need the "#" prefix to match the indexed hashTagsSearch field. Response: creatorList, totalResults, hasNextPage, nextOffset.

NameRequiredDescriptionDefault
filtersYesSearch filters (max 10). Billed at 1 credit per 10 filters.
pageSizeNoResults per page (max 100).
offsetNoNumber of records to skip for pagination.
sortByNoField to sort by (e.g. totalSubscribers, totalFollowers, avgEngagementRate).
descNoSort descending (true) or ascending (false).
search_instagram_contentAInspect

Search individual Instagram content (images, reels, slideshows) across CreatorDB's index. Different from search_instagram (which searches CREATORS) — this returns individual posts. Response includes contentList[] with contentId, contentType (slideshow|reel|video, sometimes null for legacy posts), description, thumbnail, url, publishTime (Unix-ms), isSponsored, partneredBrands[], likes/comments/engagementRate, hashtags, and a nested creator block. NO views and NO lengthSec (IG data model). Content-level filterable: postType, description (searches caption AND reel title together), hashtag, publishTime (integer "days ago" — semantic split with response field), likes, comments, engagement, isSponsored, partneredBrands, performanceLikes, performanceEngagement. Creator-level filters also supported. Costs 2 credits per page.

NameRequiredDescriptionDefault
filtersYesContent filters (1–10).
pageSizeNoResults per page (max 100).
offsetNoNumber of records to skip for pagination.
sortByNoSort field.publishTime
descNoSort descending (true) or ascending (false).
search_sponsorsAInspect

Search the CreatorDB brand index using structured filters. Returns lean brand records (brandId, name, logo, industries, country). Costs 2 credits per page. Sponsor data covers YouTube and Instagram only — TikTok is not indexed for brands.

NameRequiredDescriptionDefault
filtersNoBrand filters (max 10). Pass empty array to list unfiltered.
pageSizeNoResults per page (max 100).
offsetNoNumber of records to skip for pagination.
sortByNoSort field. One of: name, totalSponsoredContent, estimatedTotalSpend7d / 30d / 90d.
descNoSort descending (true) or ascending (false).
search_tiktokAInspect

Search TikTok creators using structured filters. Costs 1 credit per 10 filters (max 10). Use totalFollowers (NOT totalSubscribers) for count thresholds. TT has niches but NOT topics (YouTube-only). Hashtag values need the "#" prefix. Note: TikTok does not expose a per-brand sponsorship endpoint, so hasSponsors-style filtering is coarser than on YT/IG. Response: creatorList, totalResults, hasNextPage, nextOffset.

NameRequiredDescriptionDefault
filtersYesSearch filters (max 10). Billed at 1 credit per 10 filters.
pageSizeNoResults per page (max 100).
offsetNoNumber of records to skip for pagination.
sortByNoField to sort by (e.g. totalSubscribers, totalFollowers, avgEngagementRate).
descNoSort descending (true) or ascending (false).
search_tiktok_contentAInspect

Search individual TikTok content (videos) across CreatorDB's index. Different from search_tiktok (which searches CREATORS) — this returns individual posts. Response includes contentList[] with contentId, description, thumbnail, url, publishTime (Unix-ms), lengthSec, plays/likes/comments/shares/engagementRate, hashtags, audioTitle, audioAuthor, and a nested creator block. NO contentType field. NO isSponsored / partneredBrands — TikTok brand-attribution is not implemented (native isAd flag exists on get_tiktok_content_detail only). Content-level filterable: description, hashtag, publishTime (integer "days ago"), plays, diggs (request name) / likes (response name), comments, shares, engagement, lengthSec, performanceDiggs, performanceEngagement. Creator-level filters also supported. Engagement formula = (likes+comments+shares)/followers. Costs 2 credits per page.

NameRequiredDescriptionDefault
filtersYesContent filters (1–10).
pageSizeNoResults per page (max 100).
offsetNoNumber of records to skip for pagination.
sortByNoSort field.publishTime
descNoSort descending (true) or ascending (false).
search_youtubeAInspect

Search YouTube creators using structured filters. Costs 1 credit per 10 filters (max 10). Use totalSubscribers (NOT totalFollowers) for count thresholds. YT-specific filterable fields: topics (coarse ~400-theme taxonomy — IG/TT don't have it), niches (granular; also on IG/TT but derived separately). Response: creatorList, totalResults, hasNextPage, nextOffset — pass nextOffset as the next request's offset to paginate.

NameRequiredDescriptionDefault
filtersYesSearch filters (max 10). Billed at 1 credit per 10 filters.
pageSizeNoResults per page (max 100).
offsetNoNumber of records to skip for pagination.
sortByNoField to sort by (e.g. totalSubscribers, totalFollowers, avgEngagementRate).
descNoSort descending (true) or ascending (false).
search_youtube_contentAInspect

Search individual YouTube content (videos, shorts, streams) across CreatorDB's index. Different from search_youtube (which searches CREATORS) — this returns individual posts matching content-level filters. Response includes contentList[] with contentId, contentType (video|shorts|stream), title, description, thumbnail, url, publishTime (Unix-ms), lengthSec, isSponsored, partneredBrands[], views/likes/comments/engagementRate, hashtags, language, category, and a nested creator block. Plus totalResults, hasNextPage, nextOffset for pagination. Content-level filterable fields: postType, title, description (NOTE: description filter is currently deferred — returns 400), hashtag, publishTime (filter value is integer "days ago", not Unix-ms — semantic split with the response field), views, likes, comments, engagement, isSponsored, partneredBrands, lengthSec, language, category, performanceViews, performanceEngagement. Creator-level filters also supported (creatorDisplayName, country, contentTopics, contentNiches, audienceLocation, etc.). The 4-day fresh-content exclusion does NOT apply here. Costs 2 credits per page.

NameRequiredDescriptionDefault
filtersYesContent filters (1–10).
pageSizeNoResults per page (max 100).
offsetNoNumber of records to skip for pagination.
sortByNoSort field.publishTime
descNoSort descending (true) or ascending (false).
submit_sponsorAInspect

Submit a brand for indexing. Returns submissionId + status ("accepted" / "processing" / "done" / "rejected") and existingBrandId if the brand was already indexed. Costs 1 credit on acceptance, 0 on duplicate (status=done) or rejection. Rate-limited to 100 submissions/day per API key (separate from the credit pool).

NameRequiredDescriptionDefault
brandNameYesBrand name (1–100 chars).
brandUrlYesBrand website URL — must include http:// or https://.
competitorsNoOptional competitor brand names or URLs (max 10).
notesNoOptional free-form notes (≤500 chars).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 42 tool updatesv1.3.0
    • First observedget_api_usage
    • First observedget_instagram_audience
    • First observedget_instagram_contact
    • First observedget_instagram_content_detail
    • First observedget_instagram_performance
    • First observedget_instagram_performance_history
    • First observedget_instagram_profile
    • First observedget_instagram_sponsorship
    • First observedget_sponsor_audience
    • First observedget_sponsor_creators
    • First observedget_sponsor_information
    • First observedget_sponsor_performance
    • First observedget_sponsor_summary
    • First observedget_tiktok_audience
    • First observedget_tiktok_contact
    • First observedget_tiktok_content_detail
    • First observedget_tiktok_performance
    • First observedget_tiktok_performance_history
    • First observedget_tiktok_profile
    • First observedget_youtube_audience
    • First observedget_youtube_contact
    • First observedget_youtube_content_detail
    • First observedget_youtube_performance
    • First observedget_youtube_performance_history
    • First observedget_youtube_profile
    • First observedget_youtube_sponsorship
    • First observedget_youtube_subtitles_download
    • First observedget_youtube_subtitles_meta
    • First observedlist_instagram_niches
    • First observedlist_sponsors
    • First observedlist_tiktok_niches
    • First observedlist_youtube_niches
    • First observedlist_youtube_topics
    • First observedsearch_creators_nls
    • First observedsearch_instagram
    • First observedsearch_instagram_content
    • First observedsearch_sponsors
    • First observedsearch_tiktok
    • First observedsearch_tiktok_content
    • First observedsearch_youtube
    • First observedsearch_youtube_content
    • First observedsubmit_sponsor

TDQS

A3.7/5.0

Scored across 42 tools

Disambiguation4/5

The platform×action naming makes most tools easy to tell apart (profile vs performance vs content vs sponsorship). A few close pairs—search_youtube vs search_youtube_content and get_*_performance vs get_*_performance_history—could still be misselected without reading descriptions, and search_creators_nls intentionally overlaps with the structured platform searches.

Naming Consistency4/5

Snake_case verb-first naming is highly consistent: search_<platform>, get_<platform>_profile, list_*_niches, get_sponsor_*. Minor deviations like get_youtube_subtitles_download rather than download_youtube_subtitles, search_creators_nls, and the get_sponsor_information vs get_sponsor_summary pair keep it from a perfect 5.

Tool Count2/5

At 42 tools, this is far over the 25+ threshold for a 'too many' score, even though the underlying API is broad. The repetitive platform triads and separate sponsor/content surfaces create a large, potentially overwhelming toolset for agents.

Completeness4/5

Coverage is very thorough for a read-heavy creator-research domain: each platform has profile/contact/performance/history/audience/content_detail and content search, plus a full sponsor side and API usage. Minor gaps are mostly backend/platform constraints—no TikTok sponsorship endpoint, IG sponsor audience always null, YouTube description filter deferred—rather than missing tool categories.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides comprehensive influencer marketing data from Instagram, YouTube, and TikTok via the CreatorDB Headless API V3. It enables advanced creator search, profile analysis, and access to performance metrics and audience demographics.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI-native creator discovery for influencer marketing, including creator search, lookalikes, profile lookup, and Instagram post transcript analysis.
    14
    43 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude to pull exact YouTube creator stats (subscribers, views, engagement) and discover new creators, then write them into a Notion Influencers roster.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI applications with real-time, evidence-backed context on creators, audiences, brands, trends, and sponsorships, including breakout topic search and browsing tools.
    MIT