Skip to main content
Glama

Schedule Pickup

schedule_pickup

Schedule a UPS package pickup by providing date, time window, address, and package details. Get a confirmation number to reference or cancel the pickup.

Instructions

Schedule a UPS package pickup at a specific address and time. Provide the pickup date, time window, address, and package details. Returns a confirmation number to reference or cancel the pickup.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pickupDateYesPickup date in YYYYMMDD format
readyTimeYesEarliest pickup time in HHmm format (e.g. "0900")
closeTimeYesLatest pickup time in HHmm format (e.g. "1700")
nameYesContact name at pickup location
phoneYesContact phone number
addressLine1YesPickup street address
addressLine2NoAddress line 2
cityYesCity
stateProvinceCodeYesState/province code
postalCodeYesZIP/postal code
countryCodeNoCountry codeUS
packageCountYesNumber of packages
totalWeightYesTotal weight in lbs
serviceCodeNoPickup service code (003=On Call Air, 001=Daily)003
specialInstructionsNoSpecial instructions for driver

Implementation Reference

  • The async handler function for 'schedule_pickup'. It constructs the PickupCreationRequest payload (with shipper account, pickup date/time, address, package pieces, total weight, and payment method), POSTs it to the UPS pickup creation API, and returns the formatted response.
    async (params) => {
    	const accountNumber = client.getAccountNumber();
    
    	const pickupRequest = {
    		PickupCreationRequest: {
    			RatePickupIndicator: PICKUP.RATE_INDICATOR_YES,
    			Shipper: {
    				Account: {
    					AccountNumber: accountNumber ?? '',
    					AccountCountryCode: params.countryCode,
    				},
    			},
    			PickupDateInfo: {
    				CloseTime: params.closeTime,
    				ReadyTime: params.readyTime,
    				PickupDate: params.pickupDate,
    			},
    			PickupAddress: {
    				CompanyName: params.name,
    				ContactName: params.name,
    				AddressLine: [params.addressLine1, params.addressLine2].filter(Boolean),
    				City: params.city,
    				StateProvince: params.stateProvinceCode,
    				PostalCode: params.postalCode,
    				CountryCode: params.countryCode,
    				Phone: { Number: params.phone },
    			},
    			AlternateAddressIndicator: PICKUP.ALTERNATE_ADDRESS_YES,
    			PickupPiece: [
    				{
    					ServiceCode: params.serviceCode,
    					Quantity: String(params.packageCount),
    					DestinationCountryCode: params.countryCode,
    					ContainerCode: PICKUP.CONTAINER_PACKAGE,
    				},
    			],
    			TotalWeight: {
    				Weight: String(params.totalWeight),
    				UnitOfMeasurement: UNITS.WEIGHT_LBS,
    			},
    			OverweightIndicator: PICKUP.OVERWEIGHT_NO,
    			PaymentMethod: PICKUP.PAYMENT_ACCOUNT,
    			SpecialInstruction: params.specialInstructions ?? '',
    		},
    	};
    
    	const response = await client.post<unknown>(
    		`/api/pickupcreation/${API_VERSIONS.PICKUP}/pickup`,
    		pickupRequest,
    	);
    
    	return formatToolResponse(response);
    },
  • The Zod-based input schema for 'schedule_pickup' defining all required/optional fields: pickupDate, readyTime, closeTime, name, phone, addressLine1/2, city, stateProvinceCode, postalCode, countryCode, packageCount, totalWeight, serviceCode, and specialInstructions.
    {
    	title: 'Schedule Pickup',
    	description:
    		'Schedule a UPS package pickup at a specific address and time. Provide the pickup date, time window, address, and package details. Returns a confirmation number to reference or cancel the pickup.',
    	inputSchema: {
    		pickupDate: z.string().describe('Pickup date in YYYYMMDD format'),
    		readyTime: z.string().describe('Earliest pickup time in HHmm format (e.g. "0900")'),
    		closeTime: z.string().describe('Latest pickup time in HHmm format (e.g. "1700")'),
    		name: z.string().describe('Contact name at pickup location'),
    		phone: z.string().describe('Contact phone number'),
    		addressLine1: z.string().describe('Pickup street address'),
    		addressLine2: z.string().optional().describe('Address line 2'),
    		city: z.string().describe('City'),
    		stateProvinceCode: z.string().describe('State/province code'),
    		postalCode: z.string().describe('ZIP/postal code'),
    		countryCode: z.string().length(2).default('US').describe('Country code'),
    		packageCount: z.number().int().positive().describe('Number of packages'),
    		totalWeight: z.number().positive().describe('Total weight in lbs'),
    		serviceCode: z
    			.string()
    			.default(PICKUP.SERVICE_ON_CALL_AIR)
    			.describe('Pickup service code (003=On Call Air, 001=Daily)'),
    		specialInstructions: z.string().optional().describe('Special instructions for driver'),
    	},
  • Registration of the 'schedule_pickup' tool via server.registerTool('schedule_pickup', ...) inside the addPickupTools function.
    server.registerTool(
    	'schedule_pickup',
  • src/server.ts:28-28 (registration)
    Top-level registration call where addPickupTools(server, client) is invoked from createServer() to register all pickup tools including 'schedule_pickup'.
    addPickupTools(server, client);
  • The SchedulePickupParams TypeScript interface defining the type structure for pickup scheduling parameters (used for type-checking, though the actual tool uses inline Zod schema).
    export interface SchedulePickupParams {
    	readonly pickupDate: string;
    	readonly readyTime: string;
    	readonly closeTime: string;
    	readonly address: PickupAddress;
    	readonly packages: readonly PickupPackage[];
    	readonly totalWeight: number;
    	readonly weightUnit?: 'LBS' | 'KGS';
    	readonly serviceCode?: PickupServiceCode;
    	readonly overweightIndicator?: boolean;
    	readonly paymentMethod?: 'account' | 'tracking';
    	readonly specialInstructions?: string;
    	readonly referenceNumber?: string;
    }
Behavior2/5

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

No annotations provided; the description only mentions returning a confirmation number. Missing details on side effects (e.g., whether a pickup is actually scheduled), required permissions, or rate limits.

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?

Two concise sentences with no redundancy. Front-loaded with the primary action and outcome.

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?

With 15 parameters and no output schema, the description lacks explanation of return values (e.g., structure of confirmation number), error handling, or prerequisites, leaving gaps for a complex tool.

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 parameters are documented. The description adds no additional semantic depth beyond summarizing input categories (date, time, address, package details).

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?

The description clearly states the tool schedules a UPS pickup, specifies required inputs (date, time, address, package details), and notes the return of a confirmation number, making the purpose unambiguous.

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 on when to use this tool versus siblings like cancel_pickup or create_shipment. The description does not provide exclusions or alternative contexts.

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

Install Server

Other Tools

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/roscoej/ups-mcp'

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