trackmcp
Back to directory

MCP server for managing your Fly.io infrastructure

0 stars GoServers & Infrastructure Updated Jun 7, 2025

Documentation

fly-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

1. Clone the repository

bash
git clone https://github.com/brannn/fly-mcp.git
   cd fly-mcp

2. Set up environment variables

bash
export FLY_MCP_FLY_API_TOKEN="your_fly_api_token_here"
   export FLY_MCP_FLY_ORGANIZATION="your_fly_org_here"

3. Build and run

bash
make build
   make run

Or for development with hot reload:

bash
make dev

Production Deployment on Fly.io

Deploy using Fly.io's MCP infrastructure:

bash
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

code
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.yaml` for development, `config.production.yaml` for production
  • Environment variables: All config values can be overridden with `FLY_MCP_` prefixed env vars
  • Command line flags: `--config` and `--log-level` flags

Environment Variables

VariableDescriptionRequired
`FLY_MCP_FLY_API_TOKEN`Fly.io API tokenYes
`FLY_MCP_FLY_ORGANIZATION`Fly.io organization nameYes
`FLY_MCP_ENVIRONMENT`Environment (local/production)No
`FLY_MCP_LOGGING_LEVEL`Log level (debug/info/warn/error)No

๐Ÿ› ๏ธ Development

Available Make Targets

bash
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

bash
# Run all tests
make test

# Run tests with coverage
make test-coverage

# Run benchmarks
make benchmark

Code Quality

bash
# 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:

bash
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:

bash
fly secrets set FLY_API_TOKEN=fo1_your_production_token
fly secrets set FLY_ORG=your-production-org

๐Ÿ› ๏ธ Available MCP Tools

Core Tools

ToolDescriptionExample Usage
`ping`Test connectivity and server response`{"name": "ping", "arguments": {"message": "Hello!"}}`

Fly.io Management Tools

ToolDescriptionExample 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:

bash
# Start the server first
make dev

# In another terminal, run tests
./scripts/test-mcp-tools.sh

Manual Testing

1. Health Check

bash
curl http://localhost:8080/health

2. MCP Initialize

bash
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"}
       }
     }'

3. List Available Tools

bash
curl -X POST http://localhost:8080/mcp \
     -H "Content-Type: application/json" \
     -d '{
       "jsonrpc": "2.0",
       "id": 2,
       "method": "tools/list"
     }'

4. Test Ping Tool

bash
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!"}
       }
     }'

5. Test Fly.io Tools (requires valid credentials)

bash
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 connectivity
    • `fly_list_apps` - List all applications with filtering
    • `fly_app_info` - Get detailed application information
    • `fly_status` - Real-time application and machine status
    • `fly_restart` - Restart applications with confirmation
    • `fly_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

Frequently asked questions

What is fly-mcp?

fly-mcp is MCP server for managing your Fly.io infrastructure

How do I install fly-mcp?

Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.

Is fly-mcp open source?

Yes โ€” it is hosted on GitHub at https://github.com/brannn/fly-mcp.

Related MCP tools

Run your own MCP server? See who uses it and what to fix.

Measure it with TrackMCP