well-data-mcp
Queries live oil & gas and geothermal well data from state regulator ArcGIS REST services, enabling well searches by operator/name/county/field/status/type, retrieval by API number, radius searches, operator lists, and raw SQL-92 queries against source layers.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@well-data-mcpfind producing wells in Kern County, CA"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
well-data-mcp
MCP server for oil & gas and geothermal well data worldwide, pulled live from the public services of state, provincial and national regulators and geological surveys. No API keys, no accounts, no scraping of pages meant for people: these are the same ArcGIS, WFS and query endpoints the agencies' own map viewers use.
It answers questions like "which wells does Fervo have at Cape Station", "every well within 2 km of this pad", "look up API 30-025-36283", "Equinor's wellbores on the Norwegian shelf" or "geothermal wells in the Netherlands" - and says plainly when a country publishes nothing machine-readable.
Coverage
United States
Key | Coverage | Agency | Via |
| California oil & gas wells | CalGEM (WellSTAR) | ArcGIS |
| California geothermal wells | CalGEM (WellSTAR) | ArcGIS |
| Utah oil & gas wells | Utah Division of Oil, Gas & Mining (DOGM) | ArcGIS |
| Utah deep geothermal wells (incl. Fervo Cape Station, Utah FORGE) | Utah Division of Water Rights (DWRi) | ArcGIS |
| Utah drilled-well logs (every well drilled under a water-rights approval, incl. geothermal) | Utah Division of Water Rights (DWRi) | ArcGIS |
| Utah thermal wells and springs (temperature + water chemistry) | Utah Geological Survey (UGS) | ArcGIS |
| New Mexico oil & gas wells | NM OCD (EMNRD) | ArcGIS |
| Colorado wells (API spots) | Colorado ECMC (via DNR GIS) | ArcGIS |
| Wyoming oil & gas wells (WOGCC database snapshot) | Wyoming State Geological Survey (copy of the WOGCC well database) | ArcGIS |
| Wyoming wells - live WOGCC list (name, status, type) | Wyoming Oil and Gas Conservation Commission (WOGCC) Data Explorer | WFS |
| Montana oil & gas wells | Montana Board of Oil & Gas Conservation (DNRC) | ArcGIS |
| Idaho oil & gas wells | Idaho Geological Survey | ArcGIS |
| Idaho geothermal wells (low-temperature use, with water temperatures) | Idaho Department of Water Resources (IDWR) | ArcGIS |
| Oregon geothermal wells and temperature-gradient holes (incl. Newberry) | Oregon DOGAMI (GTILO-2 compilation) | ArcGIS |
| Washington oil & gas wells | Washington DNR (Geology) | ArcGIS |
| Washington geothermal well permits | Washington DNR (Geology) | ArcGIS |
| Arizona oil, gas, helium & geothermal wells | Arizona Oil & Gas Conservation Commission (hosted by ADEQ) | ArcGIS |
| Nevada geothermal wells | NBMG (UNR) / NGDS | ArcGIS |
| Nevada oil & gas wells (compiled through 2013) | NBMG (UNR) | ArcGIS |
| Alaska oil, gas & geothermal wells (incl. state offshore) | Alaska Oil and Gas Conservation Commission (via Alaska Division of Oil & Gas) | ArcGIS |
| Hawaii geothermal wells (Puna) | Hawaii Statewide GIS Program | ArcGIS |
| South Dakota oil & gas wells | South Dakota Geological Survey / DANR | ArcGIS |
| North Dakota oil & gas wells | ND DMR Oil & Gas Division | ArcGIS |
| Texas well locations (location + API only) | Texas RRC public GIS | ArcGIS |
| Texas wellbores with operator, lease, field and county | Texas Railroad Commission (EWA wellbore query) | RRC query |
| Oklahoma oil, gas & injection wells | Oklahoma Corporation Commission (RBDMS) | ArcGIS |
| Kansas oil & gas wells | Kansas Geological Survey (KCC well data) | ArcGIS |
| Nebraska oil & gas wells (API, name, location) | Nebraska Oil & Gas Conservation Commission | WFS |
| Missouri oil & gas wells | Missouri DNR / Missouri Geological Survey | ArcGIS |
| Arkansas oil & gas wells | Arkansas Oil and Gas Commission (via Arkansas GIS Office) | ArcGIS |
| Louisiana oil & gas wells (incl. state waters) | Louisiana DENR Office of Conservation (SONRIS) | ArcGIS |
| Mississippi oil & gas wells | Mississippi State Oil & Gas Board | WFS |
| Alabama oil, gas & coalbed-methane wells | State Oil and Gas Board of Alabama (via Geological Survey of Alabama) | ArcGIS |
| Pennsylvania oil & gas wells | Pennsylvania DEP Office of Oil and Gas Management | ArcGIS |
| Ohio oil & gas wells | Ohio DNR Division of Oil & Gas Resources | ArcGIS |
| West Virginia oil & gas wells | West Virginia DEP Office of Oil and Gas | ArcGIS |
| Kentucky oil & gas wells | Kentucky Geological Survey | ArcGIS |
| Illinois oil & gas wells | Illinois State Geological Survey (ILOIL) | ArcGIS |
| Indiana oil & gas wells | Indiana DNR Division of Oil & Gas | ArcGIS |
| Michigan oil, gas & mineral wells | Michigan EGLE (Oil, Gas, and Minerals Division) | ArcGIS |
| New York oil, gas & solution-mining wells | New York DEC Division of Mineral Resources | ArcGIS |
| Tennessee oil & gas wells | Tennessee Department of Environment and Conservation (TDEC) | ArcGIS |
| Virginia gas & oil wells (active) | Virginia Energy, Division of Gas and Oil | ArcGIS |
US federal offshore
Key | Coverage | Agency | Via |
| US Gulf federal offshore wells (Outer Continental Shelf) | BOEM / BSEE (federal offshore) | ArcGIS |
| US Pacific federal offshore wells (Outer Continental Shelf) | BOEM / BSEE (federal offshore) | ArcGIS |
| US Alaska federal offshore wells (Outer Continental Shelf) | BOEM / BSEE (federal offshore) | ArcGIS |
| US Atlantic federal offshore wells (Outer Continental Shelf) | BOEM / BSEE (federal offshore) | ArcGIS |
Canada
Key | Coverage | Agency | Via |
| Saskatchewan oil & gas wells (vertical) | Saskatchewan Ministry of Energy and Resources | ArcGIS |
| Saskatchewan oil & gas wells (horizontal / directional) | Saskatchewan Ministry of Energy and Resources | ArcGIS |
| British Columbia oil & gas wells | BC Energy Regulator (BCER) | ArcGIS |
| Ontario oil, gas, salt & storage wells (incl. Lake Erie) | Ontario Ministry of Natural Resources (Land Information Ontario) | ArcGIS |
| Newfoundland & Labrador offshore wells | Newfoundland and Labrador Department of Industry, Energy and Technology | ArcGIS |
| Nova Scotia offshore wells | Canada-Nova Scotia Offshore Energy Board directory (via NRCan) | ArcGIS |
| Northwest Territories oil & gas wells | NWT Office of the Regulator of Oil and Gas Operations (OROGO) | ArcGIS |
| Yukon oil & gas wells | Government of Yukon (Oil and Gas Resources Branch) | ArcGIS |
| Yukon geothermal boreholes (temperature, gradient, heat flow) | Yukon Geological Survey | ArcGIS |
Latin America & Caribbean
Key | Coverage | Agency | Via |
| Belize exploration & production wells (onshore and offshore) | Government of Belize - petroleum data coverage map (Geology & Petroleum Department data) | ArcGIS |
| Mexico oil & gas wells (onshore and offshore) | CNH well inventory as re-hosted by SEMARNAT | ArcGIS |
| Colombia oil & gas wells | Servicio Geológico Colombiano (EPIS) | ArcGIS |
| Brazil oil & gas wells (onshore and offshore, incl. pre-salt) | ANP - Agência Nacional do Petróleo, Gás Natural e Biocombustíveis | WFS |
| Peru oil & gas wells | PERUPETRO | WFS |
| Argentina oil & gas wells - conventional | Secretaría de Energía de la Nación (Argentina) | WFS (FES) |
| Argentina oil & gas wells - shale (Vaca Muerta...) | Secretaría de Energía de la Nación (Argentina) | WFS (FES) |
| Argentina oil & gas wells - tight | Secretaría de Energía de la Nación (Argentina) | WFS (FES) |
| Argentina oil & gas wells - resource type not reported | Secretaría de Energía de la Nación (Argentina) | WFS (FES) |
Europe
Key | Coverage | Agency | Via |
| France boreholes incl. overseas departments (Guadeloupe/Bouillante, Martinique, Réunion...) | BRGM - Banque du Sous-Sol (BSS) | WFS (FES) |
| Norway offshore wellbores (all: exploration, development, other) | Sodir - Norwegian Offshore Directorate (FactMaps) | ArcGIS |
| UK offshore wellbores (UKCS) | North Sea Transition Authority (NSTA) | ArcGIS |
| England onshore petroleum wells | North Sea Transition Authority (NSTA) | ArcGIS |
| Great Britain borehole index (all onshore drilling, incl. deep geothermal) | British Geological Survey (Single Onshore Borehole Index) | ArcGIS |
| Netherlands deep boreholes (oil, gas, geothermal, salt, storage; onshore and offshore) | TNO / NLOG (Dutch Oil and Gas Portal) | WFS |
| Iceland borehole registry (geothermal production, reinjection, gradient wells...) | Orkustofnun (National Energy Authority) via the national geoportal | WFS |
| Germany deep wells (hydrocarbon, storage, salt, geothermal) - North German Basin, North Sea, Upper Rhine | LBEG - Landesamt für Bergbau, Energie und Geologie (NIBIS) | WFS (FES) |
| Poland borehole database (all purposes, incl. geothermal) | Polish Geological Institute (PGI-PIB, CBDG) | ArcGIS |
| Ireland offshore petroleum wells | Petroleum Affairs Division (Department of the Environment, Climate and Communications) | ArcGIS |
| Ireland onshore petroleum wells | Petroleum Affairs Division (Department of the Environment, Climate and Communications) | ArcGIS |
| Denmark released exploration wells (onshore and offshore) | GEUS - Geological Survey of Denmark and Greenland (Samba) | WFS (FES) |
| Pan-European deep boreholes with bottom-hole temperatures (25 national surveys) | Geological Service for Europe (GSEU) via EGDI | WFS (FES) |
Africa & Asia
Key | Coverage | Agency | Via |
| Indonesia oil & gas wells | Directorate General of Oil and Gas (Ditjen Migas), Ministry of Energy and Mineral Resources - MDR | ArcGIS |
| South Africa petroleum wells (mostly offshore: Bredasdorp, Orange...) | Petroleum Agency SA (PASA) | ArcGIS |
| Mozambique exploration & production wells | Instituto Nacional de Petróleo (INP) | ArcGIS |
| Kenya petroleum exploration wells (unofficial copy of the ministry map) | State Department for Petroleum map, re-hosted on ArcGIS Online by a third-party account | ArcGIS |
Oceania
Key | Coverage | Agency | Via |
| New Zealand petroleum wells (nationwide, incl. offshore) | NZ Petroleum & Minerals (NZP&M) | ArcGIS |
| Waikato geothermal wells (Taupō Volcanic Zone, incl. deep production wells) | Waikato Regional Council (National Wells Database) | ArcGIS |
| Bay of Plenty geothermal bores (Rotorua, Tauranga...) | Bay of Plenty Regional Council | ArcGIS |
| Australia national borehole database (petroleum, coal-seam gas, geothermal, stratigraphic) | Geoscience Australia | WFS |
| South Australia petroleum wells (Cooper/Eromanga...) | Government of South Australia, Department for Energy and Mining (SARIG) | WFS |
| South Australia geothermal wells (incl. Habanero) | Government of South Australia, Department for Energy and Mining (SARIG) | WFS |
| Queensland petroleum wells | Geological Survey of Queensland | ArcGIS |
| Queensland coal-seam-gas wells | Geological Survey of Queensland | ArcGIS |
| Western Australia onshore petroleum wells | WA Department of Energy, Mines, Industry Regulation and Safety (DMIRS-025) | ArcGIS |
No public registry found
Guatemala - No official registry. The Energy & Mines ministry (mem.gob.gt) and the open-data portal sit behind a browser challenge scripts cannot pass; the national spatial data infrastructure (IDEG/SEGEPLAN) WFS has no hydrocarbon or geothermal layers. Geothermal well data (Zunil, Amatitlán) is operator-held. Project level: search_gem_projects.
Eastern Caribbean geothermal islands - Dominica, St Kitts & Nevis, Montserrat, St Lucia, Grenada, St Vincent: no machine-readable well data found (reports and PDF tables only; the regional CHARIM GeoNode is offline). Guadeloupe and Martinique boreholes are in FR-BSS. Project level: search_gem_projects.
Central American geothermal - El Salvador, Honduras, Nicaragua, Costa Rica, Panama: no public geothermal well service found (Ahuachapán, Berlín, Momotombo, San Jacinto-Tizate, Miravalles are operator-held). Project level: search_gem_projects.
Mexico (geothermal) - CFE publishes no geothermal well data (Cerro Prieto, Los Azufres, Los Humeros). Oil & gas wells are in MX (a 2024 snapshot). The former CNH map (mapa.hidrocarburos.gob.mx) is offline.
Ecuador - The hydrocarbon regulator's geoportal requires a login; well data is released only by formal request.
Bolivia - GeoBolivia (geo.gob.bo) is unreachable; no other official well service found.
Trinidad & Tobago - The Ministry of Energy publishes only PDF data-package listings for bid rounds; no well service.
Chile (geothermal) - No geothermal well service found (Cerro Pabellón is operator-held); open-data and ministry GIS searches return nothing.
Alberta and Manitoba - Not yet supported: Alberta's AER publishes its well list (ST37) only as a 565 MB monthly bulk download, and its live map layer covers abandoned wells only and blocks text search. Manitoba publishes a 0.7 MB shapefile download (wells.zip) but no working query service.
Turkey - MTA's earth-science viewer exposes no data endpoint; no public well service found. Some Turkish boreholes may appear in EU-GSEU.
Hungary, Austria, Croatia, Romania, Greece, Portugal (incl. Azores), Spain - No national keyless well service found (or only names and basins, as with Spain's IGME layer). Use EU-GSEU, which carries deep boreholes - many geothermal, with bottom-hole temperatures - from these countries' surveys.
Italy - Not yet supported: the ministry (UNMIG) publishes producing hydrocarbon wells only as CSV/KML downloads, without dates or depths; historic wells (ViDEPI) are PDF logs. Italian deep boreholes appear in EU-GSEU.
Switzerland - Not yet supported: swisstopo publishes wells deeper than 500 m (incl. Basel-1 and other geothermal wells) through the geo.admin.ch API, which needs its own adapter. Swiss boreholes appear in EU-GSEU.
Kenya - No official machine-readable registry. Petroleum exploration wells: KE-PET, an unofficial copy of the State Department for Petroleum's map. Geothermal wells (Olkaria, Menengai) are held by KenGen and GDC, whose GIS hosts are not public; some Olkaria research data is in the DOE GDR (search_geothermal_datasets); heat flow and temperature gradients across the Kenya Rift: search_heat_flow; plant level: search_gem_projects.
Namibia - No public well registry. The Ministry of Mines and Energy's petroleum licence layers (Landfolio cadastre) need a token, and NAMCOR sells E&P data (incl. the offshore Orange Basin discoveries). Heat flow: search_heat_flow; field level: search_gem_projects.
Uganda, Ghana, Nigeria, Ethiopia, Tanzania, Rwanda, Senegal, Egypt - No keyless official well service found: Uganda's and Ghana's petroleum ArcGIS services require tokens, Egypt's upstream gateway requires a login, and the others publish HTML/PDF or nothing. Heat flow: search_heat_flow; field level: search_gem_projects.
New Zealand (national geothermal database) - GNS Science's GGW database is a click-through web app whose terms allow internal use only (no publishing), so it is not used. Geothermal wells come from regional councils instead: NZ-WAIKATO and NZ-BOP. NZP&M petroleum wells are in NZ-PET.
Victoria, New South Wales, Northern Territory, Tasmania - Not yet wired: Victoria and NSW publish petroleum wells via WFS, the NT as a CSV download, Tasmania inside a mixed borehole layer. AU-GA covers these states from the national database.
Japan - Not yet supported: the Geological Survey of Japan publishes borehole temperatures (GT-4) only as static GeoJSON files; no well registry service found.
Philippines, India, Malaysia, Papua New Guinea, Timor-Leste - No keyless well service found: India's national data repository needs a login, Timor-Leste's is a virtual data room, and the others publish PDFs or nothing.
Related MCP server: mcp-arcgis-albuquerque
Tools
Tool | What it does |
| Coverage index; pass |
| Search by operator, well name, county/area, field, status or type in one source, a state, a country, or everywhere. |
| One well's full raw record by identifier. US API numbers in any format are routed to the right state by their 2-digit API prefix; UWIs, wellbore names and agency codes work with |
| Every well within a radius of a point. Only sources whose coverage area overlaps the circle are asked, so it works anywhere without picking a source |
| The exact operator strings a source uses ( |
| Raw SQL-92 |
| DOE geothermal datasets: text search via OSTI, or - given a latitude/longitude - the Geothermal Data Repository catalog's footprints, returning datasets that cover the place with direct file links (Cape Station, Utah FORGE, Newberry...) |
| Bundled IHFC Global Heat Flow Database (offline): ~91,000 heat-flow measurements worldwide with temperature gradient, thermal conductivity, depth and purpose - geothermal screening anywhere, with summary statistics for a radius |
| Bundled Global Energy Monitor trackers (offline): geothermal power units and oil & gas fields worldwide - the fallback where no well registry exists |
What a record looks like
Every source is mapped to the same core fields, then keeps its own extras (temperatures, production, formation, links to scanned well files...):
source, country, state, api, wellName, operator, status, wellType, field, county, latitude, longitude, spudDate plus whatever else the source publishes
(completionDate, depthMD, depthTVD, waterDepth, bottomHoleTempC...).
apiholds the source's well identifier: a US API number, Canadian UWI, Norwegian wellbore name, BSS code and so on.list_sourcessays which, per source.Coordinates are WGS84 decimal degrees, taken from the server-reprojected geometry (attribute coordinates are often NAD27, ED50 or sign-flipped).
Every
*Datefield is an ISOYYYY-MM-DDstring or null, whatever the source stores (epoch milliseconds,MM/DD/YYYY,DD.MM.YYYY,16-NOV-2017...).Units are the agency's: most US sources use feet, most others metres. Sources that mix units carry a
depthUnitfield.A source that cannot apply a filter you asked for is skipped with a note rather than returning unfiltered results.
Run / register
Requires Node 18+ (native fetch, top-level await); developed on Node 22.
npm install
npm test # offline unit tests
npm run smoke # live: search + id lookup + radius search against every source
npm run smoke -- NO UT # just some sources (matches key, country or state)
claude mcp add --scope user well-data -- node <abs-path>/src/index.jsclaude mcp add stores that absolute path in ~/.claude.json; moving the project
folder breaks the registration until you run it again. Any other MCP client can launch
node src/index.js over stdio the same way. package.json's bin entry means
npx -y well-data-mcp will work if the package is ever published to npm (it isn't yet).
node scripts/call-tool.js <tool> '<json args>' calls one tool over stdio, the way an
MCP client would - handy for trying a query from a terminal.
Adding a source
Each source is one object in src/sources/<region>.js: endpoint, a map from the
normalized filters to the layer's own field names, a normalize(attrs, geometry)
function, a rough extent, and a probe filter known to return hits (the smoke test
uses it). The protocol is a kind:
arcgis(default) - any ArcGIS MapServer/FeatureServer layer. Find layers with…/rest/services?f=json, then a layer's fields with…/MapServer/<id>?f=json. Options cover common server quirks:noPaging,noReproject,apiNumeric,dedupeBy,baseWhere,headers,outFields(seesrc/providers/arcgis.js).wfs- OGC WFS 2.0 with GeoJSON output:dialect: "cql"for GeoServer,dialect: "fes"for MapServer, deegree and others that ignore CQL.rrc-ewa- the Texas RRC wellbore query (operator, lease and field for Texas).
Run npm run smoke -- <KEY> until search, id and radius checks pass, then
node scripts/coverage-table.js to refresh the tables above.
Data licences and attribution
Each agency's terms apply to its data; list_sources shows the licence where the
agency states one. Notably:
Alabama (State Oil and Gas Board): the terms forbid redistributing the data to third parties without permission. Query it live; don't republish it.
Norway (Sodir): Norwegian Licence for Open Government Data (NLOD).
UK (NSTA): NSTA Open User Licence. Ontario / Canada (NRCan): Open Government Licence. Argentina (Secretaría de Energía): CC BY 4.0.
DOE Geothermal Data Repository datasets: mostly CC BY 4.0 (each result says).
IHFC Global Heat Flow Database bundled in
data/: CC BY 4.0 - cite it as given in everysearch_heat_flowresponse (seedata/ATTRIBUTION.md). Refresh by downloading a new release from GFZ Data Services and runningpython scripts/convert-ihfc.py <zip>.Global Energy Monitor trackers bundled in
data/: CC BY 4.0 - credit "Global Energy Monitor" (seedata/ATTRIBUTION.md). Refresh by downloading a new release from globalenergymonitor.org/download-data,pip install -r scripts/requirements.txt, thenpython scripts/convert-gem.py <dir>.
Source
https://github.com/Wickemu/well-data-mcp - MIT licensed (the code; data licences above).
Available Tools
8 toolsget_wellGet well by API numberA
Look up a specific well by API number and return its FULL raw record from the state source plus the normalized summary. Handles formatting differences (dashes, state prefixes): tries an exact match first, then the bare digits, then a dash-tolerant contains-match on the county + sequence digits — so undashed input still finds wells in sources that store dashed APIs (NM, ND, CO, NV). If state is omitted, tries every state.
| Name | Required | Description | Default |
|---|---|---|---|
| api | Yes | API well number in any common format (e.g. 04-029-12345, 0402912345, 33-053-04652, 4300712345). | |
| state | No | Two-letter state code if known (much faster). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the behavior of handling different API formats (dashes, state prefixes) and the fallback matching strategy. It also reveals that if state is omitted, it iterates over all states, which implies potential performance implications. This is good coverage beyond what the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, which is concise and front-loaded with the main purpose. The first sentence defines the function and output. The second sentence adds important behavioral details about formatting tolerance and multi-state search. Some redundancy with the schema examples is present, but the description as a whole is tightly written without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (two parameters, one optional enum), the description covers everything an agent needs: the output format (raw + summary), the handling of input variations, the matching algorithm, and the behavior when state is omitted. No additional context is necessary for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a clear description of the api parameter (with examples) and the state parameter (with enum). The description adds nuance that the api parameter tolerates formatting differences and that state is optional but speeds up the lookup. This meaningfully enhances what the schema states, so a 4 is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb ('Look up') and resource ('a specific well by API number'), and clearly defines the output as the full raw record plus the normalized summary. It distinguishes itself from siblings like search_wells and wells_near by focusing on exact API lookup rather than broad search or proximity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use this tool: to retrieve a specific well by API number, and even notes that omitting the state will try every state (slower, but still functional). While it doesn't name alternatives, it implies that for broader search one would use search_wells or wells_near, and for raw queries raw_query. The description of the matching fallbacks (exact, bare digits, contains-match) also guides usage in edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_operatorsList operators matching a nameA
Find the exact operator name strings a state uses (they rarely match what you would guess — 'Fervo Energy Company', 'CALIFORNIA RESOURCES PRODUCTION CORPORATION'). Returns distinct operator names containing the search text, per source. Use before search_wells when an operator search returns nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Partial operator name, case-insensitive. | |
| state | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It usefully reveals that results are exact, case-insensitive name strings, distinct, 'containing the search text', and grouped 'per source'. However, it does not clarify what 'per source' means, whether state is required, or what the response shape looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then behavior, then usage guidance. The quoted examples are slightly long but earn their place by illustrating the tool's core warning that operator strings rarely match guesses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, basic behavior, and a usage trigger, which is good for a simple lookup tool. However, without annotations or an output schema, the vague 'per source' wording and unaddressed state parameter leave meaningful gaps for an agent deciding how to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%; the description does not meaningfully explain the 'state' parameter beyond 'a state uses' and 'per source'. The 'name' parameter is already described in the schema, but the optional state parameter's role and default behavior remain unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Find') and resource ('exact operator name strings a state uses') and makes the domain concrete with real examples. It clearly differentiates this tool from sibling search_wells by focusing on operator name strings rather than well records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly gives a usage context: 'Use before search_wells when an operator search returns nothing.' It names an alternative and the condition for choosing this tool, though it does not discuss exclusions for other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sourcesList well-data sourcesA
List the state regulator well-data sources this server can query: coverage, agency, searchable filters, and caveats. Call this first to see what is available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. The description explains it returns coverage, agency, searchable filters, and caveats, and frames the operation as non-mutating discovery. It does not detail error behavior or performance, but for a zero-parameter list operation this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the most useful instruction ('Call this first') included. Every word earns its place and the key content is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, zero-parameter discovery tool, the description completely covers what an agent needs to know: what it will receive, why it should call it, and that it is the initial discovery step. No output schema or annotation gaps need compensation here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters Except for the schema's empty object, and schema coverage is 100%. The description adds no parameter details, but none are needed. Baseline for a zero-parameter tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), a clear resource ('state regulator well-data sources'), and a scope ('this server can query'). It clearly distinguishes itself from search_tools and other list-like tools because it describes a catalog/discovery function, not a data query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call this first to see what is available,' giving clear when-to-use guidance for discovery before querying. It does not explicitly mention alternatives or exclusions, but the context strongly implies this is the correct initial tool among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
raw_queryRaw ArcGIS queryA
Escape hatch: run a raw SQL-92 WHERE clause against one source's ArcGIS layer and get raw attributes back. Use list_sources for source keys; field names are the layer's own (see the searchableFilters mapping, or query with where='1=1' limit=1 to inspect a record). Useful for filters the normalized search does not cover (dates, depths, cumulative production).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| where | Yes | ArcGIS SQL-92 where clause, e.g. "totcum_oil > 1000000 AND county = 'BEAVER'" | |
| offset | No | ||
| source | Yes | Source key, e.g. UT or CA-OG. | |
| out_fields | No | Comma-separated field list, or * for all. | * |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that field names are the layer's own rather than normalized, and recommends querying where='1=1' limit=1 to inspect a record, which sets expectations about raw output. It could say more about read-only guarantees or error modes, but the main behavioral quirk is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences pack the tool's purpose, usage context, and field-name caveat without redundancy. The inline example 'where='1=1' limit=1' is a compact, actionable illustration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an escape-hatch tool with no output schema and no annotations, it gives an agent enough to call it correctly: how to choose source keys, how to discover valid fields, and what kind of filters it supports. Minor gaps remain around exact response shape and behavior when SQL is invalid, but the critical invocation steps are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 60% of parameters with descriptions (where, source, out_fields). The description adds beyond the schema by advising list_sources for source keys and explaining that where-clause field names are raw and can be discovered via a probe query. It doesn't elaborate on limit/offset, but those are constrained with defaults in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'run a raw SQL-92 WHERE clause against one source's ArcGIS layer and get raw attributes back.' The 'Escape hatch' framing differentiates it from sibling search tools, making its role in the family immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions itself as a fallback: 'filters the normalized search does not cover (dates, depths, cumulative production).' It also directs the agent to list_sources for valid source keys and suggests a field-inspection technique, so when to use it and what to do first are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_gem_projectsSearch global energy projects (GEM)A
Search bundled Global Energy Monitor tracker data: geothermal power units worldwide (Geothermal Power Tracker - covers Kenya/Olkaria, New Zealand, Guadeloupe/Bouillante, Guatemala, US) and upstream oil & gas fields/discoveries (Oil & Gas Extraction Tracker - covers Namibia Orange Basin, Guatemala, NZ). Project/field level, NOT well level. Filters are ANDed, case-insensitive substrings. Local data - fast, works offline. Cite 'Global Energy Monitor' when publishing results.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Project/unit/field name (also matches other names and blocks), e.g. 'Olkaria', 'Venus', 'Bouillante'. | |
| limit | No | ||
| status | No | Status substring: operating, construction, announced, discovered, producing, shelved, cancelled, retired... | |
| country | No | Country/area name, e.g. 'Kenya', 'Namibia', 'New Zealand'. | |
| dataset | No | both | |
| latitude | No | With longitude + radius_km: only projects within the radius, sorted by distance. | |
| operator | No | Operator or owner name, e.g. 'KenGen', 'Ormat', 'TotalEnergies'. | |
| longitude | No | ||
| radius_km | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does well: it discloses that filters are ANDed case-insensitive substrings, that data is local and offline, and that results are project/field level rather than well level. It does not describe response format or any limits, but the core query behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause earns its place: data source, tracker coverage, scope, filter behavior, performance characteristics, and citation requirement. The core purpose and exclusion are front-loaded before the supporting details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no annotations and no output schema, the description provides substantial context: data provenance, geographic coverage, project-level scope, match semantics, offline behavior, and citation obligations. It stops short of explaining result fields or how limit/radius parameters shape output, but it is detailed enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents five of nine parameters with useful examples, and the description adds general filter semantics with 'Filters are ANDed, case-insensitive substrings'. Still, the main description does little to clarify limit, longitude, or radius_km on its own, so it only partially compensates for the 56% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Search bundled Global Energy Monitor tracker data' and enumerates the exact trackers and coverage areas. It explicitly distinguishes itself from the well-level sibling tools by saying 'Project/field level, NOT well level', so an agent can tell it apart from search_wells and wells_near.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when this tool is appropriate: for project/field-level searches over bundled GEM geothermal and oil & gas data, and it explicitly excludes well-level use. However, it never names sibling alternatives such as search_wells or raw_query, so the when-not guidance is implied rather than fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_geothermal_datasetsSearch DOE geothermal datasets (GDR)A
Search U.S. DOE-funded geothermal project datasets via OSTI Data Explorer - this indexes the Geothermal Data Repository (gdr.openei.org): well logs, stimulation and flow-test data, microseismic, DTS, geologic models. THE source for Fervo Cape Station (search 'cape egs' or 'fervo' - note 'cape station' also matches Cape Grim air station), Utah FORGE, and some international geothermal studies. Terms are ANDed. Returns titles, DOIs, dates, and links to the data.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | ||
| query | Yes | Search terms, e.g. 'cape station', 'utah forge stimulation', 'olkaria kenya'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does well: it explains that terms are ANDed, that results return titles/DOIs/dates/links, and even warns about a false-match case ('cape station' also matching Cape Grim air station). It does not mention pagination, sorting, or auth/rate limits, but the disclosed search semantics are materially useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: scope, content types, key corpus examples, a query ambiguity warning, AND semantics, and return fields. It is front-loaded with the resource name and keeps all guidance relevant without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no output schema and no annotations, the description covers the essential invocation context: what is indexed, how to phrase queries, what results look like, and notable edge cases. Minor gaps such as row-count behavior and pagination are not likely to prevent an agent from calling the tool successfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: the query parameter has examples, but rows has only schema constraints with no description. The tool description compensates by explaining AND semantics and giving realistic query patterns, which adds meaning beyond the schema. It doesn't elaborate on rows behavior, but the schema's default/min/max plus the name make it reasonably self-evident.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: searching U.S. DOE-funded geothermal datasets via OSTI Data Explorer/GDR. It names the content types (well logs, stimulation data, microseismic) and cites concrete projects like Fervo Cape Station and Utah FORGE, which clearly separates it from sibling tools such as search_wells or search_gem_projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: it is the source for GDR/Fervo/FORGE and international geothermal datasets, and it offers concrete query examples such as 'cape egs' or 'fervo'. It does not explicitly rule out alternatives or name when_not scenarios, but the domain-specific examples and scope make the intended use fairly unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_wellsSearch wellsA
Search state regulator well databases by operator, well/lease name, county, field, status, or type. Returns normalized records (API number, name, operator, status, type, field, county, lat/lon, dates, depths where available) plus source-specific extras. All *Date fields are normalized to ISO 'YYYY-MM-DD' strings (or null) regardless of how the source stores them, so they sort and compare across states. Filters combine with AND. Set count_only=true to size a query before pulling records.
| Name | Required | Description | Default |
|---|---|---|---|
| api | No | API well number exactly as the state formats it. For cross-state API lookup use get_well instead. | |
| field | No | Field name, partial match. | |
| limit | No | Max records per source (default 25). | |
| state | No | Two-letter state code to search. Omit to search ALL states (slower; prefer setting it). | |
| county | No | County name, partial match. | |
| offset | No | Pagination offset within each source. | |
| source | No | Exact source key (e.g. CA-GEO for California geothermal only). Overrides state. | |
| status | No | Well status, partial match (vocabulary varies by state: 'Active', 'Plugged', 'New', ...). | |
| operator | No | Operator/company name, partial match, case-insensitive (e.g. 'Fervo', 'California Resources'). | |
| well_name | No | Well or lease name, partial match. | |
| well_type | No | Well type, partial match (e.g. 'OG', 'Geothermal', 'Water Disposal'; vocabulary varies by state). | |
| count_only | No | If true, return only match counts per source — cheap way to size a query first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden and largely delivers: it discloses date normalization to ISO YYYY-MM-DD (or null), states that filters combine with AND, describes the returned record shape, and flags the performance cost of omitting state. It stops short of covering error behavior, rate limits, or what 'source-specific extras' concretely contain, so it's strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded paragraph that leads with purpose, then normalization, then filter semantics, then the count_only usage tip. Each sentence carries distinct information and nothing is redundant with the schema. It is dense, but that density is justified for a 12-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters, no output schema, and no annotations, the description covers the essential ground: return format, date normalization, filter combination, and query sizing. Gaps include pagination semantics across multiple sources (offset/limit are only defined 'per source' in the schema) and the precise shape of multi-source results, which an agent would want when aggregating.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with inline examples (e.g. 'Fervo', 'California Resources', 'CA-GEO'), so the schema already documents every parameter well. The description adds global semantics that enrich parameter understanding — AND-combination of filters and date normalization across returned fields — but does not extend per-parameter meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Search state regulator well databases') and enumerates the exact search dimensions (operator, well/lease name, county, field, status, type). It further differentiates from get_well via the api parameter note ('For cross-state API lookup use get_well instead'), which explicitly carves out the sibling's territory. An agent can immediately tell what this tool does and how it relates to get_well.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage direction: the api param steers exact API lookups to get_well, the state param advises preferring a state code to avoid slower all-state searches, and count_only is positioned as a way to size a query before pulling records. It does not, however, address when to reach for spatial sibling wells_near or raw_query over this tool, leaving part of the alternative routing implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wells_nearFind wells near a pointA
Find wells within a radius of a lat/lon point — e.g. all wells on or around a pad, lease, or project site. Searches the geographically relevant sources unless state/source is given.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| state | No | ||
| source | No | ||
| latitude | Yes | ||
| longitude | Yes | ||
| radius_km | No | Search radius in kilometers (default 3). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It adds important non-obvious behavior: 'Searches the geographically relevant sources unless state/source is given.' This explains default source selection and how optional filters change behavior, which is valuable beyond the schema. It does not describe response format, but the core behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action and use case are front-loaded, and the source-selection behavior is stated compactly. Every clause contributes to an agent's understanding of when and how to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with six parameters and no output schema or annotations, the description covers the essential invocation context: what it finds, how it selects sources, and when to use it. It does not describe return shape or result limits, but those are less critical for correct invocation given the detailed schema and defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, so the description must compensate. It does clarify the central parameters: lat/lon as the search point, radius_km as the search radius, and state/source as optional filters. The limit parameter is not mentioned, but its name and default make it inferable; the description still adds meaning for the most important parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Find'), a precise resource ('wells'), and a clear spatial criterion ('within a radius of a lat/lon point'). This distinguishes it from siblings like search_wells or get_well, and the example of pads/leases/project sites reinforces its intended scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case ('all wells on or around a pad, lease, or project site') and explains when to narrow by state/source ('unless state/source is given'). It does not explicitly name alternatives or state when not to use this tool, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
get_well - First observed
list_operators - First observed
list_sources - First observed
raw_query - First observed
search_gem_projects - First observed
search_geothermal_datasets - First observed
search_wells - First observed
wells_near
TDQS
Scored across 8 tools
Tools are largely distinct: search_wells, raw_query, and wells_near differ by query mode, while search_gem_projects and search_geothermal_datasets target separate datasets. The only mild ambiguity is between the three 'search_*' tools, but descriptions clearly specify data source and query style.
Most tools follow a clear list_/search_/get_ verb_noun pattern, making the set predictable. raw_query and wells_near break that pattern, but they are still readable and not confusing.
8 tools is well-scoped for the domain: source discovery, operator lookup, normalized search, spatial proximity, raw SQL escape hatch, and specialized project/dataset searches. Each tool earns its place without redundancy.
The surface covers the full read-only workflow: discover sources, inspect operators, query wells by attributes or location, retrieve full records by API, and fall back to raw SQL when needed. The specialized GEM and OSTI searches add meaningful coverage beyond state well data.
Maintenance
Related MCP Connectors
Read-only Texas oil & gas data: operator directory, county production, and dataset catalog.
Query real-time and historical USGS water data from ~8,000 stream gages and groundwater wells.
Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.
Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to search and query Los Angeles County open geospatial datasets (parcels, parks, etc.) via ArcGIS Feature Services.14 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables searching and querying City of Albuquerque open geospatial datasets (parcels, zoning, public works) via ArcGIS Feature Services, allowing natural language access to GIS data.163 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables searching and querying City of Tulsa GIS open geospatial datasets (parcels, zoning, public works) via ArcGIS Feature Services through natural language or direct MCP tool calls.15 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables searching and querying Stanislaus County GIS open geospatial datasets (parcels, addresses, zoning, public works) via ArcGIS Feature Services. Supports natural language access through Pipeworx gateway.18 npmMIT