Skip to content

Conversation

@QuiltSimon
Copy link
Contributor

Summary

  • add reusable Terraform module that provisions the MCP ECS service, target group, listener rule, and CloudWatch logging
  • expose an HTTP /healthz endpoint for load balancers and document the FastMCP proxy workflow
  • provide example Terraform wiring plus unit tests that guard the module and documentation

Testing

  • uv run pytest tests/unit/test_main.py tests/unit/test_documentation.py tests/unit/test_utils.py tests/unit/test_terraform_module.py

Closes #190

smkohnstamm and others added 24 commits September 22, 2025 08:28
- Add CORSMiddleware to FastMCP server for cross-origin requests
- Configure CORS to allow all origins, methods, and headers
- Use proper ASGI app approach following FastMCP documentation
- Enable credentials support for authenticated requests
- Add fallback handling for missing CORS dependencies
- Support both http and streamable-http transport modes

This enables web frontend integration with the remote MCP server
deployed at https://demo.quiltdata.com/mcp/
- Add SSE transport to CORS middleware configuration
- Expose mcp-session-id header for SSE session management
- Support SSE alongside HTTP and streamable-HTTP transports
- Enable real-time bidirectional communication for frontend integration
- Add SSE-specific ECS task definition for deployment
- Add ECS task definition for SSE transport mode
- Configure SSE service with proper environment variables
- Set up target group and ALB listener rule for /sse/* endpoint
- Enable real-time streaming for frontend integration
- Implement custom SessionIDExposeMiddleware to explicitly set Access-Control-Expose-Headers
- Add BaseHTTPMiddleware to ensure mcp-session-id is exposed for CORS
- Address frontend requirement for session ID access in browser
- Maintain compatibility with existing CORS configuration
- Remove custom middleware and use proper Starlette CORSMiddleware
- Configure expose_headers=['mcp-session-id'] following FastAPI best practices
- Clean up unused imports and simplify implementation
- Follow official documentation for CORS header exposure
- Version bump from 0.6.12 to 0.6.13
- Added CHANGELOG entry for Docker container support features
- Documented HTTP transport implementation and tooling
- Extract Docker operations to reusable scripts/docker.sh
- Move Docker push from push.yml to create-release action
- Add manual Docker targets to make.deploy (docker-build, docker-push)
- Update env.example with Docker configuration variables
- Optimize CI/CD by skipping Docker for dev releases
- Add PR validation for Docker builds without pushing
- Document required GitHub secrets for ECR operations
- Merged docker.sh and docker_image.py into single docker.py script
- Unified tag generation, build, and push operations
- Updated all references in workflows and Makefiles
- Added comprehensive tests for the new unified script
- Removed legacy bash and separate Python scripts
- Maintains backward compatibility with same functionality
…Error

- Removed _EnsureExposeHeadersMiddleware that was interfering with ASGI protocol
- Simplified CORS configuration to use only standard CORSMiddleware
- This resolves persistent health check failures and target group draining
- CORS headers still properly exposed via expose_headers parameter

Fixes: Persistent 404 errors due to unhealthy containers
Root cause: Custom middleware breaking ASGI message flow
Base automatically changed from impl/feature-docker-container to main September 24, 2025 11:33
@drernie drernie changed the base branch from main to fix-release-6-14 October 10, 2025 22:20
Base automatically changed from fix-release-6-14 to main October 10, 2025 22:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants