Skip to main content
Glama
test_render_integration.py3.44 kB
""" Integration tests for Render.com API via mcp-openapi-proxy, FastMCP mode. Needs RENDER_API_KEY in .env to run. """ import os import json import pytest from dotenv import load_dotenv from mcp_openapi_proxy.utils import fetch_openapi_spec from mcp_openapi_proxy.server_fastmcp import mcp, list_functions, call_function # Load .env file from project root load_dotenv(dotenv_path=os.path.join(os.path.dirname(__file__), '../../.env')) @pytest.mark.integration def test_render_services_list(reset_env_and_module): """Test Render /services endpoint with RENDER_API_KEY.""" env_key = reset_env_and_module render_api_key = os.getenv("RENDER_API_KEY") # Prefer RENDER_SPEC_URL if set, else use Render's public OpenAPI spec spec_url = os.getenv("RENDER_SPEC_URL", "https://api-docs.render.com/openapi/6140fb3daeae351056086186") # Always set SERVER_URL_OVERRIDE to the correct Render API base for this test os.environ["SERVER_URL_OVERRIDE"] = "https://api.render.com/v1" tool_prefix = os.getenv("TOOL_NAME_PREFIX", "render_") print(f"DEBUG: RENDER_API_KEY: {render_api_key if render_api_key else 'Not set'}") if not render_api_key or "your-" in render_api_key: print("DEBUG: Skipping due to missing or placeholder RENDER_API_KEY") pytest.skip("RENDER_API_KEY missing or placeholder—please set it in .env!") # Fetch the spec print(f"DEBUG: Fetching spec from {spec_url}") openapi_spec_data = fetch_openapi_spec(spec_url) assert openapi_spec_data, f"Failed to fetch spec from {spec_url}" assert "paths" in openapi_spec_data, "No 'paths' key in spec" assert "/services" in openapi_spec_data["paths"], "No /services endpoint in spec" assert "servers" in openapi_spec_data or "host" in openapi_spec_data, "No servers or host defined in spec" # Set env vars os.environ[env_key] = spec_url os.environ["API_KEY"] = render_api_key os.environ["API_KEY_JMESPATH"] = "" # Render uses header auth, no JMESPath os.environ["API_AUTH_TYPE"] = "Bearer" # Render expects Bearer token os.environ["TOOL_NAME_PREFIX"] = tool_prefix os.environ["TOOL_WHITELIST"] = "/services,/deployments" os.environ["DEBUG"] = "true" print(f"DEBUG: API_KEY set to: {os.environ['API_KEY'][:5]}...") # Verify tools registered_tools = list_functions(env_key=env_key) assert registered_tools, "No tools registered from spec!" tools = json.loads(registered_tools) assert any(tool["name"] == f"{tool_prefix}get_services" for tool in tools), "get_services tool not found!" # Call the tool to list services response_json = call_function(function_name=f"{tool_prefix}get_services", parameters={}, env_key=env_key) try: response = json.loads(response_json) if isinstance(response, dict) and "error" in response: print(f"DEBUG: Error hit: {response['error']}") if "401" in response["error"]: assert False, "RENDER_API_KEY is invalid—please check your token." assert False, f"Render API returned an error: {response_json}" assert isinstance(response, list), f"Response is not a list: {response_json}" assert len(response) > 0, "No services found—please ensure you have deployed services." print(f"DEBUG: Found {len(response)} services.") except json.JSONDecodeError: assert False, f"Response is not valid JSON: {response_json}"

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/matthewhand/mcp-openapi-proxy'

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