set_api_keys
Configure API keys to enable LinkedIn Post Generator to create post drafts from YouTube video transcripts.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| openaiApiKey | Yes | Your OpenAI API key | |
| youtubeApiKey | No | Your 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)" } );
- src/server.js:25-53 (handler)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 }; } },
- src/server.js:21-24 (schema)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)") },
- src/modules/api-key-manager.js:23-29 (helper)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"); }
- src/modules/api-key-manager.js:35-41 (helper)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"); }