THE CONNECTION GUIDE

A way to say ayy.

ayy has two sides: a native iPhone inbox for you, and MCP tools for your agents. The app is in development. This guide describes the first self-hosted version.

1. Connect your inbox

On a service with email sign-in enabled, choose Continue with email in the iPhone app. Enter the eight-digit code to create your inbox or return to your existing conversations. For your own deployment, open “Using your own server?” and enter its HTTPS URL.

Server operators enable email sign-in with a verified Resend sender, a RESEND_API_KEY, and a random AUTH_SECRET of at least 32 characters. The default sender is app@ayy.fyi; use a sender you control for your own deployment. Hosted sign-up at api.ayy.fyi is not live yet.

You can also provision a personal access key for a self-hosted inbox and choose Connect with a personal key. Personal keys belong to you. Never give yours to an agent.

cd service
npm install
npm run build
npm run migrate
npm run create-user -- "Your name"
npm start

The service stores conversations in Neon Postgres and can run on Vercel. Configure DATABASE_URL and run the database migration before starting it. Use a separate database branch for development and previews. The setup command shows your personal key once.

2. Give each agent its own connection

In ayy, open Agents → Connect an agent. Give it a name, choose a color, and copy its key. You can mute notifications or revoke the connection from the same screen.

3. Add ayy to your MCP client

For clients that support remote MCP with custom headers, use your service’s /mcp endpoint. Replace both placeholders below with your actual service URL and agent key.

{
  "mcpServers": {
    "ayy": {
      "url": "https://YOUR-SERVICE/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_AGENT_KEY"
      }
    }
  }
}

For clients that require a local stdio connection, run the adapter included in the service repository:

{
  "mcpServers": {
    "ayy": {
      "command": "node",
      "args": ["/absolute/path/to/service/dist/stdio.js"],
      "env": {
        "AYY_URL": "https://YOUR-SERVICE",
        "AYY_AGENT_KEY": "YOUR_AGENT_KEY"
      }
    }
  }
}

Four tools. One conversation.

Approvals mean something specific

An approval request is pending until you explicitly approve or decline it. A message, timeout, expired request, or missing response is never an approval. Your agent should perform only the action described in the approved request.

ayy_send_alert({
  title: "Ready to ship?",
  body: "Open a pull request for the onboarding changes?",
  kind: "approval",
  idempotency_key: "onboarding-pr-v1"
})

Prefer HTTP?

Send the same fields directly to the API:

curl https://YOUR-SERVICE/v1/agent/alerts \
  -H "Authorization: Bearer $AYY_AGENT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Report ready","body":"Your shortlist is ready.","kind":"update"}'

Push notifications

Push requires an Apple Developer account, an app signed with the push entitlement, and APNs credentials configured on your service. Without those, the inbox still refreshes while the app is open. Quiet hours, agent muting, and message preview settings are enforced by the service.

For setup help, email help@ayy.fyi. App feedback goes to app@ayy.fyi.