TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
Your domain. Your email. Your inbox.
Translation pending
ProductivityTypeScript · JavaScriptGitHub @pandarudraOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Email infrastructure you actually own — now with an AI agent powered by MCP.
TrueMail is a self-hosted-friendly email client built on your own domain and your own Resend account. It ships a full Model Context Protocol (MCP) server that exposes your inbox, tasks, promises, and calendar as tools — so an AI agent can search emails, summarise threads, create tasks, and send replies, all from a chat interface inside the app.
Built for the Amazon App Developer Hackathon 2026 — Alexa+ / MCP track.
\* Requires explicit confirmation in the chat before the email is sent.Read the full README ↗Email infrastructure you actually own — now with an AI agent powered by MCP.
TrueMail is a self-hosted-friendly email client built on your own domain and your own Resend account. It ships a full Model Context Protocol (MCP) server that exposes your inbox, tasks, promises, and calendar as tools — so an AI agent can search emails, summarise threads, create tasks, and send replies, all from a chat interface inside the app.
Built for the Amazon App Developer Hackathon 2026 — Alexa+ / MCP track.
| Feature | Detail |
|---|---|
| Self-hosted MCP server | Standalone Express server at mcp/ with Streamable HTTP transport — stateless, one transport per POST, spec-compliant |
| 12 MCP tools | search_emails, get_email, summarize_email, extract_actions, send_email *, reply_email *, search_tasks, create_task, complete_task, search_promises, create_promise, search_calendar |
| Tomy Agent | Chat UI at /ai backed by /api/agent — full agentic tool loop via MCP, powered by NVIDIA NIM / Llama 3.2 11B |
| Gmail connector | OAuth2 connect flow → syncs Gmail inbox into TrueMail as a separate mailbox; searchable by Tomy |
| Confirmation before send | send_email / reply_email return a preview and require confirmed: true — the agent asks before anything is sent |
* Requires explicit confirmation in the chat before the email is sent.
Browser
│
├── Next.js 16 app (web/) ← main app, auth, DB, all UI
│ ├── /api/agent ← agentic chat endpoint
│ ├── /api/emails/search ← cross-mailbox search (used by MCP)
│ └── ... all other API routes
│
└── MCP Server (mcp/) ← separate Express process
├── POST /mcp ← Streamable HTTP transport (stateless)
└── 12 tools → call web/api/* with internal shared-secret auth
Auth bridging: The MCP server calls TrueMail's own API routes using two shared secrets:
INTERNAL_API_KEY — MCP server → TrueMail (x-internal-key header)MCP_SHARED_SECRET — Tomy agent → MCP server (x-internal-secret header)Neither secret is ever exposed to the browser.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router, Turbopack) + React 19 + TypeScript |
| Database | Prisma 7 on PostgreSQL (Supabase) |
| Auth | better-auth — email/password + Google OAuth |
| Email infra | Resend — send, receive (webhooks), inbound attachments |
| Attachments | Cloudinary — outgoing mail attachments |
| AI model | NVIDIA NIM — Llama 3.2 11B Vision Instruct |
| MCP transport | @modelcontextprotocol/sdk — Streamable HTTP |
| Styling | Tailwind CSS v4 + Drawably |
| Holidays | Calendarific — cached in Postgres |
| Tests | Vitest |
git clone https://github.com/pandarudra/true-mail.git
cd true-mail
# Web app
cd web && npm install
# MCP server
cd ../mcp && npm install
cd web
cp .env.example .env # then fill in the values below
Required:
| Variable | Value |
|---|---|
DATABASE_URL | Postgres pooled connection string |
DIRECT_URL | Postgres direct connection string |
ENCRYPTION_KEY | 32 random bytes, base64: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))" |
BETTER_AUTH_SECRET | Same as above |
APP_URL | http://localhost:3000 |
NEXT_PUBLIC_APP_URL | http://localhost:3000 |
RESEND_WEBHOOK_BASE_URL | Public HTTPS tunnel for webhooks (e.g. ngrok http 3000) |
RESEND_OAUTH_CLIENT_ID | From node scripts/register-resend-oauth-client.mjs http://localhost:3000 |
RESEND_OAUTH_CLIENT_SECRET | Same script |
AI + MCP (needed for Tomy Agent):
| Variable | Value |
|---|---|
NVIDIA_API_KEY | Free key from build.nvidia.com |
INTERNAL_API_KEY | Any long random secret — must match mcp/.env |
MCP_SHARED_SECRET | Any long random secret — must match mcp/.env |
MCP_SERVER_URL | http://localhost:3001 |
Gmail connector (optional):
| Variable | Value |
|---|---|
GOOGLE_CLIENT_ID | Google OAuth client ID |
GOOGLE_CLIENT_SECRET | Google OAuth client secret |
Add http://localhost:3000/api/gmail/callback to your OAuth client's Authorized redirect URIs in Google Cloud Console.
Other optional:
| Variable | Purpose |
|---|---|
NEXT_PUBLIC_CLOUDINARY_* / CLOUDINARY_API_SECRET | Outgoing attachments |
CALENDARFIC_API_KEY | Holiday data (calendarific.com) |
TELEGRAM_BOT_TOKEN / TELEGRAM_BOT_USERNAME / TELEGRAM_WEBHOOK_SECRET | Telegram assistant |
CRON_SECRET | Recurring task reminders |
Configure mcp/.env (copy from mcp/.env.example):
cd mcp
cp .env.example .env
# Set INTERNAL_API_KEY and MCP_SHARED_SECRET to the same values as web/.env
cd web
npx prisma migrate deploy
# Terminal 1 — MCP server
cd mcp && npm run dev
# Terminal 2 — Next.js app
cd web && npm run dev
Open http://localhost:3000.
After signing up and completing onboarding:
cd web
npx prisma generate
npx tsx scripts/seed-demo.ts [email protected]
See mcp/README.md for full details on the MCP server, its tools, and the auth bridging pattern.
Endpoint: POST http://localhost:3001/mcp
Transport: Streamable HTTP (stateless — no SSE sessions)
Health: GET http://localhost:3001/health
/newbot → copy the tokenTELEGRAM_BOT_TOKEN, TELEGRAM_BOT_USERNAME, and TELEGRAM_WEBHOOK_SECRET in web/.envRESEND_WEBHOOK_BASE_URL points at a public HTTPS URLcd web && node scripts/register-telegram-webhook.mjs
Requires a Telegram connection and a cron service (e.g. cron-job.org):
CRON_SECRET in web/.envPOST https://your-app/api/cron/reminders with header Authorization: Bearer <CRON_SECRET>true-mail/
├── web/ Next.js app (main product)
│ ├── app/ Routes and pages
│ ├── components/ React components
│ ├── lib/ Business logic, AI, email, tasks, promises
│ ├── prisma/ Schema and migrations
│ └── scripts/ Dev utilities (seed, webhook registration)
└── mcp/ Standalone MCP server
└── src/
├── tools/ 12 MCP tool implementations
├── server.ts McpServer builder
├── auth.ts Shared-secret request validation
└── index.ts Express + Streamable HTTP entrypoint
MIT — see LICENSE.