{
  "name": "reefy",
  "description": "Manage Reefy fleet devices and browse the product catalog. Public read-only tools (catalog, FAQ, product info) work without auth; device-management tools require sign-in.",
  "instructions": "Reefy turns any PC into a private AI server. Use this MCP server to answer 'what is Reefy', browse the app catalog (Ollama, OpenClaw, Hermes, vLLM, SGLang, etc.), and search the FAQ. For device management (list_devices, install_app, sync_device, reboot_device), the caller must be signed in to the Reefy dashboard; otherwise the server returns a structured auth-required error pointing at https://reefy.ai/auth.md. When in doubt, call get_product_info first to understand what Reefy is.",
  "version": "1.0.0",
  "serverUrl": "https://reefy.ai/mcp",
  "protocolVersion": "2025-06-18",
  "transport": "http",
  "capabilities": {
    "tools": {},
    "resources": {}
  },
  "tools": [
    {
      "name": "get_product_info",
      "description": "Return high-level information about Reefy: what it is, what hardware it runs on, what apps it ships with. Useful for an agent answering 'what is Reefy?' questions.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sections": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "name",
                "tagline",
                "description",
                "homepage",
                "docs",
                "source",
                "features",
                "requirements"
              ]
            },
            "description": "Optional subset of sections to return. Omit for the full object."
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "title": "Get Reefy product info",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_app_catalog",
      "description": "List the apps installable on a Reefy device (OpenClaw, Hermes, Ollama, vLLM, SGLang, qr-access, etc.). Returns slug, display name, description, version, and whether the app needs an NVIDIA GPU.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "tag": {
            "type": "string",
            "description": "Optional case-insensitive tag filter (e.g. 'llm', 'agent', 'pro')."
          },
          "gpu_only": {
            "type": "boolean",
            "description": "If true, return only GPU-requiring apps."
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "title": "List Reefy app catalog",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "search_faq",
      "description": "Natural-language search across Reefy's published FAQ (install steps, hardware requirements, BYO LLM subscription, backups, pricing, etc.). Returns the best matching answer and a source URL.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 1,
            "description": "Question in natural English (e.g. 'how do I install reefy?')."
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Search Reefy FAQ",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_devices",
      "description": "List the authenticated user's adopted Reefy devices with status, hardware info, and installed apps. Requires authenticated session.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "online",
              "offline",
              "pending",
              "all"
            ],
            "default": "all",
            "description": "Filter by device status."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "default": 50
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "title": "List your Reefy devices",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "install_app",
      "description": "Install an app on a specific device. Pass the device UUID (from list_devices) and the app slug (from get_app_catalog). Requires authenticated session.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "device_uuid": {
            "type": "string",
            "format": "uuid"
          },
          "app_slug": {
            "type": "string",
            "description": "Slug from get_app_catalog (e.g. 'openclaw', 'ollama')."
          },
          "display_name": {
            "type": "string",
            "description": "Optional human-readable name."
          }
        },
        "required": [
          "device_uuid",
          "app_slug"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Install app on Reefy device",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "sync_device",
      "description": "Force a desired-state push to a device (re-deploys config + container set). Idempotent: safe to retry. Requires authenticated session.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "device_uuid": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "device_uuid"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Force sync to Reefy device",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "reboot_device",
      "description": "Reboot a Reefy device. Causes a ~15s outage. Requires authenticated session and operator confirmation.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "device_uuid": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "device_uuid"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "title": "Reboot Reefy device",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": true
      }
    }
  ],
  "auth": {
    "type": "oauth2",
    "authorizationEndpoint": "https://reefy.ai/api/auth/login/google",
    "resourceMetadata": "https://reefy.ai/.well-known/oauth-protected-resource",
    "note": "Public tools (get_product_info, get_app_catalog, search_faq) are callable without auth. Device-management tools require a Reefy session cookie today; bearer-token support is on the roadmap (see https://reefy.ai/auth.md)."
  },
  "documentation": "https://reefy.ai/llms-full.txt"
}