Skip to main content

🦕 The agent-first database

Project description

Dinobase

🦕 Dinobase

The data platform for agents.

Dinobase syncs 100+ sources — APIs, databases, files, MCP servers — annotates your data, and makes it SQL-ready for agents.

PyPI - Version License Slack

Docs · Getting Started · Connectors · Slack Community


⭐️ star this repo! Thank you for your support!


Your agents are flying blind. Agent stacks built on per-connector tool calls have a structural gap: agents can't JOIN across APIs, have no semantic context to interpret field values, and receive paginated JSON that fills context windows. Take the question "Which customers churned last quarter with declining usage AND open support tickets?" — it spans three connectors and agents built on tool calls can't answer it reliably. This isn't a model problem. It's an architecture problem.

Dinobase is the data platform that fills it. Plug in every source: each connector (SaaS APIs, databases, files, MCP servers) becomes a schema. Agents write one SQL query across all connectors, write data back via SQL mutations with a preview/confirm flow, and get back a single result set. In benchmarks across 11 LLMs: 91% accuracy vs 35%, 3x faster, 16-22x cheaper per correct answer.


Quick start

# recommended — installs everything automatically
curl -fsSL https://dinobase.ai/install.sh | bash

# or with uv
uv tool install dinobase

# or with pip
pip install dinobase

1. Connect your data

dinobase add stripe --api-key sk_test_...
dinobase add hubspot --api-key pat-...
dinobase add linear --api-key lin_api_...
dinobase sync

# Or parquet files (no sync needed)
dinobase add parquet --path ./data/events/ --name analytics

# Or databases
dinobase add postgres --connection-string postgresql://...

# Or any MCP server — auto-discovers read-only tools and syncs them as SQL tables
dinobase connector create posthog_mcp --transport stdio \
  --command "npx -y @posthog/mcp-server"
dinobase sync posthog_mcp
dinobase query "SELECT * FROM posthog_mcp.list_projects LIMIT 10"

2. Pick your agent interface

CLI — for Claude Code, Cursor, Codex, Aider, any agent that runs shell

dinobase install claude-code   # Claude Code (~/.claude/CLAUDE.md)
dinobase install cursor        # Cursor (./AGENTS.md)
dinobase install codex         # Codex (~/.codex/AGENTS.md)

Writes usage instructions to the tool's instructions file. Agents run dinobase info, dinobase describe, and dinobase query directly.

MCP server — for Claude Desktop, any MCP client

dinobase install claude-desktop   # Claude Desktop (writes config automatically)
dinobase serve                    # any other MCP client

dinobase serve starts the MCP server on stdio. Run dinobase mcp-config <client> to get the JSON snippet to paste into your client's config.

3. Ask your agent a cross-connector question

"Which companies have closed-won deals over $100K but their subscription is past due?"

The agent writes the SQL, Dinobase executes it across your connectors, and the answer comes back in seconds.

4. Write data back (reverse ETL)

Agents can also mutate upstream data via SQL. Every mutation goes through a preview/confirm flow — nothing executes until confirmed.

dinobase query "UPDATE stripe.customers SET name = 'Acme Inc' WHERE id = 'cus_123'"
# Returns a preview: 1 row affected, will call Stripe API

dinobase confirm <mutation_id>
# ✓ Stripe API called (1/1 succeeded)
# ✓ Data updated

5. Use MCP servers as connectors — and call their tools directly

Connect any MCP server as a connector. Dinobase auto-discovers read-only tools and syncs them as SQL tables. Query with SQL for reads, call tools directly for writes or parameterized operations:

# Connect a server
dinobase connector create posthog_mcp --transport stdio \
  --command "npx -y @posthog/mcp-server"
dinobase sync posthog_mcp

# Query synced data as SQL
dinobase query "SELECT name, active FROM posthog_mcp.list_feature_flags"

# Browse and call tools directly
dinobase mcp servers --pretty
dinobase mcp search "dashboard"
dinobase mcp call posthog_mcp.dashboard-get '{"id": 1118504}'

Or call tools from Python:

from dinobase.mcp import call, search, servers

result = call("posthog_mcp.dashboard-get", id=1118504)
matches = search("feature flag")

Agents can also call MCP tools via the exec_code MCP tool, which executes Python code with full access to dinobase.mcp.

6. (Optional) Enable the semantic layer

export ANTHROPIC_API_KEY=sk-ant-...

After every sync, Dinobase automatically runs a Claude agent in the background to annotate your data — table descriptions, column docs, PII flags, and relationship graphs. Agents can then describe any table and get full semantic context.

dinobase describe stripe.subscriptions --pretty
# stripe.subscriptions (1,420 rows)
# Description: Active and historical customer subscriptions
#
#   customer_id  VARCHAR  -- References customers.id
#   status       VARCHAR  -- Values: active, past_due, canceled, trialing
#   ...
# Related tables:
#   stripe.customers  (customer_id → id, many_to_one)

Set DINOBASE_AUTO_ANNOTATE=false to disable. See Semantic Layer docs.


Benchmark

We tested Dinobase SQL against per-connector MCP tools across 11 LLMs on 75 questions (same models, same data, same questions):

Metric Dinobase (SQL) Per-Connector MCP
Accuracy 91% 35%
Avg latency 34s 106s
Cost per correct answer $0.027 $0.445

56pp more accurate, 3x faster, 16-22x cheaper per correct answer — across every model tested.

See benchmarks/ for full results, per-model breakdown, and methodology.


Connectors

101 connectors across every category. Run dinobase sources --available --pretty to list all.

Category Connectors
CRM & Sales Salesforce, HubSpot, Pipedrive, Attio, Close, Copper
Billing & Payments Stripe, Paddle, Chargebee, Recurly, Lemon Squeezy
Support & Success Zendesk, Intercom, Freshdesk, HelpScout, Customer.io, Vitally, Gainsight
Developer Tools GitHub, GitLab, Jira, Bitbucket, Sentry, Linear
Communication Slack, Discord, Twilio, SendGrid, Mailchimp, Front
E-commerce Shopify, WooCommerce, BigCommerce, Square
Marketing & Analytics Google Analytics, Google Ads, Facebook Ads, HubSpot Marketing, Mixpanel, PostHog, Segment, Plausible, Matomo, Bing Webmaster
HR & Recruiting Personio, BambooHR, Greenhouse, Lever, Workable, Gusto, Deel
Project Management Asana, ClickUp, Monday, Trello, Todoist
Databases Postgres, MySQL, MariaDB, SQL Server, Oracle, SQLite, Snowflake, BigQuery, Redshift, ClickHouse, CockroachDB, Databricks, Trino, Presto, DuckDB, MongoDB
Streaming Kafka, Kinesis
Cloud Storage S3, GCS, Azure Blob, SFTP
Finance QuickBooks, Xero, Brex, Mercury
Productivity Notion, Airtable, Google Sheets
Infrastructure Datadog, New Relic, PagerDuty, OpsGenie, Statuspage, Cloudflare, Vercel, Netlify
Content & CMS Strapi, Contentful, Sanity, WordPress
Design & Video Figma, Mux
Files Parquet, CSV (local or S3 — read at query time, no sync needed)
MCP servers Any MCP server (stdio, SSE, HTTP) — auto-discovers read-only tools, syncs as SQL tables

How it works

                Agent (Claude, GPT, etc.)
                          |
                +---------+---------+
                |                   |
           MCP Server             CLI
           (tool calls)       (bash commands)
                |                   |
                +---------+---------+
                          |
                    Query Engine
                    (DuckDB SQL)
                          |
             +------------+------------+
             |            |            |
        crm.*      billing.*    analytics.*
       (synced)     (synced)    (parquet views)

Each connector becomes a schema. Cross-connector joins work via shared columns like email. Data stays in parquet — DuckDB is the query engine and metadata store.

API connectors sync to parquet in ~/.dinobase/data/ (or cloud storage). File connectors are read directly via DuckDB views — nothing is copied.

Cloud storage

Store data in S3, GCS, or Azure instead of local disk:

dinobase init --storage s3://my-bucket/dinobase/
# or
export DINOBASE_STORAGE_URL=s3://my-bucket/dinobase/

Supports Amazon S3, Google Cloud Storage, Azure Blob Storage, and S3-compatible services (MinIO, R2). See Cloud Storage docs.


Integrations

Works with every major agent framework: CrewAI · LangChain / LangGraph · LlamaIndex · Pydantic AI · Vercel AI SDK · Mastra · OpenClaw


Documentation


Community

Questions, feedback, or want to share what you're building? Come hang out:


Development

git clone https://github.com/DinobaseHQ/dinobase
pip install -e ".[dev]"
pytest

License

MIT Expat

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dinobase-0.2.6.tar.gz (23.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dinobase-0.2.6-py3-none-any.whl (461.2 kB view details)

Uploaded Python 3

File details

Details for the file dinobase-0.2.6.tar.gz.

File metadata

  • Download URL: dinobase-0.2.6.tar.gz
  • Upload date:
  • Size: 23.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dinobase-0.2.6.tar.gz
Algorithm Hash digest
SHA256 845f1475610626f35818e96adffc4c732935432c0137e8e20fc5839db236ab2e
MD5 40e2b187ff4f8521d7a387cb057f387e
BLAKE2b-256 19b3cc8bbd889f5043bb96012d9bed2cedf1f927ab75fd5da6cac899d1047f19

See more details on using hashes here.

Provenance

The following attestation bundles were made for dinobase-0.2.6.tar.gz:

Publisher: release.yml on DinobaseHQ/dinobase

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dinobase-0.2.6-py3-none-any.whl.

File metadata

  • Download URL: dinobase-0.2.6-py3-none-any.whl
  • Upload date:
  • Size: 461.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dinobase-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 2eab60484280c5f19677b80173b6614cc72345016cc5cb6612e061773e027613
MD5 e7538dc5e237af93026c6000dbeb0824
BLAKE2b-256 47fd6d45c62590b77fdee55fd8a3fe9a203c9d87cc2a47ce1858869547a35912

See more details on using hashes here.

Provenance

The following attestation bundles were made for dinobase-0.2.6-py3-none-any.whl:

Publisher: release.yml on DinobaseHQ/dinobase

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page