TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.