Add: Config for tool enable/disable, BETA warnings
Config system: - 10 env vars to enable/disable each tool - Disabled by default: get_deals_by_radius, get_street_deals, get_market_activity_metrics - Enabled by default: all other tools BETA warnings: - analyze_market_trends: added BETA notice - compare_addresses: added BETA notice Tests: - 17 tests skipped when tools disabled - All 311 tests pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -117,6 +117,52 @@ class GovmapConfig:
|
||||
default_factory=lambda: os.getenv("GOVMAP_USER_AGENT", "NadlanMCP/1.0.0")
|
||||
)
|
||||
|
||||
# MCP Tool Availability (enable/disable specific tools)
|
||||
tool_autocomplete_address_enabled: bool = field(
|
||||
default_factory=lambda: os.getenv("TOOL_AUTOCOMPLETE_ADDRESS_ENABLED", "true").lower()
|
||||
== "true"
|
||||
)
|
||||
tool_get_deals_by_radius_enabled: bool = field(
|
||||
default_factory=lambda: os.getenv("TOOL_GET_DEALS_BY_RADIUS_ENABLED", "false").lower()
|
||||
== "true"
|
||||
)
|
||||
tool_get_street_deals_enabled: bool = field(
|
||||
default_factory=lambda: os.getenv("TOOL_GET_STREET_DEALS_ENABLED", "false").lower()
|
||||
== "true"
|
||||
)
|
||||
tool_get_neighborhood_deals_enabled: bool = field(
|
||||
default_factory=lambda: os.getenv("TOOL_GET_NEIGHBORHOOD_DEALS_ENABLED", "true").lower()
|
||||
== "true"
|
||||
)
|
||||
tool_find_recent_deals_for_address_enabled: bool = field(
|
||||
default_factory=lambda: os.getenv(
|
||||
"TOOL_FIND_RECENT_DEALS_FOR_ADDRESS_ENABLED", "true"
|
||||
).lower()
|
||||
== "true"
|
||||
)
|
||||
tool_analyze_market_trends_enabled: bool = field(
|
||||
default_factory=lambda: os.getenv("TOOL_ANALYZE_MARKET_TRENDS_ENABLED", "true").lower()
|
||||
== "true"
|
||||
)
|
||||
tool_compare_addresses_enabled: bool = field(
|
||||
default_factory=lambda: os.getenv("TOOL_COMPARE_ADDRESSES_ENABLED", "true").lower()
|
||||
== "true"
|
||||
)
|
||||
tool_get_valuation_comparables_enabled: bool = field(
|
||||
default_factory=lambda: os.getenv("TOOL_GET_VALUATION_COMPARABLES_ENABLED", "true").lower()
|
||||
== "true"
|
||||
)
|
||||
tool_get_deal_statistics_enabled: bool = field(
|
||||
default_factory=lambda: os.getenv("TOOL_GET_DEAL_STATISTICS_ENABLED", "true").lower()
|
||||
== "true"
|
||||
)
|
||||
tool_get_market_activity_metrics_enabled: bool = field(
|
||||
default_factory=lambda: os.getenv(
|
||||
"TOOL_GET_MARKET_ACTIVITY_METRICS_ENABLED", "false"
|
||||
).lower()
|
||||
== "true"
|
||||
)
|
||||
|
||||
def __post_init__(self):
|
||||
"""Validate configuration after initialization."""
|
||||
self._validate()
|
||||
|
||||
@@ -141,6 +141,9 @@ def get_deals_by_radius(latitude: float, longitude: float, radius_meters: int =
|
||||
Returns:
|
||||
JSON string containing polygon metadata (areas with deals nearby)
|
||||
"""
|
||||
if not get_config().tool_get_deals_by_radius_enabled:
|
||||
return "This tool is currently disabled"
|
||||
|
||||
log_mcp_call(
|
||||
"get_deals_by_radius", latitude=latitude, longitude=longitude, radius_meters=radius_meters
|
||||
)
|
||||
@@ -180,6 +183,9 @@ def get_street_deals(polygon_id: str, limit: int = 100, deal_type: int = 2) -> s
|
||||
Returns:
|
||||
JSON string containing recent real estate deals for the street
|
||||
"""
|
||||
if not get_config().tool_get_street_deals_enabled:
|
||||
return "This tool is currently disabled"
|
||||
|
||||
log_mcp_call("get_street_deals", polygon_id=polygon_id, limit=limit, deal_type=deal_type)
|
||||
try:
|
||||
deals = client.get_street_deals(polygon_id, limit, deal_type=deal_type)
|
||||
@@ -414,6 +420,8 @@ def analyze_market_trends(
|
||||
) -> str:
|
||||
"""Analyze market trends and price patterns for an area with comprehensive data.
|
||||
|
||||
**BETA**: This tool is not well tested or reliable. Use with caution.
|
||||
|
||||
Args:
|
||||
address: The address to analyze trends around
|
||||
years_back: How many years of data to analyze (default: 3)
|
||||
@@ -628,6 +636,8 @@ def analyze_market_trends(
|
||||
def compare_addresses(addresses: List[str]) -> str:
|
||||
"""Compare real estate markets between multiple addresses.
|
||||
|
||||
**BETA**: This tool is not well tested or reliable. Use with caution.
|
||||
|
||||
Args:
|
||||
addresses: List of addresses to compare (in Hebrew or English)
|
||||
|
||||
@@ -1087,6 +1097,9 @@ def get_market_activity_metrics(address: str, years_back: int = 2, radius_meters
|
||||
- Investment potential analysis
|
||||
- Price appreciation and volatility
|
||||
"""
|
||||
if not get_config().tool_get_market_activity_metrics_enabled:
|
||||
return "This tool is currently disabled"
|
||||
|
||||
log_mcp_call(
|
||||
"get_market_activity_metrics",
|
||||
address=address,
|
||||
|
||||
Reference in New Issue
Block a user