npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

daeda-mcp

v1.0.7

Published

MCP server for HubSpot CRM data sync

Readme

Daeda MCP

npm version License: MIT

An MCP server that syncs your HubSpot CRM to a local encrypted database, enabling AI assistants to query your contacts, companies, and deals instantly.

Why Daeda?

Querying HubSpot through the API is slow and rate-limited. Daeda solves this by:

  • Syncing your entire CRM locally - Contacts, companies, deals, and all associations
  • Encrypted storage - Your data is encrypted at rest using your HubSpot token
  • Instant queries - AI assistants can run SQL queries against your local database
  • Works offline - Once synced, no internet required for queries

Features

  • Full CRM Sync - Exports all contacts, companies, and deals with all properties
  • Association Support - Contact-company, deal-contact, and deal-company relationships
  • Smart Seeding - Quick preview of ~1,000 recent deals available in seconds while full sync runs
  • Resumable Sync - Interrupted syncs resume automatically on restart
  • Read-Only Queries - AI can only SELECT data, never modify your CRM

Use Cases

  • "Show me all deals closing this month over $50k"
  • "Find contacts at companies in the healthcare industry"
  • "Which deals have no associated contacts?"
  • "List all contacts with a @gmail.com email"
  • "What's the total pipeline value by deal stage?"

Prerequisites

HubSpot Private App Setup

  1. Go to your HubSpot account → Settings → Integrations → Private Apps
  2. Create a new private app
  3. Under "Scopes", enable these permissions:
    • crm.export (required for bulk data export)
    • crm.objects.contacts.read
    • crm.objects.companies.read
    • crm.objects.deals.read
  4. Create the app and copy your access token (starts with pat-)

Quick Start

No installation needed! Just add Daeda to your AI assistant's MCP configuration below - npx handles everything automatically.

Configuration

Choose your AI assistant below and follow the setup instructions. All configurations use the same JSON structure - just add it to your tool's config file.

| Platform | Config File Location | |----------|---------------------| | macOS | ~/Library/Application Support/Claude/claude_desktop_config.json | | Windows | %APPDATA%\Claude\claude_desktop_config.json |

{
  "mcpServers": {
    "daeda": {
      "command": "npx",
      "args": ["-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

| Platform | Config File Location | |----------|---------------------| | macOS | ~/.cursor/mcp.json or .cursor/mcp.json in project | | Windows | %USERPROFILE%\.cursor\mcp.json or .cursor\mcp.json in project |

{
  "mcpServers": {
    "daeda": {
      "command": "npx",
      "args": ["-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

| Platform | Config File Location | |----------|---------------------| | macOS | ~/.codeium/windsurf/mcp_config.json | | Windows | %USERPROFILE%\.codeium\windsurf\mcp_config.json |

{
  "mcpServers": {
    "daeda": {
      "command": "npx",
      "args": ["-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

| Platform | Config File Location | |----------|---------------------| | macOS | ~/Library/Application Support/Code/User/settings.json | | Windows | %APPDATA%\Code\User\settings.json |

Add to your VS Code settings.json:

{
  "mcp": {
    "servers": {
      "daeda": {
        "command": "npx",
        "args": ["-y", "daeda-mcp"],
        "env": {
          "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        }
      }
    }
  }
}

| Platform | Config File Location | |----------|---------------------| | macOS | ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json | | Windows | %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json |

{
  "mcpServers": {
    "daeda": {
      "command": "npx",
      "args": ["-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

| Platform | Config File Location | |----------|---------------------| | macOS | ~/Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json | | Windows | %APPDATA%\Code\User\globalStorage\rooveterinaryinc.roo-cline\settings\mcp_settings.json |

You can also edit via the Roo Code UI: Click the MCP icon → Edit Global MCP.

{
  "mcpServers": {
    "daeda": {
      "command": "npx",
      "args": ["-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

Windows users: Use this format instead:

{
  "mcpServers": {
    "daeda": {
      "command": "cmd",
      "args": ["/c", "npx", "-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

| Platform | Config File Location | |----------|---------------------| | macOS | ~/.config/zed/settings.json | | Windows | %APPDATA%\Zed\settings.json |

Add to the context_servers section of your Zed settings:

{
  "context_servers": {
    "daeda": {
      "command": "npx",
      "args": ["-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

JetBrains IDEs (2025.2+) have built-in MCP support via Settings → Tools → AI Assistant → Model Context Protocol (MCP).

  1. Open Settings → Tools → AI Assistant → Model Context Protocol (MCP)
  2. Click + to add a new server
  3. Paste this configuration:
{
  "mcpServers": {
    "daeda": {
      "command": "npx",
      "args": ["-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

Config is stored internally at: | Platform | Location | |----------|----------| | macOS | ~/Library/Application Support/JetBrains/<IDE>/options/mcp_servers.xml | | Windows | %APPDATA%\JetBrains\<IDE>\options\mcp_servers.xml |

| Platform | Config File Location | |----------|---------------------| | macOS | ~/Library/Application Support/amazon-q/mcp.json | | Windows | %APPDATA%\amazon-q\mcp.json | | Linux | ~/.config/amazon-q/mcp.json |

Create the file if it doesn't exist:

{
  "mcpServers": {
    "daeda": {
      "command": "npx",
      "args": ["-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

Restart your IDE after saving.

| Platform | Config File Location | |----------|---------------------| | macOS | ~/.claude/config.json (or inherits from Claude Desktop) | | Windows | %USERPROFILE%\.claude\config.json |

{
  "mcpServers": {
    "daeda": {
      "command": "npx",
      "args": ["-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

| Platform | Config File Location | |----------|---------------------| | macOS | ~/.continue/config.yaml | | Windows | %USERPROFILE%\.continue\config.yaml |

Continue uses YAML format:

mcpServers:
  - name: daeda
    command: npx
    args:
      - "-y"
      - "daeda-mcp"
    env:
      HS_PRIVATE_TOKEN: "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

| Platform | Config File Location | |----------|---------------------| | macOS | ~/.config/goose/config.yaml | | Windows | %APPDATA%\Block\goose\config\config.yaml |

Goose uses YAML format:

extensions:
  daeda:
    name: daeda
    type: stdio
    cmd: npx
    args: ["-y", "daeda-mcp"]
    envs:
      HS_PRIVATE_TOKEN: "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Raycast supports MCP via the "Model Context Protocol" extension.

  1. Install the MCP extension from Raycast Store
  2. Open Raycast → Extensions → Model Context Protocol → Settings
  3. Import this configuration:
{
  "mcpServers": {
    "daeda": {
      "command": "npx",
      "args": ["-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

| Platform | Config File Location | |----------|---------------------| | Global | ~/.config/opencode/opencode.json | | Project | <PROJECT_ROOT>/opencode.json |

{
  "mcpServers": {
    "daeda": {
      "command": "npx",
      "args": ["-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

| Platform | Config File Location | |----------|---------------------| | macOS | ~/Library/Application Support/Trae/User/settings.json | | Windows | %APPDATA%\Trae\User\settings.json |

Add to your Trae settings:

{
  "trae.mcp.servers": {
    "daeda": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "daeda-mcp"],
      "env": {
        "HS_PRIVATE_TOKEN": "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
      }
    }
  }
}

Add to your librechat.yaml configuration:

mcpServers:
  daeda:
    type: stdio
    command: npx
    args: ["-y", "daeda-mcp"]
    env:
      HS_PRIVATE_TOKEN: "pat-xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

How It Works

  1. First Launch - Daeda requests bulk exports from HubSpot's Export API
  2. Quick Seed - While exports process, ~1,000 recent deals are fetched via Search API for immediate use
  3. Full Sync - Export CSVs are downloaded and streamed into an encrypted SQLite database
  4. Ready - AI assistants can now query your full CRM instantly

The quick seed completes in 2-5 minutes, giving you immediate access to your 1,000 most recent deals and their associated contacts and companies.

The full sync runs in the background and duration depends on your CRM size:

  • Small CRM (10k records): ~5-10 minutes
  • Medium CRM (100k records): ~30-60 minutes
  • Large CRM (1M+ records): up to 5 hours

Progress is shown via the db_status tool. You can start querying immediately after the quick seed completes.

Available Tools

| Tool | Description | |------|-------------| | db_status | Check sync progress and database health | | get_raw_sql | Execute SELECT queries against your CRM data |

Database Schema

The local database contains:

  • contacts - All contacts with email and full properties as JSON
  • companies - All companies with domain and full properties as JSON
  • deals - All deals with name and full properties as JSON
  • contact_company - Contact to company associations
  • deal_contact - Deal to contact associations
  • deal_company - Deal to company associations

Query any HubSpot property using json_extract():

SELECT 
  json_extract(properties, '$.firstname') as first_name,
  json_extract(properties, '$.lastname') as last_name,
  email
FROM contacts
WHERE json_extract(properties, '$.lifecyclestage') = 'customer'
LIMIT 10

Data Storage

Your CRM data is stored locally at:

  • macOS/Linux: ~/.daeda-mcp/data/
  • Windows: %APPDATA%\daeda-mcp\data\

The database is encrypted using your HubSpot token as the encryption key. If you change tokens, the database will be re-initialized automatically.

Security

  • All data stays on your machine
  • Database is encrypted at rest
  • Only SELECT queries are allowed
  • Dangerous SQL keywords are blocked
  • Your HubSpot token is never stored (only used for encryption)

License

MIT - see LICENSE for details.