Ross MCP
Allows management of Apple Reminders, including creating, listing, and completing reminders.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Ross MCPAdd a reminder to call John at 3pm"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Ross MCP
Personal life admin system — manage Apple Reminders, Outlook email/calendar, Apple Notes, voice memos, and documents from Claude, ChatGPT, or any MCP/API client.
Architecture: Client (Claude/ChatGPT/API) → Cloud Relay (Fly.io) → Local Mac Agent → Apple APIs / Microsoft Graph
Features
Category | Tools |
Apple Reminders | Create, list, complete reminders |
Outlook Email | Search, read threads, draft, send, schedule, archive, attachments |
Outlook Calendar | List events, create/update/cancel events, find free slots |
Apple Notes | Search, read, create notes, list folders |
Voice Memos | List recordings, transcribe with speaker diarization (Deepgram) |
Documents | Convert Markdown to PDF or DOCX |
Agent Management | Check agent status, trigger remote self-update |
29 tools accessible from:
Claude Web/Desktop via remote MCP (streamable-http)
Claude Code via remote MCP (same endpoint)
ChatGPT via Custom GPT Actions (OpenAPI)
Any HTTP client via REST API
Related MCP server: Apple Reminders MCP Server
Quick Start
1. Clone and set up Python
cd ross-mcp
arch -arm64 python3 -m venv .venv # Use arch -arm64 on Apple Silicon
source .venv/bin/activate
pip install -r agent/requirements.txt
pip install mcp httpx python-dotenv2. Configure environment
cp .env.example .env
# Edit .env — set RELAY_API_KEY (must match the Fly.io secret)3. Set up Outlook (one-time per Mac)
brew install azure-cli
az login
./agent/setup_azure.sh
python3 -c "
import asyncio
from dotenv import load_dotenv
load_dotenv()
from agent.services.outlook_auth import OutlookAuth
auth = OutlookAuth()
asyncio.run(auth.authorize())
print('Success!' if auth.is_authenticated else 'Failed')
"The refresh token auto-renews every 3 days.
4. Run the agent
source .venv/bin/activate
python -m agent.agentThe agent will:
Connect to the cloud relay via WebSocket
Start a local web UI at http://127.0.0.1:8001
Listen for commands from any client
5. Install as auto-start service
./agent/install.shCreates a launchd service that starts on boot and stays running.
Connecting Clients
All clients connect to the same remote endpoint on the relay. No local MCP server needed.
Claude Web / Desktop (MCP)
Setting | Value |
URL |
|
Transport | Streamable HTTP |
Auth | Bearer token (your |
Claude Code (CLI)
Add to ~/.claude/settings.json:
{
"mcpServers": {
"ross-life-admin": {
"type": "http",
"url": "https://ross-mcp-relay.fly.dev/mcp/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}ChatGPT (Custom GPT)
Create a Custom GPT at chat.openai.com
Add an Action → Import from URL:
https://ross-mcp-relay.fly.dev/openapi.jsonSet auth to Bearer with your
RELAY_API_KEY
Direct REST API
curl -X POST https://ross-mcp-relay.fly.dev/api/command \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"type": "create_reminder", "payload": {"title": "Buy milk"}}'MyPurchases (invoices) — connected MCP
MyPurchases is a separate private app that tracks bank transactions and whether each purchase's receipt/invoice is stored. It's connected to Claude Code as its own MCP server (not routed through this relay), because invoice finding is driven from local Claude Code — so it's Claude-only and doesn't need the relay's local-agent plumbing. (If voice/ChatGPT ever need it, add a thin relay proxy then.)
Add it on a machine:
claude mcp add --transport http mypurchases https://mypurchases.fly.dev/api/mcp \
--header "Authorization: Bearer <api-key>" -s user(key from MyPurchases → Settings → Integrations). Already added on both agents.
Tools: missing_invoices { from?, to?, supplier_id? }, push_invoice { transaction_id, filename, content_base64, modified_at? }, list_suppliers, classify_transaction.
To add invoices: missing_invoices for the date range → match each file to a transaction by supplier + amount + date → push_invoice (one per file). See CLAUDE.md for the full workflow.
Deployment & Updates
Deploy workflow (from any machine)
The deploy.sh script handles the full deployment pipeline:
# 1. Commit your changes
git add . && git commit -m "your changes"
# 2. Deploy everything
./deploy.shThis will:
Push code to git
Deploy the relay to Fly.io
Tell all connected agents to pull updates and restart
Manual steps
Deploy relay only:
fly deploy --app ross-mcp-relayUpdate agents only (via any client): Tell Claude/ChatGPT: "update the agents" — this triggers a git pull + restart on all connected agents.
Or via API:
curl -X POST https://ross-mcp-relay.fly.dev/api/command \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"type": "update_agent", "payload": {}}'View relay logs:
fly logs --app ross-mcp-relaySetting up a second Mac
Clone the repo
Set up venv:
arch -arm64 python3 -m venv .venv && pip install -r agent/requirements.txtCopy
.envand changeAGENT_NAMEto identify the machine (e.g.mac-mini)Run
./agent/setup_azure.shthen the OAuth login (one-time)Run
./agent/install.sh
Both agents connect to the same relay. Commands route to whichever is online. Use agent_status to see connected agents.
Launchd service commands
Action | Command |
Install |
|
Stop |
|
Start |
|
Restart | Unload then load |
Logs |
|
Errors |
|
Voice Memo Transcription
Record meetings on iPad using Voice Memos, share to iCloud Drive, then transcribe via Claude or ChatGPT.
Setup
Create a "Meeting Recordings" folder in iCloud Drive (done automatically by the agent)
Create an iOS Shortcut called "Save Meeting Recording" on your iPad:
Action: Save File → iCloud Drive / Meeting Recordings (Ask Where to Save: off)
Enable Show in Share Sheet, set receives to Audio
Add your
DEEPGRAM_API_KEYto.env
After a meeting
Open Voice Memos on iPad → tap ... → Share → Save Meeting Recording
Tell Claude: "Transcribe my meeting with [name] from this morning"
Claude finds the recording, transcribes with speaker diarization, enriches with summary and action points, and saves as an Apple Note
Dashboard
The relay includes a secure web dashboard at https://ross-mcp-relay.fly.dev/.
Features:
Password-protected login (session cookie, httponly + secure)
Agent status with capabilities and uptime
Command stats with counters (emails drafted, reminders created, etc.)
Charts: commands by day (configurable range), breakdown by category
Filterable activity log
Client setup instructions (Claude Desktop, Claude Web, Claude Code, ChatGPT)
Set the dashboard password:
fly secrets set DASHBOARD_PASSWORD=your-password --app ross-mcp-relayRemote Endpoints
Endpoint | URL | Auth |
Dashboard |
| Dashboard password |
MCP (Claude) |
| Bearer token |
REST API |
| Bearer token |
Tool endpoints (ChatGPT) |
| Bearer token |
Swagger UI |
| None (read-only) |
Status |
| Bearer token |
Agent WebSocket |
| Bearer token |
Secrets
Secret | Location | Notes |
|
| Shared by agent, relay, and clients |
| Fly.io secrets | Web dashboard login |
|
| Azure AD app credentials |
| Project root (gitignored) | OAuth tokens, auto-refreshed |
|
| For voice memo transcription |
Regenerate API key:
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
# Update: .env, fly secrets set, Claude settings.json, and ChatGPT action authProject Structure
ross-mcp/
├── agent/ # Local Mac agent
│ ├── agent.py # Main agent (WebSocket client + command dispatch)
│ ├── web.py # Local web UI (port 8001)
│ ├── setup_azure.sh # Azure AD app registration script
│ ├── install.sh # Launchd auto-start installer
│ └── services/
│ ├── reminders.py # Apple Reminders via EventKit
│ ├── notes.py # Apple Notes via AppleScript
│ ├── outlook_auth.py # OAuth2 for Microsoft Graph
│ ├── outlook_mail.py # Outlook email operations
│ ├── outlook_calendar.py # Outlook calendar operations
│ ├── voice_memos.py # Voice memo transcription (Deepgram)
│ └── documents.py # Markdown to PDF/DOCX conversion
├── relay/ # Cloud relay (Fly.io)
│ ├── relay.py # FastAPI hub (WebSocket + HTTP + dashboard)
│ ├── mcp_endpoint.py # Remote MCP server (streamable-http)
│ ├── openai_endpoints.py # REST endpoints for ChatGPT Actions
│ ├── Dockerfile
│ └── requirements.txt
├── shared/
│ └── messages.py # Command/Response schemas (all command types)
├── mcp_server.py # Local MCP server (stdio, legacy — use remote instead)
├── deploy.sh # Full deploy: git push + relay deploy + agent update
├── fly.toml # Fly.io config
└── .env.example # Environment templateLinks
Fly.io Dashboard — Deployment management
Swagger UI — API documentation
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Ross-C/ross-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server