Skip to main content
Glama

OpenAPI Lambda MCP Server

by ingeno
config.py9.5 kB
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Configuration module for the OpenAPI MCP Server.""" import os from awslabs.openapi_mcp_server import get_caller_info, logger from dataclasses import dataclass from typing import Any @dataclass class Config: """Configuration for the OpenAPI MCP Server.""" # API information api_name: str = 'awslabs-openapi-mcp-server' api_base_url: str = 'https://localhost:8000' api_spec_url: str = '' api_spec_path: str = '' # Authentication auth_type: str = 'none' # none, basic, bearer, api_key, cognito auth_username: str = '' auth_password: str = '' auth_token: str = '' auth_api_key: str = '' auth_api_key_name: str = 'api_key' auth_api_key_in: str = 'header' # header, query, cookie # Cognito authentication auth_cognito_client_id: str = '' auth_cognito_username: str = '' auth_cognito_password: str = '' auth_cognito_client_secret: str = '' auth_cognito_domain: str = '' # Required for client credentials flow auth_cognito_scopes: str = '' # Optional, comma-separated list of scopes auth_cognito_user_pool_id: str = '' auth_cognito_region: str = 'us-east-1' # Server configuration # Default to localhost for security; use SERVER_HOST env var to override when needed (e.g. in Docker) host: str = '127.0.0.1' port: int = 8000 debug: bool = False transport: str = 'stdio' # stdio only message_timeout: int = 60 version: str = '0.2.0' def load_config(args: Any = None) -> Config: """Load configuration from arguments and environment variables. Args: args: Command line arguments Returns: Config: Configuration object """ logger.debug('Loading configuration') # Get caller information for debugging caller_info = get_caller_info() logger.debug(f'Called from {caller_info}') # Create default config config = Config() # Load from environment variables env_vars = { # API information 'API_NAME': (lambda v: setattr(config, 'api_name', v)), 'API_BASE_URL': (lambda v: setattr(config, 'api_base_url', v)), 'API_SPEC_URL': (lambda v: setattr(config, 'api_spec_url', v)), 'API_SPEC_PATH': (lambda v: setattr(config, 'api_spec_path', v)), # Authentication 'AUTH_TYPE': (lambda v: setattr(config, 'auth_type', v)), 'AUTH_USERNAME': (lambda v: setattr(config, 'auth_username', v)), 'AUTH_PASSWORD': (lambda v: setattr(config, 'auth_password', v)), 'AUTH_TOKEN': (lambda v: setattr(config, 'auth_token', v)), 'AUTH_API_KEY': (lambda v: setattr(config, 'auth_api_key', v)), 'AUTH_API_KEY_NAME': (lambda v: setattr(config, 'auth_api_key_name', v)), 'AUTH_API_KEY_IN': (lambda v: setattr(config, 'auth_api_key_in', v)), # Cognito authentication environment variables 'AUTH_COGNITO_CLIENT_ID': (lambda v: setattr(config, 'auth_cognito_client_id', v)), 'AUTH_COGNITO_USERNAME': (lambda v: setattr(config, 'auth_cognito_username', v)), 'AUTH_COGNITO_PASSWORD': (lambda v: setattr(config, 'auth_cognito_password', v)), 'AUTH_COGNITO_CLIENT_SECRET': (lambda v: setattr(config, 'auth_cognito_client_secret', v)), 'AUTH_COGNITO_DOMAIN': (lambda v: setattr(config, 'auth_cognito_domain', v)), 'AUTH_COGNITO_SCOPES': (lambda v: setattr(config, 'auth_cognito_scopes', v)), 'AUTH_COGNITO_USER_POOL_ID': (lambda v: setattr(config, 'auth_cognito_user_pool_id', v)), 'AUTH_COGNITO_REGION': (lambda v: setattr(config, 'auth_cognito_region', v)), # Server configuration 'SERVER_HOST': (lambda v: setattr(config, 'host', v)), 'SERVER_PORT': (lambda v: setattr(config, 'port', int(v))), 'SERVER_DEBUG': (lambda v: setattr(config, 'debug', v.lower() == 'true')), 'SERVER_TRANSPORT': (lambda v: setattr(config, 'transport', v)), 'SERVER_MESSAGE_TIMEOUT': (lambda v: setattr(config, 'message_timeout', int(v))), } # Load environment variables env_loaded = {} for key, setter in env_vars.items(): if key in os.environ: env_value = os.environ[key] setter(env_value) env_loaded[key] = env_value if env_loaded: logger.debug( f'Loaded {len(env_loaded)} environment variables: {", ".join(env_loaded.keys())}' ) # Load from arguments if args: if hasattr(args, 'api_name') and args.api_name: logger.debug(f'Setting API name from arguments: {args.api_name}') config.api_name = args.api_name if hasattr(args, 'api_url') and args.api_url: logger.debug(f'Setting API base URL from arguments: {args.api_url}') config.api_base_url = args.api_url if hasattr(args, 'spec_url') and args.spec_url: logger.debug(f'Setting API spec URL from arguments: {args.spec_url}') config.api_spec_url = args.spec_url if hasattr(args, 'spec_path') and args.spec_path: logger.debug(f'Setting API spec path from arguments: {args.spec_path}') config.api_spec_path = args.spec_path if hasattr(args, 'port') and args.port: logger.debug(f'Setting port from arguments: {args.port}') config.port = args.port if hasattr(args, 'debug') and args.debug: logger.debug('Setting debug mode from arguments') config.debug = True # Authentication arguments if hasattr(args, 'auth_type') and args.auth_type: logger.debug(f'Setting auth type from arguments: {args.auth_type}') config.auth_type = args.auth_type if hasattr(args, 'auth_username') and args.auth_username: logger.debug('Setting auth username from arguments') config.auth_username = args.auth_username if hasattr(args, 'auth_password') and args.auth_password: logger.debug('Setting auth password from arguments') config.auth_password = args.auth_password if hasattr(args, 'auth_token') and args.auth_token: logger.debug('Setting auth token from arguments') config.auth_token = args.auth_token if hasattr(args, 'auth_api_key') and args.auth_api_key: logger.debug('Setting auth API key from arguments') config.auth_api_key = args.auth_api_key if hasattr(args, 'auth_api_key_name') and args.auth_api_key_name: logger.debug(f'Setting auth API key name from arguments: {args.auth_api_key_name}') config.auth_api_key_name = args.auth_api_key_name if hasattr(args, 'auth_api_key_in') and args.auth_api_key_in: logger.debug(f'Setting auth API key location from arguments: {args.auth_api_key_in}') config.auth_api_key_in = args.auth_api_key_in # Cognito authentication arguments if hasattr(args, 'auth_cognito_client_id') and args.auth_cognito_client_id: logger.debug('Setting Cognito client ID from arguments') config.auth_cognito_client_id = args.auth_cognito_client_id if hasattr(args, 'auth_cognito_username') and args.auth_cognito_username: logger.debug('Setting Cognito username from arguments') config.auth_cognito_username = args.auth_cognito_username if hasattr(args, 'auth_cognito_password') and args.auth_cognito_password: logger.debug('Setting Cognito password from arguments') config.auth_cognito_password = args.auth_cognito_password if hasattr(args, 'auth_cognito_client_secret') and args.auth_cognito_client_secret: logger.debug('Setting Cognito client secret from arguments') config.auth_cognito_client_secret = args.auth_cognito_client_secret if hasattr(args, 'auth_cognito_domain') and args.auth_cognito_domain: logger.debug('Setting Cognito domain from arguments') config.auth_cognito_domain = args.auth_cognito_domain if hasattr(args, 'auth_cognito_scopes') and args.auth_cognito_scopes: logger.debug('Setting Cognito scopes from arguments') config.auth_cognito_scopes = args.auth_cognito_scopes if hasattr(args, 'auth_cognito_user_pool_id') and args.auth_cognito_user_pool_id: logger.debug('Setting Cognito user pool ID from arguments') config.auth_cognito_user_pool_id = args.auth_cognito_user_pool_id if hasattr(args, 'auth_cognito_region') and args.auth_cognito_region: logger.debug(f'Setting Cognito region from arguments: {args.auth_cognito_region}') config.auth_cognito_region = args.auth_cognito_region # Log final configuration details logger.info(f'Configuration loaded: API name={config.api_name}, transport={config.transport}') return config

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/ingeno/mcp-openapi-lambda'

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