Skip to main content

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.