Letting an AI assistant schedule social posts is easy to demo. You connect an MCP server, type "post this to LinkedIn on Friday at 9", and it works.
Running it every week for several brands is different. We run our own marketing for three products through Feedlio's MCP server from Claude, and the problems we have hit so far fall into seven gaps. None of them is about the model being "smart enough". They are about the agent missing context that the tools could have given it.
Here are the seven checks we now build into every workflow, with the Feedlio tool that answers each one. The same ideas apply to any social or publishing API you put behind MCP.
1. Which workspace is this for?
If you manage more than one brand or client, the first mistake is posting to the right platform in the wrong brand.
In Feedlio each brand or client is a workspace, and list_workspaces returns the ones the signed-in user can reach, with a uid, a name and a timezone. Make the agent resolve the workspace by name first and pass its uid to every later call. Never let it fall back to "the default workspace" for a write.
One more field matters: a workspace with locked_by_plan: true can't be used until the plan changes, so the agent should stop and say so instead of retrying.
2. Can this account actually post?
Not every connected account is a publishing account. Some are connected for other features, such as the inbox.
list_social_accounts returns each account with a uid, a platform_slug and can_post. Two rules:
- Only accounts with
can_post: truego into a create call. - Pass
uidandplatform_slugexactly as returned. Never guess the slug from the account's display name.
If the account the user asked for can't post, the right move is to tell them, not to try another account.
3. Does this platform need extra fields?
A generic "create post" with text, media and a time covers some networks, not all. Each platform has its own required settings, and if your tool schema has no field for a setting, the model can't provide it, however capable it is.
Examples from our own use:
- TikTok needs privacy settings and a music-usage confirmation.
- YouTube needs a title and a category.
- LinkedIn doesn't take "Shorts" as such; a vertical video goes out as a normal video post.
In Feedlio these per-platform settings are presets in the create_post schema. When you write prompts or build your own server, make the agent check the target platforms against their required fields before it calls create, and ask the user for anything missing.
4. Is the media a public URL?
Pushing large files through tool arguments is fragile and expensive in context. Feedlio's approach is a public URL: add_media_from_url fetches the file server-side into the workspace's media library, list_media finds it, and its uid goes into create_post.media_uids.
Two practical checks:
- Import media into the same workspace as the post.
- Confirm the file landed (it appears in
list_media) before scheduling. A post scheduled with missing media fails at publish time, when nobody is watching.
5. Which timezone is that time in?
"Friday at 9" means nothing to an API. Feedlio's list_posts returns timestamps in UTC, and each workspace has its own timezone (ours are Asia/Kuala_Lumpur).
The rule we use: the agent schedules in ISO 8601 UTC, and whenever it shows a time to a person, it converts to the workspace timezone and says which one. That one habit removes most "why did it go out at 1 a.m.?" surprises.
6. Did the first attempt already work?
Models retry. A create call that times out on the client side may still have succeeded on the server. Retrying blindly creates a duplicate post, and duplicates on a public account are worse than a missed slot.
Before any retry of a write, have the agent call list_posts for that workspace (it supports a search filter) and check whether the post already exists. Only then retry.
7. Has a person said yes?
Publishing to a public account has side effects you can't fully undo. In our own use the assistant prepares everything (copy, media, platforms and time) and a person reviews it before it is scheduled.
This check is less about distrusting the model and more about prompt injection. An agent that reads comments, web pages or documents can pick up instructions planted in them. A human confirmation step means a manipulated call stops before it reaches your audience.
Putting it together
Our weekly prompt to the assistant reads roughly like this:
For the "ScanSafe Pro" workspace:
1. List workspaces and use that workspace's uid for every call.
2. List social accounts; use only can_post: true accounts.
3. Draft next week's posts from the plan. For TikTok and YouTube,
list the extra fields each post needs and ask me for missing ones.
4. Import images by public URL and confirm they appear in list_media.
5. Show me every post with its time in the workspace timezone.
6. Schedule only after I approve each one. Before retrying a failed
call, check list_posts for an existing copy.
None of this needs a smarter model. It needs tools that expose the right fields and a workflow that uses them.
Try it
Feedlio publishes to 12 platforms (Facebook, Instagram, LinkedIn, YouTube, TikTok, Threads, Bluesky, Pinterest, Mastodon, Dev.to, Dribbble and Lemmy) and its MCP server works with Claude and ChatGPT. Add https://mcp.feedlio.io/mcp to your assistant and sign in on Feedlio's own page; MCP access comes with the Standard plan and up, and there is a 7-day free trial.
It's also listed on the official MCP Registry, Smithery and mcpservers.org.
Start here: feedlio.io
Top comments (0)