Skip to main content
Glama

meta_ads_videos_upload

Uploads a video to a Meta Ads account from a public HTTPS URL and returns the video_id needed to build ad creatives. Meta fetches and processes the file asynchronously; poll status until ready.

Instructions

Uploads a video to the Meta Ads account by fetching it from a public HTTPS URL. Returns the video_id to reference in creative-construction tools. Mutating — the asset is persisted. Meta fetches the URL itself and then processes the video asynchronously: poll meta_ads_videos_get until status.video_status reports ready (typically a few minutes) before attaching it to a creative. Supported formats: MP4, MOV, AVI, WMV, MKV, up to 1 GB via this tool; larger files need resumable upload (not yet supported). For uploads from local files use meta_ads_videos_upload_file.

Input Schema

NameRequiredDescriptionDefault
titleNoOptional title stored with the uploaded video. Used for library organization; not shown in ads.
reasonNoWhy this change is being made: one or two sentences naming the evidence and the expected effect. Stored in the journal and on the action_log entry this call produces, for the operator and the next session.
approvalNoExternal approval this change carries out (recorded and shown, never verified)
expectedNoExpected effects [{metric, direction, target?, horizon_days?, primary?}], exactly one primary:true when several; metric cpa/cpc/cpl/cpm/conversions/cvr/ctr/roas/cost/spend/clicks/impressions; direction up/down/hold.
video_urlYesPublic HTTPS URL of the video. Meta fetches it once at upload time. Supported formats: MP4, MOV, AVI, WMV, MKV, up to 1 GB; larger files need resumable upload (not yet supported).
account_idNoMeta Ads account ID in the format 'act_XXXXXXXXXX' (e.g. 'act_1234567890'). Optional — falls back to META_ADS_ACCOUNT_ID from the configured credentials. The leading 'act_' prefix is required.
decision_idNoA proposed decision this change carries out.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.33.0
    • changedInput schema / properties / expected / description
      Previous value: -"Expected effects [{metric, direction, target?, horizon_days?}]; metric cpa/cpc/cpl/cpm/conversions/cvr/ctr/roas/cost/spend/clicks/impressions; direction up/down/hold."New value: +"Expected effects [{metric, direction, target?, horizon_days?, primary?}], exactly one primary:true when several; metric cpa/cpc/cpl/cpm/conversions/cvr/ctr/roas/cost/spend/clicks/impressions; direction up/down/hold."
  2. Changed1 schema field changedv0.28.0
    • addedInput schema / properties / approval
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "External approval this change carries out (recorded and shown, never verified)",
      +  "properties": {
      +    "approved_at": {
      +      "maxLength": 64,
      +      "type": "string"
      +    },
      +    "approved_by": {
      +      "maxLength": 80,
      +      "type": "string"
      +    },
      +    "reference": {
      +      "maxLength": 128,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "reference",
      +    "approved_by",
      +    "approved_at"
      +  ],
      +  "type": "object"
      +}
  3. Changed2 schema fields changedv0.26.0
    • addedInput schema / properties / decision_id
      Added value: +{
      +  "description": "A proposed decision this change carries out.",
      +  "maxLength": 128,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / expected
      Added value: +{
      +  "description": "Expected effects [{metric, direction, target?, horizon_days?}]; metric cpa/cpc/cpl/cpm/conversions/cvr/ctr/roas/cost/spend/clicks/impressions; direction up/down/hold.",
      +  "maxItems": 12,
      +  "type": "array"
      +}
  4. Changed1 schema field changedv0.20.0
    • addedInput schema / properties / reason
      Added value: +{
      +  "description": "Why this change is being made: one or two sentences naming the evidence and the expected effect. Stored in the journal and on the action_log entry this call produces, for the operator and the next session.",
      +  "maxLength": 500,
      +  "type": "string"
      +}
  5. Changed2 schema fields changedv0.10.37
    • addedInput schema / additionalProperties
      Added value: +false
    • changedInput schema / properties / video_url / description
      Previous value: -"Public HTTPS URL of the video. Meta fetches it once at upload time. Supported formats: MP4, MOV. Recommended max 4 GB."New value: +"Public HTTPS URL of the video. Meta fetches it once at upload time. Supported formats: MP4, MOV, AVI, WMV, MKV, up to 1 GB; larger files need resumable upload (not yet supported)."
  6. Addedv0.9.12
  7. Removedv0.9.6
  8. Addedv0.9.2
  9. Removedv0.9.1
  10. Addedv1.0.5

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it declares the operation mutating and persistent, explains that Meta fetches the URL server-side once at upload time, and discloses the asynchronous processing with an expected latency ('typically a few minutes'). It also states the return value (video_id) and the format/size ceiling, leaving no surprising side effect undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose and return value, then mechanism, then async caveat, then limits and alternative tool — each sentence adds a new decision-relevant fact. Six sentences with no repetition despite covering a lot of ground.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description supplies the key return value (video_id) and its downstream use. Given a mutation tool with no annotations and seven parameters, the description covers safety profile, latency, limits, and sibling routing — nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented, including the format/size note for video_url and the act_ prefix rule for account_id. The description's format and size sentence largely restates the video_url schema text and adds no syntax or constraint detail for the remaining governance parameters (reason, approval, expected, decision_id). Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Uploads a video to the Meta Ads account') and immediately pins down the mechanism ('by fetching it from a public HTTPS URL'). It explicitly separates itself from the closest sibling by naming meta_ads_videos_upload_file for local files, so an agent can choose correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing rules in both directions: use this tool for public HTTPS URLs, use meta_ads_videos_upload_file for local files, and use resumable upload (unsupported here) for files over 1 GB. It also prescribes the post-call workflow — poll meta_ads_videos_get until status.video_status is ready before attaching to a creative — which is exactly the when/what-next guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools