{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_szagmhbas3wv","handle":"spelunk-mcp","url":"https://wellknown.network/agents/spelunk-mcp","links":{"self":"https://wellknown.network/agents/spelunk-mcp/record.json","html":"https://wellknown.network/agents/spelunk-mcp","markdown":"https://wellknown.network/agents/spelunk-mcp/record.md","api":"https://wellknown.network/api/v1/agents/spelunk-mcp","status":"https://wellknown.network/api/v1/agents/spelunk-mcp/status","claim":"https://wellknown.network/agents/spelunk-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/spelunk-mcp/claim.json","badge":"https://wellknown.network/agents/spelunk-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air::server:spelunk-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"spelunk-mcp","summary":"A multi-source DuckDB query + transformation-pipeline MCP server.","description":"# Spelunk\n\nA **multi-source DuckDB query + transformation-pipeline MCP server.** Point it at files\n(CSV/Parquet/JSON/Excel) and databases (SQLite/PostgreSQL/MySQL), and an agent like Claude Code\ncan query across all of them — and build step-by-step pipelines — through one DuckDB engine.\n\n## Architecture in one line\n\nA single DuckDB session is both the query engine and the workspace: every source is `ATTACH`ed\n(databases) or scanned (files) into one connection, so one query can join a Parquet file to a\nPostgres table to a result you built two steps ago — all in DuckDB SQL.\n\n| Path | Role |\n|---|---|\n| `spelunk/core/duck.py` | `DuckSession` — the one DuckDB connection: query / profile / export / catalog / drop / lineage / replay + introspection. |\n| `spelunk/core/sources.py` | Source registry — maps a spec to a DuckDB attach/scan. DuckDB-only: a source it can't attach (e.g. SQL Server) is rejected. |\n| `spelunk/core/guard.py` | sqlglot AST safety: read-only enforcement (`assert_read_only`). |\n| `spelunk/mcp/server.py` | Thin FastMCP wrapper over `DuckSession`. |\n| `tests` | Acceptance tests. |\n\n## Tools\n\n```\nquery(sql, name, flow?)     # run a read-only SELECT over sources + results; store the full\n                            #   result as table `name` for immediate reuse. The ONE tool for\n                            #   looking and building — every result is named and chainable.\nprofile(sql, flow?)         # per-column stats (null_rate, min/max/mean/std, percentiles, top/freq)\nexport(target, fmt, path)   # write a saved result name OR a full SELECT to csv/json/parquet\ncatalog(flow?)              # list flows, or the results in one flow\ndrop(name?, flow?)          # drop one result, or a whole flow\nlineage(name?, flow?)       # provenance DAG: the SQL + deps that built a result (or a whole flow)\nreplay(flow?, into?)        # rebuild a flow from its recorded SQL, in dependency order\n```\n\nDiscovery resources: `db://tables` (queryable source objects) and `db://{table}` …","publisher":{"name":"Shaunak","url":null},"homepage":"https://github.com/shaunak2512/spelunk","repository":"https://github.com/shaunak2512/spelunk","version":"0.2.1","license":null,"protocols":["mcp"],"tags":["agent","data","duckdb","llm","mcp","pipeline","sql"],"pricing":null,"endpoints":[{"url":"pypi:spelunk-mcp","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","homepageUrl":"pypi","publisherName":"pypi"}},"derived":{"capabilities":[{"slug":"data.database","name":"Databases","confidence":1,"provenance":"declared"},{"slug":"dev.ci-cd","name":"CI/CD & Deploy","confidence":1,"provenance":"declared"},{"slug":"productivity.crm","name":"CRM & Sales","confidence":1,"provenance":"derived"},{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":0.779,"provenance":"derived"},{"slug":"documents.spreadsheets","name":"Spreadsheets","confidence":0.733,"provenance":"derived"}],"categories":["commerce","data","dev","documents","productivity"],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"spelunk-mcp","registry":"pypi","observedAt":"2026-09-10T13:21:22.883Z","publishedAt":"2026-07-28T13:42:15.631193Z","latestVersion":"0.2.1"}},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"spelunk-mcp","url":"https://pypi.org/project/spelunk-mcp/","firstSeenAt":"2026-09-10T13:19:06.786Z","fetchedAt":"2026-09-10T13:19:06.786Z","normalizedAt":"2026-09-10T13:19:06.786Z"}]},"firstSeenAt":"2026-09-10T13:19:06.786Z","updatedAt":"2026-09-10T13:21:22.883Z"}