duckdb_mcp

Model-Context-Protocol-(MCP-)Erweiterung für DuckDB, die eine nahtlose Integration zwischen SQL-Datenbanken und MCP-Servern ermöglicht. Bietet sowohl Client-Funktionen für den Zugriff auf entfernte MCP-Ressourcen über SQL als auch Server-Funktionen, um Datenbankinhalte als MCP-Ressourcen bereitzustellen.

Maintainer: teaguesterling

Installation und Laden

INSTALL duckdb_mcp FROM community;
LOAD duckdb_mcp;

Beispiel

-- Load the MCP extension
LOAD 'duckdb_mcp';
-- Connect to an MCP server using stdio transport
ATTACH 'python3' AS data_server (
TYPE mcp,
TRANSPORT 'stdio',
ARGS '["path/to/server.py"]'
);
-- Access remote data via MCP protocol
SELECT * FROM read_csv('mcp://data_server/file:///data.csv');
SELECT * FROM read_json('mcp://data_server/api://endpoint');
-- List available resources on the server
SELECT mcp_list_resources('data_server');
-- Execute tools on the MCP server
SELECT mcp_call_tool('data_server', 'process_data', '{"table": "sales"}');
-- Server mode: Start an MCP server to expose database content
SELECT mcp_server_start('stdio', 'localhost', 0, '{}');
-- or mcp_server_start('stdio')
-- Publish database tables as MCP resources
CREATE TABLE products AS SELECT 'Widget' as name, 10.99 as price;
SELECT mcp_publish_table('products', 'data://tables/products', 'json');

Über duckdb_mcp

Die DuckDB-MCP-Erweiterung verbindet SQL-Datenbanken mit dem Model Context Protocol (MCP) und ermöglicht die bidirektionale Integration zwischen DuckDB und MCP-Servern. Die Erweiterung arbeitet in zwei Modi: als MCP-Client für den Zugriff auf entfernte Ressourcen und als MCP-Server zur Bereitstellung von Datenbankinhalten.

Weitere Details finden Sie in der README.md.

MCP-Client-Fähigkeiten: Verbinden Sie sich über mehrere Transportprotokolle (stdio, TCP, WebSocket) mit MCP-Servern und greifen Sie direkt in SQL-Abfragen auf entfernte Ressourcen zu. Nutzen Sie das URI-Schema mcp:// mit Standard-DuckDB-Funktionen wie read_csv(), read_parquet() und read_json(), um entfernte Datenquellen nahtlos abzufragen. Führen Sie entfernte Tools mit mcp_call_tool() aus und entdecken Sie verfügbare Ressourcen mit mcp_list_resources().

MCP-Server-Fähigkeiten: Machen Sie DuckDB zum MCP-Ressourcenanbieter, indem Sie Tabellen, Views und Abfrageergebnisse als MCP-Ressourcen bereitstellen. Starten Sie einen MCP-Server mit mcp_server_start(), veröffentlichen Sie statische Tabellen-Snapshots mit mcp_publish_table() und erzeugen Sie dynamische Ressourcen mit mcp_publish_query(), die in konfigurierbaren Intervallen aktualisiert werden.

Sicherheitsrahmen: Flexible Sicherheitsmodelle für Entwicklungs- und Produktionsumgebungen. Der Entwicklungsmodus bietet permissiven Zugriff für schnelles Prototyping, während der Produktionsmodus strikte Allowlists für Befehle und URLs durchsetzt. Konfigurieren Sie die Sicherheit über Einstellungen wie allowed_mcp_commands, allowed_mcp_urls und JSON-Konfigurationsdateien.

Wichtige Client-Funktionen:

  • mcp_list_resources(server) - Verfügbare Ressourcen entdecken
  • mcp_get_resource(server, uri) - Bestimmten Ressourceninhalt abrufen
  • mcp_call_tool(server, tool, args) - Entfernte Tools ausführen
  • read_csv('mcp://server/uri') - CSV-Daten über MCP lesen
  • read_parquet('mcp://server/uri') - Parquet-Daten über MCP lesen
  • read_json('mcp://server/uri') - JSON-Daten über MCP lesen

Wichtige Server-Funktionen:

  • mcp_server_start(transport, host, port, config) - MCP-Server starten
  • mcp_server_stop() - MCP-Server stoppen
  • mcp_server_status() - Serverstatus prüfen
  • mcp_publish_table(table, uri, format) - Tabelle als Ressource veröffentlichen
  • mcp_publish_query(sql, uri, format, interval) - Abfrageergebnisse veröffentlichen
  • mcp_publish_execution_tool(name, desc, sql, props, required, bindings) - Ausführungs-Tools mit vorbereiteter Parameterbindung veröffentlichen

Zustandsintrospection (v2.1):

  • mcp_tools() - Alle veröffentlichten Tools als Tabelle abfragen
  • mcp_resources() - Alle veröffentlichten Ressourcen als Tabelle abfragen
  • mcp_server_config() - Serverkonfiguration als Schlüssel-Wert-Paare
  • mcp_list_tools() - Tool-Auflistung ohne Argumente (funktioniert vor und nach dem Serverstart)

Highlights von v2.0:

  • Ausführungs-Tools mit mehranweisigem SQL und typisierter Parameterbindung pro Anweisung
  • Typisierte JSON-Ausgabe, die DuckDB-Typen (Zahlen, Booleans) beibehält statt sie zu stringifizieren
  • Prompt-/Template-Unterstützung für MCP-Prompts list und get
  • JSONL- und Textausgabeformate neben JSON und CSV
  • Schreibschutz-Durchsetzung in Query-, Export- und Describe-Tools
  • Zustands pro Instanz statt globaler Singletons für sichere Mehrdatenbanknutzung
  • Umfangreiche Security-Härtung und Fehlerbehebungen

Die Erweiterung implementiert das vollständige JSON-RPC-2.0-MCP-Protokoll mit Unterstützung mehrerer Transportmechanismen. Sie ermöglicht leistungsfähige Anwendungsfälle wie Datenbankföderation, entfernten Datenzugriff, Tool-Orchestrierung und die Bereitstellung von Datenbankeinblicken für externe MCP-kompatible Systeme. Ideal für die Integration mit KI-Agenten, Datenpipelines und verteilten analytischen Workflows.

Hinzugefügte Funktionen

function_name function_type description comment examples
mcp_call_tool scalar NULL NULL
mcp_config_begin pragma NULL NULL
mcp_config_end pragma NULL NULL
mcp_get_diagnostics scalar NULL NULL
mcp_get_prompt scalar NULL NULL
mcp_get_resource scalar NULL NULL
mcp_list_prompt_templates scalar NULL NULL
mcp_list_prompts scalar NULL NULL
mcp_list_resources scalar NULL NULL
mcp_list_tools scalar NULL NULL
mcp_list_tools table NULL NULL
mcp_publish_execution_tool pragma NULL NULL
mcp_publish_execution_tool scalar NULL NULL
mcp_publish_query pragma NULL NULL
mcp_publish_query scalar NULL NULL
mcp_publish_resource pragma NULL NULL
mcp_publish_resource scalar NULL NULL
mcp_publish_table pragma NULL NULL
mcp_publish_table scalar NULL NULL
mcp_publish_tool pragma NULL NULL
mcp_publish_tool scalar NULL NULL
mcp_reconnect_server scalar NULL NULL
mcp_register_prompt_template pragma NULL NULL
mcp_register_prompt_template scalar NULL NULL
mcp_render_prompt_template scalar NULL NULL
mcp_resources table NULL NULL
mcp_server_config table NULL NULL
mcp_server_health scalar NULL NULL
mcp_server_send_request scalar NULL NULL
mcp_server_start pragma NULL NULL
mcp_server_start scalar NULL NULL
mcp_server_status scalar NULL NULL
mcp_server_stop pragma NULL NULL
mcp_server_stop scalar NULL NULL
mcp_server_test scalar NULL NULL
mcp_tools table NULL NULL

Überladene Funktionen

Diese Erweiterung fügt keine Funktionsüberladungen hinzu.

Hinzugefügte Typen

Diese Erweiterung fügt keine Typen hinzu.

Hinzugefügte Einstellungen

name description input_type scope aliases
allowed_mcp_commands Colon-delimited list of executable paths allowed for MCP servers (security: executable paths only, no arguments) VARCHAR GLOBAL []
allowed_mcp_urls Space-delimited list of URL prefixes allowed for MCP servers VARCHAR GLOBAL []
mcp_console_logging Enable MCP logging to console/stderr BOOLEAN GLOBAL []
mcp_disable_serving Disable MCP server functionality entirely (client-only mode) BOOLEAN GLOBAL []
mcp_lock_servers Lock MCP server configuration to prevent runtime changes (security feature) BOOLEAN GLOBAL []
mcp_log_file Path to MCP log file (empty for no file logging) VARCHAR GLOBAL []
mcp_log_level MCP logging level (trace, debug, info, warn, error, off) VARCHAR GLOBAL []
mcp_server_file Path to MCP server configuration file VARCHAR GLOBAL []