Skip to main content
Glama
ekim197

Uber External Ads API MCP Server

by ekim197

create_campaign

Create new advertising campaigns for Uber with configurable settings including budget, schedule, objectives, and status to manage ad promotions effectively.

Instructions

Create a new campaign

Input Schema

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

Implementation Reference

  • The primary handler function for the 'create_campaign' tool. It validates inputs using Zod schemas, constructs the API URL, sends a POST request to the Uber Ads API to create a campaign, and returns the response or handles errors.
    private async createCampaign(args: any) { const authToken = this.getAuthToken(args.auth_token); const adAccountId = AdAccountIdSchema.parse(args.ad_account_id); const campaignData = CampaignCreateSchema.parse(args.campaign_data); const url = `${UBER_ADS_API_BASE_URL}/${adAccountId}/campaigns`; try { const response = await axios.post(url, campaignData, { headers: { 'Authorization': `Bearer ${authToken}`, 'Accept': 'application/json', 'Content-Type': 'application/json', }, }); return { content: [ { type: 'text', text: JSON.stringify(response.data, null, 2), }, ], }; } catch (error) { return this.handleApiError(error); } }
  • Zod validation schema used in the createCampaign handler to parse and validate the campaign_data input.
    const CampaignCreateSchema = z.object({ name: z.string().min(1, 'Campaign name is required'), status: z.enum(['ACTIVE', 'PAUSED']).default('ACTIVE'), budget_type: z.enum(['DAILY', 'LIFETIME']).default('DAILY'), budget_amount: z.number().positive('Budget amount must be positive'), start_time: z.string().optional(), end_time: z.string().optional(), objective: z.enum(['AWARENESS', 'CONSIDERATION', 'CONVERSION']).default('CONVERSION'), });
  • src/index.ts:211-270 (registration)
    Tool registration in the listTools response, including name, description, and detailed inputSchema matching the handler's expectations.
    name: 'create_campaign', description: 'Create a new campaign', inputSchema: { type: 'object', properties: { auth_token: { type: 'string', description: 'Bearer token for authentication', }, ad_account_id: { type: 'string', description: 'The ad account UUID', }, campaign_data: { type: 'object', properties: { name: { type: 'string', description: 'Campaign name', }, status: { type: 'string', enum: ['ACTIVE', 'PAUSED'], default: 'ACTIVE', description: 'Campaign status', }, budget_type: { type: 'string', enum: ['DAILY', 'LIFETIME'], default: 'DAILY', description: 'Budget type', }, budget_amount: { type: 'number', minimum: 0.01, description: 'Budget amount in USD', }, start_time: { type: 'string', description: 'Campaign start time (ISO 8601)', }, end_time: { type: 'string', description: 'Campaign end time (ISO 8601)', }, objective: { type: 'string', enum: ['AWARENESS', 'CONSIDERATION', 'CONVERSION'], default: 'CONVERSION', description: 'Campaign objective', }, }, required: ['name', 'budget_amount'], additionalProperties: false, }, }, required: ['ad_account_id', 'campaign_data'], additionalProperties: false, }, },
  • src/index.ts:418-419 (registration)
    Dispatcher switch case in the CallToolRequestSchema handler that routes calls to the createCampaign method.
    case 'create_campaign': return await this.createCampaign(args);

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