Bring Manus AI to iMessage. Built by Photon.
TypeScript monorepo that bridges iMessage and Manus AI. Users text a phone number, Manus handles their request, and the response comes back as an iMessage.
How it works:
- User texts the Photon number via iMessage
- Message is queued, debounced, and classified (new task vs follow-up)
- Manus AI processes the task
- Results are delivered back via iMessage
| Service | Description |
|---|---|
| Backend | API server — connection flow, webhooks, iMessage event handling |
| Worker | Message processor — debouncing, classification, Manus API integration |
| SLM Classifier | Intent router — classifies messages for agentic routing |
Shared packages:
packages/shared— Types, schemas, utilitiespackages/database— Database ORM and migrations
Prerequisites: Node.js 20+, pnpm 8+, Docker
cp .env.example .env # Edit with your credentials
pnpm install
make dev # Starts postgres, redis, runs migrations, starts all servicesOr manually:
docker compose up -d postgres redis
pnpm db:generate && pnpm db:migrate
pnpm devdocker compose -f docker-compose.prod.yml up -dAll services run in Docker. The backend entrypoint handles migrations automatically on startup.
Copy .env.example and fill in the required values. See the file for the full list of options.
User ──iMessage──► Backend ──► Queue ──► Worker ──► Manus AI
◄─── Webhooks ◄──────────────────┘
Key features:
- Intent classification (new task vs follow-up)
- Typing indicators
- Free tier with optional API key upgrade
- File attachment support
- Tapback reactions for status feedback
manus/
├── packages/
│ ├── shared/ # Types, schemas, utilities
│ └── database/ # Database ORM, migrations
├── services/
│ ├── backend/ # API server + event handling
│ ├── worker/ # Message processing
│ └── slm-classifier/ # Intent classification
├── docker-compose.yml # Dev environment
├── docker-compose.prod.yml # Production environment
├── Makefile # Common commands
└── .env.example # Environment template
make dev # Start everything
make reset-db # Reset database (deletes all data)
make db-studio # Open Prisma Studio
make logs # Tail all Docker logs
# Individual services
pnpm --filter @imessage-mcp/backend dev
pnpm --filter @imessage-mcp/worker dev
# Database
pnpm db:generate # Regenerate Prisma client
pnpm db:migrate # Run migrations
# Health check
curl http://localhost:3000/healthMessages not processing: Check worker logs. Verify IMESSAGE_SERVER_URL and IMESSAGE_API_KEY are correct.
Follow-ups creating new tasks: Check classifier logs. Ensure DETECTION_MODE=slm and OPENROUTER_API_KEY is set.
Webhooks not received: Verify PUBLIC_URL is accessible from the internet.
Reset everything:
docker compose down -v && docker compose up -dBuilt by Photon