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.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 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.
\* Requires explicit confirmation in the chat before the email is sent.檢視完整 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.