Skip to main content
Glama
MelMayssonOwen

TimeToPost MCP server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
TIMETOPOST_API_URLNoThe base URL of the TimeToPost API. Defaults to https://api.timetopost.cohttps://api.timetopost.co
TIMETOPOST_API_TOKENYesYour TimeToPost API token used for authentication.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
whoamiA

Return the authenticated TimeToPost user, bound organization and any org warning — plus THIS credential's capabilities (read / draft / publish) and canPublish. CALL THIS FIRST: a DRAFT-ONLY token can create drafts but is 403ed by every route that reaches a live audience (publish, schedule, approve, DM-send), so check canPublish before you plan any publishing step. CAPABILITY: read — side-effect-free.

get_capabilitiesA

START HERE when mapping what TimeToPost can do. Returns the authoritative machine-readable capability map: post statuses + lifecycle, thread rules, per-platform platformData shapes, the engine-draft approval lifecycle and idempotency contract, the org/multi-account model (incl. the brand-vs-BrandVoice terminology distinction), metrics fields + ingestion cadence, AutoSEO, DM Funnels beta, the Weekly X Trend-Rider, the warm-outbound DM engager loop, backlink/email outreach, the link shortener + click analytics, Launch with TTP, the link-in-bio public profile, and THIS org's live connections including token-refresh semantics (e.g. X access tokens live 2h by design and refresh automatically at publish — a past expiresAt with hasRefreshCapability=true is normal, NOT a dead integration). Trust this over inferences from other tools' raw fields. CAPABILITY: read — side-effect-free.

prompt_suggestA

Return ranked, evidence-labeled prompt scaffolds for the active organization. Call this before generating any post or short and start from the first result. Use POST_HOOK for post openings and VIDEO for short-video structures. Organization winners rank above source-cited best-practice templates only when confidence is medium or high. CAPABILITY: read — side-effect-free.

prompt_library_listA

List the active organization prompt library, including visible system and organization templates plus learned winner evidence. Use prompt_suggest for the ranked generation default and this tool to inspect the complete inventory. CAPABILITY: read — side-effect-free.

list_integrationsA

List the social/platform integrations for the active org and their connection status. CAPABILITY: read — side-effect-free.

get_tiktok_creator_infoA

Read a connected TikTok account's CURRENT posting settings, straight from TikTok. Call this before every TikTok schedule_post: it returns who the post would go out as (creator_nickname/creator_username), privacy_level_options (the ONLY audiences this account may be offered, so never present one that is missing from this list), comment_disabled/duet_disabled/stitch_disabled (a disabled interaction MUST be sent as false in platformData.tiktok, and must not be offered to the human as a choice), and max_video_post_duration_sec (the longest video this account may upload). Show these to the human, get their answers, and send those answers. TikTok requires this lookup per posting session and forbids caching it between sessions, so do not reuse an earlier response. accountId is the integration id from list_integrations; omit it when only one TikTok account is connected. CAPABILITY: read — side-effect-free.

add_to_collectionA

Group a connected account into a collection (a named set of accounts, e.g. "clefdrills" spanning its X + Instagram). CREATES the collection if the name is new, so this is also how you create one. Then schedule_post can post to the whole group via its collection field. Pass accountId (an integration id from list_integrations) and collection (the group name). Pass an empty collection name to ungroup. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

prepare_media_uploadA

STEP 1 of the media upload flow (use this for any real image/video; upload_media is only for tiny files). Returns a short-lived PRESIGNED upload URL you PUT the raw file bytes to yourself, outside MCP, with NO credentials (the signature is in the URL). Then call finalize_media_upload to register it and get the hosted publicUrl for schedule_post mediaUrls.

Flow:

  1. prepare_media_upload { filename, contentType, size } -> { key, uploadUrl, publicUrl }

  2. PUT the bytes to uploadUrl, e.g. curl -X PUT --data-binary @day01.mp4 -H "Content-Type: video/mp4" "<uploadUrl>". Send RAW bytes, do NOT base64-encode.

  3. finalize_media_upload { key, contentType, size }.

size must be the exact byte size. The uploadUrl expires shortly, so PUT immediately (prepare/PUT/finalize one file at a time). CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

finalize_media_uploadA

STEP 3 of the media upload flow: call AFTER you have PUT the raw bytes to the presigned uploadUrl from prepare_media_upload. Registers the object as a MediaAsset and returns it; its publicUrl is what you pass to schedule_post mediaUrls. Pass the same key/contentType/size from step 1. Idempotent: re-finalizing the same key returns the existing asset. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

upload_mediaA

Upload a SMALL image/video inline and get a hosted public URL for schedule_post mediaUrls. Only practical for tiny files: it carries the whole file as base64, ~1.35x the byte size. For ANY real photo or video (over ~100KB) use prepare_media_upload + finalize_media_upload instead. Instagram and TikTok REQUIRE hosted media (they cannot take a text-only post). Once a post using the media publishes, the file is auto-deleted 30 days later. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

connect_account_linkA

Return a link the user opens in a browser to connect a social account via OAuth. The link deep-links into Settings and auto-opens the connect flow for the chosen provider. provider must be one of: instagram|twitter|tiktok|facebook|pinterest|youtube|linkedin|reddit|threads. Connecting requires a signed-in human clicking through the OAuth popup in a browser; an agent cannot complete it directly, so relay this link to the user and do not claim the account is connected until they confirm. CAPABILITY: read — side-effect-free.

list_boardsA

List the active org's connected Pinterest account's boards (id, name, privacy, pin count). Call this before schedule_post with a pinterest platform target — Pinterest requires platformData.pinterest.boardId on every pin, and boardId must be one of the ids returned here. 404s if no Pinterest integration is connected. CAPABILITY: read — side-effect-free.

list_postsA

List posts for the active org. Optionally filter by status. CAPABILITY: read — side-effect-free.

get_postA

Fetch a single post by id (must belong to the active org): content, platforms, status (DRAFT|SCHEDULED|PUBLISHING|PUBLISHED|FAILED|PARTIAL), scheduledAt/publishedAt, mediaUrls, and platformData including per-platform published post ids/urls and thread segments. Use after publishing to confirm the post actually went out and to get platform permalinks. CAPABILITY: read — side-effect-free.

schedule_postA

Create a post. Provide a future ISO scheduledAt to schedule it (omit for a draft). platforms are provider keys like "instagram", "tiktok", "twitter", "pinterest". For TIKTOK, platformData.tiktok is REQUIRED and every field in it must be an answer YOU GOT FROM THE HUMAN: who can see the post (privacy), whether comments, duet and stitch are allowed, and whether it promotes their own brand or a third party. Never invent, assume or default those values, and never carry them over from a previous post: TikTok requires the creator to choose them with nothing pre-selected. Call get_tiktok_creator_info first to see the audiences this account may pick and which interactions it has switched off. An incomplete block is rejected naming the fields still missing; in a mixed request only TikTok is refused and the other platforms are still scheduled. TikTok needs mediaUrls and posts to ONE TikTok account at a time. For PINTEREST, mediaUrls must contain exactly one image URL, and platformData.pinterest.boardId is REQUIRED — call list_boards first to get a valid boardId; content becomes the pin description (≤500 chars), platformData.pinterest.title is the pin title (≤100 chars). Optional brand: a niche/play attribution tag for per-play engagement rollups (auto-registers; see list_brands) — NOT the AI BrandVoice writing-style profile. Writing style for any post content you draft: write like the account's human owner, not like an AI. NEVER use em-dashes or en-dashes (—, –) or double hyphens (--); use a period, comma or colon instead. Skip hashtag spam (0-1 hashtags), filler openers ("Exciting news!") and rocket/sparkle emoji. Before drafting, read the account's recent posts with list_posts and match their voice, casing and rhythm. CAPABILITY: draft when scheduledAt is omitted (creates a DRAFT that never goes out on its own); publish when scheduledAt is set, because the scheduler will push it to a live audience. A draft-scoped token that passes scheduledAt gets a 403 — drop scheduledAt and hand the draft to a human.

publish_postA

Queue an existing draft/scheduled/failed post for immediate publishing on the next scheduler tick (must belong to the active org). Uses the real scheduler/provider pipeline; records become PUBLISHED only after platform publishing succeeds. CAPABILITY: publish — this can reach a LIVE AUDIENCE. A draft-scoped token gets a 403 here; a human must approve at timetopost.co instead.

cancel_postA

Delete a post (e.g. to cancel a scheduled one). Must belong to the active org. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

get_engagement_summaryB

Aggregated engagement metrics for the active org. CAPABILITY: read — side-effect-free.

get_optimal_timesA

Suggested best posting times based on the org’s historical performance. CAPABILITY: read — side-effect-free.

scheduler_statusA

Health of the background post scheduler (last tick, failures). CAPABILITY: read — side-effect-free.

create_digest_draftsA

Submit a batch of platform drafts for one engine artifact (e.g. a digest issue). Drafts are ALWAYS created pending_approval and NEVER auto-publish — a human must approve_draft (or use the dashboard) first. Idempotent on external_ref: resends update still-pending drafts, never duplicate or resurrect decided ones. platform accepts provider keys (twitter|linkedin|instagram|tiktok|wordpress|...) plus aliases x/x_post/x_thread (→ twitter). segments: 1 element = single post; 2+ on twitter = thread. link is appended to the final segment at approval when absent. schedule_hint: "optimal" or a future ISO datetime. Alias: create_drafts is the same tool under a name that doesn't imply "digest-only" — the mechanism is generic to any engine artifact. Writing style for any post content you draft: write like the account's human owner, not like an AI. NEVER use em-dashes or en-dashes (—, –) or double hyphens (--); use a period, comma or colon instead. Skip hashtag spam (0-1 hashtags), filler openers ("Exciting news!") and rocket/sparkle emoji. Before drafting, read the account's recent posts with list_posts and match their voice, casing and rhythm. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

create_draftsA

Call prompt_suggest first and base the prompt on the top result. Submit a batch of platform drafts for one engine artifact (a digest issue, a generated content batch, anything). Drafts are ALWAYS created pending_approval and NEVER auto-publish — a human must approve_draft (or use the dashboard) first. Idempotent on external_ref: resends update still-pending drafts, never duplicate or resurrect decided ones. platform accepts provider keys (twitter|linkedin|instagram|tiktok|wordpress|...) plus aliases x/x_post/x_thread (→ twitter). segments: 1 element = single post; 2+ on twitter = thread. link is appended to the final segment at approval when absent. schedule_hint: "optimal" or a future ISO datetime. This is the same underlying batch-draft mechanism as create_digest_drafts (kept for existing integrations) — this name drops the misleading "digest" implication; prefer this name for new integrations. Writing style for any post content you draft: write like the account's human owner, not like an AI. NEVER use em-dashes or en-dashes (—, –) or double hyphens (--); use a period, comma or colon instead. Skip hashtag spam (0-1 hashtags), filler openers ("Exciting news!") and rocket/sparkle emoji. Before drafting, read the account's recent posts with list_posts and match their voice, casing and rhythm. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

list_draftsA

List engine-submitted drafts for the active org. Optional status (PENDING|APPROVED|REJECTED|POSTED) and brand filters. POSTED drafts carry a postId you can follow with get_post. CAPABILITY: read — side-effect-free.

approve_draftA

HUMAN GATE: approve a pending draft and schedule the real post in one step. Only call this when the human operator has reviewed the draft and told you to approve it — never approve autonomously. Optional edits: replacement segments and/or an explicit future scheduled_for (otherwise schedule_hint is resolved: "optimal" → the org's best-times model, fallback +2h). Multi-segment twitter drafts publish as a thread. CAPABILITY: publish — this can reach a LIVE AUDIENCE. A draft-scoped token gets a 403 here; a human must approve at timetopost.co instead.

reject_draftA

Reject a pending or approved draft so it can never be posted. Optional reason is stored for the submitting engine to read back via list_drafts. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

list_approvalsA

READ-ONLY view of the unified approvals rail (TIM-97-style aggregation): returns everything currently awaiting human review across ALL FOUR automation sources in one call — posts (EngineDraft, the create_digest_drafts/create_drafts queue), trends (Weekly X Trend-Rider drafts), build-in-public (GitHub-shipped-feature tweet drafts) and dms (warm-lead engager DMs) — normalized into a common shape { id, source, status, title, preview, createdAt, actions } with per-source PENDING counts. Optional source narrows to one queue; optional status (default PENDING) selects a different stage (APPROVED|POSTED|REJECTED). This tool only reads the queue — it never approves or rejects anything. approve_draft/reject_draft remain the only MCP-side approval actions, and only for the "posts" (EngineDraft) source; per-source approval for trends, build-in-public and DMs stays a dashboard action for now. Each item's actions array documents the exact REST endpoint (path/method) a human-facing UI would call next for that item. CAPABILITY: read — side-effect-free.

shorts_generateA

Call prompt_suggest first and base the prompt on the top result. Generate an approval-ready AI Short from an existing source and place it in the human review rail as a PENDING EngineDraft. Pro-only and allowance-capped before model/media spend. source.kind accepts "autoseo" with articlePostId, "ship-digest" with text/title/url, "trend" with draftId, "template" with slug/variables, or "raw" with title/text/url. The backend produces a grounded script JSON, an ElevenLabs voiceover with word timings when configured (OpenAI TTS plus Whisper fallback), a ShortSpec for the client renderer, stores the audio in object storage, and returns draftId/spec/script. It never publishes. The human must render/approve later via the dashboard or attach-render flow. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

generate_short_videoA

Call prompt_suggest first and base the prompt on the top result. Generate a FINISHED, PUBLISHABLE vertical (9:16) short video with an AI video model (Veo 3.1, Kling 2.5 or Grok Imagine) and get back a hosted mp4 publicUrl. The provider clip becomes a muted ShortSpec scene. The server adds the configured ElevenLabs/OpenAI voiceover, burns word-timed karaoke captions, and returns the ffmpeg-assembled result. Pass video.publicUrl into schedule_post mediaUrls (tiktok/instagram/youtube). Always disclose the generated visual as AI-generated when you post it.

Pick a genre — each one exists because of ONE retention mechanic:

  • "asmr_loop": a hyper-tactile satisfying clip cut as a SEAMLESS LOOP (last frame === first frame), which gets rewatched 3-5x per viewer. REQUIRES imageUrl (the start frame it loops back to) and a Veo key. Single unbroken shot, no cuts.

  • "what_if": an absurd premise filmed as a dead-serious documentary. The tension between the two IS the hook. Kling by default (2 credits); Grok is the cheap explicit override.

  • "pov_historical": first-person POV of a historical/disaster moment. Stakes plus a TIMER in the first line ("you have 10 minutes"). Photorealism is the hook.

  • "character_series": a recurring character held visually identical across episodes. Pass referenceImageUrls (up to 3) of the character — that is what stops them drifting, and consistency is the entire moat of this format.

Reference/start images are ordinary hosted media: upload them with prepare_media_upload -> PUT -> finalize_media_upload and pass the returned publicUrl(s). You do not write the model prompt: give a concept (one line) plus any genre fields and the server builds the shot/camera/lighting/pacing prompt. Provider is chosen per genre; override with provider only if you know why. Weighted credits follow the subscription billing period (calendar fallback): Grok costs 1, Kling costs 2, Veo costs 2 on the default Fast tier or 5 if the deployment overrides to Standard; Pro gets 6, Growth 12, trials 2, and Free/Starter 0. Requests that exceed the allowance 429. Writing style for any post content you draft: write like the account's human owner, not like an AI. NEVER use em-dashes or en-dashes (—, –) or double hyphens (--); use a period, comma or colon instead. Skip hashtag spam (0-1 hashtags), filler openers ("Exciting news!") and rocket/sparkle emoji. Before drafting, read the account's recent posts with list_posts and match their voice, casing and rhythm. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

persona_createA

Create a DRAFT AI Presenter persona for the active org and start/resume provider minting. Requires Presenter Pack when billing is enabled. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

persona_listA

List non-archived AI Presenter personas for the active org. CAPABILITY: read — side-effect-free.

persona_statusA

Fetch one AI Presenter persona by id. CAPABILITY: read — side-effect-free.

shorts_statusA

Read the status of one generated AI Short draft by draftId. Returns the EngineDraft status, postId when scheduled, requested platforms, generated script, ShortSpec, and render attachment metadata if the browser/client has rendered and attached the MP4. Read-only and org-scoped. CAPABILITY: read — side-effect-free.

publish_threadA

Publish or schedule an X/Twitter thread in one call. segments[0] is the anchor tweet; segments 2..N (max 24, each ≤280 chars) publish as chained replies. schedule_at: future ISO datetime; omit to go out on the next scheduler tick (~1 min). Convenience wrapper over schedule_post + thread. Follow with get_post to confirm platform post ids after publish. Writing style for any post content you draft: write like the account's human owner, not like an AI. NEVER use em-dashes or en-dashes (—, –) or double hyphens (--); use a period, comma or colon instead. Skip hashtag spam (0-1 hashtags), filler openers ("Exciting news!") and rocket/sparkle emoji. Before drafting, read the account's recent posts with list_posts and match their voice, casing and rhythm. CAPABILITY: publish — this can reach a LIVE AUDIENCE. A draft-scoped token gets a 403 here; a human must approve at timetopost.co instead.

list_brandsA

List the org's brand/niche profiles with post counts. A "brand" attributes posts to a play (e.g. "emplaw-watchdog" vs "tm-monitor") so engagement rolls up per play. Brands auto-register the first time a brand tag is used on schedule_post, publish_thread or create_digest_drafts — no explicit create step. TERMINOLOGY: this "brand" is a per-post niche/play tag, unrelated to BrandVoice (the org's single AI writing-style profile derived from recent posts, used to guide AI content generation) — an org has many brands but one BrandVoice. CAPABILITY: read — side-effect-free.

get_engagement_by_tagA

Per-brand engagement rollup: totals (likes, comments, shares, saves, views, impressions, reach, clicks) and average engagement rate across all posts tagged with the given brand/niche slug. Feeds per-play KPI dashboards. Use list_brands to discover valid slugs. CAPABILITY: read — side-effect-free.

get_post_metricsA

Per-post engagement metrics (impressions, likes, comments/replies, shares, saves, views, clicks, engagementRate) for one or more post ids. Metrics arrive via a periodic platform sync, so very recent posts may be empty until the next cycle. Use get_engagement_summary for the org-wide aggregate. CAPABILITY: read — side-effect-free.

build_in_public_connect_linkA

Generate a "click to authorize GitHub" link for Build-in-Public Autopilot (Pro feature: merged PRs / pushes on a watched branch become shipped-feature post drafts the user approves before anything publishes). SIDE-EFFECT-FREE: this tool only mints a short-lived signed authorization URL — it never connects, changes or activates anything, and the agent must NOT treat it as having connected a repo. Returns { authUrl, expiresAt, instructions }: relay authUrl to the human ("authorize here: ") and tell them the link expires (~10 minutes; call this tool again for a fresh one). The connection only comes into existence after the USER opens the link, authorizes TimeToPost on GitHub, and then picks the repository + watched branch + mode (draft approval is the default) in the TimeToPost dashboard, which also registers the repo webhook. Check the outcome later with build_in_public_status. Errors: 403 = the org is not on Pro (relay the upgrade message); 503 = the server has no GitHub OAuth app configured (GITHUB_CLIENT_ID/GITHUB_CLIENT_SECRET). CAPABILITY: read — side-effect-free.

build_in_public_statusA

READ-ONLY status of the org's Build-in-Public GitHub connection. Returns { configured (server has a GitHub OAuth app), connected (user completed the authorize flow), githubLogin, connectedAt, mode (APPROVE = human approves every draft, the default; AUTO = drafts post unattended), enabled, dailyLimit, postMode ("per-pr" or "digest"), digestFrequency, digestDayOfWeek, digestHourUtc, maxPostsPerWeek, nextDigestAt, lastDigestAt, pendingDigestCount, defaultBranch, repos: [{ fullName, branch (the watched branch after per-repo overrides), webhookRegistered, isWebhookActive, lastWebhookAt }], lastDraft (the most recent GitHub-event tweet draft: repo, title, status, tweetDraft, createdAt) }. Use it to answer "is build-in-public set up?", to verify a connect link the user was given actually got completed, or to see the latest draft. Never mutates anything. Drafts awaiting review also appear in list_approvals under source 'build-in-public'. CAPABILITY: read — side-effect-free.

autoseo_connect_siteA

START HERE for AutoSEO on a new site. Connects ONE of the four connector kinds (intrusion ladder, least intrusive first) and returns { id, kind, publicToken, capabilities }. WHICH KIND + WHICH FIELDS: kind "hosted" is the ZERO-SETUP DEFAULT — needs ONLY name; TimeToPost hosts AND SSR-renders the blog itself (full SEO: JSON-LD, sitemap, robots AI-crawler allow-list) and the response includes hostedUrl ("your blog is live at ..."); nothing to install, works for ANY site — pick it when unsure. kind "wp_rest" connects a WordPress site over its own REST API — needs url (the WP site), username, and appPassword (created in WP Admin → Users → Profile → Application Passwords); no plugin, no code; connect runs the REAL capability probe, so a bad credential fails right here with the exact reason. kind "git_pr" commits article files (Markdown/MDX + frontmatter) to a GitHub repo and the user's own CI deploys them — needs token (a fine-grained PAT or GitHub App installation token with contents:write) and repo ("owner/name"), plus optional branch, contentDir, and mode ("pr" opens a reviewable pull request per article, the default; "direct" commits straight to the branch); connect verifies write access and auto-detects the SSG + content convention (returned as capabilities.detected — confirm contentDir with the user if ssg is "unknown"). kind "webhook" is the most-control path for ANY stack (Next.js, Rails, PHP, a serverless function): TimeToPost POSTs signed article payloads to endpointUrl, authenticated with an HMAC signingSecret — pass one or omit it to have the backend generate it; then call autoseo_integration_kit, install the /autoseo-publish endpoint into the user's codebase, and confirm with autoseo_verify_site. After ANY kind: autoseo_configure → autoseo_propose_topics / autoseo_generate_post. name is a human label shown in the TimeToPost dashboard. capabilities updates each time autoseo_verify_site re-probes the site; publicToken is only needed for autoseo_integration_kit's renderMode "ssr-hosted" (set it as that site's AUTOSEO_PUBLIC_TOKEN env var). CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

autoseo_integration_kitA

The "AI installs it" tool — installs a FULLY WORKING, appears-live blog end-to-end. Fetch the AutoSEO integration kit: the receiving-endpoint contract (request/response shape and the HMAC signature-verification algorithm), ready-to-adapt code template(s) for the given stack, and plain-English install instructions. Call this right after autoseo_connect_site with kind "webhook": read the returned files, adapt them to the user's real codebase (their framework, language and folder conventions), write them yourself, and tell the user to deploy. Pass renderMode to control whether the blog appears LIVE or needs a rebuild: "ssr-db" (default, recommended) writes to the site's own database and SSR-renders from it on every request — new posts appear immediately, no rebuild; "ssr-hosted" is the fastest install (zero database — the article stays hosted at TimeToPost and the site only adds an SSR route that fetches it live); "static-mdx" is the legacy MDX-file mode — NOT live, only appears after the site's next build/deploy, prefer one of the other two unless the site already has an MDX pipeline. Pass stack (e.g. "nextjs", "express", "rails", "django", "php", "static") when you know the target site's framework to get a matching template (Next.js/Express get full write + SSR render templates for ssr-db/ssr-hosted); omit it for the generic HTTP contract plus a Node/Express reference implementation and stack-agnostic SSR guidance. Not needed for kind "wp_rest" sites — those have nothing to install. Follow up with autoseo_verify_site once deployed. CAPABILITY: read — side-effect-free.

autoseo_verify_siteA

Re-run the capability probe for a connected site (must belong to the active org). Call this after the AI has installed and deployed the /autoseo-publish endpoint from autoseo_integration_kit, to confirm it responds correctly to a signed test request before calling autoseo_configure or autoseo_generate_post — generating content against an unverified endpoint will fail at publish time. It also verifies wp_rest and git_pr connections. For webhook sites, a 404 or 405 usually means the endpoint is not deployed yet; re-call after deploying. Also useful to re-check a site after the user rotates its signing secret or migrates infrastructure. Returns the refreshed capabilities map. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

autoseo_list_sitesA

List the sites/targets connected to AutoSEO for the active org: id, kind (webhook|wp_rest), name, capabilities and connection health. Use this to find a siteId for autoseo_configure, autoseo_propose_topics or autoseo_generate_post, or to check a site's status before troubleshooting a failed publish. CAPABILITY: read — side-effect-free.

autoseo_configureA

Set the standing AutoSEO configuration for a connected site: approved topics/content pillars, publish cadence, backlink targets to weave into generated posts as outbound links, an image style for generated art, the approval mode, and the blog->social repurpose setting. approvalMode "draft" (recommended, default) routes every generated post into the pending-approval queue for a human to review before anything publishes; only pass "auto" when the user has explicitly opted into unattended publishing. socialRepurpose: when a blog post on this site publishes, auto-draft social announcements (twitter/linkedin) for the human to review and approve — like everything else, this NEVER auto-posts. It is OFF BY DEFAULT: pass { enabled: true } only when the user has explicitly asked for blog posts to generate social announcements, optionally narrowing platforms to just one (default both once enabled). publicBaseUrl only matters for the "git_pr" connector: set it to the real deployed blog base URL (e.g. "https://blog.acme.com") so social announcements link to the live article — without it, git-connected sites skip the social repurpose rather than ever link a post at a GitHub PR URL. Call this after autoseo_verify_site confirms the site is live, and ideally after autoseo_propose_topics so topics/pillars reflect an approved plan rather than a guess. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

autoseo_auto_configureA

ONE-CLICK AutoSEO onboarding — "auto do the thing". For a connected site (siteId from autoseo_connect_site / autoseo_list_sites), this single call replaces the manual autoseo_propose_topics → autoseo_configure sequence: it (a) runs the topic-proposal engine to derive question-shaped topics/pillars for the site, (b) saves them into the site config with safe defaults for anything the user has not already set — weekly cadence, "illustration" image style, and approvalMode "draft" (the human approval gate; auto-configure NEVER opts a user into unattended publishing) — and (c) if generateFirst is true, also queues the first article on the top proposed topic as a PENDING draft awaiting human approval (counts against the plan's monthly article quota; omit it to configure without generating). Existing deliberate settings are preserved: user-typed pillars stay first with proposed topics appended (deduped), and an existing cadence/imageStyle/approvalMode is never overwritten. Returns { config, proposedTopics (question + rationale, relay these to the user), firstPost? ({ status: "queued", draftId } on success — approve it with approve_draft after the human reviews it) }. Prefer this right after autoseo_connect_site when the user just wants it set up; use autoseo_propose_topics + autoseo_configure instead when they want to hand-pick topics. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

autoseo_propose_topicsA

Use the connected site name and configured pillars to brainstorm AI-estimated, question-shaped topics with rationale (search intent and AI-citation angle). This does NOT crawl the site, inspect existing pages, or use measured search data. Call after autoseo_connect_site and autoseo_verify_site, and before autoseo_configure, so the user approves a concrete topic list instead of a blind cadence. Relay the returned proposals to the user for approval, then pass the approved subset into autoseo_configure's topics. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

autoseo_generate_postA

Generate one AI-drafted, answer-shaped blog post for a topic on a connected site and land it as a draft awaiting approval (or a future schedule) — this never auto-publishes on its own. schedule is an optional future ISO datetime; omit it to leave the post as an unscheduled draft. Runs the platform's dedup/uniqueness/quality gates before returning and includes jsonldValid in the response, reporting whether the generated Article/FAQPage structured data parses cleanly — that's what makes a post eligible for AI-answer-engine citation. Source topic from autoseo_propose_topics rather than guessing one. Writing style for any post content you draft: write like the account's human owner, not like an AI. NEVER use em-dashes or en-dashes (—, –) or double hyphens (--); use a period, comma or colon instead. Skip hashtag spam (0-1 hashtags), filler openers ("Exciting news!") and rocket/sparkle emoji. Before drafting, read the account's recent posts with list_posts and match their voice, casing and rhythm. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

keyword_researchA

Research and persist keyword opportunities for a seed keyword or supplied site/URL. Slice A uses AI ideation and returns source="estimated" on every row: volume is a coarse range band and KD is Low/Medium/High, never a fabricated exact number. Exact searchVolume, difficulty and cpc remain null. A future configured live provider can return source="live" with measured values through the same shape. Always relay each row source and never describe estimated bands as measured search data. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

keyword_add_to_planA

Add selected persisted keyword rows to an existing AutoSEO content plan. Appends the keyword text to the selected site's config.topics and marks those rows in_plan; it does not generate or publish an article. Later AutoSEO generation still lands behind the normal human approval gate. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

create_posts_from_sourceA

Turn RAW MATERIAL into platform-native post drafts. Give it one or more URLs, pasted text, or both, and TimeToPost fetches + extracts them, brings out the claims (every claim must be backed by a verbatim quote from the source — unquotable claims are deterministically dropped, so it will not invent facts), plans genuinely DIFFERENT angles across platforms (an X thread and a LinkedIn post never carry the same claims), drafts each one in a real native format, and runs length/groundedness/originality gates. The drafts land PENDING in the human approval queue — this NEVER publishes and never schedules on its own. Returns 202 with an ingestId: poll get_source_status until READY, EMPTY (the page had too little text — ask the user to paste the article text and call again with text) or FAILED. Only CONNECTED platforms are drafted for. Writing style for any post content you draft: write like the account's human owner, not like an AI. NEVER use em-dashes or en-dashes (—, –) or double hyphens (--); use a period, comma or colon instead. Skip hashtag spam (0-1 hashtags), filler openers ("Exciting news!") and rocket/sparkle emoji. Before drafting, read the account's recent posts with list_posts and match their voice, casing and rhythm. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

get_source_statusA

Poll one source ingest by id (from create_posts_from_source). Returns status (QUEUED → FETCHING → BRIEFING → PLANNING → DRAFTING → READY, or EMPTY/FAILED), the evidence-backed brief, the angle plan, the per-item extraction result ("thin" = that page had under 200 words of real text and was excluded rather than hallucinated from), and the PENDING drafts it produced. A draft with needsFactCheck=true could not be fully verified against the source — tell the human before they approve it. CAPABILITY: read — side-effect-free.

list_sourcesA

List this org's recent source ingests (newest first) with status, planned platforms, draft counts and per-item extraction results. Read-only. CAPABILITY: read — side-effect-free.

create_dm_funnelA

Create an INACTIVE beta Instagram comment-to-DM funnel for one already-published post. The funnel matches normalized whole keywords/phrases, waits 30-120 seconds, then sends one official Private Reply containing exactly one rendered {{link}}; publicReplyTemplate is optional and OFF when omitted. This tool can only draft the funnel and cannot activate it. A signed-in human must review and activate it in the dashboard. CAPABILITY: draft — creates content that cannot reach an audience on its own. Safe for a draft-only agent token.

list_dm_funnelsA

List this organization's post-scoped Instagram DM funnels, including Draft/Active state, account and post snapshots, keywords, today's reserved send usage, poll errors, and reconnect state. This is read-only; there is deliberately no MCP activation tool. CAPABILITY: read — side-effect-free.

list_funnel_hitsA

List captured comment evidence and delivery outcomes for one DM funnel: commenter, comment id/text, matched keyword, rendered reply snapshots, timestamps, detailed status, and public dmStatus lifecycle including window_expired. Read-only failure-queue visibility; a hit means a matching commenter, not a verified link conversion. CAPABILITY: read — side-effect-free.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MelMayssonOwen/timetopost-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server