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 extensionLOAD 'duckdb_mcp';
-- Connect to an MCP server using stdio transportATTACH 'python3' AS data_server ( TYPE mcp, TRANSPORT 'stdio', ARGS '["path/to/server.py"]');
-- Access remote data via MCP protocolSELECT * FROM read_csv('mcp://data_server/file:///data.csv');SELECT * FROM read_json('mcp://data_server/api://endpoint');
-- List available resources on the serverSELECT mcp_list_resources('data_server');
-- Execute tools on the MCP serverSELECT mcp_call_tool('data_server', 'process_data', '{"table": "sales"}');
-- Server mode: Start an MCP server to expose database contentSELECT mcp_server_start('stdio', 'localhost', 0, '{}');-- or mcp_server_start('stdio')
-- Publish database tables as MCP resourcesCREATE 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 entdeckenmcp_get_resource(server, uri)- Bestimmten Ressourceninhalt abrufenmcp_call_tool(server, tool, args)- Entfernte Tools ausführenread_csv('mcp://server/uri')- CSV-Daten über MCP lesenread_parquet('mcp://server/uri')- Parquet-Daten über MCP lesenread_json('mcp://server/uri')- JSON-Daten über MCP lesen
Wichtige Server-Funktionen:
mcp_server_start(transport, host, port, config)- MCP-Server startenmcp_server_stop()- MCP-Server stoppenmcp_server_status()- Serverstatus prüfenmcp_publish_table(table, uri, format)- Tabelle als Ressource veröffentlichenmcp_publish_query(sql, uri, format, interval)- Abfrageergebnisse veröffentlichenmcp_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 abfragenmcp_resources()- Alle veröffentlichten Ressourcen als Tabelle abfragenmcp_server_config()- Serverkonfiguration als Schlüssel-Wert-Paaremcp_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 | [] |