Documentation

Docs

DealPacket is an MCP server. It runs locally, talks to your MCP client over stdio, and exposes nine tools. You don't write code — you paste one config block and then ask in plain language.

Install

Sign up at dealpacket.com and your API key arrives by email along with the block below, already filled in. No card required.

Claude Desktop

Settings → Developer → Edit Config, then add:

{
  "mcpServers": {
    "dealpacket": {
      "command": "npx",
      "args": ["-y", "dealpacket-mcp"],
      "env": { "DEALPACKET_API_KEY": "dp_live_…" }
    }
  }
}

Restart Claude Desktop. DealPacket appears in the tools menu.

Claude Code

claude mcp add dealpacket -e DEALPACKET_API_KEY=dp_live_… -- npx -y dealpacket-mcp

Cursor, Windsurf, and other MCP clients

Any client that speaks MCP over stdio works — the config shape is the same three keys (command, args, env). Cursor reads .cursor/mcp.json; most others read .mcp.json in the project root.

Requires Node 20 or newer. Check with node --version. The server runs on your machine; your API key never travels anywhere except to DealPacket.

Your first packet

Ask in plain language. The client picks the tool.

"Run 3598 Ingledale Dr SW, Atlanta GA through DealPacket
 and give me the lender view."

That is two tool calls — get_deal to build the packet, then render_packet to shape it for a lender. The second one is free, and so is every other render of that same packet for the next 30 days.

Other things that work without you naming a tool:

"Screen these 40 addresses against my flip buybox."
"Give me the GC view on the third one."
"Set my buybox: max purchase 120k, ARV floor 250k, brick only,
 1200 to 1700 square feet, 70k equity target."
"How many packets do I have left this month?"

Go uncapped — bring your own data key

Your first three packets each month are funded by us. After that, add your own RentCast key and metering stops entirely — on any plan, including Free. RentCast's Developer plan is $0/month with 50 calls included, which is about 16 packets, and takes a minute: app.rentcast.io/app/api.

"Set my DealPacket data key to <your RentCast key>"

The key is verified against RentCast before it's stored — a key that doesn't work is worse than no key. It's then encrypted at rest with AES-256-GCM, decrypted only in memory for the duration of one call, never logged, and never returned by any tool. set_data_key echoes a masked prefix only. Pass clear: true to remove it.

You want the RentCast API plan, not the RentCast platform subscription ($12–19/mo). They're different products and only the API plan issues a key.

Tools

Nine tools. Two of them cost anything.

ToolCostWhat it does
get_deal 1 packet The product. Address → property facts, ownership, owner contact with DNC flags (Pro/Team), ARV and rent with comps, distress score, full underwriting, and pass/fail against your buybox. Every field carries its source and fetch time. Re-reads within 30 days are free and served from storage.
screen_deals ⅓ each Sweep up to 250 addresses against a buybox, returning pass/fail with the reason. Makes one valuation call per address instead of three, and is priced to match. Addresses that fail to look up aren't charged. Pro and Team.
render_packet free Reshape a stored packet for gc, lender, cpa, title or investor. No vendor calls, so it costs nothing on every plan.
get_packetfree A stored packet as JSON, with a stable schema_version.
list_packetsfree Recent packets on the account.
set_buyboxfree Create or update the rules every packet is scored against.
list_buyboxesfree
get_usagefree Plan, packets used and remaining, overage, and which data key is funding your calls. Reports metered: false when your own key is in use.
set_data_keyfree Store or clear your own RentCast key. See above.
A packet is one fresh pull for one address. For 30 days after that, re-reading it, re-rendering it for a different counterparty, exporting it, and re-scoring it against a different buybox are all free. Running the same address twice in that window is charged once. You are never metered on thinking.

Packet schema

get_packet returns this shape. schema_version is "1.0" and will change if the structure does.

DealPacket
├─ address          normalized + county, FIPS, APN, lat/lon
├─ property         beds, baths, sqft, lot, year, construction, zoning
├─ ownership        owner name & type (individual/entity/trust), occupancy,
│                   mailing address, years owned, last sale, estimated equity %
├─ contact          phones w/ type + DNC flag + confidence, emails
│                   └─ redacted:true on Free
├─ valuation        ARV + range + $/sf + up to 8 comps
├─ rental           market rent + range + comps + gross yield
├─ distress         absentee / high-equity / long-tenure / trust / vintage
│                   → 0–100 score WITH the reasons, never a bare number
├─ underwriting     MAO under the 70% rule AND your own equity target,
│                   rehab all-in, projected equity, DSCR, cash left in
│                   after refi, cash-on-cash
├─ buybox_fit       per-rule expected vs. actual, hard vs. soft, match + score
├─ provenance       field → { source, fetched_at, confidence, cached }
└─ attribution      vendor strings displayed on every packet

Two things there are the point, and neither is the data. buybox_fit turns a lookup into a decision by showing the arithmetic per rule. provenance turns a decision into something forwardable: the recipient doesn't have to trust you, they can check you.

Underwriting

Deterministic arithmetic on vendor data. No model calls, no guessing — which is what keeps re-renders free and the numbers reproducible.

Maximum allowable offer

Both are returned, because investors argue about which one to use:

mao_70     = ARV × 0.70 − rehab_all_in
mao_buybox = ARV − rehab_all_in − your_equity_target
rehab_all_in = rehab_budget × (1 + contingency_pct/100)

When you don't supply a purchase price, the packet solves for the lower of the two and reports it as assumed_purchase_price.

The rental hold

Hard-money-to-DSCR-refinance is the common exit, so debt service is modelled on the refinance rather than the acquisition loan. The refi is sized at the lesser of ARV × LTV and total basis — a just-finished flip has no seasoning for a cash-out above basis.

basis        = purchase + rehab_all_in
refi_loan    = min(ARV × 0.75, basis)
NOI/mo       = rent × 0.92 − (ARV × 0.018)/12
DSCR         = NOI / principal+interest
cash_left_in = basis − refi_loan

When cash_left_in reaches zero the refinance returned your whole basis. That's full capital recovery, so cash-on-cash has no denominator: the packet sets capital_recovered: true rather than leaving the field blank.

Every assumption above is named in underwriting.assumptions on each packet, including the DSCR convention (NOI over principal and interest, with taxes and insurance carried inside NOI). A lender will ask.

Buyboxes

A buybox is the set of rules everything gets scored against. Hard rules fail the whole packet; soft rules only reduce the score. Free includes one, Pro three, Team unlimited.

FieldTypeRule
purchase_min / purchase_maxnumberhard
arv_minnumberhard
sqft_min / sqft_maxnumberhard
beds_exactnumberhard
baths_minnumberhard
year_built_minnumbersoft — reduces score, doesn't fail
construction_instring[]hard, substring match
rehab_budget_defaultnumberdrives rehab all-in
rehab_contingency_pctnumberdefault 10
equity_targetnumberhard, drives mao_buybox
states, center_lat, center_lon, radius_mi stored, not yet enforced

What costs what

Two tools consume packets: get_deal (one) and screen_deals (one third per address). Everything else is free, forever, on every plan. Overage is off by default on paid plans and takes a ceiling you set, so an agent stuck in a retry loop gets refused rather than billed. Full detail on the pricing page.

Compliance

Owner contact data is returned for property-acquisition outreach. It is not a consumer report and is not for credit, employment, insurance or tenant-screening decisions. Every packet says so on its face.

Every number found is returned. Numbers on the National Do Not Call registry are flagged loudly rather than silently dropped — you need to know a number exists even when you shouldn't dial it. The outreach notice leads with mail and email. Your TCPA and state-level obligations for how you contact people remain yours.

The title and CPA views state plainly that they are starting points, not opinions. Valuation and rent figures are automated estimates, not appraisals. See the Acceptable Use section.

Troubleshooting

The server doesn't appear in my client

Check node --version is 20 or newer, then restart the client completely — most MCP clients only read their config at launch. Claude Desktop logs to ~/Library/Logs/Claude/mcp*.log on macOS.

"Invalid or revoked API key"

The key in DEALPACKET_API_KEY doesn't match an active key. Keys start dp_live_. Email hello@dealpacket.com and we'll reissue.

"That key was rejected by RentCast"

set_data_key verifies before storing. Confirm the key at app.rentcast.io/app/api, and confirm you're on an API plan rather than the platform subscription.

I've hit my packet limit

Two ways forward, and the first is free: add your own RentCast key with set_data_key and metering stops entirely, or upgrade so we run the data account and you get owner contact and bulk screening.

A field came back empty

Coverage varies by county. Check provenance for that field — it names the source and the fetch time, and distinguishes what was measured from what was derived. Nothing in a packet is invented to fill a gap.