About fly-mcp
fly-mcp is an open-source MCP server for managing Fly.io applications and infrastructure. It provides authenticated tools for app listing, status checks, restarts, and scaling, with confirmation for destructive actions.
Key features
- 01List and filter applications
- 02Inspect app and machine status
- 03Restart apps with confirmation
- 04Check scaling status
- 05Authentication and audit logging
- 06Health checks and metrics
Use cases
- 01Review Fly.io application status
- 02Restart an application with confirmation
- 03Check scaling status and recommendations
MCP support
The server exposes Fly.io management tools to MCP clients, including app listing, app information, status, restart, and scaling operations. It uses authentication and records operations in audit logs.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEfly-mcp
An open-source MCP (Model Context Protocol) server for Fly.io infrastructure management, enabling AI-driven DevOps workflows through natural language interactions.
🚀 Quick Start
Prerequisites
- Go 1.21 or later
- Fly.io account and API token
- Git
Local Development Setup
-
Clone the repository
git clone https://github.com/brannn/fly-mcp.git cd fly-mcp -
Set up environment variables
export FLY_MCP_FLY_API_TOKEN="your_fly_api_token_here" export FLY_MCP_FLY_ORGANIZATION="your_fly_org_here" -
Build and run
make build make runOr for development with hot reload:
make dev
Production Deployment on Fly.io
Deploy using Fly.io's MCP infrastructure:
fly mcp launch \
"github.com/brannn/fly-mcp" \
--claude --cursor --zed \
--server fly-infrastructure \
--secret FLY_API_TOKEN=fo1_your_token \
--secret FLY_ORG=your-org-name
🏗️ Architecture
Project Structure
fly-mcp/
├── cmd/fly-mcp/ # Main application entry point
├── pkg/
│ ├── mcp/ # MCP protocol implementation
│ ├── fly/ # Fly.io API client (coming soon)
│ ├── auth/ # Authentication (coming soon)
│ ├── tools/ # MCP tool implementations (coming soon)
│ └── config/ # Configuration management
├── internal/
│ ├── server/ # HTTP server implementation
│ ├── security/ # Security utilities (coming soon)
│ └── logger/ # Structured logging
├── config.local.yaml # Local development configuration
├── config.production.yaml # Production configuration
└── Makefile # Build automation
Configuration
The application supports flexible configuration through:
- YAML files:
config.local.yamlfor development,config.production.yamlfor production - Environment variables: All config values can be overridden with
FLY_MCP_prefixed env vars - Command line flags:
--configand--log-levelflags
Environment Variables
| Variable | Description | Required |
|---|---|---|
FLY_MCP_FLY_API_TOKEN | Fly.io API token | Yes |
FLY_MCP_FLY_ORGANIZATION | Fly.io organization name | Yes |
FLY_MCP_ENVIRONMENT | Environment (local/production) | No |
FLY_MCP_LOGGING_LEVEL | Log level (debug/info/warn/error) | No |
🛠️ Development
Available Make Targets
make build # Build the binary
make build-all # Build for all platforms
make test # Run tests
make test-coverage # Run tests with coverage
make lint # Run linters
make fmt # Format code
make clean # Clean build artifacts
make dev # Run in development mode
make validate-config # Validate configuration
make docker-build # Build Docker image
make help # Show all available targets
Running Tests
# Run all tests
make test
# Run tests with coverage
make test-coverage
# Run benchmarks
make benchmark
Code Quality
# Format code
make fmt
# Run linters
make lint
# Run all checks
make check
🔧 Configuration Examples
Local Development
Create a .env file or set environment variables:
export FLY_MCP_FLY_API_TOKEN="fo1_your_development_token"
export FLY_MCP_FLY_ORGANIZATION="your-dev-org"
export FLY_MCP_LOGGING_LEVEL="debug"
Production on Fly.io
Set secrets in your Fly.io app:
fly secrets set FLY_API_TOKEN=fo1_your_production_token
fly secrets set FLY_ORG=your-production-org
🛠️ Available MCP Tools
Core Tools
| Tool | Description | Example Usage |
|---|---|---|
ping | Test connectivity and server response | {"name": "ping", "arguments": {"message": "Hello!"}} |
Fly.io Management Tools
| Tool | Description | Example Usage |
|---|---|---|
fly_list_apps | List all applications with filtering | {"name": "fly_list_apps", "arguments": {"status_filter": "running"}} |
fly_app_info | Get detailed application information | {"name": "fly_app_info", "arguments": {"app_name": "my-app"}} |
fly_status | Real-time application and machine status | {"name": "fly_status", "arguments": {"app_name": "my-app"}} |
fly_restart | Restart applications with confirmation | {"name": "fly_restart", "arguments": {"app_name": "my-app", "confirm": true}} |
fly_scale | Scaling status and recommendations | {"name": "fly_scale", "arguments": {"app_name": "my-app", "action": "status"}} |
Tool Features
- 🔒 Security: All tools require proper authentication and permissions
- 📝 Audit Logging: All operations are logged for compliance and debugging
- ⚡ Real-time: Status and machine information is fetched in real-time
- 🛡️ Safety: Destructive operations require explicit confirmation
- 📊 Rich Output: Human-readable responses with actionable recommendations
🧪 Testing the MCP Server
Automated Testing
Use the provided test script to verify all tools:
# Start the server first
make dev
# In another terminal, run tests
./scripts/test-mcp-tools.sh
Manual Testing
-
Health Check
curl http://localhost:8080/health -
MCP Initialize
curl -X POST http://localhost:8080/mcp \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "test-client", "version": "1.0.0"} } }' -
List Available Tools
curl -X POST http://localhost:8080/mcp \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/list" }' -
Test Ping Tool
curl -X POST http://localhost:8080/mcp \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "ping", "arguments": {"message": "Hello from fly-mcp!"} } }' -
Test Fly.io Tools (requires valid credentials)
curl -X POST http://localhost:8080/mcp \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": { "name": "fly_list_apps", "arguments": {} } }'
🎯 Current Status
Phase 2 Complete: Fly.io API Integration & Core Tools
✅ Implemented Features
- ✅ Project structure and build system
- ✅ Configuration management (local/production environments)
- ✅ HTTP server with middleware (CORS, rate limiting, logging)
- ✅ MCP protocol handler with full request/response handling
- ✅ Structured logging with audit trails and security events
- ✅ Fly.io API integration (hybrid approach: fly-go + Machines API)
- ✅ Authentication & authorization with permissions and audit logging
- ✅ Core MCP tools:
ping- Test tool for connectivityfly_list_apps- List all applications with filteringfly_app_info- Get detailed application informationfly_status- Real-time application and machine statusfly_restart- Restart applications with confirmationfly_scale- Scaling status and recommendations
- ✅ Health checks and metrics endpoints
- ✅ Comprehensive error handling and validation
- ✅ Security features (rate limiting, CORS, audit logging)
🔄 Coming Next (Phase 3)
- 🔄 Additional tools: logs, secrets, volumes, certificates
- 🔄 Deploy tool for application deployment
- 🔄 Advanced scaling with auto-scaling recommendations
- 🔄 Monitoring integration with alerts and dashboards
- 🔄 CI/CD pipeline and automated testing
- 🔄 Documentation and usage examples
📝 License
This project is licensed under the MIT License - see the LICENSE file for details.
🤝 Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
📞 Support
- GitHub Issues: Report bugs or request features
- Documentation: Full documentation
- Community: Discussions
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.