Skip to main content
Glama

Real Estate MCP Server

by agentic-ops

Real Estate MCP Server

A comprehensive Model Context Protocol (MCP) server for real estate data management. This server provides tools, resources, and prompts for property listings, agent management, market analysis, client relationships, and area intelligence.

🏗️ Architecture

The server is built with a modular, componentized architecture for maintainability and scalability:

real-estate-mcp/ ├── main.py # Main server entry point ├── utils.py # Core data management utilities ├── tools/ # MCP Tools (organized by category) │ ├── property_tools.py # Property search, filtering, insights │ ├── agent_tools.py # Agent profiles, performance, dashboards │ ├── market_tools.py # Market analysis and trends │ ├── client_tools.py # Client management and matching │ ├── area_tools.py # Area intelligence and amenities │ └── system_tools.py # Data management and system tools ├── resources/ # MCP Resources (organized by domain) │ ├── property_resources.py # Property-related resources │ ├── agent_resources.py # Agent-related resources │ ├── market_resources.py # Market analysis resources │ ├── client_resources.py # Client management resources │ └── location_resources.py # Area and amenity resources ├── prompts/ # MCP Prompts (user-controlled templates) │ ├── __init__.py # Central prompt registration │ ├── property_prompts.py # Property analysis and comparison prompts │ ├── client_prompts.py # Client matching and consultation prompts │ ├── market_prompts.py # Market analysis and investment prompts │ └── agent_prompts.py # Agent performance and development prompts └── data/ # Real estate data files ├── properties/ ├── agents/ ├── clients/ ├── market/ ├── transactions/ ├── areas/ └── amenities/

🚀 Features

MCP Capabilities

  • 30+ Tools: Comprehensive real estate operations
  • 10 Resources: 5 static resources + 5 dynamic resource templates
  • 11 Prompts: User-controlled analysis templates across 4 categories
  • SSE Transport: Web-compatible Server-Sent Events endpoint

Tool Categories

🏠 Property Management (7 tools)
  • Search and filter properties by multiple criteria
  • Get property details and comprehensive insights
  • Area-based and agent-based property listings
  • Market context and comparable analysis
👥 Agent Operations (6 tools)
  • Agent profiles and specializations
  • Performance dashboards and metrics
  • Client and property portfolio management
  • Sales tracking and analytics
📊 Market Analysis (7 tools)
  • Market overview and price analytics
  • Area-specific market performance
  • Investment opportunity analysis
  • Comparative area analysis
  • Transaction tracking
🤝 Client Management (3 tools)
  • Client profiles and preferences
  • Property matching algorithms
  • Budget and criteria-based recommendations
🏘️ Area Intelligence (9 tools)
  • Comprehensive area reports
  • Amenities and demographics
  • Schools, parks, shopping, healthcare data
  • City overview and area comparisons
⚙️ System Management (2 tools)
  • Data refresh and cache management
  • System statistics and summaries

Resources

Static Resources
  • realestate://all-properties: Complete property listings
  • realestate://all-agents: Agent directory
  • realestate://market-overview: Current market trends
  • realestate://all-areas: Area information
  • realestate://amenities: Complete amenities database
Dynamic Resource Templates
  • realestate://properties/area/{area}: Area-specific properties
  • realestate://agent/{agent_id}/dashboard: Agent performance dashboard
  • realestate://market/area/{area}: Area market analysis
  • realestate://property/{property_id}/insights: Property insights
  • realestate://client/{client_id}/matches: Client property matches

Prompts (11 total)

Property Prompts (2 prompts)
  • Property Analysis: Comprehensive property evaluation and insights
  • Property Comparison: Side-by-side property comparison analysis
Client Prompts (3 prompts)
  • Client Matching: Personalized property recommendations
  • Client Consultation: Structured consultation framework
  • Client Feedback Analysis: Search strategy refinement
Market Prompts (3 prompts)
  • Market Reports: Comprehensive area market analysis
  • Investment Analysis: ROI and opportunity assessment
  • Comparative Market Analysis: Multi-area comparison
Agent Prompts (3 prompts)
  • Agent Performance: Performance dashboards and analysis
  • Agent Marketing Strategy: Business development and marketing
  • Agent Training Development: Skill enhancement and training plans

📦 Installation

  1. Clone the repository:
    git clone https://github.com/agentic-ops/real-estate-mcp.git cd real-estate-mcp
  2. Install dependencies:
    pip install -r requirements.txt
  3. Run the server:
    python main.py

🔍 MCP Inspector

To inspect and debug your MCP server, you can use the MCP Inspector tool:

npx @modelcontextprotocol/inspector

This will launch the MCP Inspector interface, allowing you to:

  • Monitor MCP messages in real-time
  • Debug tool and resource calls
  • Inspect server responses
  • Test server functionality

🌐 Server Transport

The server uses Server-Sent Events (SSE) transport, making it compatible with:

  • Web browsers and HTTP clients
  • Traditional MCP clients
  • Custom integrations

Connection Details

  • SSE Endpoint: http://127.0.0.1:8000/sse (for establishing SSE connection)
  • Message Endpoint: http://127.0.0.1:8000/messages/ (for posting MCP messages)
  • Transport: SSE (Server-Sent Events)
  • Protocol: MCP (Model Context Protocol)

Web Client Example

// Establish SSE connection const eventSource = new EventSource('http://127.0.0.1:8000/sse'); eventSource.onmessage = function(event) { const mcpMessage = JSON.parse(event.data); // Handle MCP protocol messages }; // Send MCP messages async function sendMCPMessage(message) { const response = await fetch('http://127.0.0.1:8000/messages/', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(message) }); return response.json(); }

🔧 Component Details

Core Components

utils.py - Data Management
  • RealEstateDataManager: Central data access class
  • PropertyFilter: Search and filtering utilities
  • JSON data loading and caching
  • Cross-referencing and relationship mapping
main.py - Server Entry Point
  • FastMCP server initialization
  • Component registration orchestration
  • SSE transport configuration
  • Startup logging and diagnostics

Tool Modules

Each tool module follows a consistent pattern:

def register_[category]_tools(mcp: FastMCP): """Register all [category] tools with the MCP server""" @mcp.tool() def tool_function(parameters) -> str: """Tool description""" # Implementation return json.dumps(result, indent=2)

Resource Modules

Resources are organized by domain for better maintainability:

Property Resources (property_resources.py)
  • Property listings and search results
  • Property insights and market context
  • Area-based property filtering
Agent Resources (agent_resources.py)
  • Agent profiles and directories
  • Performance dashboards and metrics
Market Resources (market_resources.py)
  • Market overview and trends
  • Area-specific market analysis
Client Resources (client_resources.py)
  • Client preference matching
  • Property recommendations
Location Resources (location_resources.py)
  • Area information and demographics
  • Amenities and local services

Each module follows a consistent pattern:

def register_[domain]_resources(mcp: FastMCP): """Register all [domain] resources with the MCP server""" @mcp.resource("realestate://resource-name") def resource_function() -> str: """Resource description""" return json.dumps(data, indent=2)

Prompt Templates

Prompts guide AI analysis:

@mcp.prompt() def analysis_prompt(param: str = "default") -> str: """Analysis prompt description""" return f""" Detailed analysis instructions for {param}... """

📊 Data Structure

The server operates on comprehensive real estate data:

  • 5 Properties: Victorian homes, contemporary, luxury, townhouses
  • 3 Agents: Specialized real estate professionals
  • 6 Clients: Buyers, sellers, investors with preferences
  • Multiple Sales: Recent transaction history
  • 5 Areas: Downtown Riverside, Woodcrest, Canyon Crest, Arlington Heights, La Sierra
  • Amenities: Schools, parks, shopping, healthcare facilities

🔍 Usage Examples

MCP Client Examples

For proper MCP client integration, use the MCP protocol with the correct endpoints:

# Establish SSE connection (listen for server messages) curl -N http://127.0.0.1:8000/sse # Send MCP messages (in a separate terminal) # Search properties curl -X POST http://127.0.0.1:8000/messages/ \ -H "Content-Type: application/json" \ -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "search_properties", "arguments": {"query": "Victorian"}}}' # Filter by criteria curl -X POST http://127.0.0.1:8000/messages/ \ -H "Content-Type: application/json" \ -d '{"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "filter_properties", "arguments": {"min_price": 500000, "max_price": 1000000}}}' # Get market overview curl -X POST http://127.0.0.1:8000/messages/ \ -H "Content-Type: application/json" \ -d '{"jsonrpc": "2.0", "id": 3, "method": "resources/read", "params": {"uri": "realestate://market-overview"}}' # Match client preferences curl -X POST http://127.0.0.1:8000/messages/ \ -H "Content-Type: application/json" \ -d '{"jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": {"name": "match_client_preferences", "arguments": {"client_id": "CLI001"}}}'

🧪 Testing

The project includes a comprehensive test suite covering all components and functionality.

Test Structure

tests/ ├── conftest.py # Pytest configuration and shared fixtures ├── unit/ # Unit tests for core components │ ├── test_utils.py # RealEstateDataManager and PropertyFilter tests │ └── test_*.py # Additional unit tests ├── integration/ # Integration tests for MCP components │ ├── test_property_tools.py # Property tools integration tests │ ├── test_all_tools.py # All other tool categories │ ├── test_resources.py # Static and template resources tests │ └── test_prompts.py # Prompt template tests └── __init__.py

Test Categories

Unit Tests (tests/unit/)
  • Data Manager Tests: Core functionality of RealEstateDataManager
  • Filter Tests: Property filtering logic and edge cases
  • Utility Functions: Helper functions and data validation
Integration Tests (tests/integration/)
  • Property Tools: Search, filter, insights, and area-based queries
  • Agent Tools: Profile management, performance dashboards
  • Market Tools: Market analysis and trend calculations
  • Client Tools: Client matching and preference algorithms
  • Area Tools: Area intelligence and amenities data
  • System Tools: Data refresh and system statistics
  • Resources: Static resources and dynamic templates
  • Prompts: Template generation and parameter handling (11 prompts across 4 categories)

Running Tests

Prerequisites
# Install testing dependencies pip install -r requirements.txt
Quick Test Commands
# Run all tests pytest # Run with coverage report pytest --cov=. --cov-report=html # Run specific test categories pytest tests/unit/ # Unit tests only pytest tests/integration/ # Integration tests only pytest tests/integration/test_property_tools.py # Property tools only
Using the Test Runner Script
# Run all tests python run_tests.py # Run specific test types python run_tests.py unit # Unit tests only python run_tests.py integration # Integration tests only python run_tests.py property # Property tools only python run_tests.py resources # Resource tests only # Run with verbose output and coverage python run_tests.py all -v -c

Test Features

Fixtures and Test Data
  • Isolated Test Environment: Each test uses temporary data directories
  • Mock Data: Consistent test data across all test cases
  • Shared Fixtures: Reusable test components in conftest.py
  • Data Manager Mocking: Isolated testing without file system dependencies
Coverage and Reporting
  • Code Coverage: Comprehensive coverage reporting with pytest-cov
  • HTML Reports: Visual coverage reports in htmlcov/index.html
  • Missing Lines: Identification of uncovered code paths
  • Branch Coverage: Logic branch testing
Test Configuration
  • pytest.ini: Centralized test configuration
  • Automatic Discovery: Tests auto-discovered by naming convention
  • Parallel Execution: Support for parallel test execution
  • Filtering: Warning filters for clean test output

Test Data Validation

The test suite validates:

  • ✅ All 30+ tools function correctly with mock and real data
  • ✅ Property filtering logic handles edge cases
  • ✅ Search functionality is case-insensitive and comprehensive
  • ✅ Agent performance calculations are accurate
  • ✅ Market analysis tools process data correctly
  • ✅ Client matching algorithms work as expected
  • ✅ Area intelligence aggregates data properly
  • ✅ Resource endpoints return valid JSON
  • ✅ Prompt templates generate proper instructions
  • ✅ Error handling for missing or invalid data
  • ✅ Data refresh and caching mechanisms
  • ✅ System statistics and summaries

Continuous Integration

For CI/CD pipelines, use:

# Basic test run pytest tests/ --tb=short # With coverage for CI reporting pytest tests/ --cov=. --cov-report=xml --cov-report=term-missing # Specific test categories for staged testing pytest tests/unit/ --tb=short # Fast unit tests first pytest tests/integration/ --tb=short # Integration tests second

Writing New Tests

When adding new functionality:

  1. Unit Tests: Add to tests/unit/ for core logic
  2. Integration Tests: Add to appropriate tests/integration/test_*.py
  3. Use Fixtures: Leverage existing fixtures in conftest.py
  4. Mock External Dependencies: Use unittest.mock for isolation
  5. Test Edge Cases: Include boundary conditions and error scenarios
  6. Follow Naming Convention: test_*.py files, Test* classes, test_* methods

🛠️ Development

Adding New Tools

  1. Choose appropriate category in tools/
  2. Add tool function with @mcp.tool() decorator
  3. Register in the category's register_*_tools() function
  4. Import and call registration in main.py
  5. Add Tests: Create corresponding tests in tests/integration/

Adding New Resources

  1. Choose appropriate domain module in resources/ (property, agent, market, client, location)
  2. Add resource function with @mcp.resource() decorator and URI pattern
  3. Register in the domain's register_*_resources() function
  4. Import and call registration in main.py
  5. Add Tests: Include resource tests in tests/integration/test_resources.py

Adding New Prompts

  1. Choose appropriate category in prompts/ (property, client, market, or agent)
  2. Add prompt function with @mcp.prompt() decorator
  3. Include parameter defaults and comprehensive instructions
  4. Register in the category's register_*_prompts() function
  5. Add Tests: Include prompt tests in tests/integration/test_prompts.py

Adding New Prompt Categories

  1. Create new file in prompts/ directory (e.g., prompts/new_category_prompts.py)
  2. Follow the existing pattern with register_new_category_prompts(mcp) function
  3. Import and register in prompts/__init__.py
  4. Add Tests: Create corresponding test fixtures and test methods

🔄 Benefits of SSE Transport

  • Web Compatible: Direct browser integration
  • Real-time: Server-sent events for live updates
  • HTTP Standard: Works with standard HTTP tools
  • Firewall Friendly: Uses standard HTTP port
  • Scalable: Supports multiple concurrent connections

📝 License

This project is licensed under the MIT License.

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Add your component following the established patterns
  4. Test thoroughly
  5. Submit a pull request

📖 Further Reading

For a comprehensive deep dive into the architecture, design principles, and real-world applications of this MCP server, read the detailed blog post:

🔌 MCP Servers - Model Context Protocol Implementation

The blog post covers:

  • Understanding MCP Servers and their business impact
  • Architecture deep dive with code examples
  • MCP Tools, Prompts, and Resources explained
  • Real-world usage scenarios and implementation patterns
  • Security considerations and best practices
  • Future implications of MCP technology

Built with the Model Context Protocol (MCP) for seamless AI integration

Related MCP Servers

  • -
    security
    A
    license
    -
    quality
    A server that implements the Model Context Protocol, providing a standardized way to connect AI models to different data sources and tools.
    Last updated -
    2
    8
    TypeScript
    MIT License
  • -
    security
    A
    license
    -
    quality
    A Model Context Protocol server that provides real-time access to Zillow real estate data, enabling property search, detailed information retrieval, Zestimates, market trends analysis, and mortgage calculations.
    Last updated -
    4
    Python
    MIT License
    • Apple
  • -
    security
    A
    license
    -
    quality
    A Model Context Protocol server that provides access to property data, address verification, skip tracing, geocoding, and advanced property search capabilities through BatchData.io's APIs.
    Last updated -
    12
    TypeScript
    MIT License
    • Apple
    • Linux
  • A
    security
    A
    license
    A
    quality
    A comprehensive Model Context Protocol server providing access to 70+ IT tools for developers and system administrators, including encoding/decoding, text manipulation, hashing, and network utilities.
    Last updated -
    76
    545
    6
    TypeScript
    MIT License
    • Linux

View all related MCP servers

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/agentic-ops/real-estate-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server