Skip to main content
Glama

set_api_keys

Configure API keys to enable LinkedIn Post Generator to create post drafts from YouTube video transcripts.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
openaiApiKeyYesYour OpenAI API key
youtubeApiKeyNoYour YouTube API key (optional)

Implementation Reference

  • src/server.js:19-55 (registration)
    Registration of the 'set_api_keys' tool using McpServer.tool(). Includes input schema with Zod validation, the complete async handler function, and tool description.
    server.tool( "set_api_keys", { openaiApiKey: z.string().min(1).describe("Your OpenAI API key"), youtubeApiKey: z.string().optional().describe("Your YouTube API key (optional)") }, async ({ openaiApiKey, youtubeApiKey }) => { try { apiKeyManager.setOpenAIKey(openaiApiKey); if (youtubeApiKey) { apiKeyManager.setYouTubeKey(youtubeApiKey); } return { content: [{ type: "text", text: JSON.stringify({ success: true, message: "API keys set successfully. You can now use the other tools." }, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: JSON.stringify({ success: false, error: error.message }, null, 2) }], isError: true }; } }, { description: "Set your API keys for OpenAI and YouTube (optional)" } );
  • Handler function that receives API keys, calls ApiKeyManager.set* methods, and returns MCP-formatted text response with JSON payload indicating success or error.
    async ({ openaiApiKey, youtubeApiKey }) => { try { apiKeyManager.setOpenAIKey(openaiApiKey); if (youtubeApiKey) { apiKeyManager.setYouTubeKey(youtubeApiKey); } return { content: [{ type: "text", text: JSON.stringify({ success: true, message: "API keys set successfully. You can now use the other tools." }, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: JSON.stringify({ success: false, error: error.message }, null, 2) }], isError: true }; } },
  • Zod-based input schema for the tool: requires OpenAI API key as non-empty string, optional YouTube API key.
    { openaiApiKey: z.string().min(1).describe("Your OpenAI API key"), youtubeApiKey: z.string().optional().describe("Your YouTube API key (optional)") },
  • Helper method in ApiKeyManager class to validate and store the OpenAI API key, called from the tool handler.
    setOpenAIKey(key) { if (!key || typeof key !== 'string' || key.trim() === '') { throw new Error("Invalid OpenAI API key"); } this.openaiApiKey = key.trim(); console.log("OpenAI API key set successfully"); }
  • Helper method in ApiKeyManager class to validate and store the YouTube API key (optional), called from the tool handler.
    setYouTubeKey(key) { if (!key || typeof key !== 'string' || key.trim() === '') { throw new Error("Invalid YouTube API key"); } this.youtubeApiKey = key.trim(); console.log("YouTube API key set successfully"); }

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/NvkAnirudh/LinkedIn-Post-Generator'

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