Search / app.sprkly/sprkly
sprkly
R0· no sign-inSchedule, publish and track social posts across TikTok, Instagram, Threads and YouTube Shorts.
v1.0.0 · active · repository · website · descriptor JSON · versions
Search / app.sprkly/sprkly
R0· no sign-inSchedule, publish and track social posts across TikTok, Instagram, Threads and YouTube Shorts.
v1.0.0 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"sprkly": {
"type": "http",
"url": "https://sprkly.app/api/mcp"
}
}
}claude mcp add --transport http sprkly https://sprkly.app/api/mcp[mcp_servers.sprkly]
url = "https://sprkly.app/api/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sprkly": {
"type": "remote",
"url": "https://sprkly.app/api/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"sprkly": {
"type": "http",
"url": "https://sprkly.app/api/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=sprkly&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vc3Bya2x5LmFwcC9hcGkvbWNwIn0%3D"
}{
"servers": {
"sprkly": {
"type": "http",
"url": "https://sprkly.app/api/mcp"
}
}
}{
"mcpServers": {
"sprkly": {
"httpUrl": "https://sprkly.app/api/mcp"
}
}
}extensions:
"sprkly":
enabled: true
name: "sprkly"
type: streamable_http
uri: "https://sprkly.app/api/mcp"
timeout: 300
protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28protocol.statelessonly applies to 2026-07-28 serversprotocol.transportstreamable HTTPprotocol.list_ttlonly applies to 2026-07-28 serversauth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_length2 tools have descriptions over 1,024 characters, which crowds the contexttools.schemasevery tool has an object input schematools.annotations19 of 19 tools declare readOnlyHint or destructiveHinttools.directory_hints8 of 19 tools declare all four hints; missing: sprkly_get_billing_summary (destructiveHint, idempotentHint); sprkly_get_post_status (destructiveHint, idempotentHint); sprkly_list_profiles (destructiveHint, idempotentHint); …tools.token_costabout 5,348 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes16 tool changes in 30 daysstability.rug_pull2 tools kept their name but changed most of their description in 30 days; review before trusting themdeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packagesprkly_validate_post_policychangedinput schemasprkly_schedule_postchangedinput schemasprkly_draft_postchangedinput schemasprkly_validate_post_policychangedinput schemasprkly_schedule_postchangedinput schemasprkly_draft_postchangedinput schemasprkly_update_scheduled_postchangeddescriptionChange the caption, publish time, target accounts or attached media on a post that has not published yet. Only posts with status "scheduled" can be edited.
Change the caption, publish time, target accounts or attached media on a post that has not published yet. Posts with status "scheduled", "pending_approval" or "draft" can be edited, and the status never changes here: editing a post that waits for approval does not approve it, and a rejected post stays a draft until you request approval again. A post waiting for approval can only target one account.
sprkly_schedule_postchangedinput schemasprkly_request_post_approvalchangeddescription, input schemameaning changedSubmit a draft post for human review. Moves the post to pending_approval and returns an approval id to poll with sprkly_get_post_approval_status. Use this when the user wants a person to sign off before anything publishes.
Hold a draft or scheduled post for the owner's approval. Moves it to pending_approval, where it never publishes on its own, emails the owner an Approve link, and returns an approval id to poll with sprkly_get_post_approval_status. Asking again for a post that is already waiting returns the same request. Approved posts go back to scheduled (a post past its time goes out in about 2 minutes); rejected posts become drafts with the owner's notes. To hold a NEW post, pass requires_approval to sprkly_schedule_post instead. Power plan only: other plans get upgrade_required.
sprkly_import_automation_templatechangeddescriptionRead an auto reply template, and optionally set it up. With no profile_id NOTHING is written: the template is checked and handed back, which is the safe first call. With a profile_id the automation is created, and it goes live when the trigger can be satisfied. A trigger that watches one post (a keyword on a post, or every comment on a post) needs post_id as well. Without one it saves as a draft that sends nothing until a post is chosen. A keyword on any post and a Profile DM need no post_id. A template that DMs every commenter on the whole account is turned off and is refused.
Read an auto reply template, and optionally set it up. With no profile_id NOTHING is written: the template is checked and handed back, which is the safe first call. With a profile_id the automation is created, and it goes live when the trigger can be satisfied. A trigger that watches one post (a keyword on a post, or every comment on a post) needs post_id as well. Without one it saves as a draft that sends nothing until a post is chosen. A keyword on any post and a Profile DM need no post_id. A template that DMs every commenter on the whole account is turned off and is refused. (coming soon, pending Meta review)
Showing the latest 10. Full history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +dns-namespace +website +reachable +uptime-97% ~updated-59d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://sprkly.app/api/mcp streamable-http | none | yes | 97% | 1207 ms | 2025-11-25 | 2026-10-19 |
sprkly_add_media_from_url | Download an image or video from a public link into sprkly and get a media_id back, for reuse across several posts. You usually do NOT need this: sprkly_schedule_post accepts a link directly in media_urls and pulls it into storage itself whenever the target platform requires that. Reach for this tool only when the user wants one media_id to attach to more than one post. Google Drive and Dropbox share links are converted automatically; the file must be shared publicly. Limit 50 MB. |
sprkly_delete_scheduled_postdestructive | Remove a post from the queue. This is a soft delete. The user can restore it from the Deleted tab for 30 days. Posts that have already published cannot be deleted this way. Always confirm with the user before calling. |
sprkly_draft_post | Compose a caption from a content hint and save it as a draft in sprkly, shaped to the tightest caption limit among the target platforms. Returns a draft id; the draft appears under /drafts for the user to review. |
sprkly_export_automation_templateread-only | Download one Instagram auto reply as a shareable template. The file holds the trigger, the keyword and the message, and never a post id, a profile id or any account details, so it is safe to send to someone else. An auto reply that is still a draft has nothing published to export. (coming soon, pending Meta review) |
sprkly_get_account_summaryread-only | Plan tier, trial state, connected account count, scheduled post counts by status, and the next three upcoming posts. Never returns tokens or secrets. |
sprkly_get_analyticsread-only | How the user's published posts actually performed: total views and engagement, week-on-week / month-on-month / year-on-year change, their best posting hour, weekday and content category, and the top posts behind those numbers. Every recommendation carries a `samples` count — say how thin the evidence is rather than presenting a one-post pattern as a finding. Every period-on-period percentage carries the post counts and raw totals it came from: quote those, because a big percentage off a tiny base is not a big change. `topPosts` is grouped by platform and ranked only inside each group; `relativeToPlatformBest` compares a post with others on its OWN platform and never across platforms, so use the absolute `value` and its `metric` label to weigh one platform against another. Instagram contributes reach, saves, shares and views only for accounts connected or reconnected with the insights permission, and likes and comments only for the rest. Threads and Facebook produce no metrics at all. Read `coverage` before comparing platforms, and never rank platforms on a metric one of them lacks. |
sprkly_get_billing_summaryread-only | Subscription status, current plan, period end, purchased handles and the last few billing events. No payment method details; the Stripe customer id is truncated. |
sprkly_get_post_approval_statusread-only | Whether a post is awaiting the owner's approval, approved or rejected, with the reviewer's notes, who asked, and timestamps. A rejected post is a draft again: fix it, then request approval again. |
sprkly_get_post_statusread-only | Full detail for one post: status, targets, scheduled and published times, permalink, and the failure reason if it did not publish. Media comes back as mediaIds in slide order, not as links. Ids and profile ids are plumbing: talk to the user about accounts by handle and about posts by their caption, and do not read ids out unless they ask for one. |
sprkly_get_tiktok_posting_optionsread-only | This creator's allowed TikTok privacy levels and interaction settings, fetched live from TikTok. You usually do NOT need this before scheduling: sprkly_schedule_post checks privacyLevel against this same list itself and, when it is wrong, returns the levels that would work. Call this only when the user asks what their options are, or you want to offer them a choice. |
sprkly_import_automation_template | Read an auto reply template, and optionally set it up. With no profile_id NOTHING is written: the template is checked and handed back, which is the safe first call. With a profile_id the automation is created, and it goes live when the trigger can be satisfied. A trigger that watches one post (a keyword on a post, or every comment on a post) needs post_id as well. Without one it saves as a draft that sends nothing until a post is chosen. A keyword on any post and a Profile DM need no post_id. A template that DMs every commenter on the whole account is turned off and is refused. (coming soon, pending Meta review) |
sprkly_list_connected_social_accountsread-only | Every ACTIVE social account linked to this sprkly account: platform, handle, follower count, and whether it needs reconnecting. Disconnected/inactive accounts are never listed, so any profileId returned here is a valid posting target. Never returns access tokens. |
sprkly_list_profilesread-only | The profile ids needed to target a post, with each one's platform and handle. Call this before sprkly_schedule_post. |
sprkly_list_scheduled_postsread-only | The post queue, newest first, with a caption preview, targets, status and failure reason. Supports a status filter and cursor pagination. |
sprkly_request_post_approval | Hold a draft or scheduled post for the owner's approval. Moves it to pending_approval, where it never publishes on its own, emails the owner an Approve link, and returns an approval id to poll with sprkly_get_post_approval_status. Asking again for a post that is already waiting returns the same request. Approved posts go back to scheduled (a post past its time goes out in about 2 minutes); rejected posts become drafts with the owner's notes. To hold a NEW post, pass requires_approval to sprkly_schedule_post instead. Power plan only: other plans get upgrade_required. |
sprkly_schedule_post | Queue a post for publishing, in ONE call. Attach media by passing the user's link straight to media_urls: sprkly downloads it into storage itself for the platforms that need that, so no upload tool has to run first. Runs the same quota, duplicate-content and platform pre-flight checks as the sprkly app. Instagram and TikTok require media at submission time; YouTube and TikTok require a title, and TikTok also requires platform_meta.tiktok.privacyLevel — just send the level the user asked for and this tool names the allowed values if it is not one of them. It reads the real bytes of the media and the response says what will actually publish on each platform (a Reel, a 3-slide carousel, a photo set, a Page feed video) plus anything worth passing on: relay that to the user. Confirm the date, time and target accounts with the user first. If a target platform has more than one connected account and profile_ids is not given, the tool returns needsAccountChoice with the options instead of scheduling — put that choice to the user, then re-call. |
sprkly_update_scheduled_post | Change the caption, publish time, target accounts or attached media on a post that has not published yet. Posts with status "scheduled", "pending_approval" or "draft" can be edited, and the status never changes here: editing a post that waits for approval does not approve it, and a rejected post stays a draft until you request approval again. A post waiting for approval can only target one account. |
sprkly_upload_media | Upload files the user has on their machine (slides, photos, a short video) into sprkly and get a media_id for each. LINK MODE is the way to send a file from disk. Send files, one entry per file with its filename, sha256 and size_bytes. You get back one uploadUrl per file. PUT the bytes to it: curl -sS -X PUT --data-binary @01.jpg "<uploadUrl>". Each PUT answers JSON with mediaId. Links last 15 minutes. Up to 50 MB per file and 35 files per call. The bytes never pass through you, so a whole carousel costs a few hundred tokens. INLINE MODE is for tiny files only (a few KB): data_base64 plus filename, 25 MB at most. base64 costs about one token per character, so never inline a real slide. When files is sent, data_base64 and filename are ignored. For a public link use media_urls on sprkly_schedule_post instead. The same bytes sent twice return the same media_id. |
sprkly_validate_post_policyread-only | Check a caption against each target platform's posting rules before scheduling: caption length, media requirements, hashtag ceilings, whether links are clickable, required YouTube titles, and PII or prohibited-content warnings. Pure analysis. Writes nothing. |
Schemas: list_tools.
{
"name": "app.sprkly/sprkly",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
"remotes": [
{
"url": "https://sprkly.app/api/mcp",
"type": "streamable-http"
}
],
"version": "1.0.0",
"repository": {
"url": "https://github.com/YOUR_GH_USERNAME/sprkly-mcp",
"source": "github"
},
"websiteUrl": "https://sprkly.app",
"description": "Schedule, publish and track social posts across TikTok, Instagram, Threads and YouTube Shorts."
}