Fast Fly.io operations via FGP daemon. Manage apps, machines, and deployments without MCP cold-start overhead.
git clone https://github.com/fast-gateway-protocol/fly.git
cd fgp-fly
cargo build --releaseRequirements:
- Rust 1.70+
- Fly.io API token (
FLY_API_TOKENenv var)
# Set your Fly.io token
export FLY_API_TOKEN="fo1_xxxxx"
# Start the daemon
./target/release/fgp-fly start
# List your apps
fgp call fly.apps
# Get app status
fgp call fly.status '{"app": "my-app"}'
# List machines
fgp call fly.machines '{"app": "my-app"}'
# Stop daemon
./target/release/fgp-fly stop| Method | Params | Description |
|---|---|---|
fly.apps |
limit (default: 25) |
List all Fly.io apps |
fly.status |
app (required) |
Get status for a specific app |
fly.machines |
app (required) |
List machines for an app |
fly.user |
- | Get current user info |
Socket: ~/.fgp/services/fly/daemon.sock
Request:
{"id": "uuid", "v": 1, "method": "fly.apps", "params": {"limit": 10}}Response:
{"id": "uuid", "ok": true, "result": {"apps": [...], "count": 5}}| Operation | FGP Daemon | MCP stdio | Speedup |
|---|---|---|---|
| List apps | ~200ms | ~2,500ms | 12x |
| App status | ~150ms | ~2,400ms | 16x |
FGP keeps the API connection warm, eliminating cold-start overhead.
Symptom: Requests fail with 401 or "unauthorized"
Solutions:
- Verify token is set:
echo $FLY_API_TOKEN - Check token is valid:
curl -H "Authorization: Bearer $FLY_API_TOKEN" https://api.fly.io/graphql - Generate new token at https://fly.io/user/personal_access_tokens
Symptom: "App not found" error for existing app
Check:
- App name is correct (case-sensitive)
- Token has access to the organization owning the app
- Try listing apps first:
fgp call fly.apps
Symptom: 429 errors or slow responses
Solutions:
- Fly.io has rate limits on API calls
- Add delays between bulk operations
- Cache results when possible
Symptom: fly.machines returns empty for deployed app
Check:
- App uses Fly Machines (not Nomad/legacy)
- Machines exist:
fly machines list -a <app-name> - Token has correct permissions
Symptom: "Connection refused" when calling daemon
Solution:
# Check daemon is running
pgrep -f fgp-fly
# Restart daemon
./target/release/fgp-fly stop
export FLY_API_TOKEN="fo1_xxxxx"
./target/release/fgp-fly start
# Verify socket exists
ls ~/.fgp/services/fly/daemon.sockSymptom: Errors mentioning GraphQL or query failures
Check:
- Fly.io API status: https://status.fly.io
- Token permissions (some queries need org admin)
- Try simpler query first:
fly.user
MIT