🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@schedulala/mcp-server

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@schedulala/mcp-server

MCP server for Schedulala — schedule social media posts from AI tools

latest
Source
npmnpm
Version
0.10.1
Version published
Weekly downloads
42
-86.58%
Maintainers
1
Weekly downloads
 
Created
Source

@schedulala/mcp-server

An MCP server that lets AI tools (Claude Desktop, Claude Code, Cursor, and any MCP-compatible client) schedule and manage social media posts through Schedulala.

It is a thin wrapper over the Schedulala Developer REST API (/api/v1/*). All logic lives in the API; this server only translates MCP tool calls into authenticated HTTP requests.

Tools

29 tools. The "Annotations" column lists the MCP tool hints (readOnly, destructive, idempotent; all tools are openWorld since they hit a live external API).

Posts

ToolWhat it doesAnnotations
create_postCreate/schedule a post across one or more platformsdestructive
list_postsList your API-created posts, with filters + paginationreadOnly
get_postGet one post by id (per-platform status, URLs, errors)readOnly
update_postEdit a draft or scheduled post (content, media, schedule, platforms)destructive
cancel_postDelete a draft or cancel a scheduled postdestructive, idempotent
retry_postRetry the failed platforms of a postdestructive
bulk_create_postsCreate up to 25 posts in one request (consumes quota per post)destructive
validate_postCheck content against platform rules without postingreadOnly

Media

ToolWhat it doesAnnotations
upload_mediaHost media on the Schedulala CDN for create_post: re-host a public image/video URL, or pass a small image (3MB max) inline as base64 data
list_mediaList recent uploads (dashboard Media library + API) so "post my latest upload" works without copying URLs — the path for posting videos from chatreadOnly, idempotent

Limits: images up to 20 MB (jpeg, png, webp; gif 15 MB), videos up to 50 MB (mp4, mov, webm). Larger videos: pass their public URL directly in create_post mediaItems (fetched at publish time).

Threads

ToolWhat it doesAnnotations
create_threadCreate a chain of sequential posts (twitter, threads, bluesky); consumes quota per entrydestructive

Accounts and usage

ToolWhat it doesAnnotations
list_accountsList connected social accounts (ids used by other tools)readOnly
get_usagePlan, post quota, social sets, billing period, rate limitreadOnly
connect_accountLink to connect a new platform (OAuth/credentials happen on schedulala.com, never in chat)readOnly
get_upgrade_linkSubscribe or manage-billing link (payment happens on schedulala.com / Stripe)readOnly

Analytics

Analytics platforms: instagram, twitter, bluesky, threads, facebook, linkedin, pinterest, tiktok, youtube.

ToolWhat it doesAnnotations
get_post_analyticsPer-post metrics + engagement rate for one account (cursor paginated)readOnly
get_follower_growthCurrent followers, 7d/30d growth, daily historyreadOnly
get_best_posting_timesTop hours/days by historical engagementreadOnly

YouTube extras

ToolWhat it doesAnnotations
get_video_transcriptCaption tracks + parsed transcript of a video on a connected channelreadOnly
get_video_retentionPer-video audience retention curve (YouTube Analytics API, 7-day cache)readOnly

Feeds (social listening)

Search: bluesky, threads (threads keyword search has a Meta-enforced budget of 500 searches per rolling 7 days per user, shared with the dashboard). Profile lookup: bluesky.

ToolWhat it doesAnnotations
search_feedsKeyword search; every result carries reply targets for reply_to_commentreadOnly
lookup_profilePublic profile + recent postsreadOnly
list_feed_keywordsList saved feed keywordsreadOnly
update_feed_keywordsAdd/remove saved feed keywords (max 20)

Engagement

Comments + reply: facebook, instagram, youtube, linkedin, threads, bluesky. Hide: facebook, instagram, youtube, threads. Mentions: instagram, threads, bluesky. (tiktok, telegram, twitter, pinterest are not engagement platforms.)

ToolWhat it doesAnnotations
list_commentsRecent comments, or comments on a specific postreadOnly
list_mentionsPosts/comments where the account is mentioned/tagged/quotedreadOnly
reply_to_commentPublish a reply (target differs per platform — see below)destructive
hide_commentHide/unhide a commentdestructive, idempotent

account ids and accountId parameters come from list_accounts. Reply targets per platform: commentId (instagram/youtube); commentId or postId (facebook/linkedin/threads); parentUri+parentCid+rootUri+rootCid for bluesky — these four come back on every bluesky comment/mention under platformData.replyRefs, so chain list_commentsreply_to_comment.

Supported posting platforms: twitter, instagram, linkedin, facebook, youtube, bluesky, tiktok, telegram, threads, pinterest.

Requirements

  • Node.js >= 18
  • A Schedulala API key. Get one at https://schedulala.com/developers.
    • sk_test_* keys run in sandbox mode (simulated post lifecycle, no real posting, no quota burn) — use these for testing.
    • sk_live_* keys post for real.

Configuration

The server reads two environment variables:

VariableRequiredDefaultNotes
SCHEDULALA_API_KEYyesServer exits with an error if this is unset.
SCHEDULALA_API_URLnohttps://schedulala.comOverride for local/dev (e.g. http://localhost:3000).

Install

This package is published with a bin, so most clients can run it via npx without a manual install:

npx -y @schedulala/mcp-server

To build from source (in this repo):

cd packages/mcp-server
npm install
npm run build
# entry point: build/index.js

Client setup

Hosted alternative: clients with built-in remote-connector support don't need this package at all. claude.ai (Settings → Connectors) and ChatGPT (developer-mode MCP connectors) connect directly to https://schedulala.com/api/mcp — the same tools, with OAuth sign-in instead of a manually managed API key. This stdio package is for clients that spawn local MCP servers (Claude Desktop, Claude Code, Cursor, and similar).

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "schedulala": {
      "command": "npx",
      "args": ["-y", "@schedulala/mcp-server"],
      "env": {
        "SCHEDULALA_API_KEY": "sk_live_xxx"
      }
    }
  }
}

Restart Claude Desktop after saving.

Claude Code

claude mcp add --transport stdio \
  --env SCHEDULALA_API_KEY=sk_live_xxx \
  schedulala -- npx -y @schedulala/mcp-server

Or point it at a local build instead of npx:

claude mcp add --transport stdio \
  --env SCHEDULALA_API_KEY=sk_test_xxx \
  schedulala -- node /absolute/path/to/packages/mcp-server/build/index.js

Cursor

Create .cursor/mcp.json in your project (or ~/.cursor/mcp.json for global):

{
  "mcpServers": {
    "schedulala": {
      "command": "npx",
      "args": ["-y", "@schedulala/mcp-server"],
      "env": {
        "SCHEDULALA_API_KEY": "sk_live_xxx"
      }
    }
  }
}

Local development config

Point the server at a locally running Schedulala instance and use a sandbox key:

Claude Desktop / Cursor (local build + localhost API)

{
  "mcpServers": {
    "schedulala-local": {
      "command": "node",
      "args": ["/absolute/path/to/packages/mcp-server/build/index.js"],
      "env": {
        "SCHEDULALA_API_KEY": "sk_test_xxx",
        "SCHEDULALA_API_URL": "http://localhost:3000"
      }
    }
  }
}

Claude Code (local)

claude mcp add --transport stdio \
  --env SCHEDULALA_API_KEY=sk_test_xxx \
  --env SCHEDULALA_API_URL=http://localhost:3000 \
  schedulala-local -- node /absolute/path/to/packages/mcp-server/build/index.js

Testing

MCP Inspector (interactive UI)

cd packages/mcp-server
npm run build
SCHEDULALA_API_KEY=sk_test_xxx npx @modelcontextprotocol/inspector node build/index.js

Smoke test over stdio

printf '%s\n%s\n%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}' \
  '{"jsonrpc":"2.0","method":"notifications/initialized"}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
  | SCHEDULALA_API_KEY=sk_test_dummy node build/index.js

This should return a JSON-RPC response listing all 29 tools.

Embedding (./lib)

The package exposes a second, side-effect-free entry point for reuse by a sibling server (e.g. a remote/HTTP MCP server):

"exports": {
  ".": "./build/index.js",
  "./lib": "./build/lib.js"
}

@schedulala/mcp-server/lib re-exports the SchedulalaApiClient, the ApiClientError type, every register*Tools function (registerPostTools, registerThreadTools, registerAnalyticsTools, registerEngagementTools, registerAccountTools, registerUsageTools, registerYouTubeTools, registerFeedTools, registerMediaTools, registerAccountSetupTools), all formatters, and all request/response types — with no shebang and no transport side effects. Import it to register the same tools against your own McpServer instance:

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import {
  SchedulalaApiClient,
  registerPostTools,
  registerAnalyticsTools,
  registerEngagementTools,
} from "@schedulala/mcp-server/lib";

const client = new SchedulalaApiClient(apiKey, baseUrl);
const server = new McpServer({ name: "my-remote", version: "1.0.0" });
registerPostTools(server, client);
registerAnalyticsTools(server, client);
registerEngagementTools(server, client);

The stdio binary (. / the package bin) is unchanged.

Notes

  • No brands endpoint. There is no /api/v1/brands. Read brand / social-set ids from list_accounts (each account has a brandId) or get_usage.
  • stdout is reserved for JSON-RPC. This server only logs to stderr.

License

MIT

FAQs

Package last updated on 01 Aug 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts