marketo_get_lead_by_email
Look up a lead by email address in Marketo. Returns matching lead records with specified fields.
Instructions
Look up a lead by email address. Uses filterType=email on the leads endpoint. Returns matching lead records.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address to search for | ||
| fields | No | List of field API names to return |
Implementation Reference
- src/tools/leads.ts:23-41 (handler)Handler function for marketo_get_lead_by_email tool. Makes a GET request to Marketo's /rest/v1/leads.json endpoint with filterType=email and the provided email address, optionally returning specified fields.
// ── marketo_get_lead_by_email ────────────────────────────────────────────── server.tool( "marketo_get_lead_by_email", "Look up a lead by email address. Uses filterType=email on the leads endpoint. Returns matching lead records.", { email: z.string().describe("Email address to search for"), fields: z.array(z.string()).optional().describe("List of field API names to return"), }, async (args) => { try { const params: Record<string, unknown> = { filterType: "email", filterValues: args.email, }; if (args.fields?.length) params.fields = args.fields.join(","); return ok(await makeRequest("/rest/v1/leads.json", "GET", params)); } catch (e) { return err(e); } } ); - src/tools/leads.ts:27-30 (schema)Input schema for marketo_get_lead_by_email using zod. Requires email (string) and optionally accepts fields (array of strings).
{ email: z.string().describe("Email address to search for"), fields: z.array(z.string()).optional().describe("List of field API names to return"), }, - src/tools/leads.ts:23-41 (registration)Registration of the marketo_get_lead_by_email tool via server.tool() call, which is invoked when registerLeadTools() is called from src/index.ts.
// ── marketo_get_lead_by_email ────────────────────────────────────────────── server.tool( "marketo_get_lead_by_email", "Look up a lead by email address. Uses filterType=email on the leads endpoint. Returns matching lead records.", { email: z.string().describe("Email address to search for"), fields: z.array(z.string()).optional().describe("List of field API names to return"), }, async (args) => { try { const params: Record<string, unknown> = { filterType: "email", filterValues: args.email, }; if (args.fields?.length) params.fields = args.fields.join(","); return ok(await makeRequest("/rest/v1/leads.json", "GET", params)); } catch (e) { return err(e); } } ); - src/index.ts:6-22 (registration)Registration of all lead tools (including marketo_get_lead_by_email) in the MCP server via registerLeadTools(server) call.
import { registerLeadTools } from "./tools/leads.js"; import { registerProgramTools } from "./tools/programs.js"; import { registerEmailTools } from "./tools/emails.js"; import { registerSmartListTools } from "./tools/smartLists.js"; import { registerListTools } from "./tools/lists.js"; import { registerChannelTools } from "./tools/channels.js"; import { registerLandingPageTools } from "./tools/landingPages.js"; import { registerBulkExportTools } from "./tools/bulkExport.js"; const server = new McpServer({ name: "marketo-mcp", version: "0.1.0", }); // Register all tool groups registerFormTools(server); registerLeadTools(server); - src/client.ts:21-49 (helper)Shared makeRequest helper called by the handler. Handles authentication token retrieval, HTTP requests via axios, and Marketo error parsing.
export async function makeRequest<T = unknown>( endpoint: string, method: Method = "GET", data?: unknown, contentType?: string, ): Promise<T> { const token = await getAccessToken(); const config: AxiosRequestConfig = { url: `${MARKETO_BASE_URL}${endpoint}`, method, headers: { Authorization: `Bearer ${token}`, ...(contentType ? { "Content-Type": contentType } : {}), }, ...(data && method !== "GET" ? { data } : {}), ...(data && method === "GET" ? { params: data } : {}), }; const res = await axios(config); const body = res.data; // Marketo REST API returns errors inside the response body if (body?.errors?.length) { const e = body.errors[0]; throw new MarketoError(`${e.code}: ${e.message}`, res.status); } return body as T; }