Skip to main content
Glama

occ-gis-mcp

Ein MCP-Server (Model Context Protocol), der KI-Assistenten (wie Claude, GitHub Copilot oder jeden MCP-kompatiblen Client) Zugriff auf öffentliche GIS-Datensätze aus dem Open-Data-Hub der Oklahoma Corporation Commission gewährt: https://gisdata-occokc.opendata.arcgis.com/

Für die Einrichtung sind keine Programmierkenntnisse erforderlich. Führe die untenstehenden Schritte in der angegebenen Reihenfolge aus.

Was ist das, einfach ausgedrückt?

MCP („Model Context Protocol") ist ein Standard, über den KI-Chattools kleine Programme („Server") aufrufen können, die Live-Daten abrufen. Dieses Repository ist genau so ein Server. Nach der Einrichtung kannst du deinen KI-Assistenten zum Beispiel Folgendes fragen:

  • „Liste die auf dem OCC-GIS-Hub verfügbaren Datensätze auf"

  • „Finde alle aktiven Ölquellen in Oklahoma County"

  • „Zeig mir die Felder, die auf dem PST-Tanks-Layer verfügbar sind"

und der Assistent nutzt diesen Server, um echte, aktuelle Antworten abzurufen, statt zu raten.

Related MCP server: mcp-arcgis-houston

Schritt 1 — Node.js installieren

Dieser Server läuft auf Node.js. Falls du es noch nicht hast:

  1. Gehe zu https://nodejs.org

  2. Lade die LTS-Version (Long Term Support) für dein Betriebssystem herunter.

  3. Führe den Installer aus und übernimm die Standardeinstellungen.

  4. Prüfe, ob es funktioniert hat, indem du ein Terminal öffnest (PowerShell unter Windows, Terminal unter Mac/Linux) und Folgendes ausführst:

    node -v
    npm -v

Beide sollten eine Versionsnummer ausgeben (z. B. v20.11.0). Falls du eine Fehlermeldung siehst, starte dein Terminal bzw. deinen Computer neu und versuche es erneut.

Schritt 2 — Dieses Projekt herunterladen

Option Z: Git verwenden (empfohlen, falls du Git hast)

git clone https://github.com/MSPFE2019/occ-gis-mcp.git
cd occ-gis-mcp

Option B: Ohne Git

  1. Gehe zu https://github.com/MSPFE2019/occ-gis-mcp

  2. Klicke auf den grünen Button Code → Download ZIP

  3. Entpacke das ZIP an einem Ort, den du dir merken kannst (z. B. in deinem Dokuumente-Ordner).

  4. Öffne ein Terminal und wechsle mit cd in den entpackten Ordner, zum Beispiel:

    cd "C:\Users\YourName\Documents\occ-gis-mcp"

Schritt 3 — Abhängngkeiten installieren

Führe im Projektordner Folgendes aus:

npm install

Dadter werden die kleinen Bibliottheken heruntergeladen.

Schritt 4 — Testen, ob der Server läuft

Es gibt zwei Möglichkeiten, den Server auszuführen – wähle je nachdem, wo du ihn verwenden willst:

  • index.js – für lokale Desktop-Tools (Claude Desktop, VS Code).

  • http.example – du für Remote/Cloud-Tools wie Copilot Studio (siehe den entsprecharrin Abschnitt unteen).

Teste zuerst die lokale Variante:

node index.js

Es wird nichts ausgegeben – das ist normal! MCP-Serverusch sich über einen stillen Input/Ausgab-Kanal und warte auf e. Drücke Strg+C, um den Prozess zu beenden.

Nütze für einen visuelleren Test den offiziellen MCP-Inspector, der eine Browserseit öffnet, worauf du Buttons kicken und Live-Ergebn seehen kanst:

siehe: GXP6

Dies öffnet eine lokale Webseite. Klicke auf Verbinden, danach auf List Tools und führe danach list_datasets ohne Argumente aus – du solltest eine List echteer Datensätze als JSON zurückbekom. Wenn das funktioniert, arbeit der Server ohlen.

Schritt 5 – Mit deinem KI-Asistenten verbinden

MCP-Server sind einmal in den Einstellun des KI-Asistenten einzurichten. Wähle für dein Tool:

Claude Desktop

  1. Öffne Claude Desktop → Einstellungen → Entwickle → Konfiguration bearbeiten (öffnet claude_desktop_config.json in eiin Text editor).

  2. Füge einen Eintrag wie diesen dim.

    {
      "mcpServers": {
        "occ-gis": {
          "command": "node",
          "args": ["C:\\Users\\YourName\\Documents\\occ-gis-mcp\\index.js"]
        }
      }
    }
  3. Speichere die Datei und starte Claude Desktop vollständig neu.

  4. Frage: „Welche OCC-GIS-Datasets sind verfügbar?"

# VS Code (GitHub Copilot Chat) oder andere MCP- fähige Editoren

  1. Öffne (oder erstelle) ein mcp.json file in den MCP-Einstellungen (VS: Befehlspalette → „MCP: Benutzerkonfiguration" oder in .vscode/mcp.json).

  2. Füge demselben gen mcpServers-Block wie oben hinzu.

  3. Lade das Fenster neu und die neuen Tools erscheinen im Chat.

Jeder andere MCP-Client

Jeder Client, der den MCP-Standard nur stützt, akzeptiert dieselbe Konfigurationsform: einen command (node) und an Strings args. In der Dokumentationen deines Clienten steht, wo die Konfig-Datei liegt.

Verfügbare Tools

Sobald verbunden gibt es die vier Tools:

Tool

Was es tut

list_datasets

Datensätze auf dem Hub durchsuchen/auflisten (Wells, Tanks, etc.). Optional Freitex query.

get_dataset

Vollständige Details für einen Datens atz mit Titel, inklusive Download-Links (CSV, GeoJSON, Shapefile, KML, File Geodatabases) und der Live-URL des ArcGIS-Service.

get_layer_metadata

E-Feldname, Geometry type und Ausdehnung for elne einzelne ArcGIS L-Layer-URL.

query_layer

Atrribut (where) und/oder räumliche Abfrü gegen elne Layer ausf Leader anddieüber –N..

Anpass an eine andereArcGIS-Hub-Seite

Dieser Server ist nicht nichtkat eine OCC beschränkt — erftiter with any ArcGIS Hub websites, the DCAT-US-catalog-Feed. Öffne server.js und änderne folgendenZeile bei near the top:

const HUB_BASE = "https://gisdata-occokc.opendata.arcgis.com";

Der erServer kann jetzt die base URL treffen. Alles andere (Tool names, query logic) bleichte.

Verbinden mit Microsoft Studio

Copilot Studio führt dein Server nichtallein – er braucht einen HTTPS- URL. That'swhat http.js is for (not index.js, which only local tools like Claude Desktop uses). Two parts: (A) server somewhere visible, then (B) register he.

A. DenHTTP-Server öffentlich bereitstellen

Deineinstellung liestge; all in npm install and npm run start:http.

**ofr Anfänger — Azure App Service (or Azure App Service)).

  1. Push this Repo zu deiem GitHub social (already doneviewt).

  2. In the Azure: create a Web App → "Runtime stack: Node 20 LTS → bereitstellen from repo (Azure).

  3. Under Configuration → Startup-Command set:

    node http.js
  4. Azuregibt dir eine URL https://occ-gis-mcp.azurewebsites.net. The endpoint is https://occ-ga-bggtzen + /mcp:

Auch simple — Render, Railway oder Fly.io

Diese can deploy a Node.-inKlicks:

  • Build-Command: npm install

  • Start-Command: npm run start:http

  • You get a public https://...-URL — again append /mcp.

Nur local tests (not prod)

npm install
npm run start:http

This starts the server http://loc. UnityEngine: https://loc.. etc.

B) In Copilot Studio registrieren

  1. Lange agent in Copilot Studio → Tools → Add a tool → New tool → Model Context Protocol.

  2. Gib it name z. B.„OCCGIS-Daten", fügt die HTTPS-URL inklusive /mcp ein, z. B. https://occ-gis-mcp.org.

  3. Wähle No authentication (the server is root-only).

  4. Save. Copilot Studio callthe server and auto-discover the four tool: (etcList list_datasets, get_dataset, get_layer_metadata, query_layer) — no manual schema.

  5. Test in Studio-Chat: „Which OCCGIS- Datasets exist?" or „Finde active wells in Okl County."

Verfügbare Tools

As above connected, callable:

Tool

What

list_datasets

Datensätze on Hydrop drücken/auflisten. Optionale full-text-aquiry.

get_dataset

Details for a dat ensatz, inkl. file-Links etc.

get_layer_metadata

Field names etc.

query_layer

Attribute and/or spatial query the layer.

Trouble-Shooting

  • **node: . is not installed – or the terminal is restart. Repeat Step 1.

  • ** Inspector errors… — Internet check; the server calls ArcGIS API ff.

  • ** assistant not see tools — File path / URL is not properly; restart client.

  • ** Copilot Studio cannot connect – Check the endpoint ends /mcp, the server is ins, and no/block firewall.

Notes

  • ** Datasets live that DCAT-US code, in cache + 15 minutes.

  • ** Data is public, possible " license" field restrictions.

  • **http.js runs stateless – (fresh server per call), hosting simple and compliant with how Copilot Studio uses MCP tools.

Available Tools

4 tools
get_datasetGet OCC GIS dataset detailsA

Get full details for one dataset on the OCC GIS hub by exact or partial title match, including every distribution (ArcGIS REST service URL, CSV/GeoJSON/Shapefile/KML/FileGDB download links), spatial extent, and license text.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesDataset title or a distinctive substring of it, e.g. 'RBDMS WELLS' or 'PST Tanks'

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It does disclose the returned content and the exact/partial matching behavior, which is useful. However, it does not mention how ambiguous partial matches are handled (e.g., multiple matches, error vs. arbitrary selection), nor any potential side effects or permissions, leaving some behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the action, scope, and key return details without redundancy or filler. Every clause contributes useful information, and it is easily scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one parameter, no output schema), the description is reasonably complete: it covers purpose, matching behavior, and enumerates the returned information. The only notable omission is clarifying behavior when a partial title matches multiple datasets, but this does not severely undermine usability.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully describes the 'title' parameter with examples and the note about distinctive substrings. The tool description adds 'exact or partial title match', but this largely restates the schema's own description. Schema coverage is 100%, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource structure ('Get full details for one dataset on the OCC GIS hub') and clearly enumerates the return contents (distributions, spatial extent, license text). It distinguishes this from sibling tools by focusing on a single dataset found by title, contrasting with list_datasets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: when you need full details of one dataset found by exact or partial title match. It does not explicitly name alternatives or state when not to use it, but the context is unambiguous and implies a targeted lookup rather than listing or querying.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_layer_metadataGet ArcGIS layer metadataA

Fetch metadata (fields, geometry type, extent, name, description) for an ArcGIS FeatureServer/MapServer layer URL, such as one returned by list_datasets or get_dataset as 'featureServiceUrl'.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerUrlYesArcGIS REST layer URL, e.g. https://gis.occ.ok.gov/server/rest/services/Hosted/RBDMS_WELLS/FeatureServer/220

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must convey behavioral traits. The verb 'Fetch' implies a read-only operation, and the description lists the returned metadata fields, which is useful. However, it does not disclose error handling, authentication requirements, or any side effects (though likely none). It is adequate but lacks rich behavioral context that might be expected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the action and resource, then lists the metadata fields. It is concise with no fluff, and every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter, no output schema), and the description covers its purpose, input source, and the fields it returns. It goes beyond the minimum by specifying the expected URL type and provenance. Minor gaps include not describing the response format, but the listed fields effectively convey what is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully describes the single parameter 'layerUrl' with a description and example, giving 100% schema coverage. The description adds a small hint about the URL's provenance (from list_datasets/get_dataset) and that it should be a layer endpoint, but this is marginal. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Fetch') and resource ('ArcGIS FeatureServer/MapServer layer URL'), enumerating the exact metadata fields returned (fields, geometry type, extent, name, description). It also differentiates from siblings by referencing list_datasets/get_dataset and focusing on metadata, not querying.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context on when to use the tool: for a layer URL such as one returned by list_datasets or get_dataset as 'featureServiceUrl'. This implies it is the follow-up to those tools. It does not explicitly exclude alternatives like query_layer, but the context is clear enough for an agent to choose it for metadata retrieval.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_datasetsList OCC GIS datasetsA

List/search datasets published on the OCC GIS open data hub (gisdata-occokc.opendata.arcgis.com). Optionally filter with a free-text query matched against title, description, and keywords. Returns each dataset's title, description, landing page, keywords, and (when available) its ArcGIS FeatureServer/MapServer REST URL plus downloadable formats (CSV, GeoJSON, Shapefile, KML, File Geodatabase).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of results to return (default 25)
queryNoOptional free-text search, e.g. 'wells', 'tanks', 'pipeline'

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the data source URL, search matching behavior (title, description, keywords), and return fields, plus the caveat 'when available' for REST URL and formats, offering honest behavioral insight without promising more than the tool likely delivers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and front-loads the core purpose. It is somewhat dense with comma-separated return field details, but every element serves a functional purpose and no filler exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema is present, so the description adequately enumerates return fields and optional filters. It could mention pagination or default limits, but the limit parameter in the schema already covers that, making this sufficiently complete for a list/search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema already has 100% coverage for the two parameters. The description adds meaning beyond the schema by specifying that the query is 'matched against title, description, and keywords', which enriches the schema's generic 'Optional free-text search'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List/search datasets published on the OCC GIS open data hub', using a specific verb and resource. It clearly distinguishes from siblings like get_dataset (single dataset) and query_layer (feature query) by focusing on dataset listing/searching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does and the optional query filter, but it does not explicitly state when to use this tool over siblings or when to avoid it. Usage is implied by the 'List/search' purpose, but no alternatives or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_layerQuery an ArcGIS layer's featuresA

Run an attribute and/or spatial query against an ArcGIS FeatureServer/MapServer layer (e.g. OCC well points, tank sites) and return matching feature attributes (and optionally geometry) as JSON. Use get_layer_metadata first to see available fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
whereNoSQL-style attribute filter, e.g. "COUNTY = 'OKLAHOMA'" or "STATUS = 'AC'". Defaults to 1=1 (all rows).
geometryNoOptional spatial filter geometry, e.g. 'xmin,ymin,xmax,ymax' envelope in WGS84 lon/lat.
layerUrlYesArcGIS REST layer URL, e.g. https://gis.occ.ok.gov/server/rest/services/Hosted/RBDMS_WELLS/FeatureServer/220
outFieldsNoComma-separated field names to return, or '*' for all (default).
spatialRelNoSpatial relationship, e.g. esriSpatialRelIntersects (default).
geometryTypeNoGeometry type for the 'geometry' param, e.g. esriGeometryEnvelope (default) or esriGeometryPoint.
orderByFieldsNoComma-separated field(s) to sort by, e.g. 'API_NUMBER ASC'.
returnGeometryNoWhether to include geometry (lat/lon) in results (default false).
resultRecordCountNoMax number of records to return (default 50).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the return format (JSON), optional geometry inclusion, and the nature of querying (read-only is implied). It could mention error handling or response size limits, but the 'Use get_layer_metadata first' hint and example layer URLs add useful context beyond minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the action, and every word contributes. It avoids redundancy while including examples and a usage hint, making it both concise and structured for quick scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters and no output schema, the description covers the essential context: purpose, return type, and a prerequisite action. It does not mention output structure or error handling, but given the interactive schema and sibling context, it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds a helpful pointer to get_layer_metadata for field discovery, but does not elaborate on parameter relationships or edge cases. This meets the baseline for high schema coverage without adding substantial extra meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs an attribute and/or spatial query against an ArcGIS FeatureServer/MapServer layer and returns matching features as JSON. It uses a specific verb 'Run' and identifies the resource (layer), examples (OCC well points, tank sites), and distinguishes from siblings by explicitly mentioning get_layer_metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit context for when to use this tool (attribute/spatial query) and instructs to use get_layer_metadata first to see available fields, which implies a prerequisite step. It does not explicitly mention when not to use it or compare with list_datasets/get_dataset, but the guidance is clear enough for typical use.

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.

  1. 4 tool updatesv1.0.0
    • First observedget_dataset
    • First observedget_layer_metadata
    • First observedlist_datasets
    • First observedquery_layer

TDQS

A4.4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct role: listing/searching datasets, fetching full dataset details, inspecting layer metadata, and querying layer features. There is no overlap that would confuse an agent selecting among them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (list_datasets, get_dataset, get_layer_metadata, query_layer), using snake_case throughout and verbs that clearly indicate the action.

Tool Count5/5

Four tools is an appropriate scope for a read-only GIS data discovery and query server. Each tool fills a necessary step in the workflow without redundancy or bloat.

Completeness5/5

The tool surface fully covers the core workflow: discovering datasets, retrieving full metadata, inspecting layer schemas, and querying features. No obvious dead ends exist; even direct data downloads are covered via distribution URLs returned by the get_dataset tool.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    This MCP server provides access to City of Houston GIS open geospatial data, enabling search, query, and schema retrieval of datasets like parcels and zoning through ArcGIS feature services.
    21 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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.
    19 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that gives LLM agents typed, cached access to civic open-data portals via Socrata (SODA 2.1 + Discovery API), enabling search, query, profiling, sampling, and CSV export of datasets.
    6
    MIT