Inspiration:

Small nonprofits leave millions of dollars of real money on the table every year because nobody has the time to find grants, check strict eligibility requirements, track rolling deadlines, and write the first draft. They rarely have dedicated development staff, meaning founders are overworked and capital is missed. We wanted to build an agent that runs this entire loop autonomously—living right inside Slack, the communication tool these teams already use every single day.

What it does:

Lantern is an autonomous grant-funding agent that acts as a digital development team for small nonprofits. Its agentic loop runs continuously to:

Discover: Polls real-time search APIs for newly opened funding opportunities. Score: Uses Groq's blazing-fast Llama-3.1 model to score the grant's fit against the nonprofit's actual mission, geography, and focus areas. Surface: Proactively nudges the team in their #funding Slack channel with only the highest-scoring matches (avoiding spam). Draft: When a user clicks "Draft this", Lantern uses a heavy-weight Groq model (GPT-OSS-120B) to generate a full application. Answer: Users can ask the Slack Assistant specific questions about the grant or their own data, and Lantern will accurately answer using retrieved context. How we built it Lantern is built on Node.js using the Slack Bolt-TS framework, allowing deep integration with the Slack App Home, Slack Assistant, and interactive message threads. Our breakthrough was using the Model Context Protocol (MCP). We built a custom "Org-Knowledge" MCP Server that securely exposes the nonprofit's private data (budgets, past impact metrics, mission statements) as tools. When drafting or answering questions, the LLM uses this MCP server and a PostgreSQL (pgvector) database to fetch real context, ensuring that the drafts it writes are grounded entirely in factual organizational data. We orchestrate the fast triage and the deep-drafting steps across two different Groq models to optimize for cost and speed.

Challenges we ran into:

Our biggest challenge was LLM Hallucinations in financial data. Generic LLM drafts are useless for grant applications; if an agent fabricates a budget number or an indirect cost rate, it can disqualify the nonprofit entirely. We spent significant time building "anti-hallucination guardrails." We had to engineer strict system prompts and application-level checks to force the LLM to invoke an MCP tool call for any factual claim, and successfully trained the agent to correct users if they tried to artificially inflate numbers.

Accomplishments that we're proud of

The Slack-Native Experience: We resisted the urge to build yet another web dashboard. By putting the pipeline and the alerts directly into Slack, we reduced the friction of reviewing grants to near zero. Grounded Citations: We are incredibly proud of our RAG implementation. Every metric in our generated drafts includes a citation block tracing the claim back to a specific MCP data source. Idempotent Discovery: We successfully implemented a deterministic hashing system so the scheduled cron jobs never double-post grants to the Slack channel. What we learned We learned that the true power of AI agents isn't just generating text; it's the ability to make judgment calls. Building the triage system to filter out "bad fit" grants before a human ever sees them proved to be just as valuable as writing the drafts themselves. We also learned how powerful the Model Context Protocol (MCP) is for standardizing how agents interact with internal knowledge silos.

What's next for Lantern

Direct Submission APIs: Integrating directly with platforms like Grants.gov so teams can review and submit applications without ever leaving Slack. Multi-Agent Collaboration: Introducing specialized sub-agents (e.g., a Finance Agent that only handles budget tables, and a Narrative Agent that handles the storytelling) to collaboratively build complex federal proposals. Grant Cycle Tracking: Expanding the Slack App Home dashboard to manage post-award reporting and compliance deadlines.

Built With

Share this project:

Updates