dagsmith
MCP server providing read-only Snowflake metadata tools (schemas, tables, queries, lineage) for agentic data pipeline generation, enabling natural-language-to-pipeline workflows with dbt, Airflow, and Great Expectations.
README
dagsmith
Agentic scaffolding for data engineering. Turn a plain-English description of a new data source into a complete, tested, production-shaped pipeline: dbt models (staging → marts), an Airflow DAG, a Great Expectations suite, and freshness monitors — generated, executed, and self-corrected by an LLM agent that reads your warehouse's live metadata over MCP.
┌───────────────────────────────────────────────────────────────────────┐
│ │
│ analyst writes: │
│ "Ingest daily registry events from Postgres. Grain = one event │
│ per registry_id + item_id. Join to customers for LTV rollups." │
│ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ dagsmith agent │ │
│ │ (Claude Sonnet 5) │ │
│ └──┬──────────────┬───┘ │
│ │ │ │
│ MCP tools ───────▶│ │──── Jinja templates │
│ (Snowflake meta) │ │ + verifier loop │
│ ▼ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ dbt models │ │ Airflow DAG │ │
│ │ stg_*.sql │ │ registry_ev.py │ │
│ │ fct_*.sql │ │ │ │
│ │ schema.yml │ │ GE checkpoint │ │
│ └─────────────────┘ └─────────────────┘ │
│ │ │ │
│ └──────┬───────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ verifier │ │
│ │ (real Snowflake + │ │
│ │ sandbox dbt run) │ │
│ └──────┬──────────────┘ │
│ │ │
│ pass ──┴── fail → loop back to agent │
│ │
└───────────────────────────────────────────────────────────────────────┘
Why this exists
Every data engineer builds the same eight files for every new source: a staging model, a mart, a schema.yml, a snapshot config, a DAG, a GE suite, a monitor, a docs entry. Ninety percent of that work is mechanical — but it's not homogeneous enough to templatize with pure code. That gap is what an agent covers well.
dagsmith treats pipeline generation as a compile step, not a checklist. You describe the intent; the agent generates the artifacts; a verifier runs them against a sandbox schema in real Snowflake; failures loop back into the agent's context until they pass. When you merge, you get real tested code — not a demo.
Design in one paragraph
The agent is a Claude Sonnet 5 tool-use loop with three tool categories: discovery (MCP calls into Snowflake's INFORMATION_SCHEMA and ACCOUNT_USAGE so the agent can inspect what already exists), generation (write files from Jinja templates), and verification (run dbt build --target ci and Great Expectations checkpoints against an isolated sandbox schema). The verifier's stdout+stderr feed back into the agent's context, and it iterates until green or hits a retry cap.
What's in the box
| Path | What |
|---|---|
src/dagsmith/agent.py |
The tool-use loop. Sonnet 5, ~200 lines. |
src/dagsmith/mcp_server.py |
MCP server exposing 12 read-only Snowflake metadata tools. Runs standalone; usable from Claude Desktop, Cursor, or any MCP client. |
src/dagsmith/verifier.py |
Sandbox executor — copies templates to a temp dbt project, runs dbt build, streams results. |
src/dagsmith/templates/*.j2 |
Jinja templates the agent fills. Kept intentionally minimal so the agent does real design work. |
src/dagsmith/prompts/system.md |
The system prompt with the modeling conventions (Kimball for marts, insert-only for events, stg_<source>__<table> naming). |
src/dagsmith/cli.py |
dagsmith generate and dagsmith mcp. |
examples/babylist_registry_events/ |
Full end-to-end example — natural-language input + everything the agent produced. |
docs/architecture.md |
Detailed component design + failure modes. |
docs/mcp_tools.md |
Reference for every MCP tool the agent has. |
Quickstart
git clone https://github.com/<you>/dagsmith && cd dagsmith
pip install -e ".[dev]"
# 1. Point at your Snowflake sandbox (see docs/setup.md)
export SNOWFLAKE_ACCOUNT=abc12345.us-east-1.aws
export SNOWFLAKE_USER=you@example.com
export SNOWFLAKE_ROLE=DATA_ENG
export SNOWFLAKE_WAREHOUSE=DEV_WH
export ANTHROPIC_API_KEY=sk-ant-...
# 2. Generate a pipeline from a spec
dagsmith generate examples/babylist_registry_events/input/spec.md \
--out examples/babylist_registry_events/generated \
--sandbox-schema DAGSMITH_CI_TAYLOR
# 3. Or run the MCP server for use in Claude Desktop / Cursor / Zed
dagsmith mcp
MCP server (usable on its own)
Even if you don't run the agent, the MCP server is useful. Point any MCP client at it and Claude/Cursor/Zed gains 12 read-only tools:
list_databases,list_schemas,list_tablesdescribe_table(columns, types, cluster keys, comments)sample_rows(limit-capped preview)query_history(top N recent queries by cost / duration)access_history(who reads what)column_lineage(upstream columns for a target column viaACCESS_HISTORY)dead_tables(tables not read in N days)storage_by_schemaandcredits_by_warehousecheck_freshness(last successful write per table)
MCP config for Claude Desktop:
{
"mcpServers": {
"dagsmith": {
"command": "dagsmith",
"args": ["mcp"],
"env": {
"SNOWFLAKE_ACCOUNT": "abc12345.us-east-1.aws",
"SNOWFLAKE_USER": "you@example.com",
"SNOWFLAKE_ROLE": "READONLY_MC"
}
}
}
}
What the agent will and won't do
Will: generate staging + mart dbt models with tests, an Airflow DAG that uses Cosmos, a Great Expectations checkpoint with reasonable defaults (uniqueness on the grain, row-count band, not-null on FKs), a freshness monitor query, and a docs.md entry.
Won't: run destructive DDL against production, guess at business logic it can't see, or generate code without verifying it compiles. Every generated file is dbt parse-clean before the agent claims done.
Roadmap
- [ ]
dagsmith audit— point at an existing dbt project and produce a report on coverage gaps (missing tests, stale models, over-warehouse'd queries) - [ ]
dagsmith migrate— port a legacy Fivetran → SQL pipeline into the dbt+Airflow layout the agent generates - [ ] Evaluation harness — golden-output tests over 20+ source specs so regressions are catchable
- [ ] Backends beyond Snowflake — BigQuery + Redshift adapters share ~80% of the templates
Why the JD's language fits
This project directly maps to the "harnesses and agentic scaffolding that generate, test, and maintain them" phrasing in the Babylist Senior Data Engineer role:
- Meta-layer, not just pipelines — the agent is a pipeline factory, not a pipeline.
- MCP servers real users depend on — the metadata server is usable standalone, not just as an agent input.
- Agentic workflows with tool integrations — 12+ tools, real verifier feedback loop.
- Airflow + dbt + Snowflake + Python — the whole stack the JD names, wired end-to-end.
- Data monitoring across multi-system journeys — freshness + GE suites are part of the generated bundle.
License
MIT. See LICENSE.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.