Skip to main content
Glama
markaestro

Markaestro

Official

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MARKAESTRO_API_KEYNoWorkspace API key from Settings, API Access (e.g. mk_live_...). Only needed when running the local stdio package `npx -y @markaestro/mcp`, which reads media from your own disk. The hosted MCP server at https://markaestro.com/api/public/v1/mcp requires no key or arguments; it authenticates via OAuth 2.1 with PKCE and dynamic client registration.

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
}
prompts
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_productsA

List the brands (products) this connection can act on, with their connected channels: one brand for a single-brand connection, every brand in the workspace for an all-brands one. Call this first to learn each productId and which channels can be posted to.

list_destinationsA

List the publishable destinations (Facebook Page, Instagram account, TikTok account, ...) of a brand, with their ids and delivery modes. Use a destinationId on create_post only when a channel has more than one destination.

get_brand_profileA

A brand's description, website, categories, voice, and visual identity as set in Markaestro. Read it before writing captions so they sound like the brand. Read-only.

list_postsA

List posts, newest first. Filter by status: draft, scheduled, publishing, published, platform_action_required, failed, partial_failed. On an all-brands connection, pass productId to list one brand. Use cursor from a previous page to continue.

get_postB

Fetch one post with its targets, status, media, schedule, publish results, and live URL when published.

update_postA

Change a draft or scheduled post: its caption, its media, one channel's settings (settings.__type names the channel), or, for a scheduled post, its time. Omitted fields stay as they are. Every change is checked against the rules of every channel the post targets, and a scheduled post must still be publishable afterwards. Published and failed posts cannot be edited. Channels are fixed once a post exists; to post somewhere else, create a new post.

create_postA

Create a post for this brand. Without scheduledAt the post is saved as a DRAFT and nothing is published; with scheduledAt it is scheduled and the worker publishes it at that time. Pass either a single channel or a targets array (one entry per channel). Upload media first with upload_media and pass the asset ids. Read channel rules with get_channel_rules before posting.

publish_postA

Queue an immediate publish of a draft post. Returns a job run; poll get_job_run until status is succeeded or failed. For manual_reminder targets this queues a reminder for a person instead of calling the platform. The post goes public on the platform as soon as the run succeeds.

mark_post_postedA

Record that a person has posted a manual-reminder or TikTok-inbox post natively, which moves it from platform_action_required to published. Only for posts in platform_action_required that the user has already posted themselves. Nothing is sent to any platform.

delete_postA

Delete a draft, or cancel a scheduled, failed, or waiting-to-be-posted post before it reaches any platform. Published posts cannot be deleted or taken down from here: that stays with the user in Markaestro. Posts mid-publish cannot be deleted until the run settles.

bulk_postsA

Apply one action to up to 25 posts: reschedule (needs scheduledAt), or status (draft or scheduled). Per-post failures are reported individually. To remove posts, use delete_post on each draft.

create_postsA

Create up to 25 posts in one call, for example a week of scheduled content. Each item takes the same fields as create_post. Failures are per item: the response lists ok/error for each, and the successful ones are created even when others fail.

preview_evergreen_queueA

Check whether a published post has mature measured performance and get a recommended Evergreen cadence. This does not create or schedule anything.

list_evergreen_queuesA

List this brand's Intelligent Evergreen queues and their activation evidence, cadence, next run, and status.

get_evergreen_queueB

Get one Intelligent Evergreen queue including its caption variants.

create_evergreen_queueA

Create a draft Evergreen queue from an eligible published post. Creation does not activate it or schedule anything; activate_evergreen_queue does that separately.

update_evergreen_queueA

Update a queue's cadence, review policy, expiry, name, or full caption-variant set. Pass the current version from get_evergreen_queue; a stale version is rejected so concurrent edits are not overwritten.

activate_evergreen_queueA

Activate a draft or paused queue. This schedules future public posts. The user must have confirmed the caption variants (contentConfirmed on create_evergreen_queue or update_evergreen_queue); otherwise this answers EVERGREEN_CONTENT_REVIEW_REQUIRED.

pause_evergreen_queueA

Pause a queue and unschedule any pending occurrence generated by it.

resume_evergreen_queueB

Resume a paused queue and compute its next occurrence from the current time.

list_evergreen_runsC

List the generated occurrences and evaluation outcomes for a queue.

get_evergreen_analyticsA

Get source metrics, queue-lifetime metrics, tracked clicks, attributed conversions, and recent run outcomes. Unavailable provider metrics are null, not zero.

get_analyticsA

Performance over a window for the connection's brand, or on an all-brands connection for the workspace or the one brand named by productId: totals with the prior period for deltas, per-channel rollups, daily series, engagement breakdown, follower trend, top posts, posting-time heatmap, content-type averages, computed insights, and coverage. Covers the whole account: posts published through Markaestro and posts published directly on the platform (discovered from the connected account); coverage.bySource says how many of each. Read this before recommending what, when, or where to post. The window is clamped to the plan's history (the response reports maxDays). Unavailable provider metrics are null, not zero.

list_post_analyticsA

Every post in the window (the connection's brand, or on an all-brands connection the workspace or the brand named by productId) with its latest metrics (views, reach, likes, comments, shares, saves, clicks, engagements, engagement rate), one row per post, sorted. Includes posts published directly on the platform; each row's source says markaestro or native (canTakeDown is informational: taking a live post down is done by the user in Markaestro, not by delete_post). Use sort=engagements or sort=views to find what worked; sort=published_at (default) for a chronological read. Pair with get_post for the full caption and media of a Markaestro post (native posts have externalUrl instead).

get_post_analytics_historyA

How one post earned its numbers over time: the metric snapshots taken 1h, 6h, 24h, 72h, 7d, 14d, 30d, 60d, and 90d after publish (a post published directly on the platform starts with a discovered snapshot), with the growth between stages, plus the current totals and whether polling is still active. Takes any id from get_analytics or list_post_analytics. Answers NOT_FOUND for posts outside this brand.

refresh_analyticsA

Pull live metrics from the platforms now instead of waiting for the next scheduled poll: posts in the window (optionally one channel, or one brand on an all-brands connection) and today's follower counts. The answer says how many posts were updated and how many remain, since a large window may take more than one refresh. Limited to a few calls a minute.

suggest_post_timesA

When this brand's audience responds best, learned by Markaestro Intelligence from the brand's own post history (not an industry table). timing is null until there is enough history; readiness says how much there is. Use it to pick scheduledAt. Needs a plan with Intelligence.

upload_mediaA

Upload an image or video from a local file path, an http(s) URL, or a data: URL. Returns the media asset; pass its id in create_post mediaAssetIds. Counts against the workspace's monthly upload quota.

list_mediaB

List uploaded media assets with their ids, type, dimensions, and how many posts reference them.

get_mediaA

Fetch one media asset: type, dimensions, processing state, thumbnail, and how many posts reference it.

get_job_runA

Check the status of a publish run returned by publish_post: queued, running, succeeded, or failed, with the message and details.

list_job_runsB

List recent publish runs, optionally filtered by status or by the post id (resourceId).

get_channel_rulesA

The per-channel media, caption, and delivery-mode rules the API enforces, plus the draft-then-publish model. Read before creating posts.

get_tiktok_posting_optionsA

The connected TikTok creator's live posting options: allowed privacy levels, whether comments, duets, and stitches can be enabled, and the longest video. TikTok requires a Direct Post to use these, so read them right before building one and pass the chosen privacyLevel in the tiktok settings. Test keys get a sandbox answer.

Prompts

Interactive templates invoked by user choice

NameDescription
schedule_postWalk through creating and scheduling a post for this brand.

Resources

Contextual data attached and managed by the client

NameDescription
channel-rulesPer-channel media, caption, and delivery-mode rules.

TDQS

A3.6/5.0

Scored across 34 tools

Disambiguation4/5

Most tools have distinct resource+action targets (posts, media, evergreen queues, jobs). The four analytics tools (get_analytics, list_post_analytics, get_post_analytics_history, get_evergreen_analytics) and the create_post/create_posts/bulk_posts/update_post cluster overlap somewhat, but descriptions clearly scope each to a level (account vs per-post list vs single-post history) or operation, so misselection is limited.

Naming Consistency4/5

Strong, predictable verb_noun convention throughout (list_posts, get_post, create_post, update_post, delete_post, activate_evergreen_queue, refresh_analytics). The few deviations (bulk_posts, mark_post_posted, preview_evergreen_queue) are still readable and don't significantly break the pattern.

Tool Count3/5

34 tools is on the heavy side and clearly above the ideal 3-15 range. The breadth is partially justified by several genuine sub-domains (posts, media, evergreen lifecycle, analytics, jobs), but the analytics and post-creation clusters in particular could be consolidated.

Completeness5/5

Covers full lifecycle: post CRUD plus bulk create/reschedule, media upload/list/get, complete evergreen queue lifecycle (create/update/activate/pause/resume/preview/runs/analytics), multi-level analytics with refresh, job runs, brand profile, channel rules, destinations, and products. Only trivial gaps (e.g. no media delete), so no real dead ends for the stated domain.