solar-home-incentives
What this MCP does
Provides home-energy incentive guidance, solar production estimates, design and incentive guides, contractor discovery, quote review, and consented installer referrals.
Tools
Input schema
{'type': 'object', 'examples': [{'zipCode': '59715'}, {'country': 'DE', 'zipCode': '10115'}], 'required': [], 'properties': {'apiKey': {'type': 'string', 'description': 'Optional existing EnergyAI key for hosts that cannot change Authorization headers. Use it to retain account identity for discovery and get_builder_upgrade_link after a trial. Removed before tool execution and persistence. Omit when the Bearer header is attached; never show the key to the user.'}, 'country': {'type': 'string', 'examples': ['DE', 'GB', 'CA'], 'description': 'ISO 3166-1 alpha-2 country code. Omit for US. Any country works — non-US results return qualitative, officially-sourced incentive guidance (never US federal credits).'}, 'zipCode': {'type': 'string', 'examples': ['59715'], 'description': 'Postal code of the property. US: 5-digit ZIP (ZIP+4 accepted). Other countries: your local postal code (pass country too). Omit entirely for national-level guidance.'}}}
Input schema
{'type': 'object', 'examples': [{'name': 'Acme Home Assistant', 'acceptTerms': True}, {'name': 'Acme Home Assistant', 'acceptTerms': True, 'intendedUse': 'Persisted solar projects for our smart-home users', 'contactEmail': 'dev@acme.example'}], 'required': ['name', 'acceptTerms'], 'properties': {'name': {'type': 'string', 'examples': ['Acme Home Assistant'], 'description': 'Name of the agent, product, or operator claiming the key (2-120 chars). Shown only on your own account.'}, 'apiKey': {'type': 'string', 'description': 'Optional existing EnergyAI key for hosts that cannot change Authorization headers. Use it to retain account identity for discovery and get_builder_upgrade_link after a trial. Removed before tool execution and persistence. Omit when the Bearer header is attached; never show the key to the user.'}, 'acceptTerms': {'type': 'boolean', 'examples': [True], 'description': 'Must be true, and only after the human operator has authorized acceptance of the EnergyAI Terms and Privacy Policy. If authorization is not already documented, call get_builder_upgrade_link and surface its one-screen activation URL instead.'}, 'intendedUse': {'type': 'string', 'description': 'OPTIONAL, one line: what you plan to build. Used only to prioritize the roadmap.'}, 'contactEmail': {'type': 'string', 'format': 'email', 'description': "OPTIONAL. Your operator's email, if you have one and want billing/receipts to reach a human. Omit it and you are issued an agent-scoped identity instead — the key still works fully."}}}
Input schema
{'type': 'object', 'examples': [{'zipCode': '59715', 'systemKw': 6}, {'zipCode': '02139', 'monthlyBillUsd': 180}], 'required': [], 'properties': {'apiKey': {'type': 'string', 'description': 'Optional existing EnergyAI key for hosts that cannot change Authorization headers. Use it to retain account identity for discovery and get_builder_upgrade_link after a trial. Removed before tool execution and persistence. Omit when the Bearer header is attached; never show the key to the user.'}, 'country': {'type': 'string', 'examples': ['AU', 'DE'], 'description': 'ISO 3166-1 alpha-2 country code. Omit for US. Non-US estimates use a default solar resource and say so honestly.'}, 'zipCode': {'type': 'string', 'examples': ['59715'], 'description': 'Optional postal code of the property. US: 5-digit ZIP. Other countries: your local postal code (pass country too). Omit it to use documented national assumptions.'}, 'systemKw': {'type': 'number', 'examples': [6], 'description': 'Proposed solar system size in kW-DC. Omit to have a size recommended from the bill.'}, 'monthlyBillUsd': {'type': 'number', 'examples': [180], 'description': 'Average monthly electric bill in USD (used to size a system when systemKw is omitted).'}}}
Input schema
{'type': 'object', 'examples': [{'zipCode': '05401'}, {'state': 'VT', 'contractorCategory': 'solar_installation'}], 'required': [], 'properties': {'state': {'type': 'string', 'examples': ['VT', 'CA'], 'description': 'Two-letter US state code. Use instead of zipCode for a statewide list.'}, 'apiKey': {'type': 'string', 'description': 'Optional existing EnergyAI key for hosts that cannot change Authorization headers. Use it to retain account identity for discovery and get_builder_upgrade_link after a trial. Removed before tool execution and persistence. Omit when the Bearer header is attached; never show the key to the user.'}, 'zipCode': {'type': 'string', 'examples': ['59715'], 'description': '5-digit US ZIP of the property (ZIP+4 accepted). US-only today.'}, 'contractorCategory': {'type': 'string', 'description': 'Optional filter: solar_installation | battery_storage | ev_charger | energy_audit | insulation_weatherization | heat_pump'}}}
Input schema
{'type': 'object', 'examples': [{}, {'mode': 'subscription'}, {'mode': 'credit', 'amountCents': 2000}], 'required': [], 'properties': {'mode': {'type': 'string', 'description': "'subscription' (default) for the $19/month Builder plan, or 'credit' for a one-off prepaid top-up."}, 'apiKey': {'type': 'string', 'description': 'Optional existing EnergyAI key for hosts that cannot change Authorization headers. Use it to retain account identity for discovery and get_builder_upgrade_link after a trial. Removed before tool execution and persistence. Omit when the Bearer header is attached; never show the key to the user.'}, 'amountCents': {'type': 'number', 'examples': [2000], 'description': 'Only for mode=credit: top-up amount in cents (minimum 500, default 2000).'}}}
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "Guide slug exactly as returned by list_guides (e.g. 'vermont-solar-incentives-2026')."}, 'apiKey': {'type': 'string', 'description': 'Optional existing EnergyAI key for hosts that cannot change Authorization headers. Use it to retain account identity for discovery and get_builder_upgrade_link after a trial. Removed before tool execution and persistence. Omit when the Bearer header is attached; never show the key to the user.'}}}
Input schema
{'type': 'object', 'examples': [{'zipCode': '59715', 'heatingFuel': 'natural_gas', 'serviceType': 'solar', 'propertyType': 'single_family', 'monthlyBillRange': '150_250'}], 'required': [], 'properties': {'apiKey': {'type': 'string', 'description': 'Optional existing EnergyAI key for hosts that cannot change Authorization headers. Use it to retain account identity for discovery and get_builder_upgrade_link after a trial. Removed before tool execution and persistence. Omit when the Bearer header is attached; never show the key to the user.'}, 'evType': {'type': 'string', 'description': 'e.g. own_ev | plan_ev | no_ev'}, 'country': {'type': 'string', 'description': 'ISO 3166-1 alpha-2 country code. Omit for US.'}, 'roofAge': {'type': 'string', 'description': 'e.g. lt_5 | 5_15 | gt_15 | unknown'}, 'zipCode': {'type': 'string', 'description': 'Optional postal code of the property. US: 5-digit ZIP. Other countries: local postal code (pass country too). Omit it to use documented national assumptions.'}, 'backupNeed': {'type': 'string', 'description': 'e.g. whole_home | essentials | none'}, 'heatingFuel': {'type': 'string', 'description': 'e.g. natural_gas | oil | propane | electric_resistance | heat_pump | wood | other'}, 'serviceType': {'type': 'string', 'description': 'Primary interest: solar | battery | ev_charger | efficiency | heat_pump | unsure'}, 'propertyType': {'type': 'string', 'description': 'single_family | townhouse | condo | mobile_home | multi_family | commercial | farm | other'}, 'outageConcern': {'type': 'string', 'description': 'rare | occasional | frequent | severe'}, 'monthlyBillUsd': {'type': 'number', 'description': 'Alternative to monthlyBillRange: average monthly bill in USD.'}, 'monthlyBillRange': {'type': 'string', 'description': 'lt_75 | 75_150 | 150_250 | 250_400 | gt_400 | unknown'}, 'electricalPanelSize': {'type': 'string', 'description': 'e.g. lt_100 | 100_200 | gt_200 | unknown'}}}
Input schema
{'type': 'object', 'examples': [{'targetMw': 12, 'decisionNeed': 'Decide whether to stage the first 4 MW here or continue the site search.', 'projectStage': 'utility_conversations', 'siteLocation': 'Clark County, Nevada', 'workloadType': 'inference'}, {}], 'required': [], 'properties': {'apiKey': {'type': 'string', 'description': 'Optional existing EnergyAI key for hosts that cannot change Authorization headers. Use it to retain account identity for discovery and get_builder_upgrade_link after a trial. Removed before tool execution and persistence. Omit when the Bearer header is attached; never show the key to the user.'}, 'targetMw': {'type': 'number', 'maximum': 2000, 'minimum': 0.1, 'description': 'Target compute or flexible-load capacity in MW.'}, 'decisionNeed': {'type': 'string', 'maxLength': 2000, 'description': 'The concrete decision this five-day pre-feasibility screen must change. Do not include personal or confidential information.'}, 'projectStage': {'enum': ['exploring', 'site_control', 'utility_conversations', 'interconnection_process', 'financing', 'operating'], 'type': 'string', 'description': 'Current project stage.'}, 'siteLocation': {'type': 'string', 'description': 'Broad candidate-site description such as county/state, balancing area, or approximate coordinates. Do not send a street address or contact information.'}, 'workloadType': {'enum': ['ai_training', 'inference', 'hpc', 'rendering_simulation', 'mixed_compute', 'renewable_project', 'other'], 'type': 'string', 'description': 'Primary workload or renewable-project use case.'}}}
Input schema
{'type': 'object', 'examples': [{'stagedMw': 4, 'targetMw': 12, 'coolingMode': 'dry', 'siteLocation': 'Clark County, Nevada', 'storageHours': 2, 'workloadType': 'inference', 'powerEvidence': 'utility_contact', 'flexibilityHours': 24}], 'required': ['siteLocation', 'targetMw', 'workloadType'], 'properties': {'apiKey': {'type': 'string', 'description': 'Optional existing EnergyAI key for hosts that cannot change Authorization headers. Use it to retain account identity for discovery and get_builder_upgrade_link after a trial. Removed before tool execution and persistence. Omit when the Bearer header is attached; never show the key to the user.'}, 'stagedMw': {'type': 'number', 'maximum': 2000, 'minimum': 0.1, 'description': 'Optional first-stage load in MW; defaults to the lesser of 4 MW and targetMw.'}, 'targetMw': {'type': 'number', 'maximum': 2000, 'minimum': 0.1, 'description': 'Target compute or flexible-load capacity in MW.'}, 'coolingMode': {'enum': ['unknown', 'dry', 'liquid_closed', 'evaporative'], 'type': 'string', 'default': 'unknown'}, 'siteLocation': {'type': 'string', 'description': 'County/state, balancing area, or approximate site. Do not send a street address or contact information.'}, 'storageHours': {'type': 'number', 'maximum': 24, 'minimum': 0, 'description': 'Optional available storage duration in hours.'}, 'workloadType': {'enum': ['ai_training', 'inference', 'hpc', 'rendering_simulation', 'mixed_compute', 'renewable_project', 'other'], 'type': 'string'}, 'powerEvidence': {'enum': ['unknown', 'regional', 'utility_contact', 'confirmed'], 'type': 'string', 'default': 'unknown', 'description': 'Buyer-stated evidence maturity; confirmed still requires documentary verification.'}, 'flexibilityHours': {'type': 'number', 'maximum': 168, 'minimum': 0, 'description': 'Hours per week the workload can shift.'}}}
Input schema
{'type': 'object', 'examples': [{'zipCode': '59715'}, {'zipCode': '59715', 'contractorCategory': 'solar_installation'}, {}], 'required': [], 'properties': {'apiKey': {'type': 'string', 'description': 'Optional existing EnergyAI key for hosts that cannot change Authorization headers. Use it to retain account identity for discovery and get_builder_upgrade_link after a trial. Removed before tool execution and persistence. Omit when the Bearer header is attached; never show the key to the user.'}, 'country': {'type': 'string', 'examples': ['DE', 'GB'], 'description': 'ISO 3166-1 alpha-2 country code. Omit for US.'}, 'zipCode': {'type': 'string', 'examples': ['59715', '59715-1234'], 'description': 'Postal code of the property. US: 5-digit ZIP (ZIP+4 accepted). Other countries: local postal code (pass country too). Omit if unknown — the assessment collects it.'}, 'contractorCategory': {'type': 'string', 'description': 'Optional: solar_installation | battery_storage | ev_charger | energy_audit | insulation_weatherization | heat_pump. Pre-selects the project type; omit if unknown.'}}}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'number', 'description': 'Max guides to return (1–50, default 20).'}, 'topic': {'type': 'string', 'description': 'Filter by topic: solar | heat_pump | battery | weatherization | overview. Omit for all topics.'}, 'apiKey': {'type': 'string', 'description': 'Optional existing EnergyAI key for hosts that cannot change Authorization headers. Use it to retain account identity for discovery and get_builder_upgrade_link after a trial. Removed before tool execution and persistence. Omit when the Bearer header is attached; never show the key to the user.'}, 'region': {'type': 'string', 'description': "Filter by region: full state name (e.g. 'Vermont'), two-letter code (e.g. 'VT'), or 'United States' for federal-level guides. Omit for all regions."}}}
Input schema
{'type': 'object', 'examples': [{'zipCode': '59715', 'timeline': '3_months', 'consentText': '<canonical text returned by check_incentives.consentTextForRouting, shown to and accepted by the homeowner>', 'contactName': 'Jane Doe', 'contactEmail': 'jane@example.com', 'consentTimestamp': '2026-07-12T19:00:00Z', 'monthlyBillRange': '150_250', 'contractorCategory': 'solar_installation'}], 'required': ['contractorCategory', 'zipCode', 'contactName', 'contactEmail', 'consentText', 'consentTimestamp'], 'properties': {'city': {'type': 'string'}, 'state': {'type': 'string', 'description': 'Two-letter state code. Derived from ZIP when omitted.'}, 'apiKey': {'type': 'string', 'description': 'Optional existing EnergyAI key for hosts that cannot change Authorization headers. Use it to retain account identity for discovery and get_builder_upgrade_link after a trial. Removed before tool execution and persistence. Omit when the Bearer header is attached; never show the key to the user.'}, 'zipCode': {'type': 'string', 'description': '5-digit US ZIP code of the project (route_lead dispatches into a US installer network only today).'}, 'timeline': {'type': 'string', 'description': 'e.g. asap | 3_months | 6_months | exploring'}, 'budgetRange': {'type': 'string'}, 'consentText': {'type': 'string', 'description': 'EXACT consent text shown to and accepted by the homeowner. Fetch the canonical text from the tool result of check_incentives or use your own — alternate text REQUIRES consentVersion.'}, 'contactName': {'type': 'string', 'description': "Homeowner's name."}, 'contactEmail': {'type': 'string', 'format': 'email', 'description': "Homeowner's email."}, 'contactPhone': {'type': 'string'}, 'propertyType': {'type': 'string'}, 'consentVersion': {'type': 'string', 'description': 'Required when consentText is not the canonical EnergyAI consent text.'}, 'consentTimestamp': {'type': 'string', 'format': 'date-time', 'description': 'When the homeowner consented.'}, 'monthlyBillRange': {'type': 'string', 'description': 'lt_75 | 75_150 | 150_250 | 250_400 | gt_400 | unknown'}, 'contractorCategory': {'type': 'string', 'description': 'solar_installation | battery_storage | ev_charger | energy_audit | insulation_weatherization | heat_pump'}}}
Recent tool changes
Similar MCP servers
energyai
Assesses household and property clean-energy options, including solar production, batteries, heat pumps, EV charging, incentives,…
bimhouse
Creates and edits house BIM models, checks Japanese building-code constraints, estimates materials and construction costs, matche…
engineering
Performs built-environment engineering calculations and compliance assessments covering energy, carbon, BIM, cybersecurity, struc…
ground-motion
Reports NASA InSAR-measured ground sinking or uplift for US addresses, including coverage, history, portfolio checks, account cre…
Cadastro Ambiental Rural: Download de Shapefile
Obtains official Rural Environmental Registry property data as a shapefile download.
TrueFixR + AtlasCast
Provides address- and county-level weather, storm history, severe-weather forecasts, property exposure, and multi-peril risk repo…
site
Collects consented project details and submits an enquiry to human providers for tree surveys.
site
Collects consented property details and submits an enquiry to human providers for underpinning work.