marketo_get_lead_by_email
Retrieve lead information from Marketo using an email address to access contact details and specified fields for marketing automation workflows.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| fields | No |
Implementation Reference
- src/index.ts:416-445 (registration)Registration of the 'marketo_get_lead_by_email' tool using server.tool(). Includes Zod input schema (email required, fields optional) and inline async handler that performs a GET request to Marketo's lead lookup endpoint, returning JSON response or error text.server.tool( 'marketo_get_lead_by_email', { email: z.string().email(), fields: z.array(z.string()).optional(), }, async ({ email, fields }) => { try { const params = new URLSearchParams(); if (fields) { params.append('fields', fields.join(',')); } const response = await makeApiRequest( `/rest/v1/lead/${email}.json${params.toString() ? `?${params.toString()}` : ''}`, 'GET' ); return { content: [{ type: 'text', text: JSON.stringify(response, null, 2) }], }; } catch (error: any) { return { content: [ { type: 'text', text: `Error: ${error.response?.data?.message || error.message}` }, ], }; } } );
- src/index.ts:22-52 (helper)Utility function makeApiRequest that performs authenticated API calls to Marketo endpoints using axios and bearer token from TokenManager. Called by the tool handler.async function makeApiRequest( endpoint: string, method: string, data?: any, contentType: string = 'application/json' ) { const token = await tokenManager.getToken(); const headers: any = { Authorization: `Bearer ${token}`, }; if (contentType) { headers['Content-Type'] = contentType; } try { const response = await axios({ url: `${MARKETO_BASE_URL}${endpoint}`, method: method, data: contentType === 'application/x-www-form-urlencoded' ? new URLSearchParams(data).toString() : data, headers, }); return response.data; } catch (error: any) { console.error('API request failed:', error.response?.data || error.message); throw error; } }
- src/auth.ts:11-52 (helper)TokenManager class handles OAuth2 client credentials flow to obtain and cache access tokens for Marketo API authentication. Used indirectly by the tool via makeApiRequest.class TokenManager { private clientId: string; private clientSecret: string; private accessToken: string | null = null; private tokenExpiry: number = 0; constructor(clientId: string, clientSecret: string) { this.clientId = clientId; this.clientSecret = clientSecret; } async getToken(): Promise<string> { // Check if we have a valid token if (this.accessToken && Date.now() < this.tokenExpiry) { return this.accessToken; } try { // Extract the identity URL from the base URL // Convert from https://instance.mktorest.com/rest to https://instance.mktorest.com/identity const identityUrl = MARKETO_BASE_URL.replace('/rest', '/identity'); const response = await axios.get(`${identityUrl}/oauth/token`, { params: { grant_type: 'client_credentials', client_id: this.clientId, client_secret: this.clientSecret, }, }); const data = response.data as TokenResponse; this.accessToken = data.access_token; // Set expiry to slightly before the actual expiry to ensure we don't use an expired token this.tokenExpiry = Date.now() + (data.expires_in - 60) * 1000; return this.accessToken; } catch (error: any) { console.error('Failed to get Marketo access token:', error.response?.data || error.message); throw new Error('Failed to authenticate with Marketo'); } } }