Schedule, queue, and draft social media posts, and retrieve analytics across 10 platforms using Simplified.com.
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".
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:
> Simplified Social Media requires an API key to work.
>
> Please follow these steps:
> 1. Sign up or log in at simplified.com
> 2. Go to Settings → API Keys and copy your API key
> 3. Add to your shell config (~/.zshrc or ~/.bashrc):
> ```bash
> export SIMPLIFIED_API_KEY="your-api-key"
> ```
> 4. Reload your shell: source ~/.zshrc
> 5. Restart Claude Code to pick up the new variable
```bash
export SIMPLIFIED_API_KEY="your-api-key"
```
Always follow this sequence: Discover → Select → Compose → Publish
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.
Pick one or more account_ids from the results. You can post to multiple accounts in a single call.
Build the post payload:
message (required) — the post text, max 5000 charsaccount_ids (required) — array of target account IDsaction (required) — schedule, add_to_queue, or draftdate — required for schedule, format: YYYY-MM-DD HH:MMmedia — array of public URLs (images/videos), max 10additional — platform-specific settings (see below)Call createSocialMediaPost with the composed payload.
| 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 |
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 |
getSocialMediaAnalyticsRangeRetrieves 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 with value (current) and prevValue (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.
getSocialMediaAnalyticsPostsRetrieves 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.
getSocialMediaAnalyticsAggregatedRetrieves 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).
getSocialMediaAnalyticsAudienceRetrieves 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 | 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.
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
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" }
}
}
})
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"
}
}
}
})
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" } }
}
})
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"
})
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
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"
})
account_id is an integer, not a string — use the numeric id from getSocialMediaAccountsYYYY-MM-DD (no time component, unlike post scheduling)getSocialMediaAnalyticsRange — check references/ANALYTICS_GUIDE.md for per-network availabilitygetSocialMediaAnalyticsAudience may return partial or empty data depending on the networkYYYY-MM-DD HH:MM (24-hour, no seconds, no timezone — uses account timezone)date is required when action is schedule — omit it for add_to_queue and draftreferences/PLATFORM_GUIDE.md for limits per platformchannel — include channel: { value: "direct" } for every Instagram postpostType values are video and photo (not image)direct and reminder (not business)LOGGED_IN (not LOGGED_IN_MEMBERS)topicType only has STANDARD, EVENT, OFFER (no PRODUCT)""), max 1 photomedia; images are not allowed (photos.max: 0)post.title — always include additional.youtube.post with a title field for every YouTube video or short共 1 个版本