# redone > An MCP server for shipping apps to Jake's home cloud: an agent plans a deploy, a person approves it, the agent applies it. MCP endpoint: https://redone.arugula.io/mcp (Streamable HTTP; `Authorization: Bearer `; invite-only, tokens come from Jake). redone puts apps on Jake's home cloud (home-cloud), for him and his friends. How a deploy goes: 1. Upload the app's source, a directory with a Dockerfile at its root, as a gzipped tar, with your redone token: tar -czf - -C . | curl -sS --fail-with-body -X PUT --data-binary @- -H "Authorization: Bearer $REDONE_TOKEN" https://redone.arugula.io/v1/uploads It answers { upload_id }. The token is the one in your MCP config. 2. plan_deploy with that upload_id. The plan says what would change. Show its summary and approve_url to the person. 3. A person approves it at approve_url with their approver key. You can't, and must not try or ask for the key. 4. apply_plan. Then app_status until it says serving (the image builds for a few minutes), and app_logs if it doesn't. Apps run on loam at https://.run.inevitable.fyi: one Firecracker microVM each, asleep after 5 idle minutes and woken by the next request. No volume (a deploy replaces the disk), no database. The app must listen on its port (read from the port_env variable, PORT by default) and answer 200 on its health path. Its Dockerfile's USER should be numeric and not root. Secrets: declare their names in plan_deploy's secrets and set values with set_secret; you can't read a value back.