
Duckle MCP Server: Build and Run ETL Pipelines from Claude and Cursor
Lets Claude, Cursor and other assistants design, check and run Duckle ETL pipelines on your own machine.
This is the MCP server that ships with Duckle, an open source ETL tool built on DuckDB, made by SlothFlowLabs. It runs on your computer and the assistant starts it on demand. Pipelines are plain JSON files the assistant writes into a folder you choose, and the same files open in the Duckle app.
No account or key is needed. Running pipelines needs the DuckDB command line tool, which the Python package installs for you. The server is one part of a larger product, so the repository stars and downloads shown on this page describe all of Duckle.
Good for
- Data engineers who want an assistant to draft and validate pipelines before they run
- Teams that already use Duckle and want an agent to check lineage, drift and freshness
- Developers who want an agent to run pipeline tests without shell access
Works in
12 should work
Tap an app to see how to set it up and any known problems.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Client does not support this transport.
Client does not support this transport.
Install duckle MCP
Claude Code
- 1
Copy this prompt.
Add the duckle MCP server to Claude Code. Run this command: claude mcp add duckle -- uvx duckle mcp Then check that it loaded and tell me if I need to sign in or restart.
- 2
Paste it into Claude Code. It shows the change and asks before running it.
Requires uv (Python).
Read-only mode: There is no read-only switch. Ask the assistant to validate only, and review pipelines before it runs them.
Install uv first. The first start fetches the duckle package and the DuckDB engine, so give it a minute. The command must end in "duckle mcp": the package name alone starts the pipeline runner instead of the MCP server. The README documents Claude Code, Claude Desktop and Cursor; the other tabs are our adaptation of the same command.
From the project README. Source.
Tools
Browses the 400+ pipeline building blocks
Lists the sources, transforms, sinks, control, quality and custom-code components Duckle has. You can filter by kind or search by a word, so the assistant picks a real component instead of guessing one.
Try: “Which Duckle components can read from Postgres?”
Read ·
list_componentsSays which data assets are out of date
Checks each asset in a workspace against the freshness limit you declared for it. An asset with no limit shows as unknown, not fresh, so a missing rule is never read as good news.
Try: “Which assets in my Duckle workspace are stale, and since when?”
Files ·
asset_freshnessAnswers what a component can do
Looks up which sources can run custom SQL or read incrementally, which sinks offer which write modes, and which components send rejected rows aside. The answer comes from the same manifests the editor uses.
Try: “Which sinks support upsert?”
Read ·
component_capabilitiesShows the settings one component takes
Returns the form fields and the input and output ports of one component id. The assistant uses it to fill in the right property names before it builds a pipeline.
Try: “What settings does src.csv take?”
Read ·
get_component_schemaChecks a pipeline and saves it as a file
Compiles a pipeline first and writes it only if it compiles. With a workspace it saves pipelines/<id>.json and lists it in the workspace so it shows in the app; with a directory it saves a loose file.
Try: “Create a pipeline in ./etl that reads orders.csv and writes a Parquet file.”
Write ·
create_pipelineChanges part of a saved pipeline
Merges a partial change into a pipeline already on disk, matching nodes and edges by id, so the assistant can change one setting without resending everything. It validates the result and then overwrites the file.
Try: “In my orders pipeline, change the CSV sink to overwrite mode.”
Write ·
update_pipelineCompiles a pipeline without running it
Turns a pipeline into SQL and returns the SQL for each stage, or a structured error that says what failed. Nothing is executed.
Try: “Validate the orders pipeline and show me the SQL.”
Read ·
validate_pipelineRuns a pipeline on your machine
Runs a pipeline with the DuckDB engine and returns each node's status, row counts, errors and a small preview. Setting a target node stops the run there, so later sinks do not write.
Try: “Run the orders pipeline up to the join node and show me the rows.”
Runs code ·
run_pipelineRuns the pipeline tests
Runs the *.test.json files in a workspace's tests folder, or only the files you name. Each case checks the rows one node produces against a fixture, which catches a step that compiles but computes the wrong thing.
Try: “Run all tests in my Duckle workspace and list the failures.”
Runs code ·
run_testsTraces columns back to their sources
Maps every output column of every node back to the source columns it comes from. It reads the pipeline and writes nothing.
Try: “Where does the revenue column in the final sink come from?”
Read ·
pipeline_lineageGives a pass or fail check of a pipeline
Compiles the pipeline, resolves lineage and flags structural risks such as joins without keys, unconnected nodes, a sink with no input, or no sink at all. It returns one verdict the assistant can act on.
Try: “Verify my orders pipeline before I deploy it.”
Read ·
verify_pipelineFinds SQL errors before a run
Binds the SQL of each node against its upstream columns without running it, and reports DuckDB's message, the position, and the column it suggests for a typo. A source query that goes to a remote system is reported as not checked.
Try: “Check the SQL in the join node of my pipeline.”
Read ·
check_node_sqlRuns, retries or cancels a partitioned backfill
Creates, lists, retries or cancels a backfill that re-runs a pipeline over partitions. Each slice is a normal run with its own id, and a dry run shows the partitions without queueing anything.
Try: “Do a dry run of a backfill for January 2026 on the orders pipeline.”
Runs code ·
backfillSuggests what to type next in a node's SQL
Returns ranked suggestions for a cursor position in a node's SQL: upstream columns with types, readable relations, declared parameters, and DuckDB functions and keywords. It never runs the SQL or touches a source.
Try: “What columns can I use at the end of the filter node's WHERE clause?”
Read ·
complete_node_sqlSuggests data contracts and flags personal data
Profiles a pipeline's columns and proposes personal-data tags, based on column names, plus required-column checks for sources. The result can be merged back with the update tool.
Try: “Which columns in this pipeline look like personal data?”
Read ·
suggest_contractsShows what breaks if a column changes
Inverts column lineage so each source column lists the downstream columns built from it. You can narrow it to one column and one node.
Try: “What depends on the email column from the customers source?”
Read ·
pipeline_impactShows what breaks across all pipelines
Joins the pipelines in a workspace through the tables, files and topics they name. It returns the pipelines that read an asset, what they write, everything downstream, and who to tell when an owners file exists.
Try: “What breaks if I rename the analytics.events table?”
Files ·
workspace_impactCompares two versions of a pipeline
Reports nodes added, removed or changed, by component, settings or compiled SQL, plus edges added or removed, with a summary. It only compiles and reads.
Try: “Diff my pipeline against the version in the other branch.”
Files ·
diff_pipelinesScores how trustworthy a pipeline is
Gives a 0 to 100 score and a letter grade, and lists every deduction: compile errors, structural risks and columns that look like personal data but are not tagged or masked. Turning on drift checking also reads each source's live schema.
Try: “Give me a trust report for the billing pipeline.”
Read ·
trust_reportDetects changed columns in your sources
Reads each source's live schema and compares it with the schema the pipeline declared. It reports missing columns, new columns and type changes, with a breaking or non-breaking verdict.
Try: “Has the schema of any source in my orders pipeline drifted?”
Files ·
schema_driftLists the pipeline files in a folder
Lists the pipeline .json files in a directory with the number of nodes and edges in each.
Try: “What pipelines are in ./etl?”
Files ·
list_pipelinesOpens a pipeline file
Reads one pipeline .json file and returns its content so the assistant can explain or edit it.
Try: “Explain what the pipeline in ./etl/orders.json does.”
Files ·
read_pipelineLists a pipeline's saved resume points
Shows the state a pipeline resumes from: incremental watermarks, DuckLake snapshot ids, Kafka offsets, spool positions and tumbling-window buffers. Each entry says whether it can be set by hand or only cleared.
Try: “What watermarks does the orders pipeline hold?”
Files ·
backfill_listMoves a watermark or snapshot
Sets an incremental watermark or a DuckLake snapshot id so the next run starts from there. It refuses nodes that hold Kafka offsets, spool positions or windows, because overwriting those destroys what they hold.
Try: “Set the orders watermark back to 2026-10-01.”
Write ·
backfill_setErases a node's saved resume point
Removes a node's saved state so it starts over on the next run. This is not always a full reload: a Kafka source set to start from latest skips the backlog that is already in the topic.
Try: “Clear the saved state on the orders source node.”
Delete ·
backfill_clearLists quality baselines in a workspace
Shows every quality baseline node: how many profiles it accepted, what the last run concluded, and whether a new measured profile is waiting to be accepted.
Try: “Which baselines are waiting for approval?”
Files ·
baseline_listCompares one baseline with the last run
Shows what a baseline node treats as normal against the last measured run: the accepted median per metric, the observed value, the percentage change and any violation that stopped the run.
Try: “Why did the row-count baseline fail on the last run?”
Files ·
baseline_inspectAccepts the last run as the new normal
Promotes the profile the last run measured to the accepted baseline, for a source that changed shape on purpose. It cannot invent numbers, the change is written to the audit log, and a workspace policy can refuse it.
Try: “Accept the latest profile for the customers baseline.”
Write ·
baseline_acceptForgets a baseline's accepted history
Wipes a node's accepted history so the next run starts it over. The last observation is kept as evidence, the action is audited, and a workspace policy can refuse it.
Try: “Reset the baseline on the events source.”
Delete ·
baseline_clearReads a pipeline's run log
Returns the last lines of a pipeline's run log, which records events for each component.
Try: “Show the last run log for the orders pipeline.”
Files ·
read_run_logsBuilds one deployable executable
Packages a pipeline into a single self-contained executable for server deployment, written to the path you give it. It uses the duckle-runner binary and a secrets mode of environment variables or a passphrase.
Try: “Build the orders pipeline into ./dist/orders for my server.”
Runs code ·
build_pipelineLists saved connections
Lists the connections saved in a workspace. Secret fields are masked.
Try: “Which database connections does my workspace have?”
Files ·
list_connectionsSaves a database or service connection
Writes a connection file into the workspace connections folder, and lists it in the workspace when one is present, so pipelines can refer to its fields.
Try: “Create a Postgres connection called warehouse that reads its password from the environment.”
Write ·
create_connection
Read from the source code
Permissions
high risk · 4 things to watch
High risk
What it can do
- Read your data
- Create and change things
- Delete things
- Read-only mode
Watch out for
It can run any pipeline, including custom code
run_pipeline runs pipelines headlessly, and the component catalog includes code.shell, code.python and code.javascript. Only run pipelines you have read, and keep the assistant in a project folder you trust. github.com
Pipelines can write to your databases and files
A pipeline run can write to its sinks, and run_pipeline, backfill and build_pipeline all start runs or write files. Point connections at test data first, and use run_pipeline with a target node to stop before the sink. github.com
It can erase saved resume points
backfill_clear and baseline_clear remove a node's saved state, so the next run starts over. For a Kafka source set to start from latest, clearing skips the backlog instead of replaying it. github.com
Older Duckle versions had security fixes
The project lists seven advisories, rated medium to critical, fixed in 0.7.3 and 0.7.4. They are about the serve web console, the container image, self-extracting artifacts and the archive extraction component. None of them names the MCP server. Use 0.7.4 or later. github.com
Security advisories
No published security advisories for the MCP server as of Nov 1, 2026.
7 other advisories are about the wider duckle project, not this MCP server. See them on GitHub
Technical details
| Turning on read-only | No read-only switch or flag is documented. Some tools only read (for example validate_pipeline and pipeline_lineage), but the server exposes all 33 tools at once. |
|---|---|
| Talks to | Whatever the pipelines you run connect to, such as databases, cloud storage and web APIs |
| Sign-in and keys | The server itself needs no sign-in. Pipelines should hold secrets as ${ENV:KEY} placeholders that are filled from the environment when they run. Saved connection files mask secret fields when listed. |
Questions
Is the Duckle MCP server official?
Yes, it is the Duckle project's own server. SlothFlowLabs makes Duckle and ships the server inside the Duckle repository. It is not made by DuckDB Labs or by the databases it connects to, and the project says it is not affiliated with DuckDB Labs or MotherDuck.
How do I add it to Claude Code or Cursor?
Use the install box above. It starts the server with the uvx tool, so you need uv installed. The command ends in "duckle mcp", and the plain package name alone starts the command line runner instead.
Do I need to install the Duckle app?
No. The uvx route fetches the package and the DuckDB engine on first use. The app also has a Connect to Claude button that sets the server up for you, and you can build the duckle-mcp program from source instead.
Does it need an API key or account?
No. The server has no sign-in of its own. Your pipelines may need credentials for the databases and services they connect to, and the docs say to keep them in environment variables rather than in the pipeline file.
Can it run read-only?
No read-only mode is documented. Several tools only read, such as validating, linting and tracing lineage, but the writing and running tools are always available. Tell the assistant to validate only, and review before it runs anything.
Does it run locally or send my data elsewhere?
It runs locally over stdio, with DuckDB in the same machine. Data only leaves your computer if a pipeline you run connects to a remote database, cloud storage or API.
Can it delete data?
Yes, indirectly. A pipeline it runs can write to or overwrite its sinks. Two tools erase saved resume points so a pipeline starts over. Run against test data first.
Is the list of tools complete?
Yes. The 33 tools match what version 0.7.4 of the server registers, which is also the version on PyPI. Newer builds may add more.
Information
updated Nov 2, 2026
- Publisher
- Official
- Package
duckle- Registry
- PyPI
- Transport
- stdio
- Auth
- None
- License
- Apache-2.0
- Last commit
- Oct 30, 2026
- Open issues
- 70
Sources
Docs, issue trackers and discussions this page is built from. Issues, quotes and findings above link to their own source.
Show all 5Hide
- Duckle README · github.com
- Duckle MCP guide · github.com
- duckle-mcp tool registrations · github.com
- Duckle component catalog · github.com
- Duckle security advisories · github.com