Storika MCP reference
Storika runs two MCP servers. The Rate Oracle answers questions about published creator-rate benchmarks and needs no sign-in. The Storika connector works in your Storika organization after you sign in in the browser with the account you use for Storika.
The Rate Oracle section is read from the server itself each time the site is built: the tool list, the input and output fields, the limits and every example response are what the server returns.
Rate Oracle
Published creator-rate benchmarks for AI assistants. Every answer is an aggregate from Storika's published report, with its sample size, period, caveat and source.
https://www.storika.ai/mcp- Address: https://www.storika.ai/mcp (Streamable HTTP). Clients connect with POST, one JSON-RPC message per request, accepting both application/json and text/event-stream. Answers come back as JSON. Each request stands alone, with no session to keep.
- Sign-in: none. There is no account or API key.
- Browser origins allowed: https://chatgpt.com, https://claude.ai, https://platform.openai.com, https://www.storika.ai. A client that sends no Origin header can connect too. Any other origin gets HTTP 403.
- Limit: each server instance gives every IP address a burst of 600 requests, refilled at 10 requests a second. Over it, the server answers HTTP 429 with Retry-After: 1.
- Data: the benchmark snapshot updated 2026-08-12. Published formats: reels, general, story, feed, tiktok, bundle, youtube_shorts, youtube, clean_copy, illustration. Published markets: Global creators, Korean creators. Published platform: instagram.
Rate Oracle tools
Send each call as one JSON-RPC message in a POST request to the address above. The tool's answer comes back in structuredContent, with the same JSON as text in content.
get_creator_rate_benchmark
Get creator rate benchmark. Retrieve one published creator-rate aggregate by content format, market, and optional platform.
Declares: read-only, not destructive, closed world (calls no outside service).
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| format | string | yes | not empty. Published content format, such as reels or story |
| market | string | no | not empty. Published market label |
| platform | string | no | not empty. Published platform label |
Output (structuredContent)
| Field | Type | Always present | Notes |
|---|---|---|---|
| stat | object | yes | |
| stat.median | number | yes | at least 0 |
| stat.p25 | number | yes | at least 0 |
| stat.p75 | number | yes | at least 0 |
| stat.currency | always "USD" | yes | |
| n | whole number | yes | 5 to 9,007,199,254,740,991 |
| period | string | yes | date format |
| caveat | string | yes | not empty |
| source_url | string | yes | uri format |
| retrievedAt | string | yes | date-time format |
| attribution | string | yes | not empty |
| platform | string | yes | |
| format | string | yes | |
| market | string | yes |
Example request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_creator_rate_benchmark",
"arguments": {
"format": "reels",
"market": "Korean creators"
}
}
}Example response (structuredContent)
{
"stat": {
"median": 231,
"p25": 136,
"p75": 476,
"currency": "USD"
},
"n": 215,
"period": "2026-08-12",
"caveat": "Aggregate from 215 distinct creators; actual quotes vary by audience, niche, usage rights, and timing.",
"source_url": "https://www.storika.ai/reports/creator-rate-benchmarks-2026",
"retrievedAt": "2026-10-23T13:26:59.395Z",
"attribution": "Source: Storika Creator Rate Benchmarks 2026 (https://www.storika.ai/reports/creator-rate-benchmarks-2026)",
"platform": "instagram",
"format": "reels",
"market": "Korean creators"
}compare_creator_rate_benchmarks
Compare creator rate benchmarks. Compare two published Instagram creator-rate aggregates without blending their samples.
Declares: read-only, not destructive, closed world (calls no outside service).
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| a | object | yes | |
| a.format | string | yes | not empty |
| a.market | string | yes | not empty |
| b | object | yes | |
| b.format | string | yes | not empty |
| b.market | string | yes | not empty |
Output (structuredContent)
| Field | Type | Always present | Notes |
|---|---|---|---|
| stat | object | yes | |
| stat.a | object | yes | |
| stat.a.median | number | yes | at least 0 |
| stat.a.p25 | number | yes | at least 0 |
| stat.a.p75 | number | yes | at least 0 |
| stat.a.currency | always "USD" | yes | |
| stat.b | object | yes | |
| stat.b.median | number | yes | at least 0 |
| stat.b.p25 | number | yes | at least 0 |
| stat.b.p75 | number | yes | at least 0 |
| stat.b.currency | always "USD" | yes | |
| stat.medianDifferenceUsd | number | yes | |
| stat.medianDifferencePercent | number | yes | |
| n | object | yes | |
| n.a | whole number | yes | 5 to 9,007,199,254,740,991 |
| n.b | whole number | yes | 5 to 9,007,199,254,740,991 |
| period | string | yes | date format |
| caveat | string | yes | not empty |
| source_url | string | yes | uri format |
| retrievedAt | string | yes | date-time format |
| attribution | string | yes | not empty |
| a | object | yes | |
| a.platform | string | yes | not empty |
| a.format | string | yes | not empty |
| a.market | string | yes | not empty |
| b | object | yes | |
| b.platform | string | yes | not empty |
| b.format | string | yes | not empty |
| b.market | string | yes | not empty |
Example request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "compare_creator_rate_benchmarks",
"arguments": {
"a": {
"format": "reels",
"market": "Global creators"
},
"b": {
"format": "reels",
"market": "Korean creators"
}
}
}
}Example response (structuredContent)
{
"stat": {
"a": {
"median": 1400,
"p25": 750,
"p75": 2250,
"currency": "USD"
},
"b": {
"median": 231,
"p25": 136,
"p75": 476,
"currency": "USD"
},
"medianDifferenceUsd": 1169,
"medianDifferencePercent": 506.06
},
"n": {
"a": 26,
"b": 215
},
"period": "2026-08-12",
"caveat": "Thin sample (n=26); use this aggregate as directional evidence, not a guaranteed quote. Aggregate from 215 distinct creators; actual quotes vary by audience, niche, usage rights, and timing. Samples remain separate and are not blended.",
"source_url": "https://www.storika.ai/reports/creator-rate-benchmarks-2026",
"retrievedAt": "2026-10-23T13:26:59.401Z",
"attribution": "Source: Storika Creator Rate Benchmarks 2026 (https://www.storika.ai/reports/creator-rate-benchmarks-2026)",
"a": {
"platform": "instagram",
"format": "reels",
"market": "Global creators"
},
"b": {
"platform": "instagram",
"format": "reels",
"market": "Korean creators"
}
}estimate_campaign_budget
Estimate creator campaign budget. Multiply one published per-creator rate range by a creator count to estimate a campaign budget.
Declares: read-only, not destructive, closed world (calls no outside service).
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| format | string | yes | not empty |
| market | string | yes | not empty |
| creatorCount | whole number | yes | 1 to 100,000 |
Output (structuredContent)
| Field | Type | Always present | Notes |
|---|---|---|---|
| stat | object | yes | |
| stat.median | number | yes | at least 0 |
| stat.p25 | number | yes | at least 0 |
| stat.p75 | number | yes | at least 0 |
| stat.currency | always "USD" | yes | |
| n | whole number | yes | 5 to 9,007,199,254,740,991 |
| period | string | yes | date format |
| caveat | string | yes | not empty |
| source_url | string | yes | uri format |
| retrievedAt | string | yes | date-time format |
| attribution | string | yes | not empty |
| platform | string | yes | |
| format | string | yes | |
| market | string | yes | |
| creatorCount | whole number | yes | 1 to 9,007,199,254,740,991 |
Example request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "estimate_campaign_budget",
"arguments": {
"format": "reels",
"market": "Korean creators",
"creatorCount": 10
}
}
}Example response (structuredContent)
{
"stat": {
"median": 2310,
"p25": 1360,
"p75": 4760,
"currency": "USD"
},
"n": 215,
"period": "2026-08-12",
"caveat": "Aggregate from 215 distinct creators; actual quotes vary by audience, niche, usage rights, and timing. This estimate multiplies per-creator aggregates and excludes usage rights, fees, tax, and production costs.",
"source_url": "https://www.storika.ai/reports/creator-rate-benchmarks-2026",
"retrievedAt": "2026-10-23T13:26:59.405Z",
"attribution": "Source: Storika Creator Rate Benchmarks 2026 (https://www.storika.ai/reports/creator-rate-benchmarks-2026)",
"platform": "instagram",
"format": "reels",
"market": "Korean creators",
"creatorCount": 10
}plan_creator_view_goal
Plan creators for a view goal. Divide a view goal by the published median average views of public TikTok creator profiles in one category (beauty, food or wellness) to get the number of creators it takes, rounded up. Average views are not a forecast of sponsored post delivery.
Declares: read-only, not destructive, closed world (calls no outside service).
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| viewGoal | whole number | yes | 1,000 to 1,000,000,000. Total views wanted, a whole number |
| category | one of "beauty", "food", "wellness" | yes | Creator category |
Output (structuredContent)
| Field | Type | Always present | Notes |
|---|---|---|---|
| category | string | yes | |
| benchmarkLabel | string | yes | |
| viewGoal | whole number | yes | -9,007,199,254,740,991 to 9,007,199,254,740,991 |
| creatorsAtMedian | whole number | yes | 1 to 9,007,199,254,740,991 |
| medianAverageViews | number | yes | above 0 |
| n | whole number | yes | 5 to 9,007,199,254,740,991 |
| period | string | yes | date format |
| caveat | string | yes | not empty |
| source_url | string | yes | uri format |
| methodology_url | string | yes | uri format |
| retrievedAt | string | yes | date-time format |
| attribution | string | yes | not empty |
Example request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "plan_creator_view_goal",
"arguments": {
"viewGoal": 1000000,
"category": "beauty"
}
}
}Example response (structuredContent)
{
"category": "beauty",
"benchmarkLabel": "Beauty & Personal Care",
"viewGoal": 1000000,
"creatorsAtMedian": 292,
"medianAverageViews": 3435,
"n": 8257,
"period": "2026-10-13",
"caveat": "Average views on a public profile are not a forecast of sponsored post delivery: a sponsored post can earn more or fewer views than the creator's average.",
"source_url": "https://www.storika.ai/benchmarks/category-beauty-and-personal-care",
"methodology_url": "https://www.storika.ai/benchmarks/methodology",
"retrievedAt": "2026-10-23T13:26:59.407Z",
"attribution": "Source: Storika TikTok Creator Benchmarks, Beauty & Personal Care (https://www.storika.ai/benchmarks/category-beauty-and-personal-care)"
}Rate Oracle errors
A tool error comes back as a normal result with isError set to true. Its text is CODE: message, or the MCP layer's input validation message.
| Code | Tools | Meaning | Example call | Text returned |
|---|---|---|---|---|
| AMBIGUOUS_BUCKET | get_creator_rate_benchmark | The format matches more than one published aggregate. Add the market, and the platform if needed. | get_creator_rate_benchmark {"format":"reels"} | AMBIGUOUS_BUCKET: More than one published aggregate matches; specify market and platform. |
| UNPUBLISHED_BUCKET | get_creator_rate_benchmark, compare_creator_rate_benchmarks, estimate_campaign_budget | No published aggregate matches. Use a format and market from the published values; compare_creator_rate_benchmarks and estimate_campaign_budget look only at the instagram platform. | get_creator_rate_benchmark {"format":"youtube_shorts","market":"Global creators"} | UNPUBLISHED_BUCKET: No published aggregate matches that platform, format, and market. |
| INVALID_REQUEST | get_creator_rate_benchmark, compare_creator_rate_benchmarks, estimate_campaign_budget | The format is blank. | get_creator_rate_benchmark {"format":" "} | INVALID_REQUEST: format is required |
| SUPPRESSED_BUCKET | get_creator_rate_benchmark, compare_creator_rate_benchmarks, estimate_campaign_budget | Never returned by these tools: the rate snapshot is checked before a tool runs, so a group below the 5-creator publication floor makes every request to /mcp fail with HTTP 500. | ||
| INVALID_SNAPSHOT | get_creator_rate_benchmark, compare_creator_rate_benchmarks, estimate_campaign_budget | Never returned by these tools: the rate snapshot is checked before a tool runs, so a malformed snapshot makes every request to /mcp fail with HTTP 500. | ||
| UNPUBLISHED_BUCKET | plan_creator_view_goal | The benchmark manifest has no rollup for one of the planner's categories (beauty, food, wellness). The planner checks the whole benchmark manifest on each call, so it then fails for every category; the rate tools keep working. | ||
| SUPPRESSED_BUCKET | plan_creator_view_goal | A planner category's rollup has fewer than 30 distinct creators (the larger of 5 and the manifest's minimumDistinctCreators). The planner checks the whole benchmark manifest on each call, so it then fails for every category; the rate tools keep working. | ||
| INVALID_SNAPSHOT | plan_creator_view_goal | The benchmark manifest failed validation: missing or unordered average views, a missing page slug, or an invalid or future date. The planner checks the whole benchmark manifest on each call, so it then fails for every category; the rate tools keep working. | ||
| Input validation error | get_creator_rate_benchmark, compare_creator_rate_benchmarks, estimate_campaign_budget, plan_creator_view_goal | Arguments outside the tool's input schema (a missing field, a number out of range, a value not in the list) are refused before the tool runs. | estimate_campaign_budget {"format":"reels","market":"Korean creators","creatorCount":0} | MCP error -32602: Input validation error: Invalid arguments for tool estimate_campaign_budget: Invalid input at creatorCount |
Request errors come back as an HTTP status with a JSON-RPC error body.
| HTTP status | Message | When |
|---|---|---|
| 400 | Parse error: Invalid JSON. | The body was not valid JSON. |
| 400 | Batch requests are not supported. | The body was a JSON-RPC batch. Send one message per request. |
| 403 | Origin is not allowed. | A browser sent an Origin that is not on the allowed list. |
| 405 | Method not allowed. | The URL was opened with GET (or DELETE). MCP clients connect with POST. |
| 406 | Not Acceptable: Client must accept both application/json and text/event-stream | The request did not accept both application/json and text/event-stream. |
| 415 | Unsupported Media Type: Content-Type must be application/json | The request body was not sent as application/json. |
| 429 | Rate limit exceeded. | One IP address used up its burst of 600 requests on one server instance faster than it refills (10 a second). Wait 1 second (the Retry-After header) and try again. |
| 500 | Internal server error. | The server failed, including when the rate snapshot fails its checks. Try again, then report it. |
Storika connector
The connector your assistant uses to work in your Storika organization. Find creators and set up campaigns from Claude, ChatGPT, Cursor or Grok through Storika's MCP connector. Find creators across sources with one ask, set up your brand and campaigns, send TikTok Shop invites and messages, and message creators on Meta Creator Marketplace. Nothing sends without your yes.
https://api.storika.ai/mcp- Address:
https://api.storika.ai/mcp - Every assistant uses the same address. There is no separate address for testing.
- You sign in with the account you use for Storika in the browser, so there is no API key to copy.
- Storika is added by its address as a custom connector. It is not listed in app directories yet.
- Limit: 100 requests every 60 seconds for each signed-in connection. Over it, the connector answers HTTP 429.
Ask your assistant to call whoami . It returns the Storika organization you are connected to, which is the fastest way to confirm you signed in to the right one.
After sign-in, your assistant reads the connector's current tools with tools/list. The tool set can change between versions, so an agent should fetch tools/list again at the start of each new session. The rules an agent follows once connected are in the agent setup guide.