Use Upload-Post with Google ADK
Google's Agent Development Kit (ADK) loads MCP tools through
McpToolset. Connect it to the hosted
Upload-Post MCP server and your agent gets nearly
60 tools to publish, schedule and analyze posts on TikTok, Instagram, YouTube,
LinkedIn, Facebook, X, Threads, Pinterest, Bluesky and more.
- Endpoint:
https://mcp.upload-post.com/mcp(Streamable HTTP) - Auth:
Authorization: ApiKey <UPLOAD_POST_API_KEY>
Installation
pip install "google-adk[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 your Gemini key:
export UPLOAD_POST_API_KEY="your-upload-post-api-key"
export GOOGLE_API_KEY="your-gemini-api-key"
Example
Create an agent package (social_agent/__init__.py containing
from . import agent, and social_agent/agent.py):
# social_agent/agent.py
import os
from google.adk.agents import LlmAgent
from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams
root_agent = LlmAgent(
model="gemini-flash-latest",
name="social_media_manager",
instruction=(
"You publish social media posts through Upload-Post. Call list_users first "
"to find the profile and its connected accounts. After an upload, poll "
"get_status with the returned request_id until it finishes."
),
tools=[
McpToolset(
connection_params=StreamableHTTPConnectionParams(
url="https://mcp.upload-post.com/mcp",
headers={"Authorization": f"ApiKey {os.environ['UPLOAD_POST_API_KEY']}"},
timeout=30,
),
# Optional: expose only the tools this agent needs.
tool_filter=[
"list_users",
"upload_text",
"upload_video",
"upload_photos",
"get_status",
"list_scheduled",
],
)
],
)
Run it from the parent directory with the dev UI or the CLI:
adk web # then pick social_media_manager in the browser
adk run social_agent
Try a prompt such as: "List my Upload-Post profiles, then post 'Hello from Google ADK!' to X and LinkedIn from the first profile and tell me the final status."
ADK recommends defining McpToolset synchronously in agent.py, as above, for
agents you deploy.
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
- Google ADK: MCP tools
- Upload-Post API reference