Early access — join the waitlist

Stop building
AI plumbing.

Drop a function, get a full AI feature. Modular handles context, embeddings, chat history, and retrieval — so you can ship instead of infrastructure.

No spam. Notify you when we launch.

✓ You're on the list. We'll be in touch.

app.py
from modular import Modular

ai = Modular(api_key="mod_...")

# Tell Modular how to get your data
@ai.datasource
def get_orders(user_id: str):
    return db.query("SELECT * FROM orders WHERE user_id = ?", user_id)

# One-shot AI feature
result = await ai.run("summarize-orders", user_id="123")

# Chat with your app's data
reply = await ai.chat(session="sess_abc", message=user_msg, user_id="123")

You wanted to ship an AI feature.
You ended up building infrastructure.

Every team hits this wall. What looks like a one-week feature becomes a three-month rabbit hole.

Without Modular
  • Pick a model, wire up API keys
  • Write and maintain prompt templates
  • Set up and host a vector database
  • Chunk, embed, and sync your data
  • Manage chat sessions and history
  • Handle retries, rate limits, fallbacks
  • Figure out what to do with the output
With Modular
  • Register a function or MCP tool
  • Call ai.run() or ai.chat()
  • Get clean output. Ship to users.
  • —
  • —
  • —
  • —

Three steps.
Then you're done.

01
Register your data source
Decorate any function with @ai.datasource — or connect an existing MCP server in one line. That's how Modular knows where your data lives.
# Option A — plain function
@ai.datasource
def get_tickets(user_id: str): ...

# Option B — already have MCP?
ai.connect_mcp("https://your-mcp-server.com")
02
Call run() or chat()
Two methods. That's the entire API surface. Modular figures out what data to fetch, what fits in context, and how to structure the prompt.
# One-shot feature
result = await ai.run("summarize", user_id=user.id)

# Stateful chat with your data
reply = await ai.chat(session=session_id, message=msg, user_id=user.id)
03
Ship it
Modular handles the rest — calling your function at the right time, managing embeddings, keeping chat history, routing between models, and returning clean output. You just render it.

Everything you were going
to build yourself.

[ ]
Context management
Automatically fits the right data into the context window. No token math, no truncation bugs.
{ }
Chat history
Stores and replays conversation sessions across requests. No extra database required.
→
Smart retrieval
Calls your data function at the right moment and retrieves only what's relevant.
⇄
Model routing
Switch between Claude, GPT-4o, and Gemini with a single config change. No rewrites.
↺
Retries & fallbacks
Rate limits, timeouts, and errors handled gracefully. Your app stays up.
⬡
MCP native
Already have MCP tools? Connect them in one line. First MCP-native AI middleware.

If you're shipping software
and need AI in it — this is for you.

// startup engineers
No dedicated ML team. You need to ship AI features fast without becoming an AI infrastructure engineer.
// dev agencies
Building AI features for multiple clients. Modular gives you a repeatable, reusable integration layer.
// lead engineers
You've felt this pain personally. You want to hand your team a clean abstraction, not a tutorial.

Get early access

We're onboarding the first batch of developers. Join the waitlist and we'll reach out personally.

No spam. Notify you when we launch.

✓ You're on the list. We'll be in touch.