Real EstateSAFE
A Model Context Protocol server for real estate workflows — search, valuation, mortgage math, and investment analysis.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
A Model Context Protocol (MCP) server for structured real estate workflows. This real estate MCP server provides tools, resources, and prompts for property search and insights, agent/client management, market and area intelligence, mortgage/affordability math, comparable-based valuation, investment analysis, and listing-document ingestion — all backed by a deterministic, offline-first engine and optional opt-in live data integrations: free sources (Census, Walk Score, FEMA, FRED, FBI Crime Data, EPA, NOAA) and paid/metered sources (RentCast, Zillow).
This server provides workflow augmentation, not financial, legal, or appraisal advice. Always consult qualified professionals for investment and valuation decisions.
- Status: V2.0 — fully implemented and tested (50+ tools across 11 categories).
- Transport: stdio (default), SSE, and streamable-HTTP (via FastMCP).
- Runtime: Python 3.10+ and the official
mcpSDK.
Contents
- Data flow & privacy boundaries
- ⚠️ RentCast metered API (read first)
- Repository structure
- 🚀 Quick start
- 🧰 Capabilities
- Feature flags (tool categories)
- 🔌 Live integrations
- 🐳 Docker
- 🧪 Testing, linting & types
- 🛠️ Development
- 📖 Further reading
- Integration & development support
- License
Data flow & privacy boundaries
Understanding where data goes before connecting this server to an AI assistant or enabling live integrations:
flowchart LR user[User] aiClient[AI Assistant] inference[Inference Provider] mcpServer[Real Estate MCP Server] localD
dcd33a12588bOBSERVED · 2026-10-08Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add real-estate-mcp -- uvx real-estate-mcp
{
"mcpServers": {
"real-estate-mcp": {
"command": "uvx",
"args": [
"real-estate-mcp"
]
}
}
}Exposed tools (61)
59 read · 2 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
analyze_investment | read | Compute buy-and-hold investment metrics for a property. |
analyze_listing_investment | write | Run investment analysis on an existing listing using its list price. |
calculate_mortgage_payment | read | Calculate the monthly principal & interest payment for a loan. |
comparable_market_analysis | read | Summarize comparable sales for an area (avg price, price/sqft, DOM). |
compare_areas | read | Compare market data across multiple areas (comma-separated list) |
compare_listing_documents | read | Extract fields from two listing documents and compare them. |
compare_refinance | read | Compare a current loan to a refinance at a new rate. |
deep_analyze_property | read | Analyze a property with data heuristics, then ask the client |
estimate_affordability_tool | read | Estimate the maximum affordable purchase price from income and DTI. |
estimate_property_value | read | Estimate a property |
export_property_report | read | Generate a ``.docx`` property report from a JSON report object. |
filter_properties | read | Filter properties by criteria. Areas and property_types should be comma-separated strings. |
get_agent_clients | read | Get all clients for a specific agent |
get_agent_dashboard | read | Get comprehensive dashboard for an agent including performance metrics |
get_agent_details | read | Get detailed information about a specific agent by ID |
get_agent_properties | read | Get all properties handled by a specific agent |
get_agent_sales | read | Get recent sales by a specific agent |
get_all_agents | read | Get all real estate agent profiles |
get_all_areas | read | Get information about all areas in the city |
get_all_clients | read | Get all client information |
get_all_properties | read | Get all active property listings |
get_amortization_schedule | write | Return an amortization schedule (first ``max_rows`` months by default). |
get_analysis_result | read | Retrieve the completed analysis result for a queued job. |
get_analysis_status | read | Check the status of a queued analysis job (queued/complete/error). |
get_area_amenities | read | Get amenities (schools, parks, shopping) for a specific area |
get_area_details | read | Get detailed information about a specific area |
get_area_market_data | read | Get market performance data for a specific area |
get_city_overview | read | Get overall city information and demographics |
get_client_details | read | Get detailed information about a specific client by ID |
get_comprehensive_area_report | read | Get a comprehensive report for an area including properties, market data, and amenities |
get_data_summary | read | Get summary statistics of all data in the system |
get_healthcare_facilities | read | Get healthcare facilities and medical services |
get_investment_opportunities | read | Get investment opportunities and rental market data |
get_live_crime_summary | read | Fetch live FBI crime statistics for a state when enabled. |
get_live_demographics | read | Fetch live Census demographics for a state FIPS code when enabled. |
get_live_environmental_hazards | read | Fetch live EPA-reported environmental hazards for a state. |
get_live_flood_zone | read | Fetch the live FEMA flood hazard zone for a coordinate when enabled. |
get_live_mortgage_rate | read | Fetch the latest weekly Freddie Mac 30-year mortgage rate (FRED). |
get_live_walk_score | read | Fetch live Walk/Transit/Bike Score for a location when enabled. |
get_live_weather_forecast | read | Fetch the live NOAA/NWS weather forecast for a coordinate. |
get_market_overview | read | Get overall market overview and trends |
get_parks_and_recreation | read | Get parks and recreation facilities information |
get_price_analytics | read | Get comprehensive price analytics and market data |
get_properties_by_area | read | Get all properties in a specific area |
get_property_details | read | Get detailed information about a specific property by ID |
get_property_insights | read | Get comprehensive insights for a property including market context and comparables |
get_recent_sales | read | Get all recent sales transactions |
get_sales_by_area | read | Get recent sales in a specific area |
get_schools_data | read | Get all schools information including ratings and programs |
get_server_info | read | Get server version, data statistics, and enabled tool categories. |
get_shopping_amenities | read | Get shopping centers and retail information |
ingest_listing_document | read | Read a ``.docx``/``.txt`` listing sheet and extract property fields. |
integration_status | read | Report which live integrations are enabled/configured. |
list_analysis_jobs | read | List all queued analysis jobs with their statuses and timestamps. |
lookup_live_property | read | Look up live property records via RentCast when enabled. |
lookup_live_zestimate | read | Look up a live Zillow-style valuation (Zestimate) when enabled. |
match_client_preferences | read | Match properties to a client |
queue_property_analysis | read | Queue a listing document for analysis. Returns a job ID immediately. |
refresh_data | read | Refresh all cached data from files |
search_agents | read | Search agents by name, specialization, or expertise area |
search_properties | read | Search properties by text query (address, description, features, etc.) |
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- declared (5 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (7)
streamable-http
.flake8
with Transport = SSE, URL = `http://127.0.0.1:8000/sse`.
python main.py --transport sse # SSE on http://127.0.0.1:8000/sse
# In the Inspector: Transport = SSE, URL = http://127.0.0.1:8000/sse
mcp, pydantic, httpx, python-docx, pytest, pytest-asyncio, pytest-cov, pytest-mock
All flags also read from environment variables: `MCP_TRANSPORT`, `HOST`,
Gates applied: no_behavioural_pass.
dcd33a12588bfull audit observations/trust-audit/mcp-server/agentic-ops__real-estate.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-08 | dcd33a12588b | SAFE | B | 89 | first audit |
Questions
What is the Real Estate MCP server?
A Model Context Protocol server for real estate workflows — search, valuation, mortgage math, and investment analysis.
What tools does Real Estate expose?
61 in total: 59 read-only, 2 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is Real Estate safe to connect to an agent?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.
What credentials does Real Estate need?
No credential environment variables were found in its source, so it appears to need none.
How does Real Estate run?
It speaks streamable-http, so it runs as a service you connect to over the network. It is published on PyPI as real-estate-mcp.
How current is this page?
The grade is for one exact copy of the source (dcd33a12588b), read on 2026-10-08. The repository is watched and re-audited when it changes.