{
  "markdown": "# DocDeploy\n\nEnterprise document intelligence platform. Upload docs, PDFs, manuals, and notes — DocDeploy converts them to indexed Markdown and serves them via per-tenant MCP servers so AI agents can query your knowledge base.\n\n## How It Works\n\n```\nUpload → Convert to Markdown → Inject Section Markers → Index → Serve via MCP\n```\n\n1. **Upload** any document (PDF, DOCX, PPTX, XLSX, HTML, TXT, CSV, JSON, XML)\n2. **Convert** to clean, structured Markdown with images preserved\n3. **Index** sections with navigational markers and full-text search\n4. **Connect** AI agents via MCP — they can search, browse, and read your docs\n\n## Architecture\n\n```\n┌─────────────────────────────────────────┐\n│  apps/app        Next.js dashboard      │  ← Vercel\n│  apps/web        Marketing site         │  ← Vercel\n├─────────────────────────────────────────┤\n│  packages/lib         Converter pipeline│\n│  packages/db          Drizzle + Neon    │\n│  packages/workers     Background jobs   │  ← Render\n│  packages/mcp-server  MCP per tenant    │  ← Render\n└─────────────────────────────────────────┘\n```\n\n## Tech Stack\n\n| Layer | Technology |\n|---|---|\n| Frontend | Next.js 16, Tailwind CSS, Clerk Auth |\n| Database | PostgreSQL (Neon), Drizzle ORM |\n| Storage | Cloudflare R2 |\n| Queue | pg-boss |\n| MCP | @modelcontextprotocol/sdk (Streamable HTTP) |\n| Hosting | Vercel (frontend), Render (workers + MCP) |\n\n## MCP Tools\n\nEach tenant's MCP server exposes 5 tools:\n\n| Tool | Description |\n|---|---|\n| `get_manifest` | Full document index — start here |\n| `search_documents` | Full-text search across all docs and sections |\n| `get_document` | Load a full document with section markers |\n| `get_section` | Load a specific section by marker |\n| `list_documents` | List all available documents |\n\n## Document Processing Pipeline\n\n- **PDF** — pdf-parse v2 with structure inference (chapters, numbered sections, all-caps headings)\n- **DOCX** — mammoth with image extraction to R2\n- **PPTX** — adm-zip XML parsing with slide image extraction\n- **XLSX** — SheetJS with multi-sheet markdown table output\n- **HTML** — Turndown with table preservation and nav/footer stripping\n- **CSV/TSV** — SheetJS for robust quoted field handling\n- **TXT** — Structure inference for unstructured text\n- **JSON/XML** — Formatted code block wrapping\n\n## Monorepo Structure\n\n```\ndocdeploy/\n├── apps/\n│   ├── app/              # Dashboard (Next.js)\n│   └── web/              # Marketing site (Next.js)\n├── packages/\n│   ├── db/               # Schema + Drizzle config\n│   ├── lib/              # Converter, markers, R2, token counter\n│   ├── mcp-server/       # MCP server (stdio + HTTP)\n│   └── workers/          # Background document processor\n├── render.yaml           # Render blueprint\n├── turbo.json            # Turborepo config\n└── package.json          # Workspace root\n```\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Run the dashboard locally\nnpm run dev:app\n\n# Run the marketing site\nnpm run dev:web\n```\n\n## Environment Variables\n\nSee `.env.example` for the full list. Required:\n\n- `DATABASE_URL` — Neon PostgreSQL connection string\n- `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` / `CLERK_SECRET_KEY` — Clerk auth\n- `R2_ACCOUNT_ID` / `R2_ACCESS_KEY_ID` / `R2_SECRET_ACCESS_KEY` — Cloudflare R2\n- `R2_BUCKET_NAME` / `R2_PUBLIC_URL` — R2 bucket config\n- `MCP_API_KEY` — Per-tenant MCP server auth (Render only)\n\n## License\n\nProprietary — Copyright (c) 2026 MR Dula Enterprise, LLC. All rights reserved.\n\nContact: matt@mrdula.solutions\n",
  "bytes": 3511,
  "sha": "492e28693ae4f34507c3c34061727b2858cdd3239fee42ac36823a9d892fa376",
  "repo_slug": "mrdulasolutions/docdeploy",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_docdeploy_www_mcp_server_5a05eb42/readme"
}