UNPKG

openapi-mcp-generator

Version:

Generates MCP server code from OpenAPI specifications

86 lines (80 loc) 4.03 kB
/** * Generates documentation about OAuth2 configuration * * @param securitySchemes Security schemes from OpenAPI spec * @returns Markdown documentation about OAuth2 configuration */ export function generateOAuth2Docs(securitySchemes) { if (!securitySchemes) { return '# OAuth2 Configuration\n\nNo OAuth2 security schemes defined in this API.'; } let oauth2Schemes = []; // Find OAuth2 schemes for (const [name, schemeOrRef] of Object.entries(securitySchemes)) { if ('$ref' in schemeOrRef) continue; if (schemeOrRef.type === 'oauth2') { oauth2Schemes.push({ name, scheme: schemeOrRef, }); } } if (oauth2Schemes.length === 0) { return '# OAuth2 Configuration\n\nNo OAuth2 security schemes defined in this API.'; } let content = `# OAuth2 Configuration This API uses OAuth2 for authentication. The MCP server can handle OAuth2 authentication in the following ways: 1. **Using a pre-acquired token**: You provide a token you've already obtained 2. **Using client credentials flow**: The server automatically acquires a token using your client ID and secret ## Environment Variables `; // Document each OAuth2 scheme for (const { name, scheme } of oauth2Schemes) { content += `### ${name}\n\n`; if (scheme.description) { content += `${scheme.description}\n\n`; } content += '**Configuration Variables:**\n\n'; const envVarPrefix = name.replace(/[^a-zA-Z0-9]/g, '_').toUpperCase(); content += `- \`OAUTH_CLIENT_ID_${envVarPrefix}\`: Your OAuth client ID\n`; content += `- \`OAUTH_CLIENT_SECRET_${envVarPrefix}\`: Your OAuth client secret\n`; if (scheme.flows?.clientCredentials) { content += `- \`OAUTH_SCOPES_${envVarPrefix}\`: Space-separated list of scopes to request (optional)\n`; content += `- \`OAUTH_TOKEN_${envVarPrefix}\`: Pre-acquired OAuth token (optional if using client credentials)\n\n`; content += '**Client Credentials Flow:**\n\n'; content += `- Token URL: \`${scheme.flows.clientCredentials.tokenUrl}\`\n`; if (scheme.flows.clientCredentials.scopes && Object.keys(scheme.flows.clientCredentials.scopes).length > 0) { content += '\n**Available Scopes:**\n\n'; for (const [scope, description] of Object.entries(scheme.flows.clientCredentials.scopes)) { content += `- \`${scope}\`: ${description}\n`; } } content += '\n'; } if (scheme.flows?.authorizationCode) { content += `- \`OAUTH_TOKEN_${envVarPrefix}\`: Pre-acquired OAuth token (required for authorization code flow)\n\n`; content += '**Authorization Code Flow:**\n\n'; content += `- Authorization URL: \`${scheme.flows.authorizationCode.authorizationUrl}\`\n`; content += `- Token URL: \`${scheme.flows.authorizationCode.tokenUrl}\`\n`; if (scheme.flows.authorizationCode.scopes && Object.keys(scheme.flows.authorizationCode.scopes).length > 0) { content += '\n**Available Scopes:**\n\n'; for (const [scope, description] of Object.entries(scheme.flows.authorizationCode.scopes)) { content += `- \`${scope}\`: ${description}\n`; } } content += '\n'; } } content += `## Token Caching The MCP server automatically caches OAuth tokens obtained via client credentials flow. Tokens are cached for their lifetime (as specified by the \`expires_in\` parameter in the token response) minus 60 seconds as a safety margin. When making API requests, the server will: 1. Check for a cached token that's still valid 2. Use the cached token if available 3. Request a new token if no valid cached token exists `; return content; } //# sourceMappingURL=oauth-docs.js.map