protogrid

Search / io.github.gabrielkasmi/deeppvmapper

DeepPVMapper

R0· no sign-in

Open registry of 1.14M+ rooftop-solar detections across France, queryable by natural language.

v0.1.0 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality70needs work
Trust97of 100
Uptime, 30 days100%
Latency p50378 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "deeppvmapper": {
      "type": "http",
      "url": "https://zelhliylrlktnasircwp.supabase.co/functions/v1/mcp/mcp"
    }
  }
}
claude mcp add --transport http deeppvmapper https://zelhliylrlktnasircwp.supabase.co/functions/v1/mcp/mcp
[mcp_servers.deeppvmapper]
url = "https://zelhliylrlktnasircwp.supabase.co/functions/v1/mcp/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "deeppvmapper": {
      "type": "remote",
      "url": "https://zelhliylrlktnasircwp.supabase.co/functions/v1/mcp/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "deeppvmapper": {
      "type": "http",
      "url": "https://zelhliylrlktnasircwp.supabase.co/functions/v1/mcp/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=deeppvmapper&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vemVsaGxpeWxybGt0bmFzaXJjd3Auc3VwYWJhc2UuY28vZnVuY3Rpb25zL3YxL21jcC9tY3AifQ%3D%3D"
}
{
  "servers": {
    "deeppvmapper": {
      "type": "http",
      "url": "https://zelhliylrlktnasircwp.supabase.co/functions/v1/mcp/mcp"
    }
  }
}
{
  "mcpServers": {
    "deeppvmapper": {
      "httpUrl": "https://zelhliylrlktnasircwp.supabase.co/functions/v1/mcp/mcp"
    }
  }
}
extensions:
  "deeppvmapper":
    enabled: true
    name: "deeppvmapper"
    type: streamable_http
    uri: "https://zelhliylrlktnasircwp.supabase.co/functions/v1/mcp/mcp"
    timeout: 300

Quality 70 / 100needs work

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-03-26; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene64 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length1 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • fail
    tools.annotationsno tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_department_capacity_stats (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_department_yearly_stats (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_detections_in_bbox (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
  • pass
    tools.token_costabout 7,750 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability75 · weight 15
  • warn
    stability.changes14 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

17 tools, about 7,750 tokens to load them all · tool set 1e86a3ca45aa · tools last changed 2026-10-18 · checked 2026-10-20 11:08 UTC

Tool changes

  • get_startedadded

    START HERE. Call this first when the user is new, asks what this server can do, or asks a vague question about DeepPVMapper. Returns a plain-language introduction, example questions, which tool answers which kind of question, a glossary and the main caveats. Reply to the user in their own language.

  • get_source_referenceadded

    Explain the data sources behind the registry's `sources` field: for each source, its code, short key, name, accepted aliases, and where the data comes from (with references: code, thesis, papers). Use it for questions like "what is FRPV?", "where does the OSM data come from?", "what is a manual correction?". The `sources` field answers "where do we have this installation?": each listed code is a dataset or process that contains it. Example: "0,1" = present in both DeepPVMapper (DPVM) and FRPV; "0,2" = present in DeepPVMapper and OpenStreetMap.

  • get_field_referenceadded

    Field-by-field documentation of a detection record: type, unit, nullability, whether it is observed or a model estimate, how to read it, and which tool filters or reports it. Call this when the user asks what a field means or how reliable it is.

  • get_field_distributionadded

    Histogram of a numeric field (kwp, surface, tilt, azimuth, n_vintages, first_seen, last_seen) with exact counts per bin, for France or one département. Answers "how are installations distributed by size / tilt / orientation / year?". kwp, surface, tilt and azimuth are model estimates. first_seen/last_seen are imagery years, not installation dates. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.

  • get_field_coverageadded

    Completeness report: for each optional field of the registry (rnb_id, frpv_proba, false_positive, false_positive_source), how many detections have it filled in and what percentage. Answers "how many installations have an RNB id / an FRPV comparison / a false-positive flag?" in one call, for France or one département. For a single filtered count use count_detections instead. Null means "not available/recorded", never "0" or "confirmed ok". Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.

  • get_department_profileadded

    One-call profile of a département: installed capacity and national rank, yearly trend (by first-seen imagery year), source mix, share identified by 2+ sources, and share matched to an RNB building id. Cross-references the pre-computed department statistics with live counts. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.

  • get_detection_detailsadded

    Get the full record of one detection by id: technical characteristics (surface, kwp, tilt, azimuth — model estimates), imagery years, sources decoded into plain labels, frpv_proba, false-positive flag, rnb_id and location codes, plus simple confidence signals. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.

  • get_source_breakdownadded

    Break down detections by source code (0=DPVM pipeline, 1=FRPV reference, 2=OSM, 3=manual correction, 4=recall sample), for one département or all of France, with human-readable labels. A detection can carry several sources, so per-source counts overlap and do not add up to the total. Also returns how many detections are identified by 2+ sources (the meaning of quality_filter). Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.

  • count_detectionsadded

    Count detections matching a set of filters, exactly, without downloading rows (fast, no row cap). Use this for "how many ..." questions, e.g. "how many installations have an RNB id?" -> has_rnb_id=true; "how many are identified by 2+ sources?" -> quality_filter=true; "how many come from OpenStreetMap?" -> sources_include=[2]. Returns the matching count, the unfiltered registry total and the percentage. Counts are DETECTED systems, not an inventory. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.

  • get_detections_in_bboxchangeddescription
    before

    Get rooftop-PV detections within a geographic bounding box (WGS84 lon/lat), including footprint geometry. Intended for map-style spatial queries over a small area. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.

    after · 82% of words in common

    Get rooftop-PV detections within a geographic bounding box (WGS84 lon/lat), including footprint geometry. Intended for map-style spatial queries over a small area. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 97 / 100

provenance90
liveness100
freshness100
hygiene100

+repository +namespace-matches-repo +website +reachable +uptime-100% +updated-25d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://zelhliylrlktnasircwp.supabase.co/functions/v1/mcp/mcp streamable-httpnoneyes100%378 ms2025-03-262026-10-20

Tools (17)

aggregate_detection_capacityCompute the total estimated installed capacity (kWp) and count of detections matching a set of filters — département, commune, capacity range, and cross-validation across sources (cross_validated) or imagery vintages (min_vintages) — plus a quality_summary for the summed sample. Unlike get_department_capacity_stats, which is a fixed pre-computed département-wide aggregate with no other filters, this tool sums a live filtered subset, up to max_rows detections. Example: "installed capacity in Gironde confirmed by at least two sources" -> dpt="33", cross_validated=true. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.
count_detectionsCount detections matching a set of filters, exactly, without downloading rows (fast, no row cap). Use this for "how many ..." questions, e.g. "how many installations have an RNB id?" -> has_rnb_id=true; "how many are identified by 2+ sources?" -> quality_filter=true; "how many come from OpenStreetMap?" -> sources_include=[2]. Returns the matching count, the unfiltered registry total and the percentage. Counts are DETECTED systems, not an inventory. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.
get_community_activityGet a snapshot of ongoing community contribution activity on the map: how many corrections are currently pending moderation, their breakdown by action type (add / modify / delete), and the most recent submissions (timestamp, action, target). Submitted free-text comments are intentionally excluded from this tool. This reflects unmoderated, unverified user activity, not the registry itself — do not present it as confirmed detection data.
get_community_activity_in_areaFind pending, unmoderated community contributions relevant to a specific area, to answer "has anyone flagged anything here that is not in the registry yet?" Two independent filters: dpt finds pending edits/deletions (action=modify/delete) targeting existing detections in that département; a full bounding box (min_lon/min_lat/max_lon/max_lat) finds pending new additions (action=add) whose proposed footprint centroid falls inside it. Combine with get_department_capacity_stats / search_detections / get_detections_in_bbox for the confirmed registry picture, and present this separately and clearly as unverified, pending community input — not confirmed detection data. Free-text comments are never included.
get_data_quality_referenceReturn the DeepPVMapper/OpenPVMapper registry's documented data-quality characteristics: estimated detection recall, which fields are model-derived estimates vs. structural/observed fields, the source-encoding table, the recommended confidence threshold, confidence signals, and licensing/liability terms. Call this before advising how much to trust a result for a specific use case (e.g. exploratory research vs. a commercial or regulatory decision) — pair it with the quality_summary attached to search_detections / aggregate_detection_capacity results, which reflects the specific query rather than the registry as a whole.
get_department_capacity_statsGet installed rooftop-PV capacity (total kWp) and system counts for one or all French départements, from the DeepPVMapper/OpenPVMapper registry. This is a fixed, pre-computed department-wide aggregate with no other filters — use aggregate_detection_capacity instead if you need a filtered subset (e.g. only cross-validated detections). Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.
get_department_profileOne-call profile of a département: installed capacity and national rank, yearly trend (by first-seen imagery year), source mix, share identified by 2+ sources, and share matched to an RNB building id. Cross-references the pre-computed department statistics with live counts. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.
get_department_yearly_statsGet yearly system counts and capacity by département, based on first-seen imagery year. Useful for tracking apparent PV deployment growth over time. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.
get_detection_detailsGet the full record of one detection by id: technical characteristics (surface, kwp, tilt, azimuth — model estimates), imagery years, sources decoded into plain labels, frpv_proba, false-positive flag, rnb_id and location codes, plus simple confidence signals. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.
get_detections_in_bboxGet rooftop-PV detections within a geographic bounding box (WGS84 lon/lat), including footprint geometry. Intended for map-style spatial queries over a small area. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.
get_field_coverageCompleteness report: for each optional field of the registry (rnb_id, frpv_proba, false_positive, false_positive_source), how many detections have it filled in and what percentage. Answers "how many installations have an RNB id / an FRPV comparison / a false-positive flag?" in one call, for France or one département. For a single filtered count use count_detections instead. Null means "not available/recorded", never "0" or "confirmed ok". Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.
get_field_distributionHistogram of a numeric field (kwp, surface, tilt, azimuth, n_vintages, first_seen, last_seen) with exact counts per bin, for France or one département. Answers "how are installations distributed by size / tilt / orientation / year?". kwp, surface, tilt and azimuth are model estimates. first_seen/last_seen are imagery years, not installation dates. Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.
get_field_referenceField-by-field documentation of a detection record: type, unit, nullability, whether it is observed or a model estimate, how to read it, and which tool filters or reports it. Call this when the user asks what a field means or how reliable it is.
get_source_breakdownBreak down detections by source code (0=DPVM pipeline, 1=FRPV reference, 2=OSM, 3=manual correction, 4=recall sample), for one département or all of France, with human-readable labels. A detection can carry several sources, so per-source counts overlap and do not add up to the total. Also returns how many detections are identified by 2+ sources (the meaning of quality_filter). Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.
get_source_referenceExplain the data sources behind the registry's `sources` field: for each source, its code, short key, name, accepted aliases, and where the data comes from (with references: code, thesis, papers). Use it for questions like "what is FRPV?", "where does the OSM data come from?", "what is a manual correction?". The `sources` field answers "where do we have this installation?": each listed code is a dataset or process that contains it. Example: "0,1" = present in both DeepPVMapper (DPVM) and FRPV; "0,2" = present in DeepPVMapper and OpenStreetMap.
get_startedSTART HERE. Call this first when the user is new, asks what this server can do, or asks a vague question about DeepPVMapper. Returns a plain-language introduction, example questions, which tool answers which kind of question, a glossary and the main caveats. Reply to the user in their own language.
search_detectionsSearch individual rooftop-PV detections by département, commune (INSEE code), estimated capacity range, and/or cross-validation confidence (min_vintages, cross_validated). Returns a bounded list of detection records plus a quality_summary for the returned sample (use get_detections_in_bbox instead for map/spatial queries with geometry). Data quality note: this is a detection dataset, not an exhaustive inventory (estimated recall ~0.6). A missing detection does not mean no PV installation exists there. kwp, surface, tilt and azimuth are model estimates, not surveyed values. In this server, quality_filter=true keeps only detections identified by 2 or more sources (see source_encoding in get_data_quality_reference). Call get_data_quality_reference for the full picture before assessing fitness for a specific use case.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.github.gabrielkasmi/deeppvmapper",
  "title": "DeepPVMapper",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://zelhliylrlktnasircwp.supabase.co/functions/v1/mcp/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.1.0",
  "repository": {
    "url": "https://github.com/gabrielkasmi/deeppvmapper",
    "source": "github",
    "subfolder": "supabase/functions/mcp"
  },
  "websiteUrl": "https://deeppvmapper.fr",
  "description": "Open registry of 1.14M+ rooftop-solar detections across France, queryable by natural language."
}