SocialRouter MCP Server
OfficialThe SocialRouter MCP Server enables LLM agents to extract social media data and run query-driven searches through a unified API, along with account management.
Extract social media data (
extract): Pull data from supported platforms (LinkedIn, Instagram, X, Reddit, Facebook, TikTok, YouTube, Pinterest, Bluesky, Snapchat, Google Maps) via single or batch URLs, with configurable result limits and explicit provider selection or automatic routing. Supported extraction types include:post.likes– Users who liked a postpost.comments– Comments on a postprofile.info– Profile informationprofile.posts– Posts from a profileprofile.followers– Followers of a profile
Perform query-driven searches: Conduct searches (e.g., Google Maps place searches) with per-query record limits and optional provider fallback.
List available providers (
list_providers): View all data extraction providers and their operational status.Get provider details: Access detailed information and pricing for a specific provider.
Retrieve past results (
get_extraction): Fetch results of a previously performed extraction or search by its unique ID.Check credit balance (
get_balance): Monitor your SocialRouter account's current credit balance.View usage summary: Get a breakdown of data usage by provider and platform.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SocialRouter MCP Serverextract profile info for https://linkedin.com/in/janedoe"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SocialRouter MCP Server
An MCP server that exposes the SocialRouter API to LLM agents. Plug it into Claude Desktop, Claude Code, Cursor, or any MCP-compatible client to let the agent fetch social media data through a single unified API.
Supported platforms include LinkedIn, Instagram, X, Reddit, Facebook, TikTok, YouTube, Pinterest, Bluesky, Snapchat, and Google Maps.
Configuration
Get an API key at socialrouter.io, then wire the server into your client. Step-by-step guides, with the config paths and the verification step for each host:
Client | Guide |
Claude Code | |
Claude Desktop | |
Cursor | |
Codex CLI | |
VS Code | |
Gemini CLI | |
Anything else |
Claude Code
claude mcp add socialrouter --scope user \
--env SOCIALROUTER_API_KEY=sr_live_xxxxxxxxxxxxx \
-- npx -y @socialrouter/mcpClaude Desktop
Open the Claude menu in the system menu bar → Settings… → Developer
→ Edit Config. That opens (or creates) claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"socialrouter": {
"command": "npx",
"args": ["-y", "@socialrouter/mcp"],
"env": {
"SOCIALROUTER_API_KEY": "sr_live_xxxxxxxxxxxxx"
}
}
}
}Quit Claude Desktop completely and reopen it, then check the + button in the chat box → Connectors → Manage connectors.
Cursor
Add the same mcpServers block to ~/.cursor/mcp.json (or .cursor/mcp.json
in a project), then enable the server from Cursor's MCP settings.
Related MCP server: @b2b-saas-inc/olli-mcp-server
How it works
The server is a thin, stateless wrapper over the API, built around services
of the form <platform>/<service> (e.g. linkedin/profile.info,
reddit/subreddit.posts). The agent discovers what exists with
list_services, then calls run with the chosen service and its inputs. The
MCP does no URL detection and no routing — picking the right service is the
agent's job, and the catalog gives it everything it needs: the input kind
(URLs or free-text queries), the accepted URL shapes with concrete examples,
the typed options, and the offers behind the service with their price and
batch cap.
Which offer serves a run (apify/harshmaur, brightdata/reddit…) is the
router's call: it walks the failover chain, cheapest first, and the response's
served_by says which one answered. An agent can pin one with provider, but
pinning disables failover — omitting it is the better default.
Every call is validated against the live catalog (GET /v1/services)
before the request is sent:
the
serviceparameter is an enum of the services live at startup, so the agent cannot invent one;at call time the service is re-checked against the refreshed catalog (5-minute TTL), the batch size against the relevant cap (the pinned offer's, or the largest in the chain), and a pinned offer against the ones that actually serve that service;
validation failures return corrective errors listing the valid alternatives instead of a bare 4xx.
The catalog is fetched once at startup — if it cannot be loaded the server exits, since an unreachable catalog means the API itself is unreachable — and refreshed lazily afterwards; if a refresh fails, the last known catalog keeps being served.
Tools
Tool | Description |
| One row per live |
| Run a service over one or more inputs (URLs or queries, per the service's input kind). |
| Retrieve a past run by ID. |
| Credit balance + usage summary (by offer and platform) over the last N days. |
run parameters
Param | Description |
| Required. |
| Required. URLs (url-kind services) or search queries (query-kind services), all for the service's platform. |
| Optional, advanced. Pin one offer, e.g. |
| Optional. Max records to return (default 100, max 250). |
| Optional. Typed options declared by the service (see |
Typical flow
list_serviceswithplatform: "linkedin"→ see what LinkedIn data is available, in what shape, and at what price.runwithservice: "linkedin/profile.info"andinputs: ["https://www.linkedin.com/in/..."].Read
served_byin the result to know which offer answered.
Environment Variables
Variable | Required | Default |
| yes | — |
| no |
|
Create a key at socialrouter.io/dashboard/keys. If the key is missing, invalid or revoked, the server says so and points there — at startup on stderr, and in the tool result if the key is rejected while running.
License
MIT
Available Tools
4 toolsextractExtract social dataA
Extract data from a social media URL (LinkedIn, Instagram, X, Reddit). Pick the extraction type matching the URL kind.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The full URL of the social media content | |
| type | Yes | What to extract from the URL | |
| limit | No | Maximum number of results to return (default 100) | |
| provider | No | Optional provider override (e.g. 'lobstr', 'apify'). Omit to let SocialRouter route automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It briefly mentions extraction types and provider override but lacks disclosure of behavioral aspects like rate limits, authentication requirements, error handling, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence front-loaded with the tool's purpose. Every word is necessary; no redundancy. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description covers core action and parameter usage but omits details on error behavior, pagination, and rate limits. With no output schema and no annotations, more context would be beneficial for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds meaningful context beyond the schema: guiding selection of 'type' based on URL kind, and explaining the 'provider' parameter's automatic routing behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'extract', resource 'social media data from a social media URL', and lists supported platforms (LinkedIn, Instagram, X, Reddit). Distinct from sibling tools which handle balance, extraction status, and provider listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage by instructing to 'Pick the extraction type matching the URL kind' but does not provide explicit when-to-use or when-not-to-use guidance, nor contrasts with siblings. No exclusionary criteria are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceGet balanceA
Check your SocialRouter credit balance
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description honestly indicates a read operation ('check'), but does not disclose return format or potential costs, though still adequate for a trivial tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no unnecessary words; highly concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple balance check with no parameters or output schema, the description provides sufficient context about the action and resource, though could hint at return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%; baseline score of 3 applies as description adds no parameter info, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('check') and the resource ('SocialRouter credit balance'), and distinguishes from sibling tools which are about extraction and providers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs. alternatives, but the simple context and distinct sibling names imply its use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_extractionGet extractionA
Get the result of a previous extraction by its ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The extraction ID (e.g., ext_abc123) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. States it is a read operation without side effects, but lacks details on potential states (e.g., extraction still processing), authentication needs, or rate limits. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 10 words with no redundant information. Front-loaded with verb and resource. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with one parameter and no output schema, the description is sufficient. It explains what the tool does and what input is needed. Could mention the return value but is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the parameter. The description adds no new meaning beyond 'by its ID', which is redundant. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'get', the resource 'result of a previous extraction', and the method 'by its ID'. Distinguishes from siblings like 'extract' (which likely creates an extraction) and 'get_balance' (unrelated).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the tool is used after an extraction has been created (by referencing 'previous extraction'). Provides clear context but does not explicitly state when not to use it or name alternatives like 'extract'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_providersList providersB
List all available data extraction providers and their status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It implies a read-only listing but does not explicitly state safety, side effects, or limitations like rate limits. Minimal behavioral context is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence. It is front-loaded but could provide slightly more detail about 'status' without adding verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations or output schema, the description adequately explains the tool's purpose. However, it lacks detail on output format and fails to guide the agent on how to interpret results, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage. The description adds no parameter information beyond the schema, which is sufficient. Baseline of 4 for zero parameters applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all available data extraction providers and their status, with a specific verb and resource. It distinguishes itself from sibling tools (extract, get_balance, get_extraction) by indicating it is a listing operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention context, prerequisites, or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
extract - First observed
get_balance - First observed
get_extraction - First observed
list_providers
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: extract performs extraction, get_balance checks credits, get_extraction retrieves past results, and list_providers shows available providers. No overlap or ambiguity.
All tool names follow a consistent verb_noun pattern with lowercase and underscores (extract, get_balance, get_extraction, list_providers). No mixing of conventions.
Four tools are well-scoped for a focused data extraction service. The count is neither too few to be useful nor too many to manage, covering core operations efficiently.
The tool surface covers extraction, result retrieval, provider listing, and balance checking. Minor gaps exist (e.g., no cancellation or batch retrieval), but core workflows are supported.
Maintenance
Related MCP Connectors
Give your agent live data from Twitter, Reddit, the web and GitHub. No API keys, no scraping stack.
Real-time LinkedIn, X (Twitter) and Reddit data for AI agents. Free key, self-minted, no signup.
Post, schedule, and track social posts on X, Bluesky, LinkedIn, Instagram and more from AI agents.
Twitter/X, Instagram, Reddit & TikTok data for AI agents. Billions of posts. No API keys.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables LLMs and agents to interact with LinkedIn's REST API for managing profiles, creating posts, viewing connections, and overseeing organizations.52-
- AlicenseCqualityDmaintenanceLets LLMs manage social media presence via olli.social API, with tools for campaigns, drafts, analytics, and more.1008 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to create, schedule, and manage social media posts across 10 platforms via a unified API.-
- AlicenseBqualityBmaintenanceEnables AI assistants to access structured public web data (profiles, posts, videos, etc.) from social networks and directories via natural language, by forwarding tool calls to the scraper-api.com API.846 npmMIT