Complete setup instructions for desktop and mobile/web usage.
- PostgreSQL 14+ (any provider: Supabase, Neon, Railway, local, etc.)
- Node.js 18+
- Claude Code or Claude Desktop (for local use) OR server hosting (for mobile/web)
Choose any PostgreSQL provider:
Option A: Supabase (recommended for beginners)
- Go to supabase.com
- Create account and new project
- Go to Settings → Database
- Copy the "Pooler" connection string
Option B: Neon
- Go to neon.tech
- Create project
- Copy connection string
Option C: Local PostgreSQL
createdb arnos
# Connection string: postgresql://localhost:5432/arnos- Download the schema:
# See DATABASE.md for full schema
# Or create a schema.sql file with all CREATE TABLE statements- Run the schema:
psql YOUR_DATABASE_URL < schema.sqlgit clone https://github.com/yourusername/arnos.git
cd arnos
npm installcp .env.example .envEdit .env with your settings:
# Server
PORT=3456
SERVER_URL=http://localhost:3456 # Change when deployed
# Database
DATABASE_URL=postgresql://user:password@host:port/database
# OAuth (only needed for mobile/web)
# Skip this section if using desktop onlyFor Claude Code or Claude Desktop on your computer.
npm run buildFor Claude Code (recommended):
Run in your project directory:
claude mcp add arnosThen edit the generated config:
- Mac/Linux:
~/.config/claude-code/.mcp.json - Windows:
%APPDATA%\claude-code\.mcp.json
For Claude Desktop:
Edit your Claude Desktop config file:
- Mac:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Config for both (JSON):
{
"mcpServers": {
"arnos": {
"command": "node",
"args": ["/absolute/path/to/arnos/dist/index.js"],
"env": {
"DATABASE_URL": "your-database-connection-string",
"PORT": "3456"
}
}
}
}Important: Use absolute paths, not relative paths.
Close and reopen Claude Code or Claude Desktop. ArnOS tools should now appear.
Try:
"What's on my plate today?"
For Claude mobile app or Claude.ai web.
# Generate client ID (any random string)
echo "arnos-$(openssl rand -hex 8)"
# Generate client secret
node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
# Generate session secret
node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
# Generate password hash (replace 'your-password' with your actual password)
node -e "const bcrypt = require('bcrypt'); bcrypt.hash('your-password', 10, (e,h) => console.log(h))"Add these to your .env:
OAUTH_CLIENT_ID=arnos-your-generated-id
OAUTH_CLIENT_SECRET=your-generated-secret
OAUTH_PASSWORD_HASH=your-bcrypt-hash
SESSION_SECRET=your-session-secretChoose any Node.js hosting:
Option A: Railway
# Install Railway CLI
npm i -g @railway/cli
# Login
railway login
# Create project
railway init
# Add environment variables in Railway dashboard
# Deploy
railway upOption B: Render
- Connect GitHub repo
- Create Web Service
- Build command:
npm run build - Start command:
npm start - Add environment variables
Option C: Fly.io
fly launch
fly deployOption D: Your VPS
# Build
npm run build
# Run with PM2
pm2 start dist/index.js --name arnos
# Or with systemd
# Create /etc/systemd/system/arnos.serviceAfter deployment, note your server URL (e.g., https://your-app.railway.app)
Update .env on server:
SERVER_URL=https://your-actual-deployment-url.comImportant: Configure via Claude.ai web - it will sync to mobile automatically.
- Open Claude.ai in your browser
- Go to Settings → Custom Connectors
- Click "Add custom connector"
- Enter:
- Name: ArnOS
- URL:
https://your-server-url.com/mcp
- Click "Advanced settings"
- Enter your OAuth credentials:
- Client ID: (from .env)
- Client Secret: (from .env)
- Click "Add"
- You'll be redirected to password form
- Enter the password you used to generate the bcrypt hash
- Done! Tools appear in web and sync to mobile app automatically
- Check absolute path in config
- Ensure
npm run buildcompleted successfully - Try running
node /path/to/dist/index.jsmanually to see errors
- Verify DATABASE_URL is correct
- Test connection:
psql YOUR_DATABASE_URL - Check database is accessible from your machine
- Verify all OAuth credentials in .env match
- Check SERVER_URL is set to your actual deployment URL
- Ensure password hash was generated correctly
- Regenerate password hash with correct password
- Update OAUTH_PASSWORD_HASH in .env
- Redeploy
- Run
npm installagain - Delete
node_modulesandpackage-lock.json, thennpm install
cd arnos
git pull
npm install
npm run build
# Restart Claude Code or Claude Desktopgit pull
npm install
npm run build
# Redeploy to your hosting provider- Never commit your
.envfile - Use strong passwords for OAuth
- Rotate credentials periodically
- Backup your database regularly
ArnOS works alongside other MCP servers. Install them separately in Claude:
- Use the Readwise MCP Enhanced
- Access your complete Readwise library (Reader documents + Highlights)
- Search, fetch, and extract content → Save as learnings in ArnOS
- Example: "Search Readwise for AI agents" → "Save these insights as learnings"
- Use Claude's built-in Google Calendar MCP
- Check your schedule → Reference in ArnOS journal
- Use the X MCP server
- Generate content from ArnOS learnings → Post tweets and threads via X MCP
Each MCP is focused. They work together in Claude.
- Read DATABASE.md for schema details
- Check README.md for usage examples
- Join discussions for help and use cases
- Issues: Report bugs on GitHub
- Discussions: Ask questions, share use cases
- Discord: (Coming soon)