Atlas / MCP servers / theseedship / DuckDB MCP Native

DuckDB MCP NativeBLOCK

mcp/theseedship/duckdb-mcp-node
Verdict
BLOCK
Grade
F
Trust score
55 /100
Exposed tools
61 49r · 11w · 1d
Transport
stdio · streamable-http
License
MIT
Stars
4
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://www.npmjs.com/package/@seed-ship/duckdb-mcp-native) [](https://opensource.org/licenses/MIT)

Native TypeScript implementation of DuckDB MCP (Model Context Protocol) server with federation, graph algorithms, and human-in-the-loop security.

v1.7.0 — Security hardening update. DuckDB remains pinned to 1.5.4.

Security update: users of 1.6.2 and earlier should upgrade to 1.7.0 and enable MCP_SECURITY_MODE=production or MCP_SANDBOX=strict when SQL can be influenced by untrusted input. Restart the process after updating. Review the security settings and compatibility changes: strict mode disables external data access, including S3. We thank Zureno for reporting this issue through coordinated disclosure.
npm install @seed-ship/[email protected]

For CLI/MCP configurations using npx, select @seed-ship/[email protected] explicitly and restart the MCP client. Updating this package does not automatically update already installed or pinned versions.

Features

  • 32+ MCP Tools: SQL queries, schema inspection, CSV/Parquet loading, federation, graph algorithms, process mining, data helpers
  • 8 Graph Algorithm Tools: PageRank, eigenvector, community detection, modularity, weighted paths, temporal analysis, period comparison, multi-format export
  • Layered Security: production mode disables external access in DuckDB (including local files, HTTP and S3) and gates destructive SQL via HITL elicitation
  • Federation: Distributed queries across multiple MCP servers with mcp:// URIs
  • Virtual Filesystem: Direct SQL access via mcp:// URIs with auto-format detection
  • Transports: stdio, WebSocket, TCP (HTTP client-side)
  • Process Mining: 3 tools for workflow analysis from Parquet files
  • DuckLake-style Snapshots: built-in
Read from source at commit f75743121a12OBSERVED · 2026-10-12
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add duckdb-mcp-native --env MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY} --env MINIO_SECRET_KEY=${MINIO_SECRET_KEY} -- npx -y @seed-ship/[email protected]
claude-desktop
{
  "mcpServers": {
    "duckdb-mcp-native": {
      "command": "npx",
      "args": [
        "-y",
        "@seed-ship/[email protected]"
      ],
      "env": {
        "MINIO_ACCESS_KEY": "${MINIO_ACCESS_KEY}",
        "MINIO_SECRET_KEY": "${MINIO_SECRET_KEY}"
      }
    }
  }
}
03

Exposed tools (61)

49 read · 11 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
analyze_datareadAnalyze data in a table with aggregations and statistics
attach_mcpreadAttach an external MCP server
catalog_namereadDuckLake catalog name
checksreadTypes of checks to perform (nulls, duplicates, ranges)
columnsreadSpecific columns to analyze (optional)
create_virtual_tablewriteCreate a virtual table from an MCP resource
data_quality_checkreadCheck data quality and integrity
describe_tablereadGet schema information for a table
detach_mcpreadDetach an MCP server
drop_virtual_tabledestructiveDrop a virtual table
ducklake.attachwriteAttach or create a DuckLake catalog for ACID transactions and time travel
ducklake.snapshotsreadList, view, clone or rollback table snapshots with version control
ducklake.time_travelwriteExecute queries on historical data at a specific point in time
ducklake_time_travelreadQuery historical data from DuckLake tables
execute_querywriteRun SQL query
export_datareadExport query results to a file
federate_querywriteExecute federated queries across multiple MCP servers using mcp:// URIs
graph.community_detectreadDetect communities using label propagation algorithm
graph.compare_periodsreadCompare graph structure between two time periods — find new, removed, strengthened, and weakened edges
graph.eigenvectorreadCompute eigenvector centrality scores using power iteration
graph.exportreadExport graph in multiple formats: json, csv (Gephi), d3, graphml, or parquet
graph.modularityreadCompute modularity score Q for community structure quality
graph.pagerankreadCompute PageRank centrality scores for graph nodes using iterative power method
graph.temporal_filterreadFilter graph edges by time period and return graph statistics
graph.weighted_pathreadFind weighted paths between nodes: strongest (max weight product), cheapest (min cost), or combined (additive)
json_to_parquetreadConvert JSON data to Parquet format with compression
list_attached_serversreadList all attached MCP servers
list_mcp_resourcesreadList resources from attached MCP servers
list_tablesreadList all tables in DuckDB
list_virtual_tablesreadList all virtual tables
load_csvreadLoad a CSV file into DuckDB
load_parquetreadLoad a Parquet file into DuckDB
migrate_to_ducklakereadMigrate data from various formats to DuckLake
motherduck.attachreadConnect to MotherDuck cloud instance
motherduck.create_databasewriteCreate a new database in MotherDuck
motherduck.detachreadDisconnect from MotherDuck cloud
motherduck.import_tablewriteImport a table from MotherDuck to local
motherduck.list_databasesreadList all databases in MotherDuck
motherduck.querywriteExecute a query on MotherDuck cloud
motherduck.share_tablereadShare a local table to MotherDuck cloud
motherduck.statusreadGet current MotherDuck connection status
optimize_queryreadGet query optimization suggestions
process.composereadCompose a unified action plan by merging steps from multiple processes
process.describereadDescribe top-N processes ordered by confidence score
process.similarreadFind similar processes using embedding-based vector similarity
profile_parquetreadProfile a parquet file - get row count, column stats (min/max/avg/nulls/distinct), and sample data
queryreadSQL query to optimize
query_duckdbwriteExecute SQL queries on DuckDB
query_hybridwriteExecute a hybrid query across local and virtual tables
query_sqlwriteExecute SQL query
refresh_virtual_tablereadRefresh a virtual table with latest data
sample_parquetreadSample data from a parquet file using various sampling methods
source_pathreadPath to source file (CSV, Parquet, etc.)
table_namereadName of the table to analyze
tcp_echoreadEcho message via TCP
tcp_statusreadGet TCP server status
test_toolreadA test tool
timestampreadPoint in time to query (ISO format or version number)
tool1readTest tool 1
tool2readTest tool 2
ws_echoreadEcho tool for WebSocket
04

Trust audit

BLOCKgrade F · trust 55/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (4 observation(s))
Shell
declared (6 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (20)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/federation/QueryRouter.ts:327
await exec(sql)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/federation/QueryRouter.ts:345
await exec(sql)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/federation/QueryRouter.ts:369
await exec(`DROP TABLE IF EXISTS ${escapeIdentifier(table)}`)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMInventory / provenance · inv.binary · CWE-1104
test-data/process/process_edges.parquet
process_edges.parquet
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
test-data/process/process_steps.parquet
process_steps.parquet
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
test-data/process/process_summary.parquet
process_summary.parquet
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
drop_virtual_table
Why it matters. 1 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.commitlintrc.json
.commitlintrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.env.development.example
.env.development.example
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.env.process.example
.env.process.example
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.env.production.example
.env.production.example
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierrc.json
.prettierrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
add-logger-imports.cjs:42
importPath = '../../utils/logger.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
fix-console.sh:68
IMPORT_PATH="../../utils/logger.js"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/server/mcp-server.e2e.test.ts:21
testDataDir = path.join(__dirname, '../../test-data-e2e')
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/server/mcp-server.integration.test.ts:19
testDataDir = path.join(__dirname, '../../test-data')
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/tools/data-helper-tools.test.ts:21
const testDataDir = path.join(__dirname, '../../test-data/data-helpers')
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
src/duckdb/service.sandbox.test.ts:105
for (const path of ['http://127.0.0.1:1/canary.csv', 's3://sandbox/canary.csv']) {
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, axios, dotenv, ws, zod, @commitlint/cli, @commitlint/config-conventional, @types/node
Why it matters. 23 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · review.reviewer_manipulation · CWE-94, CWE-1427
CLAUDE.md
For any task involving code understanding, debugging, impact analysis, or refactoring, you must:
1. **Read `gitnexus://repo/{name}/context`** — codebase overview + check index freshness
2. **Match you
Why it matters. The CLAUDE.md file embeds a GitNexus product advertisement with mandatory instructions ('you must') directing the AI agent to use GitNexus tools, read GitNexus skill files, and follow GitNexus workflows — this is an embedded third-party service steering the agent away from the user's interests.
Fix. rewrite it so the instruction says plainly what it does, and asks the user before it acts

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha f75743121a12full audit observations/trust-audit/mcp-server/theseedship__duckdb_mcp_node.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-12f75743121a12BLOCKF55first audit
06

Questions

What tools does @seed-ship/duckdb-mcp-native expose?

61 in total: 49 read-only, 11 that write, and 1 that can delete or overwrite (drop_virtual_table). Every one is listed on this page with its risk.

Is @seed-ship/duckdb-mcp-native safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (55/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does @seed-ship/duckdb-mcp-native need?

It reads MINIO_ACCESS_KEY and MINIO_SECRET_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does @seed-ship/duckdb-mcp-native run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @seed-ship/duckdb-mcp-native at 1.7.0.

How current is this page?

The grade is for one exact copy of the source (f75743121a12), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement