Skip to main content
Glama

Real Estate MCP Server

by agentic-ops
README.md18 kB
# 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**: ```bash git clone https://github.com/agentic-ops/real-estate-mcp.git cd real-estate-mcp ``` 2. **Install dependencies**: ```bash pip install -r requirements.txt ``` 3. **Run the server**: ```bash python main.py ``` ## 🔍 MCP Inspector To inspect and debug your MCP server, you can use the MCP Inspector tool: ```bash 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 ```javascript // 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: ```python 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: ```python 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: ```python @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: ```bash # 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 ```bash # Install testing dependencies pip install -r requirements.txt ``` #### Quick Test Commands ```bash # 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 ```bash # 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: ```bash # 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](https://edwin.genego.io/ai/mcp-servers)** 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*

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