Simplified Social Media
Schedule, queue, and draft social media posts, and retrieve analytics across 10 platforms using Simplified.com.
MCP Server
This skill requires a connection to the Simplified Social Media MCP server at https://mcp.simplified.com/social-media/mcp.
All tools (getSocialMediaAccounts, createSocialMediaPost, getSocialMediaAnalyticsRange, etc.) are provided by this remote MCP server — they are not built-in tools. You must configure the MCP server before using any functionality.
MCP server config (add to .mcp.json or equivalent):
{
"mcpServers": {
"simplified-social-media": {
"transport": "http",
"url": "https://mcp.simplified.com/social-media/mcp",
"headers": {
"Authorization": "Api-Key ${SIMPLIFIED_API_KEY}"
}
}
}
}
For Claude Code specifically, use
"type": "http"instead of"transport": "http".
IMPORTANT: Before Any Operation
Always check if SIMPLIFIED_API_KEY is configured before attempting any tool calls.
If the user tries to use any social media feature and the API key is missing or returns a 401/Unauthorized error:
-
Stop immediately — do not retry the failed call
-
Inform the user with this exact message:
Simplified Social Media requires an API key to work.
Please follow these steps:
- Sign up or log in at simplified.com
- Go to Settings → API Keys and copy your API key
- Add to your shell config (
~/.zshrcor~/.bashrc):export SIMPLIFIED_API_KEY="your-api-key" - Reload your shell:
source ~/.zshrc - Restart Claude Code to pick up the new variable
-
Do not proceed with the original request until the user confirms the key is set
Setup
- Sign up at simplified.com
- Connect your social media accounts in the Simplified dashboard
- Get your API key from Settings → API Keys
- Set environment variable:
export SIMPLIFIED_API_KEY="your-api-key" - Configure the MCP server — see the MCP Server section above for the config block
- Restart your AI tool to load the MCP server
Core Workflow
Always follow this sequence: Discover → Select → Compose → Publish
Step 1: Discover Accounts
Call getSocialMediaAccounts to list connected accounts. Optionally filter by network.
getSocialMediaAccounts({ network: "instagram" })
Returns { accounts: [...] } where each account has id (integer) and name and type (see type values below).
If getSocialMediaAccounts returns an empty list, stop and inform the user with this message:
No social media accounts connected yet.
You're one step away from managing your entire social media presence without leaving your editor. Connect your accounts in the Simplified dashboard and you'll be able to:
- 📅 Schedule and publish posts to Facebook, Instagram, TikTok, YouTube, LinkedIn, Pinterest, Threads, Bluesky and Google Business — with a single command
- 📊 Pull analytics, track reach, engagement and follower growth across all platforms
- 🤖 Let your AI agent run full social media campaigns autonomously
Takes 2 minutes to connect. No code required.
Step 2: Select Target Accounts
Pick one or more account_ids from the results. You can post to multiple accounts in a single call.
Step 3: Compose the Post
Build the post payload:
message(required) — the post text, max 5000 charsaccount_ids(required) — array of target account IDsaction(required) —schedule,add_to_queue, ordraftdate— required forschedule, format:YYYY-MM-DD HH:MMmedia— array of public URLs (images/videos), max 10additional— platform-specific settings (see below)
Step 4: Publish
Call createSocialMediaPost with the composed payload.
Choosing the Right Analytics Tool
| User asks about... | Tool to call |
|---|---|
| Trends over time, charts, metric growth/decline | getSocialMediaAnalyticsRange |
| Specific posts, best/worst performing content | getSocialMediaAnalyticsPosts |
| Account overview, KPIs, period summary | getSocialMediaAnalyticsAggregated |
| Demographics, follower origins, age/gender breakdown | getSocialMediaAnalyticsAudience |
| "Show me analytics" with no further context | Call getSocialMediaAnalyticsAggregated + getSocialMediaAnalyticsRange with key metrics — this gives the best general overview |
Tool Reference
getSocialMediaAccounts
| Parameter | Type | Required | Description |
|---|---|---|---|
network | string | No | Filter by platform (see networks) |
Networks (filter parameter): facebook, instagram, linkedin, tiktok, youtube, pinterest, threads, google, bluesky, tiktokBusiness
Returns { accounts: [...] }. Each account object:
| Field | Type | Description |
|---|---|---|
id | integer | Account ID — use for all analytics calls; convert to string for account_ids in createSocialMediaPost |
name | string | Account display name |
type | string | Account type — see values below |
type values and their meaning:
type value | Platform | Notes |
|---|---|---|
Facebook page | — | |
Instagram business / Instagram profile | — | |
Youtube account | YouTube | — |
TikTok profile | TikTok Personal | use tiktok metrics set |
TikTok profile (business) | TikTok Business | use tiktokBusiness metrics set |
LinkedIn company | use LinkedIn Company metrics set | |
LinkedIn profile | use LinkedIn Personal metrics set | |
Pinterest board | — | |
Threads account | Threads | — |
Bluesky account | Bluesky | — |
Google Profile | Google Business | — |
createSocialMediaPost
| Parameter | Type | Required | Description |
|---|---|---|---|
message | string | Yes | Post text (max 5000 chars) |
account_ids | string[] | Yes | Target account IDs |
action | string | Yes | schedule, add_to_queue, or draft |
date | string | No | Schedule datetime: YYYY-MM-DD HH:MM |
media | string[] | No | Public media URLs (max 10) |
additional | object | No | Platform-specific settings |
getSocialMediaAnalyticsRange
Retrieves time-series data for selected metrics within a date range.
| Parameter | Type | Required | Description |
|---|---|---|---|
account_id | integer | Yes | Social media account ID (from getSocialMediaAccounts) |
metrics | string[] | Yes | List of metrics to retrieve (see references/ANALYTICS_GUIDE.md) |
date_from | string | Yes | Start date: YYYY-MM-DD |
date_to | string | Yes | End date: YYYY-MM-DD |
tz | string | No | Timezone, e.g. UTC, Europe/Warsaw (default: UTC) |
Returns a structured object:
data— array of{ date, metrics: AnalyticsMetric[] }— per-day time-seriesbaseLine—{ [metricId]: AnalyticsMetric }— aggregated totals for the full period, each withvalue(current) andprevValue(equivalent previous period)additional—{ [metricId]: AnalyticsMetric[] }— extra metrics computed over different windows (e.g., 28-day reach)
Unknown metrics are silently ignored. See references/ANALYTICS_GUIDE.md for the full metric list, default metrics per network, and response examples.
getSocialMediaAnalyticsPosts
Retrieves analytics for individual posts within a date range.
| Parameter | Type | Required | Description |
|---|---|---|---|
account_id | integer | Yes | Social media account ID |
date_from | string | Yes | Start date: YYYY-MM-DD |
date_to | string | Yes | End date: YYYY-MM-DD |
page | integer | No | Page number (default: 1, minimum: 1) |
per_page | integer | No | Posts per page (default: 10, max: 100) |
Returns paginated post list with per-post metrics (likes, impressions, etc.). Fields include all_posts_count, current_page, pages_count, and posts array with id, message, publishedDate, postUrl, postType, media, and metrics.
Pagination: To fetch all posts, use per_page: 100 to minimize API calls, start with page: 1 and keep incrementing until current_page >= pages_count. Stop when there are no more pages or posts is empty.
getSocialMediaAnalyticsAggregated
Retrieves aggregated analytics (totals and averages) for an account within a date range.
| Parameter | Type | Required | Description |
|---|---|---|---|
account_id | integer | Yes | Social media account ID |
date_from | string | Yes | Start date: YYYY-MM-DD |
date_to | string | Yes | End date: YYYY-MM-DD |
Returns data (daily metrics array) and baseLine with four aggregated KPIs: impressions_aggregated, engagement_aggregated, followers_aggregated, publishing_aggregated. Each KPI includes value (current period) and prevValue (previous period for comparison).
getSocialMediaAnalyticsAudience
Retrieves audience demographics and follower data for an account.
| Parameter | Type | Required | Description |
|---|---|---|---|
account_id | integer | Yes | Social media account ID |
date_from | string | Yes | Start date: YYYY-MM-DD |
date_to | string | Yes | End date: YYYY-MM-DD |
tz | string | No | Timezone, e.g. UTC, Europe/Warsaw |
Returns audience breakdown: audience_page_fans_gender_age (age/gender split), audience_page_fans_country (followers by country code), audience_page_fans_city (followers by city). Not all fields are available for every network.
Action Types
| Action | When to Use | date Required? |
|---|---|---|
schedule | Post at a specific date/time | Yes |
add_to_queue | Add to the account's auto-schedule queue | No |
draft | Save for later editing in the Simplified dashboard | No |
Default: When the user doesn't specify timing, use add_to_queue. When they give a date/time, use schedule. When they say "save" or "draft", use draft.
Platform Settings Quick Reference
All platform settings go inside the additional object, grouped by platform name. Bold = required. For full details see references/PLATFORM_GUIDE.md.
| Platform | Required additionals | Optional additionals |
|---|---|---|
postType | — | |
postType, channel | postReel (reel only) | |
| TikTok | postType, channel, post | postPhoto (photo only) |
| TikTok Biz | postType, post | postPhoto (photo only) |
| YouTube | postType, post | — |
audience | — | |
post | — | |
| Threads | channel | — |
post | — | |
| Bluesky | — | — |
Key enum values:
| Platform | Field | Values |
|---|---|---|
postType.value | post*, reel, story | |
postType.value | post*, reel, story | |
channel.value | direct*, reminder | |
| TikTok | postType.value | video*, photo |
| TikTok | channel.value | direct*, reminder |
| TikTok | post.privacyStatus | PUBLIC_TO_EVERYONE*, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY |
| YouTube | postType.value | video*, short |
| YouTube | post.privacyStatus | "", public, private, unlisted |
audience.value | PUBLIC*, CONNECTIONS, LOGGED_IN | |
| Threads | channel.value | direct*, reminder |
post.topicType | STANDARD*, EVENT, OFFER |
* = default
Example Workflows
Simple Queue Post
1. getSocialMediaAccounts({ network: "instagram" })
2. createSocialMediaPost({
message: "Check out our new feature! 🚀",
account_ids: ["acc_123"],
action: "add_to_queue",
media: ["https://cdn.example.com/image.jpg"],
additional: {
instagram: {
postType: { value: "post" },
channel: { value: "direct" }
}
}
})
Scheduled YouTube Short
1. getSocialMediaAccounts({ network: "youtube" })
2. createSocialMediaPost({
message: "Quick tip: how to use our API",
account_ids: ["acc_456"],
action: "schedule",
date: "2026-03-10 14:00",
media: ["https://cdn.example.com/video.mp4"],
additional: {
youtube: {
postType: { value: "short" },
post: {
title: "API Quick Tip",
privacyStatus: "public",
selfDeclaredMadeForKids: "no"
}
}
}
})
Multi-Platform Campaign
1. getSocialMediaAccounts()
2. createSocialMediaPost({
message: "Big announcement! We just launched v2.0 🎉",
account_ids: ["ig_acc", "fb_acc", "li_acc"],
action: "schedule",
date: "2026-03-15 09:00",
media: ["https://cdn.example.com/launch.jpg"],
additional: {
instagram: { postType: { value: "post" }, channel: { value: "direct" } },
facebook: { postType: { value: "post" } },
linkedin: { audience: { value: "PUBLIC" } }
}
})
Analytics: Time-Series Metrics
1. getSocialMediaAccounts({ network: "instagram" })
2. getSocialMediaAnalyticsRange({
account_id: 123,
metrics: ["reach", "follower_count", "total_interactions", "saves"],
date_from: "2026-02-01",
date_to: "2026-02-28",
tz: "Europe/Warsaw"
})
Analytics: Post Performance Report
1. getSocialMediaAccounts()
2. getSocialMediaAnalyticsPosts({
account_id: 456,
date_from: "2026-02-01",
date_to: "2026-02-28",
page: 1,
per_page: 100
})
// Increment page until current_page >= pages_count
Analytics: Account Overview (KPIs + Audience)
1. getSocialMediaAccounts({ network: "facebook" })
2. getSocialMediaAnalyticsAggregated({
account_id: 789,
date_from: "2026-02-01",
date_to: "2026-02-28"
})
3. getSocialMediaAnalyticsAudience({
account_id: 789,
date_from: "2026-02-01",
date_to: "2026-02-28"
})
Gotchas
- Analytics
account_idis an integer, not a string — use the numericidfromgetSocialMediaAccounts - Analytics date format is
YYYY-MM-DD(no time component, unlike post scheduling) - Unknown metrics are silently ignored by
getSocialMediaAnalyticsRange— checkreferences/ANALYTICS_GUIDE.mdfor per-network availability - Audience data availability varies —
getSocialMediaAnalyticsAudiencemay return partial or empty data depending on the network - Date format must be
YYYY-MM-DD HH:MM(24-hour, no seconds, no timezone — uses account timezone) - Media URLs must be publicly accessible — pre-signed or CDN URLs work, localhost does not
dateis required whenactionisschedule— omit it foradd_to_queueanddraft- Platform character limits — always check before composing; see
references/PLATFORM_GUIDE.mdfor limits per platform - Instagram always requires
channel— includechannel: { value: "direct" }for every Instagram post - TikTok
postTypevalues arevideoandphoto(notimage) - TikTok channel values are
directandreminder(notbusiness) - LinkedIn audience value is
LOGGED_IN(notLOGGED_IN_MEMBERS) - Google
topicTypeonly hasSTANDARD,EVENT,OFFER(noPRODUCT) - Instagram story — message must be empty (
""), max 1 photo - Reels and Shorts require video — Instagram reel, Facebook reel, YouTube short all require a video file in
media; images are not allowed (photos.max: 0) - YouTube always requires
post.title— always includeadditional.youtube.postwith atitlefield for every YouTube video or short