Skip to main content
Glama

marketo_get_form_by_id

Retrieve a specific Marketo form by its ID to access form details, fields, and configuration for integration or management purposes.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
formIdYes

Implementation Reference

  • The core handler function for the 'marketo_get_form_by_id' tool. It takes a formId parameter, makes a GET request to the Marketo Asset API endpoint `/asset/v1/form/${formId}.json` using the shared makeApiRequest helper, formats the response as JSON text content, and handles errors by returning an error message.
    async ({ formId }) => { try { const response = await makeApiRequest(`/asset/v1/form/${formId}.json`, '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}` }, ], }; } }
  • Zod input schema for the tool, defining 'formId' as a required number.
    { formId: z.number(), },
  • src/index.ts:158-178 (registration)
    Registration of the MCP tool 'marketo_get_form_by_id' via server.tool(), specifying the input schema and handler function.
    server.tool( 'marketo_get_form_by_id', { formId: z.number(), }, async ({ formId }) => { try { const response = await makeApiRequest(`/asset/v1/form/${formId}.json`, '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}` }, ], }; } } );
  • Shared helper function to make authenticated API requests to Marketo endpoints using axios, obtaining Bearer token from TokenManager, handling different content types, and propagating errors.
    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; } }
  • TokenManager class provides token management for Marketo OAuth2 client credentials flow. Caches access token with expiry check and refreshes via /identity/oauth/token endpoint when needed. Used by makeApiRequest for authentication.
    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'); } } }

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/alexleventer/marketo-mcp'

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