Inspiration
What it does
How we built it## What it is
Outreach Operations Agent is an AI agent that runs a sales/outreach lead pipeline end to end. You give it a goal in plain English, for example "Find product managers at US AI startups, store them, score them, draft a first-touch message for each, and queue them", and the agent plans the steps and executes them, while keeping you in control with a confirmation step before anything is written to the database.
Inspiration
Sales and partnerships teams lose hours to the same grind: find leads, save them, figure out who is worth chasing, write a first message, and track who has been contacted. It is repetitive, structured work, exactly the kind of thing an agent should handle. We wanted to show an agent that does not just chat, but actually operates: multi-step, stateful, and writing to a real database, while still leaving a human in charge of every change.
What it does
- Finds leads, live from the Hacker News "Who is hiring?" feed, or from an offline seed file so the demo always works.
- Stores them in MongoDB through the MongoDB MCP server.
- Scores and segments each lead from 0 to 100, into Hot, Warm, or Cold, with a reason for every point.
- Drafts a short outreach message (opener, bridge, and call to action, under 60 words).
- Tracks status across the lifecycle new, scored, drafted, queued, contacted, replied, persisted to MongoDB as it works.
- Keeps you in control: before any database write it summarises the change and waits for your y/n confirmation.
How we built it
- Brain: Gemini 3 (
gemini-3.1-pro-preview) via Vertex AI. - Framework: Google Agent Development Kit (ADK) for Python, a single
LlmAgentthat plans and calls tools. - Superpower: the MongoDB MCP server, connected as an ADK
McpToolsetover stdio (npx mongodb-mcp-server). The agent has no hand-written database code. Every read and write is an MCP tool call (find,insert-many,update-many). - Custom tools: small, explainable Python functions for fetching live leads, the scoring rubric, and message drafting.
- Human-in-the-loop: an ADK
before_tool_callbackintercepts every write, prints a plain-English summary, and blocks until the user approves.
Challenges we ran into
- Gemini 3 endpoint: the model is served from the
globalVertex AI location rather than a regional one. A regional endpoint returned a 404 until we switched toglobal. - Cross-runtime setup: the agent needs both Python (ADK) and Node (the MCP server via
npx) at runtime, which shaped our Dockerfile for Cloud Run. - Safe writes: designing the confirmation gate so that reads flow freely but every write pauses for approval, and fails closed in non-interactive contexts.
What we learned
- MCP makes a database a first-class agent cclapability with almost no glue code. Swapping clusters is just a connection-string change.
- Keeping the judgement logic (scoring, drafting) as plain, testable Python, and leaving planning to Gemini, gives you an agent that is both smart and auditable.
Accomplishments we are proud of
A real, working multi-step agent: it pulls real companies from Hacker News, writes them to MongoDB Atlas, scores and drafts for each, and queues them, all behind a human approval gate, with tests and clean docs.
Log in or sign up for Devpost to join the conversation.