daeda-mcp
v1.0.7
Published
MCP server for HubSpot CRM data sync
Maintainers
Readme
Daeda MCP
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
- Go to your HubSpot account → Settings → Integrations → Private Apps
- Create a new private app
- Under "Scopes", enable these permissions:
crm.export(required for bulk data export)crm.objects.contacts.readcrm.objects.companies.readcrm.objects.deals.read
- 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).
- Open Settings → Tools → AI Assistant → Model Context Protocol (MCP)
- Click + to add a new server
- 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.
- Install the MCP extension from Raycast Store
- Open Raycast → Extensions → Model Context Protocol → Settings
- 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
- First Launch - Daeda requests bulk exports from HubSpot's Export API
- Quick Seed - While exports process, ~1,000 recent deals are fetched via Search API for immediate use
- Full Sync - Export CSVs are downloaded and streamed into an encrypted SQLite database
- 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 10Data 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.
