{"id":"7368b1b0-6a65-4011-b6dd-ba87c6874d1a","slug":"smart-mcps","kind":"mcp","name":"smart-mcps","summary":"MCP servers for Gmail, Google Calendar/Docs/Sheets/Drive/Tasks, Slack, Hetzner, Vercel, RunPod, and weather. 416 workflow-level tools, 3,955 tests.","owner":"oneKn8","repoUrl":"https://github.com/oneKn8/smart-mcps","license":"MIT","licenseTier":"permissive","trust":"community","stars":1,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-04-27T20:25:35.000Z","addedAt":"2026-10-21T04:30:04.809Z","logoUrl":"https://avatars.githubusercontent.com/u/185032485?u=e23dbea8019ce741a3ea3e26591bc2c66939c732&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["productivity","communication","cloud-infra"],"tags":["ai-agents","claude","gmail","google-calendar","hetzner","slack","typescript"],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-27T00:26:29.966Z","sample":false,"url":"https://conduits.dev/tools/smart-mcps","language":"TypeScript","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# smart-mcps\n\n[![CI](https://github.com/oneKn8/smart-mcps/actions/workflows/ci.yml/badge.svg)](https://github.com/oneKn8/smart-mcps/actions/workflows/ci.yml)\n\nPersonal MCP server toolbelt: **14 servers**, **416 tools**, **4,039 tests**, all\nbuilt on the shared `smart-mcp-core` package (credential loading, HTTP retry,\nerror taxonomy, destructive-action confirm guard, fuzzy resolvers, stdio server\nbootstrap).\n\nThis is the toolbelt its author runs daily in Claude Code and Cursor, published\nas-is. The tools are workflow-level (`daily_brief`, `cost_audit`,\n`inbox_zero_dry_run`, `deploy_server`) rather than thin one-endpoint API\nwrappers. Issues and PRs are welcome.\n\n## Requirements\n\n- **Node.js 22 or newer** (`engines` requires `>=22.0.0`; CI runs 22.x and 24.x)\n- npm 9+ (npm workspaces)\n- Linux or macOS; the helper scripts assume a POSIX shell\n\n## Five-minute quickstart (zero credentials)\n\n`weather-smart` needs no API key, no account, no config file. Start there so\nyour first run cannot fail on credentials.\n\n```bash\ngit clone https://github.com/oneKn8/smart-mcps.git\ncd smart-mcps\nnpm install\nnpm run build\n```\n\nSmoke-boot the server:\n\n```bash\ntimeout 3 node packages/weather-smart/dist/server.js < /dev/null; echo $?\n```\n\nExit code `0` with no output means the server boots cleanly over MCP stdio.\n(The same pattern works for any server here; servers that need credentials\nexit immediately with an `AuthError` naming the missing variable instead.)\n\nRegister it in your MCP client ([see below](#registering-in-mcp-clients)),\nrestart the client, and ask for a weather brief or a forecast. `drive-smart`\n(local-disk scanner) also runs with zero credentials.\n\n## Servers\n\n| Server | Tools | Tests | Scope |\n|--------|------:|------:|-------|\n| `hetzner-smart` | 71 | 549 | Hetzner Cloud: servers, volumes, networks, firewalls, load balancers, floating + primary IPs, certificates, images, catalog + pricing, async action polling, deploy/cost/cleanup shortcuts |\n| `slack-smart` | 62 | 457 | Slack: messaging, threads, search, channels, canvases, files, bookmarks, pins, reactions, scheduled sends, presence/DND/status |\n| `email-smart` | 53 | 473 | Multi-account Gmail: send, inbox read, bulk modify, labels, drafts, unsubscribe, plus filters, settings (vacation/forwarding/imap/pop/signatures/delegates), and permanent delete |\n| `calendar-smart` | 44 | 601 | Google Calendar API v3 |\n| `runpod-smart` | 43 | 516 | Runpod full surface: pods, templates, endpoints, network volumes, registry auth, serverless inference, GPU pricing + balance (GraphQL) |\n| `vercel-smart` | 27 | 284 | Vercel: projects, deployments, env vars, domains, redirect + canonical audits, daily status |\n| `gdrive-smart` | 22 | 171 | Google Drive API v3: folders, move/copy/rename, trash lifecycle, upload/download/export, sharing |\n| `docs-smart` | 18 | 157 | Google Docs API v1: read/create/edit, styles, tables, markdown renderer |\n| `apps-script-smart` | 17 | 97 | Apps Script API: projects, versions, deployments, processes, gated `run_function` |\n| `tasks-smart` | 16 | 105 | Google Tasks API v1 |\n| `sheets-smart` | 16 | 103 | Google Sheets v4 + Drive v3 |\n| `weather-smart` | 14 | 250 | Open-Meteo + NWS: forecasts, alerts, air quality, activity windows. No API key |\n| `drive-smart` | 7 | 135 | Local-disk scanner (filesystem + OS-mounted Drive), network-mount-safe: scan, roots, search, largest, duplicates, stats, plan_cleanup. No API key |\n| `flow-smart` | 6 | 57 | Cross-app orchestrator: Gmail -> Tasks, Task -> Calendar, review/brief/digest Docs, inbox watcher |\n| **Total** | **416** | **3,955** | 14 MCP servers |\n| `smart-mcp-core` | — | 84 | Shared infra (auth, http, errors, confirm, server bootstrap) |\n| **Monorepo** | **416** | **4,039** | 14 servers + core |\n\nEach package's own `README.md` documents its individual tools and setup.\n\nNote: `drive-smart` is a LOCAL-DISK scanner (no Google API); the Google Drive\nAPI manager is the separate `gdrive-smart`.\n\n## Credentials\n\nCredentials never live in MCP client config. Every server resolves them\nthrough `smart-mcp-core`'s `loadCreds`, in this order:\n\n1. `process.env`\n2. the shared env file `~/.config/smart-mcps/.env`\n3. a per-service JSON file (`~/.config/<server>.json`, `~/.config/codex/<server>.json`, or `~/.<server>.json`)\n\nIf a required variable is missing after all three, the server exits at startup\nwith `AuthError: Missing required credentials for <server>: <VAR>`. Seeing\nthat line in your MCP client's log always means the same thing: add the named\nvariable to one of the three locations above.\n\n### Tier 0 — no credentials\n\n`weather-smart` and `drive-smart`. Build and register, done.\n\n### Tier 1 — one API key\n\nCreate the shared env file once:\n\n```bash\nmkdir -p ~/.config/smart-mcps && chmod 700 ~/.config/smart-mcps\ntouch ~/.config/smart-mcps/.env && chmod 600 ~/.config/smart-mcps/.env\n```\n\nThen append a line for each server you want:\n\n```bash\nHETZNER_API_TOKEN=...      # hetzner-smart: Hetzner Cloud project API token\nVERCEL_TOKEN=...           # vercel-smart: account token (optional: VERCEL_TEAM_ID)\nRUNPOD_API_KEY=...         # runpod-smart (optional: RUNPOD_DEFAULT_GPU)\nSLACK_USER_TOKEN=xoxp-...  # slack-smart: user token (optional: SLACK_BOT_TOKEN)\n```\n\nVerify with the smoke-boot pattern, e.g.\n`timeout 3 node packages/hetzner-smart/dist/server.js < /dev/null; echo $?`\nprints `0` once the token resolves.\n\n### Tier 2 — Google OAuth\n\n`calendar-smart`, `tasks-smart`, `gdrive-smart`, `docs-smart`, `sheets-smart`,\n`apps-script-smart`, `email-smart`, and `flow-smart` authenticate against a\nGoogle Cloud OAuth client you create once, then mint per-server token files\nwith the bundled auth CLIs.\n\nFull walkthrough, including the consent-screen test-user step most first-time\nsetups miss: [docs/setup-google-oauth.md](docs/setup-google-oauth.md).\n\n## Registering in MCP clients\n\n### The install script\n\n```bash\n./scripts/install-clients.sh                # register every built server\n./scripts/install-clients.sh weather-smart  # register one server\n```\n\nWhat it actually does:\n\n- discovers every `packages/*/dist/server.js` (run `npm run build` first)\n- backs up each config it touches to `~/.config/smart-mcps-backups/<timestamp>/`\n- writes `{\"command\": \"node\", \"args\": [\"<absolute path to dist/server.js>\"]}`\n  entries into `~/.claude.json` (Claude Code) and `~/.cursor/mcp.json` (Cursor),\n  skipping either file if it does not exist\n- prints a TOML snippet for you to paste into `~/.codex/config.toml` (Codex is\n  never modified automatically)\n- injects no env vars and stores no secrets; it is idempotent and safe to re-run\n\nRequires `python3` on PATH (used for the JSON edits).\n\n### Manual registration\n\nIf you would rather not run a shell script, add the entry yourself. Claude\nCode (`~/.claude.json`) and Cursor (`~/.cursor/mcp.json`) use the same shape:\n\n```json\n{\n  \"mcpServers\": {\n    \"weather-smart\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/smart-mcps/packages/weather-smart/dist/server.js\"]\n    }\n  }\n}\n```\n\nRestart the client afterwards; the new tools appear in its MCP tool list.\n\n## Build and test\n\n```bash\nnpm install\nnpm run build      # tsc for every workspace, core first\nnpm test           # vitest across all workspaces (~4k tests, a few minutes)\nnpm run typecheck\n```\n\n`npm audit` currently reports advisories in dev-only tooling (vitest 2.x's\nesbuild, eslint's brace-expansion) and in transitive deps of the MCP SDK's\noptional HTTP transports (hono, express). None are reachable from the stdio\nservers this repo ships; dependency bumps are on the maintenance list.\n\n## Planned\n\n- `gsc-smart` — Google Search Console\n- `coolify-smart` — self-hosted Coolify\n\n## Contributing\n\nBug reports with the smoke-boot output are the fastest to act on (the issue\ntemplate asks for it). PRs welcome; the conventions are: TypeScript strict\nESM, one workspace per server, tools defined via `smart-mcp-core`'s\n`defineTool`, destructive tools gated behind `confirm: true`, vitest with msw\nfor HTTP mocking, and Conventional Commits.\n"}