# OpenAPI Server Implementation (New) This directory contains the next-generation FastMCP server implementation for OpenAPI integration, designed to replace the legacy implementation in `/server/openapi.py`. ## Architecture Overview The new implementation uses a **stateless request building approach** with `openapi-core` and `RequestDirector`, providing zero-latency startup and robust OpenAPI support optimized for serverless environments. ### Core Components 1. **`server.py`** - `FastMCPOpenAPI` main server class with RequestDirector integration 2. **`components.py`** - Simplified component implementations using RequestDirector 3. **`routing.py`** - Route mapping and component selection logic ### Key Architecture Principles #### 1. Stateless Performance - **Zero Startup Latency**: No code generation or heavy initialization - **RequestDirector**: Stateless HTTP request building using openapi-core - **Pre-calculated Schemas**: All complex processing done during parsing #### 2. Unified Implementation - **Single Code Path**: All components use RequestDirector consistently - **No Fallbacks**: Simplified architecture without hybrid complexity - **Performance First**: Optimized for cold starts and serverless deployments #### 3. OpenAPI Compliance - **openapi-core Integration**: Leverages proven library for parameter serialization - **Full Feature Support**: Complete OpenAPI 3.0/3.1 support including deepObject - **Error Handling**: Comprehensive HTTP error mapping to MCP errors ## Component Classes ### RequestDirector-Based Components #### `OpenAPITool` - Executes operations using RequestDirector for HTTP request building - Automatic parameter validation and OpenAPI-compliant serialization - Built-in error handling and structured response processing - **Advantages**: Zero latency, robust, comprehensive OpenAPI support #### `OpenAPIResource` / `OpenAPIResourceTemplate` - Provides resource access using RequestDirector - Consistent parameter handling across all resource types - Support for complex parameter patterns and collision resolution - **Advantages**: High performance, simplified architecture, reliable error handling ## Server Implementation ### `FastMCPOpenAPI` Class The main server class orchestrates the stateless request building approach: ```python class FastMCPOpenAPI(FastMCP): def __init__(self, openapi_spec: dict, client: httpx.AsyncClient, **kwargs): # 1. Parse OpenAPI spec to HTTP routes with pre-calculated schemas self._routes = parse_openapi_to_http_routes(openapi_spec) # 2. Initialize RequestDirector with openapi-core Spec self._spec = Spec.from_dict(openapi_spec) self._director = RequestDirector(self._spec) # 3. Create components using RequestDirector self._create_components() ``` ### Component Creation Logic ```python def _create_tool(self, route: HTTPRoute) -> Tool: # All tools use RequestDirector for consistent, high-performance request building return OpenAPITool( client=self._client, route=route, director=self._director, name=tool_name, description=description, parameters=flat_param_schema ) ``` ## Data Flow ### Stateless Request Building ``` OpenAPI Spec → HTTPRoute with Pre-calculated Fields → RequestDirector → HTTP Request → Structured Response ``` 1. **Spec Parsing**: OpenAPI spec parsed to `HTTPRoute` models with pre-calculated schemas 2. **RequestDirector Setup**: openapi-core Spec initialized for request building 3. **Component Creation**: Create components with RequestDirector reference 4. **Request Building**: RequestDirector builds HTTP request from flat parameters 5. **Request Execution**: Execute request with httpx client 6. **Response Processing**: Return structured MCP response ## Key Features ### 1. Enhanced Parameter Handling #### Parameter Collision Resolution - **Automatic Suffixing**: Colliding parameters get location-based suffixes - **Example**: `id` in path and body becomes `id__path` and `id` - **Transparent**: LLMs see suffixed parameters, implementation routes correctly #### DeepObject Style Support - **Native Support**: Generated client handles all deepObject variations - **Explode Handling**: Proper support for explode=true/false - **Complex Objects**: Nested object serialization works correctly ### 2. Robust Error Handling #### HTTP Error Mapping - **Status Code Mapping**: HTTP errors mapped to appropriate MCP errors - **Structured Responses**: Error details preserved in tool results - **Timeout Handling**: Network timeouts handled gracefully #### Request Building Error Handling - **Parameter Validation**: Invalid parameters caught during request building - **Schema Validation**: openapi-core validates all OpenAPI constraints - **Graceful Degradation**: Missing optional parameters handled smoothly ### 3. Performance Optimizations #### Efficient Client Reuse - **Connection Pooling**: HTTP connections reused across requests - **Client Caching**: Generated clients cached for performance - **Async Support**: Full async/await throughout #### Request Optimization - **Pre-calculated Schemas**: All complex processing done during initialization - **Parameter Mapping**: Collision resolution handled upfront - **Zero Latency**: No runtime code generation or complex schema processing ## Configuration ### Server Options ```python server = FastMCPOpenAPI( openapi_spec=spec, # Required: OpenAPI specification client=httpx_client, # Required: HTTP client instance name="API Server", # Optional: Server name route_map=custom_routes, # Optional: Custom route mappings enable_caching=True, # Optional: Enable response caching ) ``` ### Route Mapping Customization ```python from fastmcp.server.openapi_new.routing import RouteMap custom_routes = RouteMap({ "GET:/users": "tool", # Force specific operations to be tools "GET:/status": "resource", # Force specific operations to be resources }) ``` ## Testing Strategy ### Test Structure Tests are organized by functionality: - `test_server.py` - Server integration and RequestDirector behavior - `test_parameter_collisions.py` - Parameter collision handling - `test_deepobject_style.py` - DeepObject parameter style support - `test_openapi_features.py` - General OpenAPI feature compliance ### Testing Philosophy 1. **Real Integration**: Test with real OpenAPI specs and HTTP clients 2. **Minimal Mocking**: Only mock external API endpoints 3. **Behavioral Focus**: Test behavior, not implementation details 4. **Performance Focus**: Test that initialization is fast and stateless ### Example Test Pattern ```python async def test_stateless_request_building(): """Test that server works with stateless RequestDirector approach.""" # Test server initialization is fast start_time = time.time() server = FastMCPOpenAPI(spec=valid_spec, client=client) init_time = time.time() - start_time assert init_time < 0.01 # Should be very fast # Verify RequestDirector functionality assert hasattr(server, '_director') assert hasattr(server, '_spec') ``` ## Migration Benefits ### From Legacy Implementation 1. **Eliminated Startup Latency**: Zero code generation overhead (100-200ms improvement) 2. **Better OpenAPI Compliance**: openapi-core handles all OpenAPI features correctly 3. **Serverless Friendly**: Perfect for cold-start environments 4. **Simplified Architecture**: Single RequestDirector approach eliminates complexity 5. **Enhanced Reliability**: No dynamic code generation failures ### Backward Compatibility - **Same Interface**: Public API unchanged from legacy implementation - **Performance Improvement**: Significantly faster initialization - **No Breaking Changes**: Existing code works without modification ## Monitoring and Debugging ### Logging ```python # Enable debug logging to see implementation choices import logging logging.getLogger("fastmcp.server.openapi_new").setLevel(logging.DEBUG) ``` ### Key Log Messages - **RequestDirector Initialization**: Success/failure of RequestDirector setup - **Schema Pre-calculation**: Pre-calculated schema and parameter map status - **Request Building**: Parameter mapping and URL construction details - **Performance Metrics**: Request timing and error rates ### Debugging Common Issues 1. **RequestDirector Initialization Fails** - Check OpenAPI spec validity with `openapi-core` - Verify spec format is correct JSON/YAML - Ensure all required OpenAPI fields are present 2. **Parameter Issues** - Enable debug logging for parameter processing - Check for parameter collision warnings - Verify OpenAPI spec parameter definitions 3. **Performance Issues** - Monitor RequestDirector request building timing - Check HTTP client configuration - Review response processing timing ## Future Enhancements ### Planned Features 1. **Advanced Caching**: Intelligent response caching with TTL 2. **Streaming Support**: Handle streaming API responses 3. **Batch Operations**: Optimize multiple operation calls 4. **Enhanced Monitoring**: Detailed metrics and health checks 5. **Configuration Management**: Dynamic configuration updates ### Performance Improvements 1. **Enhanced Schema Caching**: More aggressive schema pre-calculation 2. **Parallel Processing**: Concurrent operation execution 3. **Memory Optimization**: Further reduce memory footprint 4. **Request Optimization**: Smart request batching and deduplication ## Related Documentation - `/utilities/openapi_new/README.md` - Utility implementation details - `/server/openapi/README.md` - Legacy implementation reference - `/tests/server/openapi_new/` - Comprehensive test suite - Project documentation on OpenAPI integration patterns