Simplified Social Media

Manage your entire social media from AI — post, schedule, and analyze across Facebook, Instagram, TikTok, YouTube, LinkedIn, Pinterest, Threads, Bluesky and...

MIT-0 · Free to use, modify, and redistribute. No attribution required.
0 · 155 · 0 current installs · 0 all-time installs
MIT-0
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description (manage and analyze social media via Simplified) aligns with the single required env var SIMPLIFIED_API_KEY and with instructions to call the Simplified MCP server. The requested capability (posting, scheduling, analytics) reasonably requires an API key and remote API calls.
Instruction Scope
SKILL.md is instruction-only and instructs the agent to use tools exposed by the remote MCP server. It asks the agent to check the SIMPLIFIED_API_KEY before making calls and to configure .mcp.json with an Authorization header. This is expected, but it means the API key will be sent to https://mcp.simplified.com/social-media/mcp as an Authorization header—users should confirm they trust that endpoint. The instructions do not ask the agent to read unrelated files or other credentials.
Install Mechanism
There is no install spec and no code files to run locally; the skill is instruction-only, which minimizes local install risk. All runtime behavior depends on remote MCP endpoints.
Credentials
Only one environment variable is required (SIMPLIFIED_API_KEY), which is proportional to a service that performs authenticated API actions. There are no unrelated credential requests or config paths.
Persistence & Privilege
The skill is not always-enabled and uses the platform default for invocation. It does not request system-wide persistence or modify other skills. Note: as with any skill that can act on your behalf, the agent (by default) can invoke it autonomously to post or retrieve analytics if allowed by the platform.
Assessment
This skill is coherent with its stated purpose, but before installing: verify you trust simplified.com and the MCP server URL (https://mcp.simplified.com/social-media/mcp) because your SIMPLIFIED_API_KEY will be sent there as an Authorization header; create or use a least-privileged/dedicated API key for the agent; confirm the API key's permissions and revoke it if you see unexpected activity; avoid putting long-lived keys into shared shells or CI without access controls; be aware the agent can perform actions (post/schedule/delete) automatically if given permission—review prompts/consent settings in your agent before allowing autonomous actions.

Like a lobster shell, security has layers — review code before you run it.

Current versionv1.2.2
Download zip
latestvk97aaywj69xaqznzp1etbg61cx82qgve

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

Runtime requirements

📱 Clawdis
EnvSIMPLIFIED_API_KEY

SKILL.md

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:

  1. Stop immediately — do not retry the failed call

  2. Inform the user with this exact message:

    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):
      export SIMPLIFIED_API_KEY="your-api-key"
      
    4. Reload your shell: source ~/.zshrc
    5. Restart Claude Code to pick up the new variable
  3. Do not proceed with the original request until the user confirms the key is set

Setup

  1. Sign up at simplified.com
  2. Connect your social media accounts in the Simplified dashboard
  3. Get your API key from Settings → API Keys
  4. Set environment variable:
    export SIMPLIFIED_API_KEY="your-api-key"
    
  5. Configure the MCP server — see the MCP Server section above for the config block
  6. 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 chars
  • account_ids (required) — array of target account IDs
  • action (required) — schedule, add_to_queue, or draft
  • date — required for schedule, format: YYYY-MM-DD HH:MM
  • media — array of public URLs (images/videos), max 10
  • additional — 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/declinegetSocialMediaAnalyticsRange
Specific posts, best/worst performing contentgetSocialMediaAnalyticsPosts
Account overview, KPIs, period summarygetSocialMediaAnalyticsAggregated
Demographics, follower origins, age/gender breakdowngetSocialMediaAnalyticsAudience
"Show me analytics" with no further contextCall getSocialMediaAnalyticsAggregated + getSocialMediaAnalyticsRange with key metrics — this gives the best general overview

Tool Reference

getSocialMediaAccounts

ParameterTypeRequiredDescription
networkstringNoFilter by platform (see networks)

Networks (filter parameter): facebook, instagram, linkedin, tiktok, youtube, pinterest, threads, google, bluesky, tiktokBusiness

Returns { accounts: [...] }. Each account object:

FieldTypeDescription
idintegerAccount ID — use for all analytics calls; convert to string for account_ids in createSocialMediaPost
namestringAccount display name
typestringAccount type — see values below

type values and their meaning:

type valuePlatformNotes
Facebook pageFacebook
Instagram business / Instagram profileInstagram
Youtube accountYouTube
TikTok profileTikTok Personaluse tiktok metrics set
TikTok profile (business)TikTok Businessuse tiktokBusiness metrics set
LinkedIn companyLinkedInuse LinkedIn Company metrics set
LinkedIn profileLinkedInuse LinkedIn Personal metrics set
Pinterest boardPinterest
Threads accountThreads
Bluesky accountBluesky
Google ProfileGoogle Business

createSocialMediaPost

ParameterTypeRequiredDescription
messagestringYesPost text (max 5000 chars)
account_idsstring[]YesTarget account IDs
actionstringYesschedule, add_to_queue, or draft
datestringNoSchedule datetime: YYYY-MM-DD HH:MM
mediastring[]NoPublic media URLs (max 10)
additionalobjectNoPlatform-specific settings

getSocialMediaAnalyticsRange

Retrieves time-series data for selected metrics within a date range.

ParameterTypeRequiredDescription
account_idintegerYesSocial media account ID (from getSocialMediaAccounts)
metricsstring[]YesList of metrics to retrieve (see references/ANALYTICS_GUIDE.md)
date_fromstringYesStart date: YYYY-MM-DD
date_tostringYesEnd date: YYYY-MM-DD
tzstringNoTimezone, e.g. UTC, Europe/Warsaw (default: UTC)

Returns a structured object:

  • data — array of { date, metrics: AnalyticsMetric[] } — per-day time-series
  • baseLine{ [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.

getSocialMediaAnalyticsPosts

Retrieves analytics for individual posts within a date range.

ParameterTypeRequiredDescription
account_idintegerYesSocial media account ID
date_fromstringYesStart date: YYYY-MM-DD
date_tostringYesEnd date: YYYY-MM-DD
pageintegerNoPage number (default: 1, minimum: 1)
per_pageintegerNoPosts 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.

ParameterTypeRequiredDescription
account_idintegerYesSocial media account ID
date_fromstringYesStart date: YYYY-MM-DD
date_tostringYesEnd 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.

ParameterTypeRequiredDescription
account_idintegerYesSocial media account ID
date_fromstringYesStart date: YYYY-MM-DD
date_tostringYesEnd date: YYYY-MM-DD
tzstringNoTimezone, 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

ActionWhen to Usedate Required?
schedulePost at a specific date/timeYes
add_to_queueAdd to the account's auto-schedule queueNo
draftSave for later editing in the Simplified dashboardNo

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.

PlatformRequired additionalsOptional additionals
FacebookpostType
InstagrampostType, channelpostReel (reel only)
TikTokpostType, channel, postpostPhoto (photo only)
TikTok BizpostType, postpostPhoto (photo only)
YouTubepostType, post
LinkedInaudience
Pinterestpost
Threadschannel
Googlepost
Bluesky

Key enum values:

PlatformFieldValues
FacebookpostType.valuepost*, reel, story
InstagrampostType.valuepost*, reel, story
Instagramchannel.valuedirect*, reminder
TikTokpostType.valuevideo*, photo
TikTokchannel.valuedirect*, reminder
TikTokpost.privacyStatusPUBLIC_TO_EVERYONE*, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY
YouTubepostType.valuevideo*, short
YouTubepost.privacyStatus"", public, private, unlisted
LinkedInaudience.valuePUBLIC*, CONNECTIONS, LOGGED_IN
Threadschannel.valuedirect*, reminder
Googlepost.topicTypeSTANDARD*, 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_id is an integer, not a string — use the numeric id from getSocialMediaAccounts
  • Analytics date format is YYYY-MM-DD (no time component, unlike post scheduling)
  • Unknown metrics are silently ignored by getSocialMediaAnalyticsRange — check references/ANALYTICS_GUIDE.md for per-network availability
  • Audience data availability variesgetSocialMediaAnalyticsAudience may 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
  • date is required when action is schedule — omit it for add_to_queue and draft
  • Platform character limits — always check before composing; see references/PLATFORM_GUIDE.md for limits per platform
  • Instagram always requires channel — include channel: { value: "direct" } for every Instagram post
  • TikTok postType values are video and photo (not image)
  • TikTok channel values are direct and reminder (not business)
  • LinkedIn audience value is LOGGED_IN (not LOGGED_IN_MEMBERS)
  • Google topicType only has STANDARD, EVENT, OFFER (no PRODUCT)
  • 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 include additional.youtube.post with a title field for every YouTube video or short

Files

3 total
Select a file
Select a file to preview.

Comments

Loading comments…