mcp-server-blm-mlrs
Provides tools to query geothermal lease data from BLM's ArcGIS FeatureServer, including retrieving lease details and searching leases with filters.
Click on "Install 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., "@mcp-server-blm-mlrsSearch for active geothermal leases in Nevada."
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.
mcp-server-blm-mlrs
An MCP server for the BLM MLRS Geothermal Leases dataset.
It exposes tools that query the U.S. Bureau of Land Management (BLM) Mineral & Land Records System (MLRS) geothermal leases ArcGIS FeatureServer and returns clean, structured lease data to any MCP client (Claude Desktop, etc.).
Data source
BLM National MLRS Geothermal Leases FeatureServer:
https://gis.blm.gov/nlsdb/rest/services/HUB/BLM_Natl_MLRS_Geothermal_Leases/FeatureServer/0Related MCP server: mcp-arcgis-montana
Tools
get_lease_details(case_number)
Retrieve full details for a single lease by its BLM case serial number.
case_number— BLM case serial number, e.g.'NVNV105806473'.
Returns a dict of lease details (case name, type, status, state, acreage, commodity, formation, production status, effective/expiration/sale dates, data source), or an error message if not found.
search_leases(state, status, effective_date_from, effective_date_to, expiration_date_from, expiration_date_to)
Search leases with optional filters. All parameters are optional; if none are given, all leases are returned (capped at 50 records).
Parameter | Field | Description |
|
| Two-letter admin state code, e.g. |
|
| Case disposition/status, e.g. |
|
| Inclusive lower bound, ISO date |
|
| Inclusive upper bound, ISO date |
|
| Inclusive lower bound, ISO date |
|
| Inclusive upper bound, ISO date |
Returns {"count": <int>, "leases": [ {lease summary}, ... ]}, or an error message on failure.
Installation
Requires Python >= 3.11.
uv syncRunning
By default the server runs over stdio, suitable for local MCP clients:
uv run python -m geothermal_leases.appIf a PORT (or DATABRICKS_APP_PORT) environment variable is set, it instead serves over HTTP on that port:
PORT=8000 uv run python -m geothermal_leases.appA health check is available at GET /health when running over HTTP.
Configuring an MCP client
Example entry for a client that launches MCP servers over stdio:
{
"mcpServers": {
"geothermal-leases": {
"command": "uv",
"args": ["run", "python", "-m", "geothermal_leases.app"],
"cwd": "/path/to/mcp-server-blm-mlrs"
}
}
}Project layout
src/geothermal_leases/
├── app.py # FastMCP server entrypoint (stdio / HTTP)
├── routes.py # Custom HTTP routes (health check)
└── tools/
├── __init__.py # Tool registration
├── _blm.py # Shared BASE_URL + date helpers
├── get_lease_details.py # get_lease_details tool
└── search_leases.py # search_leases toolAvailable Tools
2 toolsget_lease_detailsA
Retrieve details for a BLM geothermal lease by its Case Serial Number.
| Name | Required | Description | Default |
|---|---|---|---|
| case_number | Yes | The BLM case serial number, e.g. 'NVNV105806473' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. The verb 'Retrieve' clearly indicates a read-only operation, which is a key behavioral trait. However, the description does not mention potential errors, authentication requirements, or the scope of 'details' beyond what the output schema likely covers. It adds some value but leaves gaps.
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?
A single sentence that is front-loaded with the action and resource. No filler, no redundancy. Every word contributes to the purpose, making it highly concise and well-structured.
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?
This is a simple one-parameter read tool with an output schema, so the description doesn't need to explain return values. It adequately communicates the purpose and key. However, it doesn't mention any edge cases or error behavior, but for a straightforward getter, it is largely complete.
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%, so the schema already fully defines the sole parameter with an example. The description reinforces the meaning by mentioning the case serial number in a lease context, but doesn't add significant new 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 clearly states a specific action ('Retrieve details') and a specific resource ('BLM geothermal lease') identified by a key ('Case Serial Number'). This directly distinguishes it from the sibling search_leases, which is a search tool, while this is a direct lookup.
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?
No explicit guidance is given on when to use this tool versus search_leases. The description implies that you need a serial number, but it doesn't state the alternative use case or when to prefer one tool over the other. Without this, the agent may not know that this tool is for direct retrieval and the sibling is for searching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_leasesA
Search BLM geothermal leases, optionally filtering by state, status, and effective-/expiration-date ranges.
All parameters are optional. If none is provided, all leases are returned (capped at 50 records).
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Two-letter admin state code, e.g. 'NV' (matches ADMIN_STATE). | |
| status | No | Case disposition/status, e.g. 'Authorized' (matches CSE_DISP). | |
| effective_date_to | No | Inclusive upper bound on effective date, as an ISO date string 'YYYY-MM-DD' (matches EFF_DT). | |
| expiration_date_to | No | Inclusive upper bound on expiration date, as an ISO date string 'YYYY-MM-DD' (matches EXP_DT). | |
| effective_date_from | No | Inclusive lower bound on effective date, as an ISO date string 'YYYY-MM-DD' (matches EFF_DT). | |
| expiration_date_from | No | Inclusive lower bound on expiration date, as an ISO date string 'YYYY-MM-DD' (matches EXP_DT). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It reveals a key behavior: returning all leases (capped at 50) when no filters are provided. It does not state other traits like pagination or sorting, but the cap is critical and the absence of side effects is implied by 'search'.
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, front-loaded with the core purpose, and the additional cap note is essential. Every sentence earns its place with no redundancy 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 an output schema and fully described parameters, this description covers the necessary behavior: what it searches, the filter options, and the default fifty-record cap when no filters are supplied. The output schema presumably handles return structure, so no further detail is needed.
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%, so the baseline is 3. The description summarizes the filter dimensions (state, status, date ranges) but adds little beyond the schema, which already elaborates each parameter. It does clarify that all parameters are filters, aligning with the schema's optionality.
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 clearly states the tool searches BLM geothermal leases with optional filters on state, status, and date ranges. This goes beyond a vague verb by specifying both the resource (BLM geothermal leases) and the search/listing nature of the operation, distinguishing it from a sibling tool like get_lease_details which likely retrieves a single lease.
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 notes that all parameters are optional and that omitting them returns all leases (capped at 50), conveying when to use the tool without needing to supply filters. It gives clear context for usage but does not explicitly contrast it with get_lease_details, leaving the distinction somewhat implicit.
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. Dates show when Glama detected each change.
2 tool updates
v0.1.0- First observed
get_lease_details - First observed
search_leases
TDQS
get_lease_details and search_leases have clearly distinct purposes: one retrieves a specific lease by serial number, while the other returns a list of leases matching filters. There is no overlap or ambiguity between them.
Both tools use verb-led names (get, search), but the object phrasing differs slightly ('lease_details' vs 'leases'). This is a minor deviation from a strict verb_noun pattern, but the naming is still predictable and readable.
The server has only 2 tools, which feels thin for a general-purpose server. However, the domain is narrowly focused on querying BLM geothermal leases, making this a borderline but reasonable count for a read-only lookup service.
The two tools cover the core workflow of searching for leases and retrieving full details for a specific lease. There are no obvious gaps for the stated purpose of querying lease information, though additional filters or related data could enhance completeness.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Look up Indian land parcels by survey number or lat/lon. Returns parcel boundaries.
ArcGIS Hub — open government geospatial data (search + Feature Service query).
Read-only Texas oil & gas data: operator directory, county production, and dataset catalog.
Search and query government open-data portals (Socrata SODA API).
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables searching and querying City of Lakeland, Florida open geospatial data (parcels, zoning, utilities) through ArcGIS Feature Services.16MIT
- AlicenseNot gradedqualityCmaintenanceEnables searching and querying Montana State GIS open geospatial datasets (parcels, zoning, transport) via ArcGIS feature services.16MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying and searching City of McKinney GIS open geospatial datasets (parcels, zoning, public works) via ArcGIS Feature Services.16MIT
- AlicenseNot gradedqualityCmaintenanceEnables searching and querying City of Detroit GIS open geospatial datasets (parcels, zoning, public works, etc.) via ArcGIS Feature/Map Service layers.15MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/GSA-TTS/mcp-server-blm-mlrs'
If you have feedback or need assistance with the MCP directory API, please join our Discord server