Skip to main content
Glama
ekim197

Uber External Ads API MCP Server

by ekim197

Uber External Ads API MCP Server

An MCP (Model Context Protocol) server that provides access to Uber's External Ads API for campaign management.

Features

  • Get Campaigns: Retrieve campaigns for an ad account with optional filtering

  • Get Campaign: Get details for a specific campaign

  • Create Campaign: Create new advertising campaigns

  • Update Campaign: Modify existing campaigns

  • Delete Campaign: Remove campaigns

Related MCP server: Google Ads MCP Server

Installation

npm install
npm run build

Usage

Development

npm run dev

Production

npm start

Available Tools

get_campaigns

Retrieve campaigns for an ad account.

Parameters:

  • auth_token (required): Bearer token for authentication

  • ad_account_id (required): The ad account UUID

  • filters (optional): Object with filtering options

    • status: Filter by campaign status (ACTIVE, PAUSED, DELETED)

    • limit: Number of campaigns to return (1-100, default: 20)

    • offset: Number of campaigns to skip (default: 0)

get_campaign

Get details for a specific campaign.

Parameters:

  • auth_token (required): Bearer token for authentication

  • ad_account_id (required): The ad account UUID

  • campaign_id (required): The campaign UUID

create_campaign

Create a new campaign.

Parameters:

  • auth_token (required): Bearer token for authentication

  • ad_account_id (required): The ad account UUID

  • campaign_data (required): Campaign configuration object

    • name (required): Campaign name

    • budget_amount (required): Budget amount in USD

    • status: Campaign status (ACTIVE, PAUSED) - default: ACTIVE

    • budget_type: Budget type (DAILY, LIFETIME) - default: DAILY

    • start_time: Campaign start time (ISO 8601)

    • end_time: Campaign end time (ISO 8601)

    • objective: Campaign objective (AWARENESS, CONSIDERATION, CONVERSION) - default: CONVERSION

update_campaign

Update an existing campaign.

Parameters:

  • auth_token (required): Bearer token for authentication

  • ad_account_id (required): The ad account UUID

  • campaign_id (required): The campaign UUID

  • campaign_data (required): Updates to apply

    • name: Campaign name

    • status: Campaign status (ACTIVE, PAUSED)

    • budget_amount: Budget amount in USD

    • end_time: Campaign end time (ISO 8601)

delete_campaign

Delete a campaign.

Parameters:

  • auth_token (required): Bearer token for authentication

  • ad_account_id (required): The ad account UUID

  • campaign_id (required): The campaign UUID

Example Usage

Using the provided curl request as an example:

// Get campaigns
await callTool('get_campaigns', {
  auth_token: 'IA.AQAAAATlHYAkrhJsBvg2h_K7dmXYDF_9LQAe8gEiCkd7Wyd79AB36AmskjmnMMPtDOwrWBgnGuHNb0Esrh2dScncw8weNgx5kjMNtxP88XJSdDzjfdOmcWe3Zvc0rHx-p5ldHqmXvDvUnjndiPqXigz_yg332ek6b_dmR-1KRus',
  ad_account_id: 'd924b89c-09f9-477b-a3ae-5526aa533835',
  filters: {
    status: 'ACTIVE',
    limit: 10
  }
});

Configuration

The server uses the Uber External Ads API base URL: https://api.uber.com/v1/ads

All requests require a valid Bearer token for authentication.

Error Handling

The server provides detailed error messages for:

  • Authentication failures

  • Invalid parameters

  • API errors

  • Network issues

Errors are returned with isError: true and descriptive messages.

Security

  • All authentication tokens are validated

  • Input parameters are validated using Zod schemas

  • API responses are properly formatted and sanitized

Available Tools

5 tools
create_campaignD

Create a new campaign

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesThe ad account UUID
auth_tokenNoBearer token for authentication
campaign_dataYes

TDQS

D1.8/5.0
Behavior1/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure but offers none. It doesn't indicate that this is a write operation (creating a resource), mention authentication requirements (though 'auth_token' is in the schema), discuss potential side effects (e.g., budget charges), rate limits, or what happens on success/failure. For a mutation tool with zero annotation coverage, this is critically inadequate.

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?

The description is extremely concise at three words, with zero wasted language. It's front-loaded with the core action ('Create'), though this brevity comes at the cost of completeness. Every word earns its place by directly stating the tool's function, albeit minimally.

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

Completeness1/5

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

Given the tool's complexity (3 parameters with nested objects, no output schema, and no annotations), the description is severely incomplete. It doesn't address the mutation nature, authentication needs, parameter meanings, or expected outcomes. For a tool that creates resources with financial implications (budget), this lack of context is a major risk for correct agent usage.

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

Parameters2/5

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

The schema description coverage is 67%, meaning some parameters are undocumented in the schema. The description adds no parameter semantics beyond what's in the schema—it doesn't explain the purpose of 'ad_account_id', 'auth_token', or 'campaign_data', nor does it clarify relationships between parameters (e.g., that 'campaign_data' contains nested fields). With low coverage and no compensation in the description, significant gaps remain.

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

Purpose2/5

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

The description 'Create a new campaign' is a tautology that merely restates the tool name 'create_campaign'. It lacks specificity about what a 'campaign' is in this context (e.g., advertising campaign) and doesn't distinguish this tool from its siblings like 'update_campaign' or 'delete_campaign' beyond the basic verb. No additional context about the resource type or domain is provided.

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

Usage Guidelines1/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an ad account), when not to use it (e.g., for modifying existing campaigns), or refer to sibling tools like 'update_campaign' or 'delete_campaign'. This leaves the agent with no contextual cues for tool selection.

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

delete_campaignC

Delete a campaign

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesThe ad account UUID
auth_tokenNoBearer token for authentication
campaign_idYesThe campaign UUID

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. 'Delete' implies a destructive, irreversible mutation, but the description doesn't disclose behavioral traits like permission requirements, side effects (e.g., what happens to associated ads), or confirmation steps. This is a significant gap for a destructive tool with zero annotation coverage.

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?

The description is a single, efficient sentence with zero waste. It's appropriately sized and front-loaded, though its brevity contributes to gaps in other dimensions. Every word earns its place in stating the core action.

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

Completeness2/5

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

Given the tool's complexity (destructive mutation with 3 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't address critical aspects like what deletion entails, error handling, or return values, leaving the agent with insufficient context for safe and effective use.

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 the schema already documents all parameters (ad_account_id, auth_token, campaign_id) with descriptions. The description adds no meaning beyond what the schema provides, such as explaining relationships between parameters or usage context. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose3/5

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

The description 'Delete a campaign' clearly states the action (delete) and resource (campaign), but it's vague about scope and doesn't differentiate from siblings like 'update_campaign' which might also modify campaigns. It's a basic statement of purpose without specificity.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing campaign), exclusions, or comparisons to siblings like 'update_campaign' for modifications instead of deletion. The agent must infer usage from the name alone.

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

get_campaignC

Get details for a specific campaign

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesThe ad account UUID
auth_tokenNoBearer token for authentication
campaign_idYesThe campaign UUID

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure but only states it retrieves details without specifying what 'details' includes, whether it's read-only, if it requires specific permissions, or how errors are handled. This leaves significant gaps for a tool that likely interacts with ad campaigns.

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?

The description is a single, clear sentence with no wasted words, making it easy to parse and front-loaded with the core purpose. It efficiently communicates the essential action without unnecessary elaboration.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what details are returned, potential error conditions, or behavioral traits like idempotency or rate limits, which are crucial for an AI agent to use this tool effectively in a real-world context.

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?

The schema description coverage is 100%, so parameters are well-documented in the schema itself. The description adds no additional meaning beyond implying 'campaign_id' identifies the campaign, which is already clear from the schema. This meets the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the action ('Get details') and resource ('for a specific campaign'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_campaigns' (plural) which likely retrieves multiple campaigns versus this single-campaign tool.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention that 'get_campaigns' might be for listing campaigns or that this tool requires specific IDs, nor does it address prerequisites like authentication or account context.

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

get_campaignsC

Get campaigns for an ad account

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesThe ad account UUID
auth_tokenNoBearer token for authentication
filtersNo

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states a read operation ('Get') but lacks details on permissions, rate limits, pagination behavior, or response format. This leaves significant gaps for a tool that likely interacts with an API.

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?

The description is a single, efficient sentence with no wasted words. It is front-loaded and directly states the tool's purpose without unnecessary elaboration.

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

Completeness2/5

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

Given the complexity of a tool with 3 parameters, nested objects, no output schema, and no annotations, the description is insufficient. It does not cover behavioral aspects, response details, or usage context, making it incomplete for effective agent use.

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 67%, with parameters like 'ad_account_id' and 'filters' documented in the schema. The description adds no additional meaning beyond the schema, such as explaining filter usage or authentication context, but the schema provides adequate baseline coverage.

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

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('campaigns for an ad account'), making the purpose understandable. However, it does not distinguish this tool from its sibling 'get_campaign', which likely retrieves a single campaign, leaving some ambiguity about scope.

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

Usage Guidelines2/5

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

No explicit guidance is provided on when to use this tool versus alternatives like 'get_campaign' or other siblings. The description implies usage for retrieving multiple campaigns but offers no context on prerequisites, exclusions, or specific scenarios.

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

update_campaignC

Update an existing campaign

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_account_idYesThe ad account UUID
auth_tokenNoBearer token for authentication
campaign_dataYes
campaign_idYesThe campaign UUID

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool updates campaigns, implying mutation, but fails to describe critical behaviors such as permission requirements, whether updates are reversible, error handling, or side effects. This leaves significant gaps for a mutation tool.

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?

The description is extremely concise with a single sentence that directly states the tool's purpose. There is no wasted language or unnecessary elaboration, making it front-loaded and efficient, though this conciseness comes at the cost of detail.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description is insufficient. It lacks information on behavioral traits, usage context, and output expectations, leaving the agent with incomplete guidance despite the decent schema coverage for inputs.

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?

The schema description coverage is 75%, with parameters like 'campaign_data' having nested properties documented. The description adds no additional parameter semantics beyond what the schema provides, but since the schema coverage is relatively high, a baseline score of 3 is appropriate as the schema does most of the work.

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

Purpose3/5

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

The description 'Update an existing campaign' clearly states the action (update) and resource (campaign), but it's vague about what aspects can be updated and doesn't distinguish this tool from its sibling 'create_campaign' beyond the basic verb difference. It provides minimal but adequate purpose information.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like 'create_campaign' or 'delete_campaign'. The description implies usage for modifying campaigns but offers no context about prerequisites, constraints, or typical scenarios for choosing this over other operations.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv1.0.0
    • First observedcreate_campaign
    • First observeddelete_campaign
    • First observedget_campaign
    • First observedget_campaigns
    • First observedupdate_campaign

TDQS

B3.1/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: create, delete, get (single), get (multiple), and update campaigns. There is no overlap or ambiguity in functionality, making it easy for an agent to select the correct tool for any campaign-related operation.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., create_campaign, delete_campaign, get_campaign, get_campaigns, update_campaign). The naming is uniform and predictable, using snake_case throughout without any deviations or mixed conventions.

Tool Count5/5

With 5 tools, this server is well-scoped for managing campaigns in an ads API context. Each tool serves a specific and necessary function (CRUD operations plus listing), and there are no extraneous or missing tools for this focused domain.

Completeness5/5

The tool set provides complete CRUD coverage for campaigns: create, read (both single and multiple), update, and delete. There are no obvious gaps, as all essential lifecycle operations are covered, ensuring agents can handle campaign management without dead ends.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to manage TikTok advertising campaigns through the TikTok Ads API. Supports campaign creation, performance analytics, audience management, creative operations, and custom reporting through natural language interactions.
    48
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables comprehensive Google Ads campaign management and analysis through natural language, including performance metrics, keyword optimization, budget management, and custom GAQL queries.
    100
    13
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables comprehensive management of Google Ads campaigns through natural language, including campaign creation, ad group management, keyword operations, Performance Max campaigns, conversion tracking, and performance insights with support for multiple accounts.
    4
    -
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants to manage Facebook and Instagram advertising campaigns through the Meta Marketing API. Supports full campaign lifecycle management, performance analytics, audience targeting, and creative optimization.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ekim197/HACKATHON_MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server