Uber External Ads API MCP Server
Provides access to Uber's External Ads API for comprehensive advertising campaign management, including creating, retrieving, updating, and deleting campaigns with support for budget management, scheduling, and campaign objectives.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Uber External Ads API MCP Servershow me the active campaigns for ad account d924b89c-09f9-477b-a3ae-5526aa533835"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 buildUsage
Development
npm run devProduction
npm startAvailable Tools
get_campaigns
Retrieve campaigns for an ad account.
Parameters:
auth_token(required): Bearer token for authenticationad_account_id(required): The ad account UUIDfilters(optional): Object with filtering optionsstatus: 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 authenticationad_account_id(required): The ad account UUIDcampaign_id(required): The campaign UUID
create_campaign
Create a new campaign.
Parameters:
auth_token(required): Bearer token for authenticationad_account_id(required): The ad account UUIDcampaign_data(required): Campaign configuration objectname(required): Campaign namebudget_amount(required): Budget amount in USDstatus: Campaign status (ACTIVE, PAUSED) - default: ACTIVEbudget_type: Budget type (DAILY, LIFETIME) - default: DAILYstart_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 authenticationad_account_id(required): The ad account UUIDcampaign_id(required): The campaign UUIDcampaign_data(required): Updates to applyname: Campaign namestatus: Campaign status (ACTIVE, PAUSED)budget_amount: Budget amount in USDend_time: Campaign end time (ISO 8601)
delete_campaign
Delete a campaign.
Parameters:
auth_token(required): Bearer token for authenticationad_account_id(required): The ad account UUIDcampaign_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 toolscreate_campaignD
Create a new campaign
| Name | Required | Description | Default |
|---|---|---|---|
| ad_account_id | Yes | The ad account UUID | |
| auth_token | No | Bearer token for authentication | |
| campaign_data | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| ad_account_id | Yes | The ad account UUID | |
| auth_token | No | Bearer token for authentication | |
| campaign_id | Yes | The campaign UUID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| ad_account_id | Yes | The ad account UUID | |
| auth_token | No | Bearer token for authentication | |
| campaign_id | Yes | The campaign UUID |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| ad_account_id | Yes | The ad account UUID | |
| auth_token | No | Bearer token for authentication | |
| filters | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| ad_account_id | Yes | The ad account UUID | |
| auth_token | No | Bearer token for authentication | |
| campaign_data | Yes | ||
| campaign_id | Yes | The campaign UUID |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
v1.0.0- First observed
create_campaign - First observed
delete_campaign - First observed
get_campaign - First observed
get_campaigns - First observed
update_campaign
TDQS
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.
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.
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.
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
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
Build, edit and sync Google, Microsoft, Reddit and Meta ad campaigns from your assistant.
Manage ad campaigns across Google, Meta, LinkedIn, Reddit, TikTok, and more via AI.
Manage ad campaigns across Google, Meta, LinkedIn, Reddit, TikTok, and more via AI.
Manage Apple Ads campaigns and reporting in chat.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables 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.48MIT
- AlicenseBqualityBmaintenanceEnables comprehensive Google Ads campaign management and analysis through natural language, including performance metrics, keyword optimization, budget management, and custom GAQL queries.10013MIT
- FlicenseNot gradedqualityCmaintenanceEnables 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-
- -licenseNot gradedqualityNot gradedmaintenanceEnables 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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