Skip to main content
Glama

submit_googler_interaction

Submit interactions with Googlers by logging activity drafts, including details like format, type, date, and metrics, to ensure accurate reporting on the MCP server.

Instructions

Submit an interaction with Googlers activity draft

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
activityDateYesInteraction Date (YYYY-MM-DD format)
additionalInfoNoAdditional information (optional)
additionalLinksNoAdditional links (optional)
descriptionYesDescription
formatYesFormat
interactionTypeYesInteraction Type
metricsYes
privateNoDo you want to make this activity private? (optional)
tagsNoTags (optional)
titleYesTitle

Implementation Reference

  • Handler case for the 'submit_googler_interaction' tool. Casts input arguments to GooglerInteractionDraft type and invokes the shared submitActivityDraft method with the specific endpoint 'interaction-with-googlers'.
    case "submit_googler_interaction": return await this.submitActivityDraft( "interaction-with-googlers", args as unknown as GooglerInteractionDraft, );
  • TypeScript interface defining the structure of input parameters for the submit_googler_interaction tool, extending ActivityDraftBase.
    export interface GooglerInteractionDraft extends ActivityDraftBase { /** Format of the interaction */ format: InteractionFormat; /** Type of interaction with Google personnel */ interactionType: InteractionType; /** Metrics related to time investment */ metrics: { /** Time spent in the interaction (in minutes) */ timeSpent: number; }; /** Optional additional links related to the interaction */ additionalLinks?: string; }
  • src/server.ts:424-490 (registration)
    MCP tool registration including name, description, and detailed inputSchema for validation in the ListTools response.
    { name: "submit_googler_interaction", description: "Submit an interaction with Googlers activity draft", inputSchema: { type: "object", properties: { title: { type: "string", description: "Title", minLength: 3, maxLength: 200, }, description: { type: "string", description: "Description", maxLength: 2000, }, activityDate: { type: "string", pattern: "^\\d{4}-\\d{2}-\\d{2}$", description: "Interaction Date (YYYY-MM-DD format)", }, format: { type: "string", enum: Object.values(InteractionFormat), description: "Format", }, interactionType: { type: "string", enum: Object.values(InteractionType), description: "Interaction Type", }, tags: { type: "array", items: { type: "string" }, description: "Tags (optional)", minItems: 0, }, metrics: { type: "object", properties: { timeSpent: { type: "integer", minimum: 1, description: "Time spent (in minutes)", }, }, required: ["timeSpent"], }, additionalInfo: { type: "string", maxLength: 2000, description: "Additional information (optional)", }, additionalLinks: { type: "string", maxLength: 2000, description: "Additional links (optional)", }, private: { type: "boolean", description: "Do you want to make this activity private? (optional)", }, }, required: ["title", "description", "activityDate", "format", "interactionType", "metrics"], }, },
  • Shared helper function that executes the core logic: API POST to /activity-drafts/{endpoint} with the draft data, handles auth, errors, rate limits, and returns formatted content response.
    private async submitActivityDraft( endpoint: string, data: | ContentCreationDraft | PublicSpeakingDraft | WorkshopDraft | MentoringDraft | ProductFeedbackDraft | GooglerInteractionDraft | StoryDraft, ): Promise<{ content: Array<{ type: string; text: string; }>; }> { const url = `${this.baseUrl}/activity-drafts/${endpoint}`; try { const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${this.accessToken}`, }, body: JSON.stringify(data), }); if (!response.ok) { const errorText = await response.text(); let errorMessage = `GDE API error (${response.status})`; if (response.status === 401) { errorMessage = "❌ GDE authentication failed. Your ADVOCU_ACCESS_TOKEN may be expired or invalid.\n\nPlease check your Advocu access token configuration."; } else if (response.status === 400) { errorMessage = `❌ GDE API rejected the request:\n\n${errorText}\n\nPlease check:\n- All required fields are present\n- Field values match expected formats\n- Tags are valid\n- Date format is correct (YYYY-MM-DD)`; } else if (response.status === 429) { errorMessage = "⏱️ GDE API rate limit exceeded (30 requests/minute). Please wait and try again."; } else { errorMessage = `❌ GDE API error (${response.status}):\n\n${errorText}`; } // Return error as content instead of throwing return { content: [ { type: "text", text: errorMessage, }, ], }; } const result = (await response.json()) as Record<string, unknown>; return { content: [ { type: "text", text: `✅ GDE Activity draft submitted successfully!\n\nEndpoint: ${endpoint}\nStatus: ${response.status}\nResponse: ${JSON.stringify(result, null, 2)}`, }, ], }; } catch (error) { if (error instanceof McpError) { throw error; } const errorMsg = this.getErrorMessage(error); throw new McpError( ErrorCode.InternalError, `❌ Failed to submit GDE activity:\n\n${errorMsg}\n\nEndpoint: ${endpoint}` ); } }

Other Tools

Related 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/carlosazaustre/advocu-mcp-server'

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