Retrieve a campaign
lob_campaigns_getRetrieve campaign details by ID. Use this tool to get specific campaign information for managing your Lob mailing campaigns.
Instructions
Retrieve a single campaign by ID.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Campaign ID (`cmp_…`). |
Implementation Reference
- src/tools/campaigns.ts:24-80 (registration)The function registerCampaignTools registers all campaign tools via registerTool(). The lob_campaigns_get tool is registered at lines 74-80.
export function registerCampaignTools(server: McpServer, lob: LobClient): void { // ── Campaigns ────────────────────────────────────────────────────────────── registerTool(server, { name: "lob_campaigns_create", annotations: { title: "Create a campaign", ...ToolAnnotationPresets.mutate }, description: "Create a campaign — a container for batched mail-piece sends with a shared creative, schedule, " + "and audience. Creating a campaign does not by itself send mail; you trigger sends per Lob docs.", inputSchema: { name: z.string().describe("Display name for the campaign."), description: z.string().max(500).optional(), schedule_type: z .enum(["immediate", "scheduled_send_date"]) .optional() .describe("Whether the campaign should send immediately or on a schedule."), send_date: z .string() .optional() .describe("ISO 8601 timestamp for scheduled campaigns."), target_delivery_date: z.string().optional(), cancel_window_campaign_minutes: z .number() .int() .optional() .describe("Minutes before send during which the campaign can still be cancelled."), metadata: metadataSchema, extra: extraParamsSchema, }, handler: async (args) => { const { extra, ...rest } = args; return lob.request({ method: "POST", path: "/campaigns", body: withExtra(rest, extra), }); }, }); registerTool(server, { name: "lob_campaigns_list", annotations: { title: "List campaigns", ...ToolAnnotationPresets.read }, description: "List campaigns on your Lob account. **For 'how many campaigns?' counts, pass " + "`include: ['total_count']` with `limit: 1`.** Filter by `date_created` or `metadata`.", inputSchema: { ...listParamsSchema.shape }, handler: async (args) => lob.request({ method: "GET", path: "/campaigns", query: compact(args) }), }); registerTool(server, { name: "lob_campaigns_get", annotations: { title: "Retrieve a campaign", ...ToolAnnotationPresets.read }, description: "Retrieve a single campaign by ID.", inputSchema: { id: CAMPAIGN_ID }, handler: async ({ id }) => lob.request({ method: "GET", path: `/campaigns/${id}` }), }); - src/tools/campaigns.ts:74-80 (handler)The handler for lob_campaigns_get: an async function that takes { id } and performs a GET request to /campaigns/{id} using the Lob client.
registerTool(server, { name: "lob_campaigns_get", annotations: { title: "Retrieve a campaign", ...ToolAnnotationPresets.read }, description: "Retrieve a single campaign by ID.", inputSchema: { id: CAMPAIGN_ID }, handler: async ({ id }) => lob.request({ method: "GET", path: `/campaigns/${id}` }), }); - src/tools/campaigns.ts:21-21 (schema)CAMPAIGN_ID zod schema: validates campaign IDs matching the regex /^cmp_/ with description 'Campaign ID (cmp_…)'.
const CAMPAIGN_ID = z.string().regex(/^cmp_/).describe("Campaign ID (`cmp_…`)."); - src/tools/campaigns.ts:78-78 (schema)Input schema for lob_campaigns_get: { id: CAMPAIGN_ID }, requiring a single campaign ID starting with 'cmp_'.
inputSchema: { id: CAMPAIGN_ID }, - src/tools/register.ts:17-17 (registration)Import of registerCampaignTools in the central registration entry point.
import { registerCampaignTools } from "./campaigns.js";