LLM tooling . production forensics . full-stack
Microsoft AdsSoftware Engineering Intern · May – Jul 2026

I build tools that let LLMs touch real production data safely.

Final-year CS student at VIT Vellore (CGPA 9.41). At Microsoft Ads I shipped a read-only MCP server over production Postgres and MySQL, found a silent crawler bug that hid unsafe sites, and audited LLM-based domain classifiers against legacy classification logic. Outside work I build full-stack products and in-browser AI.

Ask the database

This site is a read-only database, like the one I built at work. Click a chip or type. Writes get bounced.

visitor@sujal ~ read-onlyREAD ONLY TXN
>

Also try: help, sudo hire sujal, DROP TABLE projects;. Up-arrow recalls history.

What I work on

Safe LLM access to data

MCP servers where the guardrails are structural: AST validation, read-only transaction scopes, reusable tools for investigation.

Production forensics

Tracing silent failures to root cause, then proving the fix with a re-run. One de-indented method hid 23 unsafe sites.

AI in the browser

Local embeddings, IndexedDB vector storage and Web Workers. No backend, 53.4 ms queries.

Full-stack, shipped

Auth, payments, Docker on Azure, CI/CD and workflow automation, deployed and live for real users.

Experience

Microsoft Ads

May - Jul 2026
Software Engineering Intern . Hyderabad, India
  • Read-only MCP server for Xandr Supply Quality. Built with the inventory quality team: production Postgres/MySQL exposed through reusable tools for LLM-driven investigation, across a 330B+ daily-request ecosystem.
  • AST query validation and read-only transaction scopes. Safe LLM-driven database interrogation and an estimated 90% reduction in manual SQL effort.
  • Silent crawler pipeline bug (ScrappNexus). Traced the root cause to a de-indented extraction method from a prior release. The fix triggered reprocessing of 21,000+ domains and surfaced 23 previously undetected unsafe sites.
  • LLM-based domain classifier audit. Found a 45.7% classification mismatch across 2,553 domains between legacy and LLM-based domain classifiers, identified a verdict-storage flaw in the source of truth, and validated a post-fix re-run that captured 1,248 new adult domains.
releasemethod de-indented
symptomsilent: nothing errors
root causeextraction skipped
fix + re-run21,000+ domains
result23 unsafe sites found
MCPPostgreSQLMySQLAST validationLLM-based classifiersPythonSQL
Try it . how the validator works

Read-only MCP server

Send a query and watch where it stops. Reads go through. Writes die at the validator and never reach the database.

1LLM tool call
2AST validatorSELECT only
3Read-only txnenforced by the DB
4Postgres / MySQL
Pick a query.

Prepisely

May - Jul 2025
Software Developer Intern . Bangalore, India
  • AI mock-interview POC. Gemini API for behavioral question generation and automated feedback, WebSpeech API for hands-free voice interaction. Presented the implementation to the team for product evaluation.
Gemini APIWebSpeech APIJavaScriptPrompt engineering

Projects

Hover a project card to view the system architecture.

Live at ausadhi.in

Ausadhi

Clinic platform for doctor discovery and appointment booking with Razorpay payments. Role-based access (patient, doctor, admin) with JWT refresh rotation, plus a client interceptor that queues concurrent requests during refresh so only one refresh call fires.

Deployed on two Azure VMs with Docker, Nginx and SSL. NSG rules keep the backend internal-only, and GitHub Actions ships releases. n8n handles reminders (24h and 2h before), WhatsApp booking and AI symptom triage.

ReactNode.jsExpress.jsMongoDBREST APIsJWT authRefresh token rotationRole-based accessRazorpayDockerNginx + SSLAzure VMsNSGGitHub Actions CI/CDn8n
REST API REST API booking reminders Admin + Doctor Console Patient Frontend Ayu AI Backend API MongoDB Atlas Razorpay n8n Automation WhatsApp Business API Deployed on 2 Azure VMs . Docker . Nginx + SSL . NSG keeps the backend internal-only
Zero backend

Pagewise

Semantic PDF search that runs entirely in the browser. transformers.js does local inference, IndexedDB stores the vectors, and a background Web Worker handles extraction and embeddings. The main thread stayed 95.0% idle across a 99-second DevTools trace on a 95-page PDF.

IndexedDB 33.5 score 10.6 rest 9.3

One query over a 475-chunk index: 53.4 ms total (ms).

Reacttransformers.jsIndexedDBWeb WorkersEmbeddingsSemantic searchSimilarity scoringChrome DevTools profiling
01PDF upload
02PDF.js text extraction
03Chunking + overlap
04Embeddingsin a Web Worker
05IndexedDBpersistent vectors
06Query embedding+ similarity search
07Ranking + highlight navigation

Toolbox

Education and recognition

Vellore Institute of Technology

B.Tech, Computer Science and Engineering. 2023 - 2027, Vellore. CGPA 9.41.

Award: Merit Scholarship

Awarded for three consecutive years of academic excellence, ranking 10th, 2nd and 3rd in branch.

Co-curricular: Team Sammard

Avionics subsystems (ESP32, sensor integration) for VIT's collegiate rocketry team, contributing to embedded flight software.

Co-curricular: Football

I watch a lot of it, and Messi is the reason.

Co-curricular: Formula 1

Race weekends are blocked off. Max Verstappen all the way.

Building something with LLMs and real data?

Looking for SDE and AI engineering roles. Let's talk.

sujalagarwal0987@gmail.com