Skip to main content
Glama

OpenAPI to Model Context Protocol (MCP)

#!/usr/bin/env python3 """ Test script to validate the OpenAPI-MCP server with Norwegian Weather API. """ import os import sys import logging # Add src to path sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src')) import server def test_weather_api(): """Test the OpenAPI-MCP server with Norwegian Weather API.""" print("Testing OpenAPI-MCP Server with Norwegian Weather API") print("=" * 60) # Set up logging logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') try: # Test configuration os.environ['OPENAPI_URL'] = 'https://api.met.no/weatherapi/locationforecast/2.0/swagger' os.environ['SERVER_NAME'] = 'weather' config = server.ServerConfig() print(f"✓ Configuration loaded: {config.server_name}") # Test server initialization srv = server.MCPServer(config) srv.initialize() print(f"✓ Server initialized successfully") print(f" - API: {srv.openapi_spec.get('info', {}).get('title', 'Unknown')}") print(f" - Version: {srv.openapi_spec.get('info', {}).get('version', 'Unknown')}") print(f" - Operations parsed: {len(srv.operations_info)}") # Test tool registration api_tools = srv.register_openapi_tools() srv.register_standard_tools() print(f"✓ Tools registered: {api_tools} API tools, {len(srv.registered_tools)} total") # Test resource registration resources = srv.register_resources() print(f"✓ Resources registered: {resources}") # Test prompt generation prompts = srv.generate_prompts() print(f"✓ Prompts generated: {prompts}") # Show available forecast tools forecast_tools = [name for name in srv.registered_tools.keys() if 'compact' in name.lower() or 'complete' in name.lower()] print(f"✓ Weather forecast tools available: {len(forecast_tools)}") for tool in forecast_tools: print(f" - {tool}") # Test tools list tools_list = srv._tools_list_tool('test-id') print(f"✓ Tools list: {len(tools_list['result']['tools'])} tools available") # Test dry run for Oslo coordinates if forecast_tools: compact_tool = srv.registered_tools['weather_get__compact']['function'] dry_run = compact_tool(req_id='test', lat=59.9139, lon=10.7522, dry_run=True) print("✓ Dry run test successful (Oslo weather)") print(f" - URL: {dry_run['result']['request']['url']}") print(f" - Method: {dry_run['result']['request']['method']}") print(f" - Params: {dry_run['result']['request']['params']}") # Test real API call for weather forecast if forecast_tools: real_call = compact_tool(req_id='test', lat=59.9139, lon=10.7522) if 'result' in real_call and 'data' in real_call['result']: data = real_call['result']['data'] print(f"✓ Real API call successful") # Extract weather information if 'properties' in data and 'timeseries' in data['properties']: timeseries = data['properties']['timeseries'] if timeseries: first_forecast = timeseries[0] time = first_forecast.get('time', 'Unknown') instant = first_forecast.get('data', {}).get('instant', {}).get('details', {}) temp = instant.get('air_temperature', 'N/A') humidity = instant.get('relative_humidity', 'N/A') pressure = instant.get('air_pressure_at_sea_level', 'N/A') print(f" - Location: Oslo (59.9139°N, 10.7522°E)") print(f" - Time: {time}") print(f" - Temperature: {temp}°C") print(f" - Humidity: {humidity}%") print(f" - Pressure: {pressure} hPa") print(f" - Total forecasts: {len(timeseries)}") # Test parameter validation (missing required parameters) print("✓ Testing parameter validation...") missing_params_result = compact_tool(req_id='test_validation') if 'result' in missing_params_result and 'help' in missing_params_result['result']: print(f" - Proper validation: {missing_params_result['result']['help']}") print("\n" + "=" * 60) print("✅ All tests passed! Norwegian Weather API integration working correctly.") print("✅ Server can successfully fetch real weather data") print("✅ Parameter validation and error handling working") print("✅ Multiple forecast endpoints available") return True except Exception as e: print(f"\n❌ Test failed: {e}") import traceback traceback.print_exc() return False if __name__ == "__main__": success = test_weather_api() sys.exit(0 if success else 1)

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/gujord/OpenAPI-MCP'

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