Local marketing management system with multi-tenant support. Combines a CMS, Google Ads integration, AI-assisted content generation, and an MCP server as the single interface for all AI agents.
db/marketing.db via bun:sqlite@modelcontextprotocol/sdk — Streamable HTTP at POST /mcpgoogle-ads-api v23integrations tableSQLite is the single source of truth. The MCP server is the single interface for all AI agents — no flat-file workflows, no agent .md personas. The same 29 MCP tools serve both CLI agents today and a future UI with LLM API connectors.
SvelteKit UI
└── src/routes/[tenant]/* — pages + server loaders
└── src/routes/mcp/+server.ts — MCP endpoint (POST/GET/DELETE)
└── src/routes/api/* — internal REST
src/lib/server/
tenants · posts · reports · campaigns — SQLite CRUD
googleAds · googleAdsDetailed — live Google Ads API
googleAdsClient.ts — shared customer factory
mcp/server.ts — createServer() factory
mcp/tools/content · ads · monitoring — 29 MCP tools
mcp/resources/tenants — tenant:// resources
db/monitoring · alerts · agent-runs — telemetry
scripts/ — cron wrappers and deployment utilities (system-level only)
storage/images/ — post media (served at /api/media/[tenant]/[filename])
.mcp.json — MCP config (auto-detected by Claude Code and Gemini CLI)
Social — drafts, content planner calendar, status workflow (draft → approved → scheduled → published), media upload, Meta Graph API publishing
Google Ads — local campaign drafts, deploy to Google Ads API, live metrics, negative keywords, budget management, ad scheduling, extensions
Monitoring — daily metrics collection, threshold alerts (CPA, conversions, impression share, budget pacing), WARN/CRITICAL inbox with resolve/ignore
Reports — markdown reports in SQLite, auto-typed by slug (audit, search, weekly, monthly), browser print-to-PDF
MCP — 29 tools + 5 resources over Streamable HTTP at http://localhost:5173/mcp
See docs/mcp.md for full reference.
Content: list_tenants · get_tenant · create_tenant · update_tenant · list_posts · get_post · create_post · update_post_status · delete_post · list_reports · get_report · create_report · list_campaigns · get_campaign · check_alerts
Google Ads — Read: get_live_metrics · get_campaign_criteria · get_search_terms · get_ad_groups
Google Ads — Write: add_negative_keywords · update_campaign_budget · set_weekday_schedule · add_ad_group_keywords · add_campaign_extensions · set_campaign_status
Monitoring: collect_daily_metrics · consolidate_monthly · get_metrics_history · get_monthly_summary
bun install
bun dev # starts UI + MCP server at http://localhost:5173
Google Ads credentials are configured via Settings → Integrations in the UI (OAuth flow). No manual .env needed for Google Ads.
System-level only — for cron jobs, deployment, and diagnostics. Agents use MCP tools instead.
bun run scripts/collect-daily-metrics.ts <tenant> [YYYY-MM-DD]
bun run scripts/consolidate-monthly.ts <tenant> [YYYY-MM]
bun run scripts/deploy-google-ads.ts <campaign.json> <tenant_id>
bun run scripts/publish-social-post.ts <tenant_id> <post_id>
bun run scripts/test-ads-connection.ts <customer-id>
Only a subset of functionality requires .env. Bun loads it automatically.
META_PAGE_ACCESS_TOKEN=
META_PAGE_ID=
META_INSTAGRAM_ACCOUNT_ID=
MEDIA_PUBLIC_BASE_URL= # tunnel URL for Meta media uploads
FINAL_URL= # landing page for Google Ads deploy script
3 7 * * * cd /path/to/rush-maestro && bun run scripts/collect-daily-metrics.ts <tenant> >> /tmp/ads.log 2>&1
Architecture notes and future plans: .project/notes/