MCP Server for Social Media Data: Claude, Cursor, VS Code
An MCP server for social media data lets Claude, Cursor and VS Code read public Instagram, TikTok, YouTube and X data. Setup, tools, costs and prompts.
By Scrape Everything team · · 12 min read
Last updated: October 21, 2026
TL;DR: An MCP server for social media data gives an AI assistant tools that fetch public profiles, posts, transcripts and search results on demand. @scrapeeverything/mcp is one: it's in the official MCP Registry, runs with one npx command in Claude Desktop, Claude Code, Cursor and VS Code, and covers 9 platforms. It only reads public data. It doesn't post, schedule or log in to your accounts.
What is an MCP server for social media data?
The Model Context Protocol is an open standard, introduced by Anthropic in November 2024, that lets an AI client call external tools through one common interface. An MCP server is a small program that publishes those tools. Each tool has a name, an input schema and a description the model reads before it decides to call anything.
A social media MCP server is an MCP server whose tools return public social data: follower counts, post stats, comments, transcripts, search results.
You need one because a model can't know what an account looks like this week. Ask Claude for a creator's follower count and you get a refusal or a stale number. With the server installed, the model calls tiktok_profile with username: "example_user", gets JSON with follower_count, like_count and video_count, and works from that.
Scrape Everything is a REST API for public social media data, returned as clean JSON. It covers Instagram, TikTok, X, YouTube, Facebook, Telegram, Spotify, Pinterest and Twitch. It does not cover LinkedIn, Reddit or Threads. The MCP server is a thin, MIT-licensed wrapper around the API, published on npm as @scrapeeverything/mcp and in the official MCP Registry as io.github.scrapeeverything/mcp.
Which kind of social media MCP server do I need?
Search results for this topic mix two products: servers that read data and servers that publish posts to your own accounts. Pick the right one first.
| Your job | What to use |
|---|---|
| Read public profiles, posts, comments and transcripts on the 9 platforms above | @scrapeeverything/mcp (this post) |
| Read LinkedIn, Reddit or Threads data | Not us. ScrapeCreators covers them and lists an MCP server (as of October 22, 2026; offers may change). See the ScrapeCreators comparison. |
| Publish or schedule posts from Claude | Your scheduling tool's own MCP server. A read-only data server can't post. |
| Insights for accounts you own (reach, impressions, DMs) | The platform's official API with OAuth, for example Meta's Instagram Platform, which requires a professional account |
| Scrape sites beyond social media | A general scraping platform such as Apify, which also offers an MCP server (see Apify's MCP docs) |
The rest of this post is about the first row.
How do I install the MCP server in Claude Desktop and Claude Code?
You need Node.js 18 or newer and an API key (ssk_live_...).
- Sign in at /login with Google or GitHub. New accounts get 100 free credits, no payment details needed.
- Create a key on the dashboard's API keys page.
- Add the server to your client (configs below).
- Restart the client and ask for something that needs live data.
Claude Code (one line)
claude mcp add scrapeeverything -e SCRAPEEVERYTHING_API_KEY=ssk_live_... -- npx -y @scrapeeverything/mcpThat registers the server with the key as an environment variable. The Claude Code MCP docs explain project and user scopes.
Claude Desktop
Open Settings, then Developer, then Edit Config. That opens claude_desktop_config.json. Add:
{
"mcpServers": {
"scrapeeverything": {
"command": "npx",
"args": ["-y", "@scrapeeverything/mcp"],
"env": { "SCRAPEEVERYTHING_API_KEY": "ssk_live_..." }
}
}
}On Windows, Claude Desktop sometimes can't find npx and the server shows as failed. Switch to "command": "cmd" with "args": ["/c", "npx", "-y", "@scrapeeverything/mcp"] and restart.
How do I check the server is connected?
In Claude Code, run claude mcp list in your terminal, or type /mcp inside a session to see the server and its status. In Claude Desktop, the tools appear in the chat's tools menu after a restart.
If the client's logs don't help, run the server under the MCP Inspector and call tools by hand:
npx @modelcontextprotocol/inspector -e SCRAPEEVERYTHING_API_KEY=ssk_live_... -- npx -y @scrapeeverything/mcpCall get_account first. It's free, and a returned balance means the key works.
How do I add a social media MCP server to Cursor and VS Code?
Cursor
Cursor reads the same mcpServers block. Put it in ~/.cursor/mcp.json for every project, or .cursor/mcp.json for one repo, and add a per-project file to .gitignore so the key isn't committed.
Windsurf works the same way, with the file at ~/.codeium/windsurf/mcp_config.json.
VS Code (GitHub Copilot agent mode)
VS Code has a nicer option: an inputs block that prompts for the key once and stores it, so the key never sits in the JSON file. Add this to .vscode/mcp.json:
{
"inputs": [
{ "type": "promptString", "id": "scrapeeverything-key", "description": "Scrape Everything API key", "password": true }
],
"servers": {
"scrapeeverything": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@scrapeeverything/mcp"],
"env": { "SCRAPEEVERYTHING_API_KEY": "${input:scrapeeverything-key}" }
}
}
}With "password": true the input is masked and stored securely after the first prompt. This is the setup I'd pick for a shared repo: the file holds no secret, so it's safe to commit. The VS Code MCP configuration reference documents the inputs format.
Can I use it with ChatGPT or another remote MCP client?
Only if you host it. The configs above use the stdio transport, where the client starts the server as a local process. Clients that connect over the network need the Streamable HTTP transport, and the package has a self-hosted mode for it:
SCRAPEEVERYTHING_API_KEY=ssk_live_... npx -y @scrapeeverything/mcp --http --port 3333
# MCP endpoint: http://127.0.0.1:3333/mcp health: /healthThere's no hosted endpoint in the package. HTTP mode binds to 127.0.0.1 and refuses any other address unless you set SCRAPEEVERYTHING_MCP_AUTH_TOKEN. For a public URL, put it behind a TLS reverse proxy; each client then sends its own key in x-api-key.
What tools does the social media MCP server add?
At startup the server reads the live catalog from GET /v1/scrapers and registers one tool per endpoint. As of October 2026 that's 40 scraper tools plus two free helpers, get_account and list_scrapers. New endpoints appear on the next start with no package update, and a bundled snapshot covers the case where the catalog can't be fetched.
Five that cover most first questions, with costs from the catalog:
| Tool | Credits | Input | What comes back |
|---|---|---|---|
instagram_profile | 1 | username (handle or profile URL) | bio, follower_count, following_count, post_count, is_verified, is_private |
tiktok_profile | 1 | username | follower_count, following_count, like_count, video_count, region, created_at |
youtube_transcript | 1 | url or id, optional lang | timed segments, joined text, language, available_languages |
youtube_search | 1 | query, optional type, sort, upload_date, limit (1 to 50) | results with title, view_count, duration_seconds, channel |
x_post | 1 | url or id | text, author_username, like_count, retweet_count, reply_count |
get_account | 0 | none | email, plan, credits, rate and concurrency limits |
list_scrapers | 0 | optional platform | every endpoint with its cost and inputs |
Every tool description states the credit cost and response fields, so the model reads "Cost: 1 credit per successful call" before calling. The full list, including 2 and 3 credit tools like instagram_reels_search, is in the scrapers catalog.
Some endpoints take one of several inputs, like url or id. Several clients reject a top-level anyOf in tool schemas, Anthropic's API among them, so by default the server puts the rule in the description and checks it locally. A call that breaks it fails on your machine and spends nothing. If your client handles anyOf, set SCRAPEEVERYTHING_MCP_SCHEMA_ANYOF=1.
Will 42 tools crowd my client's context?
They take up room. Every tool's schema and description is sent to the model, and version 0.1.0 can't load just one platform's tools. If that hurts, move the workflow you repeat to Agent Skills.
Results are capped at 100,000 characters by default, with a note telling the model to use a smaller limit. Raise it with SCRAPEEVERYTHING_MCP_MAX_CHARS if long transcripts get cut.
What does a TikTok MCP server session look like?
Here's the first example prompt from our MCP integration page, traced through with a placeholder handle. The values are made up; the tool name, arguments and fields are real.
Prompt:
Get the TikTok profile of @example_user and tell me the likes per video.
The model makes one tool call:
{ "name": "tiktok_profile", "arguments": { "username": "example_user" } }The tool returns JSON text (trimmed):
{
"username": "example_user",
"full_name": "Example User",
"is_verified": false,
"follower_count": 48213,
"following_count": 185,
"like_count": 1290000,
"video_count": 312,
"region": "US"
}And it answers: "example_user has 1,290,000 total likes across 312 videos, about 4,135 likes per video." Cost: 1 credit.
"Likes per video" isn't a field anywhere. The API returns the two numbers and the model does the division, which is the right split of work.
Two more that work as-is:
- "Compare the Instagram follower counts of @nasa and @natgeo."
- "Find the top 10 YouTube videos about zone 2 training and list their view counts." Ask what they say and the model chains
youtube_transcripton each hit: 11 credits in total.
Get 100 free credits and run the first prompt on a creator you actually follow.
How much does an AI agent session cost?
Pricing is one-time credit packs. Credits never expire. Payment is crypto only (USDT, BTC, ETH and more) through the 2328 crypto checkout.
| Pack | Price | Credits | Cost per 1,000 one-credit calls |
|---|---|---|---|
| Builder | $39 | 25,000 | $1.56 |
| Growth | $119 | 100,000 | $1.19 |
| Scale | $449 | 500,000 | $0.90 |
What that means for real sessions, at Builder prices:
- Comparing 20 creators' TikTok profiles: 20 credits, about 3 cents.
- One YouTube search plus 10 transcripts: 11 credits, under 2 cents.
- The 100 free credits cover about nine of those transcript sessions.
The pricing calculator turns a monthly call count into a pack. Rate limits: free accounts can send 60 requests per minute with 5 at the same time, and purchases totaling $39 or more (any single pack) raise that to 300 per minute and 20 concurrent. Details are in the rate limits docs.
What gets charged?
From the credits docs:
| Outcome | Charged? |
|---|---|
| Data returned (200) | Yes |
Definitive 404: NOT_FOUND, PRIVATE_ACCOUNT, AGE_RESTRICTED | Yes |
| Invalid input, missing key (400, 401) | No |
| Out of credits or rate limited (402, 429) | No |
| Blocked by the platform, timeouts, server errors (5xx) | No, refunded automatically |
| Served from your cache | No |
The footnote: a username that doesn't exist is a completed lookup, so it's billed. An agent that retries dead handles pays every time, so tell it not to retry a NOT_FOUND. The server itself never retries; on RATE_LIMITED it hands the Retry-After wait back to the model.
Habits that keep bills small:
- Ask for small limits. The server already nudges the model toward small
limitvalues, but "top 5" in your prompt beats hoping. - Start long tasks with "check my credits first".
get_accountcosts 0. - Use
cache_daysfor repeat reads outside the chat. Per the caching docs, successful requests are cached for 14 days, visible only to your account. Addcache_days(1 to 14) and a young enough result comes back for 0 credits.
Caveat: in version 0.1.0 the tool schemas reject extra properties, so the model can't pass cache_days mid-chat. Send it to the HTTP API directly:
curl -X POST https://api.scrapeeverything.com/v1/instagram/profile \
-H "Authorization: Bearer $SCRAPEEVERYTHING_API_KEY" \
-H "Content-Type: application/json" \
-d '{"username": "example_user", "cache_days": 3}'A cache hit comes back with meta.cached: true and meta.credits_charged: 0.
For a scheduled job that reads the same data, Python works the same way:
import os
import requests
resp = requests.post(
"https://api.scrapeeverything.com/v1/youtube/search",
headers={"Authorization": f"Bearer {os.environ['SCRAPEEVERYTHING_API_KEY']}"},
json={"query": "zone 2 training", "type": "video", "limit": 10, "cache_days": 1},
timeout=60,
)
resp.raise_for_status()
body = resp.json()
for item in body["data"]["results"]:
print(item["view_count"], item["title"], item["link"])
print("charged:", body["meta"]["credits_charged"], "left:", body["meta"]["credits_remaining"])Each result carries video_id, link, title, channel, view_count, published_text and duration_seconds. One gotcha: sort: "popularity" is YouTube's ranking, not strict view order, so sort it yourself if order matters.
MCP vs Agent Skills vs CLI: which should you use?
All three use the same API key, the same SCRAPEEVERYTHING_API_KEY variable and the same credit balance. They differ in who's driving.
| MCP server | Agent Skills | CLI | |
|---|---|---|---|
| Install | npx -y @scrapeeverything/mcp in the client config | npx skills add scrapeeverything/skills | npx scrapeeverything |
| Runs in | Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, any MCP client | Claude Code, Cursor, Codex, Gemini CLI | your terminal, shell scripts, cron |
| Best for | Ad-hoc questions in chat | Repeatable workflows (influencer vetting, competitor audits, transcript notes) | Scripts and pipes into jq |
| Who picks the endpoint | The model | The skill's instructions | You |
My take: start with MCP, the fastest way to learn whether the data answers your question. If you type the same five-step prompt every Monday, that's a skill, and the Agent Skills page has eleven. When nobody needs to chat, use the CLI: se youtube videos --username example_user --limit 5 | jq '.videos[].title'.
Is it safe to give an AI assistant a social media API key?
Keep the key in an environment variable, never in a prompt and never in a URL. The API rejects keys sent in the URL with 400 API_KEY_IN_URL, because URLs end up in logs.
- In VS Code, use the
inputsprompt so the key isn't in a committed file. - The API refuses browser requests. If your agent runs in a web front end, route calls through your own backend.
- Self-hosted HTTP mode stays on loopback unless you set an auth token, so it can't become an open proxy for your key.
- The server sends no telemetry. Its only network calls go to the Scrape Everything API, as stated in the server's README.
It's public data only: no logins, no private accounts, and no affiliation with any platform. Public doesn't mean anything goes, though. Store personal data about people and privacy law applies to you. Our post on whether scraping public social media data is legal lists the questions to ask, and the security page covers how keys and data are handled.
Try it
The quickest test costs nothing: the Claude Code one-liner, then "How many credits do I have left?". Per-client steps are in the MCP and CLI quickstart, and the AI agents use case shows a full research loop.
FAQ
What is the best MCP server for social media data?
Depends on the platforms. @scrapeeverything/mcp covers 9 (Instagram, TikTok, X, YouTube, Facebook, Telegram, Spotify, Pinterest and Twitch) from one server and one key. It's in the official MCP Registry and MIT licensed. For LinkedIn, Reddit or Threads, which we don't cover, ScrapeCreators lists an MCP server (as of October 22, 2026; offers may change); see the ScrapeCreators comparison.
Can the MCP server post to Instagram or TikTok?
No. Every tool reads public data, and the server never logs in to an account. To publish or schedule posts from Claude, use your scheduling tool's own MCP server.
Can I use it with ChatGPT?
Not out of the box. The package runs as a local stdio process. For a client that only connects to remote servers, self-host the Streamable HTTP mode behind TLS with SCRAPEEVERYTHING_MCP_AUTH_TOKEN set.
Is there an Instagram MCP server that works without logging in?
Yes. The instagram_profile, instagram_post, instagram_reels and instagram_comments tools need no Instagram login and no Meta app review. A private profile returns only its public fields. More in our guide to scraping Instagram profiles with an API.
Can Claude read YouTube transcripts through MCP?
It can. The youtube_transcript tool takes a video URL or ID and returns timed segments plus the joined text for 1 credit. A video with no captions, or none in the language you asked for, returns 404 NO_TRANSCRIPT, and the error message lists the language codes that do exist. Language selection is in the YouTube transcript API post. TikTok has tiktok_transcript, and the TikTok scraper API post covers the rest of TikTok.