Search and enrich US property, owner, people, and company data for sales and lead generation.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
DealMachine CLI (dm) -- property intelligence from the command line.
A standalone Commander.js CLI that talks to the DealMachine REST API. Provides 17 command groups covering agent guidance, authentication, property search, people lookup, enrichment, comps, list management, and developer utilities. Compiles to a single ESM bundle via tsc.
This package has zero @dealmachine/* dependencies -- it is a self-contained binary that communicates exclusively through the public API.
This repository is also the public distribution package for the DealMachine MCP server and DealMachine skill.
https://mcp.dealmachine.comhttps://api.docs.dealmachine.comhttps://dealmachine.com/settings/developerhttps://dealmachine.com/privacy-policyhttps://dealmachine.com/terms-of-servicesupport@dealmachine.comThe MCP server supports OAuth 2.1 for ChatGPT, Claude, Cursor, Codex, and other compatible clients. It can also use a DealMachine API key in developer clients that support bearer-token configuration.
The plugin package includes:
server.jsonThe portable package follows Agent Plugins 1.0.0:
Compatible clients discover the DealMachine skill from skills/dealmachine/ and connect to the
hosted Streamable HTTP MCP server declared in mcp.json. Client-specific manifests remain in the
repository for compatibility, marketplace metadata, and richer presentation.
Example requests:
Direct skill installation:
agents, agents guide, agents playbook, agents install, agents permissionslogin, logout, whoamiconfig get, config set, config pathaccountusagesearch, count, get, ids, exportsearch, count, get, ids, exportaddress, latlng, apn, email, phone, namesearch, create, get, update, delete, build, import, items, add, remove, exportsearch, getautocomplete, validatelicense add, license list, license removeThe canonical implementation package is @dealmachine/cli. The dealmachine package is the short install alias and provides the same dm command.
The binary entry is dist/index.js, declared in package.json under bin.dm. Requires Node.js >= 18.
The CLI supports two authentication methods.
The default dm login command uses the OAuth 2.0 Device Authorization Grant (RFC 8628). This is the recommended flow for interactive use:
POST /v1/auth/device/code with client ID dealmachine-next-cli and your machine's hostname.--no-browser).POST /v1/auth/device/token at the server-specified interval.~/.dealmachine/config.json.The polling handles all RFC 8628 responses: authorization_pending, slow_down (backs off by 5s), access_denied, and expired_token.
For CI pipelines, scripts, or local development, pass an API key directly:
The key is verified against GET /v1/account before being stored. If verification fails, the CLI exits with a non-zero code.
If you do not have an API key yet, use dm signup, dm plans, and dm checkout first. Public plan checkout only accepts self-serve Basic and Pro prices from the shared plan catalog and is capped at 60,000 monthly data credits.
If you are already logged in, you can switch the target API environment without logging out:
Removes the config file at ~/.dealmachine/config.json.
Credentials are stored at ~/.dealmachine/config.json with file permissions 0600 (owner read/write only). The config directory ~/.dealmachine/ is created with mode 0700.
The CLI checks these environment variables for API URL resolution (in priority order):
| Variable | Purpose | Example |
|---|---|---|
DM_API_URL / DEALMACHINE_API_URL | Direct URL override | http://localhost:3001/v1 |
DM_ENV / DEALMACHINE_ENVIRONMENT | Environment name | local, staging, or production |
If none are set, the CLI falls back to the apiEnvironment field in the config file, then defaults to production.
| Environment | URL |
|---|---|
local | http://localhost:3001/v1 |
staging | https://api-staging.v2.dealmachine.com/v1 |
production | https://api.v2.dealmachine.com/v1 |
dm agentsPrint concise guidance for agents using the CLI. This is the recommended first command when an agent has access to dm but has not loaded the DealMachine Playbook yet.
The guide tells agents to use --json and --quiet, verify auth, fetch live filters and fields before searches, count before credit-consuming work, and confirm expected credit usage before fetching records or exporting.
dm agents guidePrint the same concise agent guidance explicitly.
dm agents playbookPrint the bundled DealMachine Playbook Markdown. Agents should load this before translating natural language property, people, contact, enrichment, list, export, comps, or credit-usage requests into CLI commands.
The public CLI source keeps its bundled Playbook at playbook/PLAYBOOK.md. Monorepo builds can also copy packages/playbooks/playbook/SKILL.md. The build writes the selected source to dist/agents/dealmachine-playbook.md, so the command works from a published CLI package as well as a local source checkout.
dm agents install claude-codeInstall the Playbook as a native Claude Code skill. Personal scope is the default. Project scope installs under the current repository.
dm agents permissionsPrint the narrow Claude Code allowlist for free discovery and count commands. Paid and mutating commands are not pre-approved.
dm signupCreate a public API account and receive an API key:
dm plansList public self-serve Basic and Pro plans:
dm checkoutCreate a Stripe checkout session using a price ID from dm plans:
dm loginAuthenticate with your DealMachine account.
| Option | Description |
|---|---|
--no-browser | Do not automatically open the browser |
--key <api-key> | Login directly with an API key (skips browser) |
--env <environment> | API environment: local, staging, or production |
dm logoutRemove stored credentials.
dm whoamiShow current authentication status.
| Option | Description |
|---|---|
--verify | Verify credentials with the API |
dm config get [key]Get a configuration value, or display all values when no key is given.
Available keys: organizationName, organizationSlug, organizationId, apiEnvironment, keyId, apiKey.
dm config set <key> <value>Set a configuration value. Only apiEnvironment is editable.
dm config pathPrint the absolute path to the config file.
dm accountDisplay account information including organization name, ID, creation date, and auth type.
Output:
dm usageShow credit usage for the current billing cycle.
Output:
dm properties searchSearch properties with filters and locations.
| Option | Description |
|---|---|
--body <json> | Request body as JSON string |
-f, --file <path> | Read request body from a JSON file |
--include-lists <ids> | Comma-separated list IDs to include |
--exclude-lists <ids> | Comma-separated list IDs to exclude |
--exclude-previously-exported | Exclude records already exported by your organization |
--bigquery-data-environment <n> | Query Builder data environment (1 production, 2 staging, 3 development) |
--estimate-cost | Preview counts and credit cost without consuming credits |
--yes | Confirm approved credit spend for non-interactive execution |
--json | Output as JSON |
dm properties countCount properties matching filters without consuming credits.
dm properties get <id>Get a single property by its DealMachine ID.
| Option | Description |
|---|---|
--contact-audience <audience> | owners, owners_and_family, renters, residents, all, none |
--fields <csv> | Comma-separated property field IDs from dm fields |
--json | Output as JSON |
Property lookup defaults to owners. If you only need property data, use --contact-audience none. This omits contacts and avoids people credits.
dm properties ids [ids...]Get multiple properties by their IDs in a single batch request.
| Option | Description |
|---|---|
--body <json> | Request body as JSON string |
-f, --file <path> | Read request body from a JSON file |
--contact-audience <audience> | Include contacts: owners, owners_and_family, renters, residents, all, none |
--json | Output as JSON |
dm properties exportExport properties as CSV (up to 1,000,000 records). Returns signed download URLs.
| Option | Description |
|---|---|
--body <json> | Request body as JSON string |
-f, --file <path> | Read request body from a JSON file |
--require-phone | Only include records where the contact has a phone number |
--require-email | Only include records where the contact has an email address |
--mobile-only | Only include wireless phone numbers |
--landline-only | Only include landline phone numbers |
--scrub-dnc | Exclude contacts on the Do Not Call registry |
--json | Output as JSON |
dm people searchSearch people with filters and locations.
Non-interactive People Search returns a free estimate unless --yes is supplied. A specific person
by name uses dm enrich name, not People Search.
dm people countCount people matching filters without consuming credits.
dm people get <id>Get a single person by their DealMachine ID.
| Option | Description |
|---|---|
--include-properties | Include associated properties |
--property-limit <n> | Maximum associated properties to return, from 1 through 100 |
--fields <csv> | Comma-separated field IDs from dm fields |
--json | Output as JSON |
dm people ids [ids...]Get multiple people by their IDs in a single batch request.
| Option | Description |
|---|---|
--include-properties | Include associated properties |
--property-limit <n> | Maximum associated properties to return per person, up to 100 |
--fields <csv> | Comma-separated field IDs from dm fields |
dm people exportExport people as CSV (up to 1,000,000 records). Returns signed download URLs.
Contact filter options are the same as dm properties export.
All enrichment commands support three input modes: a positional argument for single-item lookup, --body/-f for JSON payloads, and -f with a .csv file for batch enrichment from CSV. Batches larger than 250 items are automatically chunked. Every enrichment command accepts --fields <csv> and sends the selected field IDs to the API. Email, phone, and name matches also include a free property_count; use --include-properties when you need the property records themselves.
dm enrich address [address]Look up a property by street address.
| Option | Description |
|---|---|
--body <json> | Request body as JSON string |
-f, --file <path> | Read from JSON or CSV file |
--contact-audience <audience> | owners, owners_and_family, renters, residents, none |
--fields <csv> | Comma-separated field IDs from dm fields |
--json | Output as JSON |
Use --contact-audience none whenever you only need the property. The response omits contacts and consumes zero people credits.
dm enrich latlng [coords]Look up a property by latitude/longitude coordinates.
dm enrich apn [apn]Look up a property by Assessor's Parcel Number. Narrow results with --state or --zip.
| Option | Description |
|---|---|
--state <code> | Narrow by state (e.g., TX) |
--zip <code> | Narrow by ZIP code |
--contact-audience <audience> | owners, owners_and_family, renters, residents, none |
--fields <csv> | Comma-separated field IDs from dm fields |
dm enrich email [email]Look up a person by email address.
| Option | Description |
|---|---|
--include-properties | Include associated properties |
--fields <csv> | Comma-separated field IDs from dm fields |
dm enrich phone [phone]Look up a person by phone number.
| Option | Description |
|---|---|
--include-properties | Include associated properties |
--fields <csv> | Comma-separated field IDs from dm fields |
dm enrich name [name]Look up people by name. Supports "First Last" or just "Last" format.
| Option | Description |
|---|---|
--state <code> | Narrow by state |
--zip <code> | Narrow by ZIP code |
--include-properties | Include associated properties |
--fields <csv> | Field IDs from dm fields |
--estimate-cost | Preview count and credits |
--yes | Confirm approved credit spend |
--page <n> | Page number |
--per-page <n> | Results per page |
dm comps [property_ids...]Find comparable properties (sales comps) for one or more properties.
| Option | Description |
|---|---|
--body <json> | Request body as JSON string |
-f, --file <path> | Read request body from a JSON file |
--radius <miles> | Search radius in miles (default: 1) |
--timeframe <period> | 3months, 6months, 12months, all (default: 6months) |
--limit <n> | Max comps per property (default: 25, max: 100) |
--sort-by <field> | distance, price, date, match (default: match) |
--sort-direction <dir> | asc, desc (default: desc) |
--include-foreclosures | Include foreclosure sales |
--json | Output as JSON |
Output includes subject property details, value estimation with confidence interval, summary statistics (average/median price, price per sqft), and a table of comparable properties.
dm lists searchSearch and list all saved lists.
| Option | Description |
|---|---|
--search <term> | Search lists by name |
--source-type <type> | properties or people |
--sort <order> | newest, oldest, name, count |
-p, --page <n> | Page number |
--per-page <n> | Results per page |
dm lists createCreate a new list.
| Option | Description |
|---|---|
--name <name> | List name (required) |
--source-type <type> | properties or people |
--ids <csv> | Comma-separated record IDs to pre-populate (max 250) |
--body <json> | Request body as JSON (filters/locations) |
-f, --file <path> | Read request body from a JSON file |
dm lists get <id>Get details of a specific list including status, progress, and error state.
dm lists update <id>Rename a list.
dm lists delete <id>Delete a list and all its items.
dm lists build <id>Build a list from search filters. This is an asynchronous operation -- poll with dm lists get for status.
dm lists import <id>Import record IDs into an existing list.
dm lists items <id>List items in a list with pagination.
dm lists add <id>Add items to a list by ID.
| Option | Description |
|---|---|
--ids <csv> | Comma-separated list of IDs to add (required) |
--id-type <type> | internal_property_id or internal_person_id |
dm lists remove <id>Remove items from a list by ID.
dm lists export <id>Export list items. Credits are charged per record.
| Option | Description |
|---|---|
--fields <csv> | Comma-separated list of fields to export |
--anchor <type> | property or person |
dm filtersList available search filters with their types, operators, and groupings.
| Option | Description |
|---|---|
--source-type <type> | properties or people |
--group-id <id> | Filter by group ID |
--search <term> | Search filters by name |
--page <n> | Page number |
--per-page <n> | Results per page |
dm fieldsList available data fields with filterable/sortable flags.
| Option | Description |
|---|---|
--source-type <type> | properties or people |
--group-id <id> | Filter by group ID |
--search <term> | Search fields by name |
--page <n> | Page number |
--per-page <n> | Results per page |
Search and retrieve DealMachine locations.
dm locations autocomplete remains available as a deprecated alias for dm addresses autocomplete.
dm activity searchSearch past API activity with type filters and free-text search.
| Option | Description |
|---|---|
--body <json> | Request body as JSON string |
-f, --file <path> | Read request body from a JSON file |
-t, --types <types...> | Filter by activity types (space-separated) |
-q, --query <text> | Free-text search across activity |
--page <n> | Page number |
--per-page <n> | Results per page |
dm activity get <id>Get full details of a specific activity record, including the original request, result summary, and entity IDs (people and properties).
dm addresses autocomplete <query>Return free, bounded address and normalized location suggestions.
| Option | Description |
|---|---|
--scope <scope> | all, address, or location, default all |
--state <code> | Prefer a two-letter state abbreviation |
--limit <n> | Maximum suggestions, default 5 and max 10 |
--latitude <number> | Latitude for nearby ranking, requires longitude |
--longitude <number> | Longitude for nearby ranking, requires latitude |
--json | Output raw JSON response |
Autocomplete does not request fields, perform enrichment, or consume data credits.
dm addresses validate [address]Validate and standardize addresses via USPS.
Output shows each address as valid, corrected (with corrections listed), or invalid (with reason).
Local development utilities that operate directly against the Docker MySQL container (dealmachine-next-mysql). These require the local database to be running (npm run db:start from the repo root).
dm dev license add <key_id>Add a license to an API key in the local database.
| Option | Description |
|---|---|
--type <type> | state, county, zip_code, or unlimited (required) |
--code <code> | Location code: state abbreviation, FIPS code, or ZIP |
--expires <date> | Expiration date in ISO format |
dm dev license list [key_id]List all licenses, optionally filtered by key ID.
dm dev license remove <license_id>Remove a license by its numeric ID.
Every command supports these flags:
| Flag | Description |
|---|---|
--json | Output as machine-readable JSON (for scripting and piping) |
--quiet | Suppress spinners and decorative output for agents/scripts |
--help | Show usage information for any command |
--version | Show the CLI version |
Commands that accept a request body support three input methods, checked in this order:
--body <json> -- Inline JSON string.-f, --file <path> -- Read from a JSON file. Enrichment commands also accept .csv files for batch processing.The enrich commands detect .csv files by extension and auto-parse them. Expected column names per command:
| Command | Required Columns | Alternative Column Names |
|---|---|---|
enrich address | full_address | or street + city, state, zip |
enrich latlng | latitude, longitude | lat, lng/lon/long |
enrich apn | apn | parcel_id, parcel_number |
enrich email | email | email_address |
enrich phone | phone | phone_number |
Batches larger than 250 items are automatically chunked with progress spinners. If an export limit is reached mid-batch, the CLI stops and returns results collected so far.
| Module | Responsibility |
|---|---|
lib/config.ts | Manages ~/.dealmachine/config.json. Enforces 0600 file permissions and 0700 directory permissions. Provides typed read/write/delete helpers. |
lib/client.ts | Central HTTP client. Resolves the API base URL from env vars, config, or defaults. Attaches the Authorization: Bearer header and versioned User-Agent. Exits with a non-zero code on HTTP errors. |
lib/api.ts | Device authorization flow implementation. Handles POST /v1/auth/device/code and POST /v1/auth/device/token with RFC 8628-compliant polling and error mapping. Also provides verifyCredentials for key validation. |
lib/output.ts | All output formatting: printTable (auto-width columns), printJson, printKeyValue, printPagination, printCredits, printTotals, printWarning, printHeader. Also exports parseRequestBody which handles --body, -f, and stdin input. |
The published and deployed checks are release gates. They are expected to fail before a release is
published or the documentation deployment reaches production. The scenario catalog is stored in
evals/claude-code-name-lookup.json so the same prompt variants remain visible and reviewable.
The compiled dist/index.js includes a #!/usr/bin/env node shebang and is declared in package.json under bin.dm. When installed globally via npm, it becomes available as dm on the PATH.
For distribution as a standalone binary without npm:
The files array in package.json ensures only dist/ is included in the published package.
Create src/commands/mycommand.ts:
Import and wire up the command in src/index.ts:
src/commands/.--json for machine-readable output.ora for spinners during API calls.chalk for colored terminal output.apiRequest<T> from lib/client.ts for all API calls -- it handles auth, errors, and exits.parseRequestBody from lib/output.ts when the command accepts --body, -f, or stdin input.printHeader, printTable, printKeyValue, printCredits, printPagination for consistent output formatting..js extension (ESM requirement with NodeNext resolution).| Package | Version | Purpose |
|---|---|---|
commander | ^12.1.0 | CLI framework -- command registration, option parsing, help generation |
chalk | ^5.3.0 | Terminal string styling (colors, bold, dim) |
ora | ^8.1.0 | Spinner animations for async operations |
open | ^10.1.0 | Opens the browser for the device auth flow |
| Package | Version | Purpose |
|---|---|---|
typescript | ^5.6.3 | TypeScript compiler |
@types/node | ^22.0.0 | Node.js type definitions |
None. This package is a fully standalone binary with zero @dealmachine/* dependencies. It communicates exclusively through the public REST API.
The Playbook at packages/playbooks/playbook/ uses dm commands to execute property intelligence workflows. The CLI is the primary interface through which the Playbook interacts with DealMachine data. Agents can load the bundled Playbook directly with dm agents playbook.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/dealmachine)<a href="https://allmcps.com/mcp/dealmachine"><img src="https://allmcps.com/api/badge/dealmachine?style=directory" alt="DealMachine on AllMCPs" /></a>