# OpenAPI Utilities (New Implementation)
This directory contains the next-generation OpenAPI integration utilities for FastMCP, designed to replace the legacy `openapi.py` implementation.
## Architecture Overview
The new implementation follows a **stateless request building strategy** using `openapi-core` for high-performance, per-request HTTP request construction, eliminating startup latency while maintaining robust OpenAPI compliance.
### Core Components
1. **`director.py`** - `RequestDirector` for stateless HTTP request building
2. **`parser.py`** - OpenAPI spec parsing and route extraction with pre-calculated schemas
3. **`schemas.py`** - Schema processing with parameter mapping for collision handling
4. **`models.py`** - Enhanced data models with pre-calculated fields for performance
5. **`formatters.py`** - Response formatting and processing utilities
### Key Architecture Principles
#### 1. Stateless Request Building
- Uses `openapi-core` library for robust OpenAPI parameter serialization
- Builds HTTP requests on-demand with zero startup latency
- Offloads OpenAPI compliance to a well-tested library without code generation overhead
#### 2. Pre-calculated Optimization
- **Schema Pre-calculation**: Combined schemas calculated once during parsing
- **Parameter Mapping**: Collision resolution mapping calculated upfront
- **Zero Runtime Overhead**: All complex processing done during initialization
#### 3. Performance-First Design
- **No Code Generation**: Eliminates 100-200ms startup latency
- **Serverless Friendly**: Ideal for cold-start environments
- **Minimal Dependencies**: Uses lightweight `openapi-core` instead of full client generation
## Data Flow
### Initialization Process
```
OpenAPI Spec → Parser → HTTPRoute with Pre-calculated Fields → RequestDirector + SchemaPath
```
1. **Input**: Raw OpenAPI specification (dict)
2. **Parsing**: Extract operations to `HTTPRoute` models
3. **Pre-calculation**: Generate combined schemas and parameter maps during parsing
4. **Director Setup**: Create `RequestDirector` with `SchemaPath` for request building
### Request Processing
```
MCP Tool Call → RequestDirector.build() → httpx.Request → HTTP Response → Structured Output
```
1. **Tool Invocation**: FastMCP receives tool call with parameters
2. **Request Building**: RequestDirector builds HTTP request using parameter map
3. **Parameter Handling**: openapi-core handles all OpenAPI serialization rules
4. **Response Processing**: Parse response into structured format with proper error handling
## Key Features
### 1. High-Performance Request Building
- Zero startup latency - no code generation required
- Stateless request building scales infinitely
- Uses proven `openapi-core` library for OpenAPI compliance
- Perfect for serverless and cold-start environments
### 2. Comprehensive Parameter Support
- **Parameter Collisions**: Intelligent collision resolution with suffixing
- **DeepObject Style**: Full support for deepObject parameters with explode=true/false
- **Complex Schemas**: Handles nested objects, arrays, and all OpenAPI types
- **Pre-calculated Mapping**: Parameter location mapping done upfront for performance
### 3. Enhanced Error Handling
- HTTP status code mapping to MCP errors
- Structured error responses with detailed information
- Graceful handling of network timeouts and connection errors
- Proper error context preservation
### 4. Advanced Schema Processing
- **Pre-calculated Schemas**: Combined parameter and body schemas calculated once
- **Collision-aware**: Automatically handles parameter name collisions
- **Type Safety**: Full Pydantic model validation
- **Performance**: Zero runtime schema processing overhead
## Component Integration
### Server Components (`/server/openapi_new/`)
1. **`OpenAPITool`** - Simplified tool implementation using RequestDirector
2. **`OpenAPIResource`** - Resource implementation with RequestDirector
3. **`OpenAPIResourceTemplate`** - Resource template with RequestDirector support
4. **`FastMCPOpenAPI`** - Main server class with stateless request building
### RequestDirector Integration
All components use the same RequestDirector approach:
- Consistent parameter handling across all component types
- Uniform error handling and response processing
- Simplified architecture without fallback complexity
- High performance for all operation types
## Usage Examples
### Basic Server Setup
```python
import httpx
from fastmcp.server.openapi_new import FastMCPOpenAPI
# OpenAPI spec (can be loaded from file/URL)
openapi_spec = {...}
# Create HTTP client
async with httpx.AsyncClient() as client:
# Create server with stateless request building
server = FastMCPOpenAPI(
openapi_spec=openapi_spec,
client=client,
name="My API Server"
)
# Server automatically creates RequestDirector and pre-calculates schemas
```
### Direct RequestDirector Usage
```python
from fastmcp.experimental.utilities.openapi.director import RequestDirector
from jsonschema_path import SchemaPath
# Create RequestDirector manually
spec = SchemaPath.from_dict(openapi_spec)
director = RequestDirector(spec)
# Build HTTP request
request = director.build(route, flat_arguments, base_url)
# Execute with httpx
async with httpx.AsyncClient() as client:
response = await client.send(request)
```
## Testing Strategy
Tests are located in `/tests/server/openapi_new/`:
### Test Categories
1. **Core Functionality**
- `test_server.py` - Server initialization and RequestDirector integration
2. **OpenAPI Features**
- `test_parameter_collisions.py` - Parameter name collision handling
- `test_deepobject_style.py` - DeepObject parameter style support
- `test_openapi_features.py` - General OpenAPI feature compliance
### Testing Philosophy
- **Real Objects**: Use real HTTPRoute models and OpenAPI specifications
- **Minimal Mocking**: Only mock external HTTP endpoints
- **Performance Focus**: Test that initialization is fast and stateless
- **Behavioral Testing**: Verify OpenAPI compliance without implementation details
## Migration Guide
### From Legacy Implementation
1. **Import Changes**:
```python
# Old
from fastmcp.server.openapi import FastMCPOpenAPI
# New
from fastmcp.server.openapi_new import FastMCPOpenAPI
```
2. **Constructor**: Same interface, no changes needed
3. **Automatic Benefits**:
- Eliminates startup latency (100-200ms improvement)
- Better OpenAPI compliance via openapi-core
- Serverless-friendly performance characteristics
- Simplified architecture without fallback complexity
### Performance Improvements
- **Cold Start**: Zero latency penalty for serverless deployments
- **Memory Usage**: Lower memory footprint without generated client code
- **Reliability**: No dynamic code generation failures
- **Maintainability**: Simpler architecture with fewer moving parts
## Future Enhancements
### Planned Features
1. **Response Streaming**: Handle streaming API responses
2. **Enhanced Authentication**: More auth provider integrations
3. **Advanced Metrics**: Detailed request/response monitoring
4. **Schema Validation**: Enhanced input/output validation
5. **Batch Operations**: Optimized multi-operation requests
### Performance Improvements
1. **Schema Caching**: More aggressive schema pre-calculation
2. **Memory Optimization**: Further reduce memory footprint
3. **Request Batching**: Smart batching for bulk operations
4. **Connection Optimization**: Enhanced connection pooling strategies
## Troubleshooting
### Common Issues
1. **RequestDirector Initialization Fails**
- Check OpenAPI spec validity with `jsonschema-path`
- Verify spec format is correct JSON/YAML
- Ensure all required OpenAPI fields are present
2. **Parameter Mapping Issues**
- Check parameter collision resolution in debug logs
- Verify parameter names match OpenAPI spec exactly
- Review pre-calculated parameter map in HTTPRoute
3. **Request Building Errors**
- Check network connectivity to target API
- Verify base URL configuration
- Review parameter validation and type mismatches
### Debugging
- Enable debug logging: `logger.setLevel(logging.DEBUG)`
- Check RequestDirector initialization logs
- Review parameter mapping in HTTPRoute models
- Monitor request building and API response patterns
## Dependencies
- `openapi-core` - OpenAPI specification processing and validation
- `httpx` - HTTP client library
- `pydantic` - Data validation and serialization
- `urllib.parse` - URL building and manipulation