Use Upload-Post with CrewAI
CrewAI agents can use tools from remote MCP servers. Connect them to the hosted Upload-Post MCP server and your crew can publish, schedule and analyze posts on TikTok, Instagram, YouTube, LinkedIn, Facebook, X, Threads, Pinterest, Bluesky and more, with nearly 60 tools.
- Endpoint:
https://mcp.upload-post.com/mcp(Streamable HTTP) - Auth:
Authorization: ApiKey <UPLOAD_POST_API_KEY>
Installation
pip install crewai 'crewai-tools[mcp]'
API key
Generate a key in the Upload-Post dashboard under API Keys, connect your social accounts to a profile, then export it together with the key for your LLM provider:
export UPLOAD_POST_API_KEY="your-upload-post-api-key"
export OPENAI_API_KEY="your-openai-api-key"
Example: mcps on the agent
The simplest option is to declare the server on the agent. CrewAI connects, loads the tools and closes the connection for you.
import os
from crewai import Agent, Crew, Task
from crewai.mcp import MCPServerHTTP
social_manager = Agent(
role="Social media manager",
goal="Publish posts through Upload-Post and confirm they went live",
backstory=(
"You manage social accounts with Upload-Post. You always call list_users "
"first to find the profile, and after an upload you poll get_status with "
"the returned request_id until it finishes."
),
mcps=[
MCPServerHTTP(
url="https://mcp.upload-post.com/mcp",
headers={"Authorization": f"ApiKey {os.environ['UPLOAD_POST_API_KEY']}"},
streamable=True,
cache_tools_list=True,
),
],
)
publish = Task(
description=(
"List my Upload-Post profiles, then post 'Hello from CrewAI!' to X and "
"LinkedIn from the first profile."
),
expected_output="The profile used, the request_id and the final status per platform.",
agent=social_manager,
)
result = Crew(agents=[social_manager], tasks=[publish]).kickoff()
print(result)
Example: MCPServerAdapter
If you want to manage the connection yourself, or reuse the same tools across
several agents, use MCPServerAdapter from crewai-tools as a context manager:
import os
from crewai import Agent, Crew, Task
from crewai_tools import MCPServerAdapter
server_params = {
"url": "https://mcp.upload-post.com/mcp",
"transport": "streamable-http",
"headers": {"Authorization": f"ApiKey {os.environ['UPLOAD_POST_API_KEY']}"},
}
with MCPServerAdapter(server_params, connect_timeout=60) as upload_post_tools:
publisher = Agent(
role="Video publisher",
goal="Publish videos to short-form platforms",
backstory="You publish videos with Upload-Post and verify them with get_status.",
tools=upload_post_tools,
)
task = Task(
description=(
"Publish https://example.com/launch.mp4 to TikTok and Instagram from my "
"first Upload-Post profile with the caption 'We just launched!'."
),
expected_output="The request_id and the final status per platform.",
agent=publisher,
)
print(Crew(agents=[publisher], tasks=[task]).kickoff())
Uploads are asynchronous
upload_video, upload_photos and upload_text return a request_id right
away while the post is delivered to each platform in the background. The agent
should call get_status with that request_id until it reports success or
failure. Scheduled or queued posts return a job_id instead: check them with
get_job_status or list_scheduled. See Async uploads.
Links
- Upload-Post MCP server guide: auth modes, full tool list, upload parameters
- CrewAI: MCP servers as tools
- Upload-Post API reference