Paragon MLS
Fetch real estate listings from Paragon MLS APIs and analyze rental investment properties.
Quick Start
- Build and configure the MCP server once:
cd paragon-mls-mcp && npm install && npm run build
- Add to
mcporter config (or your MCP client config):
mcporter config add paragon-mls --command "node /home/umbrel/.openclaw/workspace/deal-analyst/paragon-mls-mcp/dist/index.js" --transport stdio
- Use the tools:
# Fetch all listings from a shared MLS link
mcporter call paragon-mls.fetch_listings mlsId="6d70b762-36a4-4ac0-bedd-d0dae2920867" systemId="globalmls"
# Fetch a single property by MLS number
mcporter call paragon-mls.fetch_property mlsNumber="201918514" systemId="globalmls"
# Analyze a deal with the spreadsheet-compatible Four-Square model
mcporter call paragon-mls.analyze_deal mlsNumbers="201918514" systemId="globalmls" holdingPeriodYears:5 downPaymentPct:0.25
# Analyze multiple properties with custom assumptions
mcporter call paragon-mls.analyze_deal mlsNumbers="201918514,202012345" systemId="globalmls" downPaymentPct:0.25 interestRate:0.065 monthlyInsurance:250 repairBudget:10000 landValue:35000
# Compare velocity banking strategies for a deal
mcporter call paragon-mls.vb_calc debtBalance:350000 interestRate:0.05 loanTermYears:30 monthlyIncome:8000 monthlyExpenses:4878.875681 extraPayment:1000
# Get raw JSON data
mcporter call paragon-mls.raw_listings mlsNumbers="201918514" systemId="globalmls"
Tools
fetch_listings
Fetch all property listings from a Paragon MLS listing GUID. Returns parsed property data for all active listings.
- mlsId (required): Paragon MLS listing GUID from the URL
- systemId (default:
globalmls): MLS region ID (subdomain of paragonrels.com)
fetch_property
Fetch a single property by its MLS number. Returns structured property data.
- mlsNumber (required): MLS number for the property
- systemId (default:
globalmls): MLS region ID
- mlsId (optional): Listing GUID for link generation
analyze_deal
Perform a spreadsheet-compatible Four-Square analysis on one or more properties. Returns the major columns from the Google Sheet, including NOI, DSCR, principal paydown, appreciation, depreciation, ROI, ROE, and IRR.
Key inputs:
- mlsNumbers (required): Comma-separated MLS numbers
- systemId (default:
globalmls): MLS region ID
- holdingPeriodYears (default:
5)
- offerPricePct (default:
1)
- downPaymentPct (default:
0.20)
- interestRate (default:
0.07)
- loanTermYears (default:
30)
- vacancyRate / repairsPct / capexPct / mgmtPct for recurring expense assumptions
- closingCosts / repairBudget / reservePrepaid / privateMoneyLender / landValue for capital stack and tax assumptions
- monthlyPropertyTaxes / monthlySchoolTaxes / monthlyInsurance / monthlyWater / monthlySewer / monthlyGarbage / monthlyElectric / monthlyGas / monthlyHoa / monthlyLawnSnow / monthlyLegalAccounting for direct spreadsheet column overrides
- unitRent1..unitRent7 / laundryIncome / storageIncome / miscIncome for income overrides
vb_calc
Compare amortized debt, extra payments, chunking/basic acceleration, and advanced velocity banking.
- debtBalance (required)
- interestRate (required)
- loanTermYears (default:
30)
- extraPayment (default:
0)
- monthlyIncome (required)
- monthlyExpenses (required)
- helocRate (default:
0.2399)
- advancedRate (default:
0.08)
- helocLimit (default:
20000)
- chunkMonths (default:
6)
raw_listings
Fetch raw JSON data from the Paragon API for custom analysis. Returns unprocessed listing data.
- mlsNumbers (required): Comma-separated MLS numbers
- systemId (default:
globalmls): MLS region ID
System IDs
Common Paragon MLS system IDs (the subdomain before .paragonrels.com):
| Region | System ID |
|---|
| Eastern NY / Southern Adirondack | globalmls |
| InterMountain (Idaho) | imls |
| SW Colorado | cren |
| Hudson County, NJ | hudson |
| Georgia | gamls |
| Triangle Region, NC | triangle |
Check your local MLS website URL to find the correct system ID.
How It Works
The server calls Paragon's public CollabLink API endpoints:
- CreateGuid — generates a session GUID for API calls
- GetNotificationAppData — resolves a listing GUID into MLS numbers
- GetListingDetails — fetches property data for each MLS number
Property data is parsed from Paragon's nested JSON structure, handling both the "new" format (section-based DetailOptions) and "old" format (array-based).
Limitations
- Paragon's API is public but unofficial; it may change without notice
- Each MLS region may format listing data differently; the parser handles common formats but edge cases may require custom handling
- No authentication is required for public listing data
- The API returns data over HTTP (not HTTPS) for some regions
- Rate limiting may apply; the server processes listings sequentially with no intentional delay