RockHound
RockHound — Colorado Rockhounding Intelligence Platform
Управляемая, пространственно-ориентированная платформа данных, отвечающая на реальный вопрос: «Где я могу легально заниматься поиском камней в Колорадо и что я, вероятно, найду?» Создана полностью — от необработанных федеральных и государственных данных через архитектуру Medallion (слои Bronze/Silver) до управляемого MCP-сервера (Model Context Protocol) — позволяя ИИ-агенту отвечать на вопросы о поиске камней, опираясь на реальные, курируемые, достоверные пространственные данные, а не на необработанные или непроверенные источники.
Структура репозитория: SQL-скрипты в /sql, Python-код в /python — см. эти папки для фактической реализации.
Цель
Объединить несколько независимых публичных наборов данных — статус горных заявок, землевладение и исторические записи о минеральных проявлениях — в единую запрашиваемую платформу, а затем предоставить эти данные ИИ-системе через управляемый интерфейс, который предоставляет только конкретные, безопасные, предварительно одобренные запросы, а не прямой доступ к базе данных. Это отражает тот же паттерн «готового к ИИ, управляемого продукта данных», который всё чаще требуется в современных ролях инженера данных.
Конкретный вопрос, на который это отвечает: «Найти свободные/просроченные горные заявки рядом с задокументированными проявлениями минерала и сказать, разрешено ли мне там находиться».
Related MCP server: arcgis-lacounty
Архитектура
flowchart TD
A["BLM Mining Claims<br/>(Active + Closed + Closed-Recent)"] --> D
B["BLM Surface Management Agency<br/>(Land Ownership)"] --> D
C["USGS MRDS<br/>(Mineral Occurrences)"] --> D
D["BRONZE LAYER<br/>Raw ingestion, full provenance<br/>(source_url + source_type)"] --> E
E["SILVER LAYER<br/>Cleansed, deduplicated<br/>Native geography types, MakeValid()<br/>Colorado-filtered"] --> F
F["Spatial Indexes +<br/>CROSS APPLY Query Layer"] --> G
G["MCP SERVER<br/>Streamable HTTP"] --> H["find_vacant_claims_near_mineral()"]
G --> I["check_land_access()"]
H --> J["MCP Inspector / AI Client"]
I --> JРеальные источники данных (все публичные, все бесплатные)
Источник | Что предоставляет | Записи (Колорадо, отфильтровано) |
BLM MLRS Mining Claims — Not Closed | Активные горные заявки | 14 699 |
BLM MLRS Mining Claims — Closed (полная история) | Исторические/свободные заявки | 288 158 |
BLM MLRS Mining Claims — Closed (за последний год) | Источник флага недавности | 1 165 |
BLM Colorado Surface Management Agency | Землевладение (BLM, USFS, частные, племенные и т. д.) | 21 175 |
USGS Mineral Resources Data System (MRDS) | Исторические задокументированные минеральные проявления | 17 669 |
US Census TIGER/Line — Counties | Границы округов (национальный файл, отфильтровано по Колорадо) | 64 |
US Census TIGER/Line — Places | Границы городов/посёлков/CDP, специфично для Колорадо | различается |
Все исходные записи содержат source_url и source_type (например, «Government Agency») для полной прослеживаемости и происхождения данных — паттерн управления, встроенный намеренно, а не как запоздалая мысль.
Технологический стек
SQL Server — нативный пространственный тип данных
geography, пространственное индексирование,STDistance/STIntersects/STContains,MakeValid()Python —
geopandas,pandas,pyodbc,shapelyMCP Python SDK (
mcp.server) — транспорт Streamable HTTPMCP Inspector — официальный инструмент для тестирования/проверки MCP-серверов
Cloudflare Tunnel — локальное HTTPS-подключение для удалённого тестирования MCP-клиентов
Инструменты и платформы
Подробное описание того, что для чего использовалось, поскольку фактическая среда разработки — часть реальной истории.
Источники данных (откуда взялись необработанные данные)
Источник | Метод доступа | Вариант использования |
Прямое скачивание (Shapefile/GeoJSON) | Данные Surface Management Agency (землевладение) для Колорадо | |
BLM National GIS Hub (ArcGIS Hub) | Прямое скачивание (GeoJSON / File Geodatabase) | Горные заявки (Active, Closed, Closed-Last-Year) — примечание: эти конкретные загрузки оказались национального масштаба, несмотря на то, что были найдены через поиск, ориентированный на Колорадо, поэтому фильтр по ограничивающей рамке Колорадо существует в |
Прямое скачивание (CSV, формат «Flattened») | Исторические записи о минеральных проявлениях — также по умолчанию по всей стране, отфильтрованы до Колорадо через столбец |
Разработка базы данных и запросов
Инструмент | Вариант использования |
SQL Server Express (локальный экземпляр, именованный | Фактический движок базы данных — выбран, потому что бесплатен и уже часто доступен для личного проекта |
SQL Server Management Studio (SSMS) | Создание схемы, проверка данных, разработка и тестирование запросов и — что критически важно — анализ плана выполнения (Ctrl+M), использованный для диагностики проблемы с производительностью пространственного индекса |
Разработка на Python
Инструмент | Вариант использования |
Python 3.14 | Скрипты приёма данных ( |
pip | Управление пакетами — |
PowerShell | Запуск всех Python-скриптов, управление файлами/папками и — что примечательно — использовался непосредственно для записи исходных файлов через here-строки ( |
winget (Windows Package Manager) | Установка Python, ODBC Driver 18 для SQL Server и |
Инструменты, специфичные для MCP
Инструмент | Вариант использования |
MCP Python SDK (пакет | Создание фактического управляемого MCP-сервера и его двух инструментов |
MCP Inspector ( | Официальный инструмент, использованный для тестирования и проверки корректности работы инструментов сервера — это стало основным методом демонстрации/проверки после того, как поток удалённого подключения конкретного потребительского ИИ-клиента оказался требующим регистрации OAuth-клиента, что выходило за рамки этого проекта |
Cloudflare Tunnel ( | Предоставил локальному серверу Streamable HTTP временный публичный HTTPS-URL, поскольку некоторые интеграции MCP-клиентов требуют HTTPS даже для локальной разработки/тестирования |
Контроль версий и хостинг
Инструмент | Вариант использования |
GitHub | Размещение этого репозитория как части более широкого портфолио по инженерии данных |
Два управляемых инструмента, намеренно ограниченных по объёму, а не предоставляющих ИИ-системе необработанный доступ к SQL:
find_vacant_claims_near_mineral(mineral_name, max_distance_miles)
Находит свободные/просроченные заявки рядом с задокументированными историческими проявлениями заданного минерала, помечая, какие заявки закрылись недавнее всего (самые свежие возможности), в каком округе каждая находится, и сортируя по близости.
check_land_access(latitude, longitude, mineral_search_radius_miles)
По заданным координатам возвращает полный отчёт о местности: тип землевладения, покрывает ли какую-либо горную заявку эта точка (и если да, активную или свободную), округ, ближайший город и расстояние до него, а также любые минералы, задокументированные в пределах настраиваемого радиуса поиска.
Оба инструмента запрашивают только курируемый слой Silver через фиксированные параметризованные запросы — ИИ никогда не получает произвольный доступ к базе данных, только эти конкретные, безопасные, целевые ответы.
Реальные инженерные проблемы, которые были решены
Этот раздел существует потому, что процесс отладки, пожалуй, самая показательная часть всего проекта — реальная инженерия данных — это не чистый первый проход. См. /sql/04_example_queries.sql для фактических диагностических запросов, использованных для поиска и исправления этих проблем.
Недопустимая пространственная геометрия. Реальные правительственные ГИС-полигональные данные содержали самопересекающиеся/недопустимые геометрии, что вызывало ошибки выполнения в строгом типе
geographySQL Server (24144: instance is not valid). Исправлено с помощью.MakeValid(), применённого во время преобразования Bronze-to-Silver — см./sql/02_silver_schema_and_transform.sql.Тихая ошибка сопоставления данных. Поиск полезных ископаемых изначально сопоставлялся с
mineral_name(название участка шахты, например, «Silver King Mine»), а не сcommodity_type(что фактически задокументировано как найденное там) — ошибка корректности, обнаруженная при сравнении количества строк: 11 совпадений по названию участка для «Quartz» против 82 реальных совпадений по товарному типу.Реальная проблема производительности/плана запроса. Простой шаблон
JOIN ... ON STDistance(...) < Xприводил к тому, что запросы для распространённых полезных ископаемых молча выполнялись 13+ минут, потому что оптимизатор SQL Server не использовал пространственный индекс для такой формы соединения — подтверждено анализом плана выполнения, показавшим 124M+ оценочных операций со строками на вложенном цикле соединения. Исправлено путём перестройки запроса вокругCROSS APPLY(документированный шаблон для надёжного использования пространственного индекса в поиске ближайших соседей), что сократило время выполнения того же запроса до ~36 секунд. См./sql/04_example_queries.sql.Фильтрация данных национального масштаба. Несколько наборов данных «Colorado» из федеральных источников на самом деле были общенациональными (один файл активных заявок содержал 579,730 строк до фильтрации до 14,699 строк Колорадо). Фильтрация выполнялась через пересечение ограничивающего прямоугольника при загрузке, а не путём загрузки и отбрасывания на последующих этапах — см.
COLORADO_BBOX_WKTв/python/load_bronze.py.Интеграция MCP-клиента. Обнаружено, что процесс удалённого подключения целевого MCP-клиента ожидает регистрации OAuth-клиента даже для неаутентифицированных локальных серверов. Обходное решение заключалось в запуске сервера через Streamable HTTP с быстрым туннелем Cloudflare для HTTPS, а функциональность проверялась с помощью официального инструмента MCP Inspector, а не через специфические требования аутентификации отдельного приложения-потребителя.
Инвертированная ориентация колец полигонов, затрагивающая три отдельные таблицы. Полигоны из шейп-файлов и файловых баз геоданных (Counties, Cities и большой исторический набор данных Claims) иногда хранились с обратным порядком обхода колец — тип
geographyв SQL Server интерпретировал их как «везде, кроме X», а не как «X», что.MakeValid()не обнаруживает и не исправляет (он только исправляет самопересечения, а не ориентацию). Диагностировано путём проверкиSTArea()на нереалистично большие значения (настоящий, правильно ориентированный округ Колорадо никогда не должен приближаться к ~510,000,000 кв. км — общей площади поверхности Земли). Исправлено с помощью условного.ReorientObject()на основе порога площади. Первая попытка исправления использовала неправильную единицу измерения (STArea()возвращает квадратные метры, а не квадратные километры), что ошибочно перевернуло несколько действительно больших, правильно ориентированных округов — обнаружено и исправлено путём повторной проверки по всем 64 реальным округам Колорадо.Повторяющийся класс ошибок с количеством параметров и структурное исправление. Повторение
geography::Point(?, ?, 4326)встроенно несколько раз в одном запросе облегчало ошибку в подсчёте необходимого списка параметров, что вызывало две отдельные ошибки выполнения «неверное количество параметров». Исправлено структурно: координатная точка вычисляется один раз через SQL-переменнуюDECLARE @searchPoint GEOGRAPHY = ...и используется во всём запросе, что сокращает большинство запросов до всего 2 реальных параметров и устраняет класс ошибок на будущее, а не просто исправляет конкретный случай.Пробел в полноте данных, а не ошибка.
check_land_accessизначально возвращал одну произвольную заявку черезTOP 1без явной сортировки. Тестирование на реальной известной заявке («Rocket Six», проверенной по фактическим данным о горнодобывающих заявках друга) показало, что 14 отдельных заявок — 6 активных, 8 свободных — законно перекрывают эту одну координату, что нормально для плотного исторического горнодобывающего округа Колорадо. Исправление было не патчем ошибки, а осознанным проектным решением: перечислить каждую активную заявку по имени (поскольку любая из них означает «не копайте»), а свободные заявки обобщить как количество, а не молча выбирать одну и скрывать остальные.Многоэтапное исследование производительности для обогащения по каждой строке. После добавления поиска округа для обогащения результатов поиска полезных ископаемых распространённые минералы (Quartz: ~24,570 необработанных совпадений) начали выходить за пределы времени ожидания при вызове через MCP-инструмент. Отладка последовательно исключила несколько правдоподобных причин: ограничение с помощью
TOP (N)на уровне SQL на самом деле сделало ситуацию значительно хуже (4+ минуты против ~6 секунд без ограничения) из-за регрессии оптимизатора SQL Server при сочетанииTOPсORDER BYпо дорогой вычисляемой колонке; ограничение в Python после получения данных тоже не помогло, поскольку реальная стоимость всё равно оплачивалась внутри SQL Server до возврата результатов; а переписывание поиска округа как коррелированного подзапроса,JOINиOUTER APPLYбыло одинаково медленным (~4 минуты), что доказывает, что узким местом было огромное количество пространственных поисков (по одному на каждое необработанное совпадение), а не синтаксис запроса. Фактическое исправление: двухфазный запрос — сначала быстрое сопоставление только по расстоянию и ограничение, затем пространственный поиск округа только по небольшому конечному набору результатов (<=50 строк) вместо каждого необработанного совпадения. Это хороший пример того, что систематическое исключение правдоподобных, но ошибочных гипотез является настоящей работой по отладке производительности, а не единственное умное исправление, найденное сразу.
Пример вывода
> find_vacant_claims_near_mineral(mineral_name="Quartz", max_distance_miles=20)
AVENGER #15, Park County - 0.7 mi from documented Quartz
GAMBLE NO 1, Park County - 2.9 mi from documented Quartz
SARAH K #45, Chaffee County - 4.6 mi from documented Quartz
...
> check_land_access(latitude=39.5, longitude=-105.7)
Land type: USFS, covered by claim '#1' (VACANT)
County: Park County
Nearest city: Fairplay (3.2 mi away)
Documented minerals within 2.0 mi: Gold, Quartz, SilverСодержимое репозитория
RockHound/
├── README.md
├── sql/
│ ├── 01_bronze_schema.sql -- Bronze table DDL
│ ├── 02_silver_schema_and_transform.sql -- Silver DDL + MakeValid() + dedup logic
│ ├── 03_spatial_indexes.sql -- Spatial index creation
│ ├── 04_example_queries.sql -- Diagnostic + optimized query patterns
│ └── 05_cities_counties_schema_and_load.sql -- County/city boundary layer
└── python/
├── load_bronze.py -- Bronze ingestion (Colorado-filtered, fast bulk insert)
└── rockhound_server.py -- MCP server with governed toolsДорожная карта (Фаза 2 / Фаза 3, определена, но ещё не реализована)
Фаза 2: Реки/ручьи (потенциал россыпных месторождений), горячие источники (минералообразующая геология), данные о коренных породах/геологических формациях (Macrostrat) — та же пространственная схема Bronze-to-Silver, новые источники.
Фаза 3: Точки входа на тропы/парковки, данные о высоте и сопоставление доступа по дорогам с учётом конкретного автомобиля (дорожный просвет / требования 4WD против конкретного профиля транспортного средства).
Атрибуция данных
Данные предоставлены Бюро землеустройства (BLM) и Геологической службой США (USGS) и используются в соответствии с их условиями публичных данных. Это личный проект, не связанный с BLM или USGS и не одобренный ими. Данные предоставляются «как есть» и могут содержать ошибки или пропуски — всегда самостоятельно проверяйте статус заявки и доступ к земле перед личным посещением любого объекта.
Другие проекты
Портфолио по инженерии данных и системной архитектуре — производственная платформа Medallion Architecture, построенная на Microsoft Fabric, включая конвейеры PySpark/Delta Lake, AI-агентов Copilot Studio, аналитику KQL Eventhouse и полный CI/CD через Azure DevOps.
This server cannot be installed
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 Servers
- AlicenseBqualityAmaintenanceEnables AI assistants to search and access geospatial datasets through STAC (SpatioTemporal Asset Catalog) APIs. Supports querying satellite imagery, weather data, and other geospatial assets with spatial, temporal, and attribute filters.1113MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search and query Los Angeles County open geospatial datasets (parcels, parks, etc.) via ArcGIS Feature Services.15MIT
- AlicenseNot gradedqualityCmaintenanceEnables searching and querying City of Henderson open geospatial datasets (parcels, zoning, public works) via natural language or direct tool calls.16MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search and query City of Fairfield, California open geospatial datasets (parcels, zoning, public works) via ArcGIS Feature Services.7MIT
Related MCP Connectors
GIS tools for AI agents: 65 free tools + 8 paid (hazard/site-scouting/GeoJSON export)
Real-world data for agents: air quality, geocoding, quakes, holidays, web search
Vacation rental discovery, direct booking, and property protection for AI agents.
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/crjiminez03/Colorado_RockHound-Geospatial-MCP-Platform'
If you have feedback or need assistance with the MCP directory API, please join our Discord server