# io.github.perkinsandre/investra-ai-mcp (npm · investra-ai-mcp)

Real estate investment intelligence: search, comps, cash flow, off-market leads, skip trace.

- Trust score: 54/100 (low)
- Change this week: +18
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `investra-ai-mcp`: 54/100 (this document), [markdown](https://verifymcp.io/servers/perkinsandre-investra-ai-mcp/investra-ai-mcp.md), [page](https://verifymcp.io/servers/perkinsandre-investra-ai-mcp/investra-ai-mcp)

## Channel facts

- Registry: `npm`
- Package: `investra-ai-mcp`
- Version: `2.3.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (95 of 96), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (95 of 96), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 19/100
  - Repository check failed: the declared repository URL returned HTTP 404.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 112 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 26/100
  - AI-judged instruction clarity (poor).
  - Context-footprint check failed: tool/resource definitions use about 3788 tokens (~252/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add perkinsandre-investra-ai-mcp -- npx -y investra-ai-mcp
```

### Codex

```bash
codex mcp add perkinsandre-investra-ai-mcp -- npx -y investra-ai-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "perkinsandre-investra-ai-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "investra-ai-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add perkinsandre-investra-ai-mcp --command npx --arg -y --arg investra-ai-mcp
```

### Hermes

```yaml
mcp_servers:
  perkinsandre-investra-ai-mcp:
    command: "npx"
    args: ["-y", "investra-ai-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "perkinsandre-investra-ai-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "investra-ai-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 54, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 53, +15)

- [security regression] Known CVEs: partial → unverified
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Dependency health: partial → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional improvement] Stability: unverified → 0.20

### 2026-08-01 (score 38, +26)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Schema quality: unverified → poor
- [functional] Licence: MIT

### 2026-07-31 (score 12, −6)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 18, 0)

- [security regression] Malware scan: pass → unverified
- [functional improvement] Tool coverage: unverified → 100

### 2026-07-28 (score 18, −18)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 36)

First indexed and scored.

## MCP tools (15)

### `search_properties` (~529 tokens)

\**ALWAYS use this tool FIRST for any property/deal/investment/opportunity request.** This is the primary discovery tool — covers active for-sale MLS listings (Zillow + Realtor.com via Scrapeak primary, RapidAPI fallback) and is what users want 95% of the time. **DECISION TREE — read this before picking another tool:** If the user's message contains ANY of these phrases or anything semantically similar, USE THIS TOOL: 'show me properties', 'find houses', 'find properties', 'investment properties', 'investment opportunities', 'opportunities in [city]', 'good deals', 'best deals', 'deals in [city]', 'cash flowing properties', 'cash flow properties', 'rentals', 'rental properties', 'houses for sale', 'properties for sale', 'good buys', 'best buys', 'find me a property', 'find me investments', 'looking to invest in [city]', 'show me what is available', 'what is on the market in [city]', or simply names a city/zip code with no other qualifier. Each result is pre-enriched with estimated rent, monthly cash flow, cap rate, PITI, utilities, photos, and lat/lng — so you can immediately identify cash-flowing deals without any follow-up tool calls. Do NOT call get_property_details, get_rent_estimate, or estimate_costs on these results unless the user explicitly drills into ONE specific property. For pagination, increment `page` (page 2 = next 40). **CRITICAL: Generic words like 'deals', 'opportunities', 'investments' do NOT mean off-market.** Only route to search_off_market if the user explicitly types one of these LITERAL keywords: 'off-market', 'off market', 'distressed', 'foreclosure', 'pre-foreclosure', 'absentee owner', 'tax delinquent', 'motivated seller', 'wholesale leads', 'skip trace', or 'unlisted properties'. If those exact words are absent, USE search_properties.

Input parameters:

- `cashFlowOnly` (boolean): If true, only return properties with positive estimated monthly cash flow
- `limit` (number): Results per page (max 40)
- `location` (string, required): City, 'City, ST', ZIP code, or full address
- `maxPrice` (number): Maximum listing price in USD
- `page` (number): Page number for pagination (1 = first page). Use this to load more results.
- `propertyType` (string): Property type filter

### `get_property_details` (~59 tokens)

Look up property information by street address. ONLY use this for addresses NOT already returned by search_properties, browse_deals, or get_deal_details — those tools already include property data.

Input parameters:

- `address` (string, required): Full street address of the property

### `get_market_data` (~33 tokens)

Get current mortgage rates, housing market trends, and economic indicators

Input parameters:

- `category` (string): Filter by data category

### `analyze_market` (~54 tokens)

Get comprehensive market analysis for a specific city including pricing trends, rental data, and economic indicators

Input parameters:

- `city` (string, required): City name
- `state` (string, required): Two-letter state code (e.g. TX, CA)

### `get_sales_comps` (~79 tokens)

Find recently sold comparable properties to estimate After Repair Value (ARV)

Input parameters:

- `address` (string, required): Property address to find comps for
- `baths` (number): Number of bathrooms
- `beds` (number): Number of bedrooms
- `currentPrice` (number): Current listing or purchase price
- `sqft` (number): Square footage

### `get_rent_estimate` (~60 tokens)

Estimate rental income with comparable rental listings and sensitivity analysis

Input parameters:

- `address` (string, required): Property address
- `baths` (number): Number of bathrooms
- `beds` (number): Number of bedrooms
- `sqft` (number): Square footage

### `estimate_costs` (~1265 tokens)

Run a full investment underwrite on a property using one of three strategies: 'rental' (Buy-Hold-Rent), 'flip' (Fix & Flip), or 'brrrr' (Buy-Rehab-Rent-Refinance-Repeat). Each strategy mirrors the exact calculation engine used by Investra's PropertyDetails modal — every slider the user can tune in the platform UI is exposed here as an optional parameter, so you can pass the same scenario assumptions a real investor would. For RENTAL: returns financing, monthly cash flow, cap rate, cash-on-cash, DSCR, 1% rule, GRM, and an A–F investment grade. For FLIP: returns total investment, net profit, ROI, profit margin, annualized ROI. For BRRRR: returns refinance amount, capital recovered, post-refi cash flow, infinite-return flag. Defaults match the platform: rental = 25% down, 7% rate, 30yr term, 5% vacancy, 10% management, 5% maintenance; flip = 6mo hold, 2% buy closing, 6% sale closing, 12% hard money, $500/mo carry; brrrr = 75% LTV refi, 6.5% refi rate. To compare scenarios, call this tool multiple times with different assumption values.

Input parameters:

- `address` (string, required): Property address
- `arv` (number): [flip/brrrr] After Repair Value in $ (e.g. 250000). REQUIRED for flip and brrrr strategies.
- `baths` (number): Bathrooms
- `beds` (number): Bedrooms (improves rent estimate)
- `carryingCostsMonthly` (number): [flip] Carrying costs per month in $ (utilities + insurance + taxes during hold). Default 500.
- `city` (string): City (improves tax + insurance estimates)
- `closingCostsPct` (number): [rental] Closing costs as % of purchase price (e.g. 3 = 3%). Default 3%.
- `downPaymentPct` (number): [rental/flip/brrrr] Down payment percent (e.g. 25 = 25%). Default 25.
- `financingRatePct` (number): [flip] Hard money / bridge loan rate as % (e.g. 12). Default 12%.
- `hoaMonthly` (number): [rental] Monthly HOA fees in $ (e.g. 250). Default 0.
- `holdingPeriod` (number): [flip] Holding period in months (e.g. 6). Default 6.
- `insuranceMonthly` (number): [rental/brrrr] Override monthly insurance in $ (e.g. 100).
- `interestRate` (number): [rental] Mortgage rate percent (e.g. 7.25 = 7.25%). Defaults to 7%.
- `landlordPaysUtilities` (boolean): [rental] If true, adds utility expense to the landlord side
- `loanTermYears` (number): [rental/brrrr] Loan term in years. Default 30.
- `maintenancePct` (number): [rental] Maintenance as % of monthly rent (e.g. 5 = 5%). Default 5%.
- `monthlyRent` (number): [brrrr] Post-rehab monthly rent in $ (e.g. 1800). REQUIRED for brrrr.
- `monthlyRentOverride` (number): [rental] Override the auto-estimated monthly rent in $ (e.g. 1500). Useful when you have a known lease or comp.
- `price` (number, required): Purchase price in USD
- `propertyManagementPct` (number): [rental/brrrr] Property management as % of rent (e.g. 10 = 10%). Default 10%, unless selfManaged=true.
- `propertyTaxAnnual` (number): [rental/brrrr] Override annual property tax in $ (e.g. 4800).
- `propertyType` (string): e.g. 'house', 'condo', 'multifamily'
- `purchaseClosingPct` (number): [flip] Purchase closing costs as % of purchase price (e.g. 2). Default 2%.
- `refinanceLTVPct` (number): [brrrr] Refinance loan-to-value % (e.g. 75 = 75% of ARV). Default 75%.
- `refinanceRatePct` (number): [brrrr] Refinance interest rate as % (e.g. 6.5). Default 6.5%.
- `rehabScope` (string): [rental] Rehab scope — adds to upfront cash needed.
- `renovation` (number): [flip/brrrr] Renovation budget in $ (e.g. 35000). REQUIRED for flip and brrrr strategies.
- `saleClosingPct` (number): [flip] Sale closing costs as % of ARV (e.g. 6). Default 6%.
- `selfManaged` (boolean): [rental] If true, removes the property management expense line. Overrides propertyManagementPct.
- `sqft` (number): Square footage
- `state` (string): Two-letter state code
- `strategy` (string): Investment strategy. 'rental' = Buy-Hold-Rent (cash flow, cap rate). 'flip' = Fix & Flip (renovation + ARV, profit, ROI). 'brrrr' = Buy-Rehab-Rent-Refinance-Repeat (capital recovery via cash-out refi…
- `type` (string): For rental strategy only — type of breakdown. 'full' returns the complete underwrite. Ignored for flip/brrrr.
- `utilitiesMonthly` (number): [rental] Override monthly landlord-paid utilities in $.
- `vacancyRatePct` (number): [rental/brrrr] Vacancy rate as % (e.g. 8 = 8%). Default 5%.
- `yearBuilt` (number): Year built (drives maintenance + capex)
- `zipcode` (string): ZIP code

### `search_off_market` (~608 tokens)

\**RESTRICTED tool — off-market lead generation ONLY.** Returns address-only records from public-record databases (~40M parcels with last-sale, assessed value, owner name, parcel ID) for users running cold-outreach acquisition campaigns. NO listing photos, NO list price, NO listing agent, NO MLS data, NO cash flow analysis. **STRUCTURAL GUARD: this tool has a REQUIRED `confirmOffMarketIntent` boolean parameter that you MUST set true ONLY if the user's literal message contains one of these EXACT keywords:** 'off-market', 'off market', 'distressed', 'foreclosure', 'pre-foreclosure', 'absentee owner', 'absentee', 'tax delinquent', 'motivated seller', 'wholesale leads', 'skip trace candidates', or 'unlisted properties'. **If the user's message does NOT contain one of those exact keywords, set `confirmOffMarketIntent` to false — and the call will be rejected with an error telling you to use search_properties instead.** Generic phrases like 'investment opportunities', 'opportunities in [city]', 'good deals', 'best deals', 'deals in [city]', 'investment properties', 'cash flowing properties', 'rentals', 'find me properties', 'show me properties', 'investments in [city]', 'good buys' MUST NOT trigger this tool — those refer to MLS-listed properties (use search_properties). Costs 1 search credit per query. Requires PAID Investra subscription — free-tier users get 403; route them to search_properties.

Input parameters:

- `city` (string): City name (e.g. 'Charlotte')
- `confirmOffMarketIntent` (boolean, required): REQUIRED. Set to TRUE only if the user's literal message contained one of these exact keywords: 'off-market', 'off market', 'distressed', 'foreclosure', 'pre-foreclosure', 'absentee owner', 'absentee…
- `limit` (number): Results per page (max 200)
- `maxPrice` (number): Maximum value (assessed/market/last-sale)
- `minPrice` (number): Minimum value (assessed/market/last-sale)
- `offset` (number): Pagination offset (0 = first page). Use returned hasMore flag to know when to stop.
- `propertyType` (string): Property type filter
- `state` (string): Two-letter state code
- `zip` (string): ZIP code (most precise filter)

### `get_off_market_details` (~76 tokens)

Get enriched details for an off-market property including motivation score, deal quality, and owner information. Requires paid subscription. Uses 1 search credit.

Input parameters:

- `city` (string, required): City
- `state` (string, required): Two-letter state code
- `street` (string, required): Street address
- `zip` (string, required): ZIP code

### `skip_trace` (~71 tokens)

Get owner contact information (phone, email) for an off-market property. Requires Pro Plus subscription. Uses 1 lead credit.

Input parameters:

- `city` (string, required): City
- `state` (string, required): Two-letter state code
- `street` (string, required): Street address
- `zip` (string, required): ZIP code

### `get_interest_rate` (~20 tokens)

Get the current 30-year fixed mortgage interest rate

### `browse_deals` (~99 tokens)

Browse investment deals posted by other investors. Returns a summary list — use get_deal_details with the Deal ID for full financials and property data.

Input parameters:

- `city` (string): Filter by city
- `dealType` (string): Filter by investment strategy
- `limit` (number): Number of results (max 50)
- `minRoi` (number): Minimum projected ROI percentage
- `state` (string): Two-letter state code

### `get_deal_details` (~72 tokens)

Get full details for a specific investment deal by ID — includes financials, property data, owner info, and engagement stats. Use get_sales_comps or get_rent_estimate with the deal address for comps.

Input parameters:

- `dealId` (string, required): The deal ID (UUID) from browse_deals results

### `get_zip_market_data` (~165 tokens)

Get hard-data market statistics for a ZIP code from Investra's indexed market_data table: HUD Fair Market Rents (by bedroom count), Census ACS demographics, median home value, median rent, vacancy rate, owner-occupied %, year-over-year appreciation, days on market, $/sqft, unemployment, job growth, crime index, school rating, and flood-zone exposure. Use this BEFORE running estimate_costs or analyze_market when you want grounded, real-source data instead of LLM guesses. Pass either a single zip OR a city+state to search.

Input parameters:

- `city` (string): City name (returns all matching ZIPs)
- `state` (string): Two-letter state code
- `zip` (string): 5-digit ZIP code (most precise)

### `find_local_partners` (~112 tokens)

Find local service partners for a specific market: mortgage lenders, property managers, home inspectors, contractors/GCs, real estate agents. Useful when an investor is building a deal team in a new city. Backed by Google Places.

Input parameters:

- `partnerType` (string): Optional partner type filter
- `query` (string, required): Free-text search string — typically '<partner type> in <city, state>' (e.g. 'mortgage lender in Austin, TX', 'property manager near Charlotte, NC')

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/perkinsandre-investra-ai-mcp/investra-ai-mcp#diagnostics

## Score history

- 2026-08-03: 54
- 2026-08-02: 53
- 2026-08-01: 38
- 2026-07-31: 12
- 2026-07-30: 18
- 2026-07-28: 18
- 2026-07-27: 36

## Links

- npm package: https://www.npmjs.com/package/investra-ai-mcp
- Socket report: https://socket.dev/npm/package/investra-ai-mcp
- Website: https://www.investraapp.com/
- Changelog RSS feed: https://verifymcp.io/servers/perkinsandre-investra-ai-mcp/investra-ai-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/perkinsandre-investra-ai-mcp/investra-ai-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/perkinsandre-investra-ai-mcp/investra-ai-mcp
