GeoServer MCP Server について
GeoServer MCP Server は、LLM を GeoServer REST API に接続する MCP サーバーであり、AI アシスタントから地理空間データとサービスを操作できるようにします。自然言語で GeoServer を管理したい GIS ユーザーや開発者を対象としています。pip、Docker、または GeoServer 拡張として実行できます。
主な機能
- 01ワークスペース、レイヤー、データストア、スタイルの管理
- 02ベクターデータに対する空間クエリの実行
- 03地図の可視化の生成
- 04WMS と WFS などの OGC サービスへのアクセス
- 05--storage オプションによるファイルルートディレクトリの指定
活用シーン
- 01AI アシスタントによる GeoServer レイヤーの照会と変更
- 02Shapefile や GeoPackage データストアの一括作成
- 03GIS データからの地図プレビューの生成
MCP 対応
本プロジェクトは MCP サーバーであり、GeoServer REST API の操作を list_workspaces や geoserver://catalog/layers などのツールおよびリソースとして MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
GeoServer MCP サーバー
大規模言語モデル(LLM)を GeoServer REST API に接続し、AI アシスタントが地理空間データやサービスを操作できるようにする、Model Context Protocol(MCP)サーバーの実装です。
バージョン 0.5.0(ベータ)は現在積極的に開発中で、まもなくリリースされる予定です。貢献を歓迎します。このプロジェクトの構築に参加する開発者をお待ちしています。
🎥 デモ
📋 目次
🚀 機能
- 🔍 GeoServer のワークスペース、レイヤー、スタイルを検索・操作します
- 🗺️ ベクターデータに対して空間クエリを実行します
- 🎨 地図の可視化を生成します
- 🌐 OGC 準拠のウェブサービス(WMS、WFS)にアクセスします
- 🛠️ MCP 対応クライアントと簡単に統合できます
🚀 デプロイ方法
GeoServer MCP は 2 つの方法で実行できます。どちらも同じ製品コンセプト(GeoServer 用の MCP ツール)を共有していますが、別個の成果物です。Python パッケージに変更はありません。
GeoServer MCP
│
┌───────────┴───────────┐
│ │
Python MCP Server GeoServer Extension
│ │
▼ ▼
GeoServer GeoServer
│ │
└───────────┬───────────┘
│
MCP Interface
│
▼
AI Agents
Python MCP サーバー
GeoServer MCP を個別に実行します(pip、Docker、または Smithery)。プロセスはエージェントと MCP で通信し、GeoServer REST API を呼び出します。これは従来のデプロイ方法で、現在公開されています。
以下のインストールを参照してください。
GeoServer 拡張機能
GeoServer に GeoServer MCP Extension を直接インストールし、/geoserver/mcp にリモート MCP エンドポイントを公開します。Python のサイドカーは不要です。GeoServer 2.28.x を対象としています。
アーキテクチャ、インストール、設定、セキュリティ、クライアントの例については、extension/README.mdを参照してください。
📋 前提条件
- Python 3.10 以降
- REST API が有効な、稼働中の GeoServer インスタンス
- MCP 対応クライアント(Claude Desktop や Cursor など)
- パッケージのインストールに必要なインターネット接続
🛠️ インストール
ニーズに最適なインストール方法を選択してください。
Smithery 経由でインストール
Smithery 経由で Claude Desktop 用の GeoServer MCP Server を自動的にインストールするには、次の手順を実行します。
npx -y @smithery/cli install @mahdin75/geoserver-mcp --client claude
🛠️ インストール(Docker)
Docker を使用したインストールは、GeoServer MCP サーバーを実行する最も迅速で分離性の高い方法です。次の用途に最適です。
- すばやいテストと評価
- 本番環境へのデプロイ
- Python の依存関係を避けたい環境
- さまざまなシステム間で一貫したデプロイ
- geoserver-mcp を実行します。
docker pull mahdin75/geoserver-mcp
docker run -d mahdin75/geoserver-mcp
- クライアントを設定します。
Claude Desktop を使用している場合は、claude_desktop_config.json を編集します。
Cursor を使用している場合は、.cursor/mcp.json を作成します。
{
"mcpServers": {
"geoserver-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GEOSERVER_URL=http://localhost:8080/geoserver",
"-e",
"GEOSERVER_USER=admin",
"-e",
"GEOSERVER_PASSWORD=geoserver",
"-p",
"8080:8080",
"mahdin75/geoserver-mcp"
]
}
}
}
🛠️ インストール(pip)
pip を使用したインストールは、サーバーをシステム上で直接実行したいほとんどのユーザーに推奨される方法です。次の用途に適しています。
- サーバーをローカルで実行したい一般ユーザー
- Python 3.10 以降がインストールされているシステム
- サーバーの設定をカスタマイズしたいユーザー
- 開発およびテスト
- uv パッケージマネージャーをインストールします。
pip install uv
- 仮想環境を作成します(Python 3.10 以降)。
Linux/Mac:
uv venv --python=3.10
Windows PowerShell:
uv venv --python=3.10
- pip を使用してパッケージをインストールします。
uv pip install geoserver-mcp
- GeoServer 接続を設定します。
Linux/Mac:
export GEOSERVER_URL="http://localhost:8080/geoserver"
export GEOSERVER_USER="admin"
export GEOSERVER_PASSWORD="geoserver"
Windows PowerShell:
$env:GEOSERVER_URL="http://localhost:8080/geoserver"
$env:GEOSERVER_USER="admin"
$env:GEOSERVER_PASSWORD="geoserver"
- サーバーを起動します。
Claude Desktop を使用する場合、この手順は必要ありません。Cursor または独自のクライアントを使用する場合は、次のコードを実行してください。
Linux:
source .venv/bin/activate
geoserver-mcp
または
source .venv/bin/activate
geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debug
Windows PowerShell:
.\.venv\Scripts\activate
geoserver-mcp
または
.\.venv\Scripts\activate
geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debug
- クライアントを設定します。
Claude Desktop を使用している場合は、claude_desktop_config.json を編集します。
Cursor を使用している場合は、.cursor/mcp.json を作成します。
Windows:
{
"mcpServers": {
"geoserver-mcp": {
"command": "C:\\path\\to\\geoserver-mcp\\.venv\\Scripts\\geoserver-mcp",
"args": [
"--url",
"http://localhost:8080/geoserver",
"--user",
"admin",
"--password",
"geoserver"
]
}
}
}
Linux:
{
"mcpServers": {
"geoserver-mcp": {
"command": "/path/to/geoserver-mcp/.venv/bin/geoserver-mcp",
"args": [
"--url",
"http://localhost:8080/geoserver",
"--user",
"admin",
"--password",
"geoserver"
]
}
}
}
🛠️ 開発用インストール
開発用インストールは、コードベースを変更したいコントリビューターや開発者向けです。次の用途に適しています。
- プロジェクトに貢献する開発者
- ソースコードを変更する必要があるユーザー
- 新機能のテスト
- デバッグおよび開発
- uv パッケージマネージャーをインストールします。
pip install uv
- 仮想環境を作成します(Python 3.10 以降)。
uv venv --python=3.10
- pip を使用してパッケージをインストールします。
uv pip install -e .
- GeoServer 接続を設定します。
Linux/Mac:
export GEOSERVER_URL="http://localhost:8080/geoserver"
export GEOSERVER_USER="admin"
export GEOSERVER_PASSWORD="geoserver"
Windows PowerShell:
$env:GEOSERVER_URL="http://localhost:8080/geoserver"
$env:GEOSERVER_USER="admin"
$env:GEOSERVER_PASSWORD="geoserver"
- サーバーを起動します。
Claude Desktop を使用する場合、この手順は必要ありません。Cursor または独自のクライアントを使用する場合は、次のコードを実行してください。
Linux:
source .venv/bin/activate
geoserver-mcp
または
source .venv/bin/activate
geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debug
Windows PowerShell:
.\.venv\Scripts\activate
geoserver-mcp
または
.\.venv\Scripts\activate
geoserver-mcp --url http://localhost:8080/geoserver --user admin --password geoserver --debug
- クライアントを設定します。
Claude Desktop を使用している場合は、claude_desktop_config.json を編集します。
Cursor を使用している場合は、.cursor/mcp.json を作成します。
Windows:
{
"mcpServers": {
"geoserver-mcp": {
"command": "C:\\path\\to\\geoserver-mcp\\.venv\\Scripts\\geoserver-mcp",
"args": [
"--url",
"http://localhost:8080/geoserver",
"--user",
"admin",
"--password",
"geoserver"
]
}
}
}
Linux:
{
"mcpServers": {
"geoserver-mcp": {
"command": "/path/to/geoserver-mcp/.venv/bin/geoserver-mcp",
"args": [
"--url",
"http://localhost:8080/geoserver",
"--user",
"admin",
"--password",
"geoserver"
]
}
}
}
ファイルストレージと --storage の使用
GeoServer MCP サーバーでは、シェープファイルや GeoTIFF のアップロード、結果のエクスポートなど、すべてのファイル読み書き操作のベースディレクトリを指定するために、オプションの --storage フラグを使用できます。
概要
--storageフラグは、データ関連のすべてのツールでファイル操作のルートフォルダーを設定します。- 関連するツールの引数には、相対パス(ストレージのルートからの相対パス)または絶対パス(ストレージのルートを経由しない)を指定できます。
--storageが設定されていない場合、パスはユーザーが指定したとおりに解決されます(作業ディレクトリからの相対パスまたは絶対パス)。
CLI の例
python -m geoserver_mcp.main --storage D:/my/data/dir
これにより、D:/my/data/dir がすべてのファイルのベースパスとして設定されます。
Python でのツール呼び出しの例:
# Will read from D:/my/data/dir/roads.zip if --storage is set to D:/my/data/dir
create_shp_datastore('workspace', 'datastore_name', 'roads.zip')
(例:'C:/input/other.shp')のような絶対パスは、常にそのまま使用されます。
Docker で実行する場合
Docker を使用する場合は、次のようにストレージディレクトリをボリュームとしてマウントしてください。
docker run -v D:/my/data:/opt/data ...
次に、以下のコマンドでサーバーを起動します。
python -m geoserver_mcp.main --storage /opt/data
ベストプラクティス
- API/ツールを使用する際は相対パスを使うと、設定の移植性を保てます。
- リモート環境またはコンテナーにデプロイする場合は、ファイルデータにコンテナー内からアクセスできることを必ず確認してください(必要に応じて Docker ボリュームを使用してください)。
- ストレージシステムを使用する引数については、ツールの docstring を確認してください。
--storage システムを使うと、すべてのユーザーのファイル管理が効率化され、デプロイの柔軟性が大幅に向上します。
🛠️ 利用可能なツール
このセクションでは、GeoServer MCP サーバーが公開するすべての利用可能なツールとリソースについて説明します。これらのツールを使用すると、LLM は GeoServer の REST API を利用して、地理空間データを包括的に管理できます。
🌍 リソースエンドポイント
リソースエンドポイントを使用すると、URI パターンを通じて GeoServer のリソースに直接アクセスできます。
| リソース URI | 説明 |
|---|---|
geoserver://catalog/workspaces | 利用可能なワークスペースの一覧を取得します |
geoserver://catalog/layers/{workspace}/{layer} | 特定のレイヤーに関する情報を取得します |
geoserver://services/wms/{request} | WMS リソースリクエストを処理します |
geoserver://services/wfs/{request} | WFS リソースリクエストを処理します |
📦 ワークスペースの管理
| ツール | 説明 |
|---|---|
list_workspaces | GeoServer で利用可能なワークスペースの一覧を取得します |
create_workspace | GeoServer に新しいワークスペースを作成します |
📁 データストアとカバレッジストアの管理
| ツール | 説明 |
|---|---|
create_datastore | 指定したワークスペースに新しいデータストアを作成します |
create_featurestore | 指定したワークスペースに新しいフィーチャーストアを作成します |
create_gpkg_datastore | GeoPackage(GPKG)データストアを作成します |
create_shp_datastore | ESRI Shapefile データストアを作成します |
create_coveragestore | ワークスペースに新しいカバレッジストアを作成します |
delete_coveragestore | ワークスペースからカバレッジストアを削除します |
get_coveragestore | 単一のカバレッジストアの詳細を取得します |
get_coveragestores | ワークスペース内のすべてのカバレッジストアを取得します |
get_datastore | 名前を指定してデータストアを取得します |
get_datastores | 指定したワークスペース内のすべてのデータストアを一覧表示します |
🗺️ レイヤーの管理
| ツール | 説明 |
|---|---|
get_layer_info | レイヤーの詳細情報を取得します |
list_layers | GeoServer のレイヤーを一覧表示します。必要に応じてワークスペースで絞り込めます |
create_layer | GeoServer に新しいレイヤーを作成します |
delete_resource | GeoServer からリソースを削除します(汎用) |
🧩 レイヤーグループの管理
| ツール | 説明 |
|---|---|
create_layergroup | 特定のレイヤーと(任意で)スタイルを含む、新しいレイヤーグループを作成します |
get_layergroup | ワークスペースからレイヤーグループを取得します |
get_layergroups | ワークスペース内のすべてのレイヤーグループを一覧表示します |
add_layer_to_layergroup | 特定のレイヤーをレイヤーグループに追加します |
remove_layer_from_layergroup | レイヤーグループからレイヤーを削除します |
delete_layergroup | ワークスペースからレイヤーグループを削除します |
update_layergroup | レイヤーグループの詳細と設定を更新します |
👥 ユーザーとユーザーグループの管理
| ツール | 説明 |
|---|---|
create_user | GeoServer セキュリティ用の新しいユーザーを作成します |
delete_user | 名前を指定してユーザーを削除します |
get_all_users | GeoServer インスタンス内のすべてのユーザーを一覧表示します |
modify_user | 既存のユーザーのプロパティを変更します |
create_usergroup | 新しいユーザーグループを作成します |
delete_usergroup | ユーザーグループを削除します |
get_all_usergroups | すべてのユーザーグループを返します |
📊 フィーチャータイプと属性の管理
| ツール | 説明 |
|---|---|
query_features | CQL フィルターを使用してベクターレイヤーからフィーチャーをクエリします |
publish_featurestore | 既存のフィーチャーストアを公開します |
publish_featurestore_sqlview | SQL ビュー定義を使用してフィーチャーストアを公開します |
edit_featuretype | ストア内のフィーチャータイプの設定を編集します |
get_featuretypes | 指定したストア内のすべてのフィーチャータイプを一覧表示します |
get_feature_attribute | フィーチャー属性のスキーマや詳細を取得します |
🎨 スタイルの管理
| ツール | 説明 |
|---|---|
create_style | GeoServer に新しい SLD スタイルを作成します |
publish_style | スタイルをレイヤーに割り当てて公開します |
create_catagorized_featurestyle | フィーチャー用のカテゴリ別スタイルを作成します |
create_classified_featurestyle | フィーチャー用の分類スタイルを作成します |
create_coveragestyle | ラスターカバレッジスタイルを作成します |
create_outline_featurestyle | フィーチャー用のシンプルな輪郭のみのスタイルを作成します |
⚙️ システムとサービスの操作
| ツール | 説明 |
|---|---|
get_manifest | GeoServer のマニフェストメタデータや詳細を取得します |
get_status | サーバーの全般的なステータスを取得します |
get_system_status | GeoServer のシステムステータスの概要や情報を取得します |
get_version | GeoServer のバージョン文字列を取得します |
reload_geoserver | カタログと設定をディスクから再読み込みします |
reset_geoserver | GeoServer のすべてのキャッシュと接続をリセットします |
update_service | 選択した OGC サービスのオプションを更新します |
publish_time_dimension_to_coveragestore | カバレッジストアの時間ディメンションを追加または更新します(時系列用) |
📝 スタイル XML ユーティリティ
| ツール | 説明 |
|---|---|
style_catagorize_xml | カテゴリ別ベクタースタイル用の SLD を生成します |
style_classified_xml | 分類ベクタースタイル用の SLD XML を取得します |
style_coverage_style_colormapentry | ラスター SLD 用のカラーマップエントリーを生成します |
style_coverage_style_xml | ラスター/カバレッジ SLD 用の XML を生成します |
style_outline_only_xml | ジオメトリ用の輪郭のみのスタイルの XML |
🛠️ クライアント開発
GeoServer MCP サーバーと連携する独自のクライアントを開発する予定がある場合は、examples/client.py のクライアント実装例が参考になります。この例では、次の方法を紹介しています。
- MCP サーバーへの接続を確立する方法
- リクエストを送信し、レスポンスを処理する方法
- 基本的なエラー処理と接続管理
- さまざまなツールや操作の使用例
このクライアントの例は、プロトコルを理解し、独自のクライアントアプリケーションを実装するための出発点として役立ちます。
また、使用例は次のとおりです。
ワークスペースの一覧表示
Tool: list_workspaces
Parameters: {}
Response: ["default", "demo", "topp", "tiger", "sf"]
レイヤー情報の取得
Tool: get_layer_info
Parameters: {
"workspace": "topp",
"layer": "states"
}
フィーチャのクエリ
Tool: query_features
Parameters: {
"workspace": "topp",
"layer": "states",
"filter": "PERSONS > 10000000",
"properties": ["STATE_NAME", "PERSONS"]
}
マップの生成
Tool: generate_map
Parameters: {
"layers": ["topp:states"],
"styles": ["population"],
"bbox": [-124.73, 24.96, -66.97, 49.37],
"width": 800,
"height": 600,
"format": "png"
}
🔮 今後予定されている機能
- カバレッジデータとラスターデータの管理
- セキュリティとアクセス制御
- 高度なスタイル設定機能
- WPS 処理操作
- GeoWebCache との統合
🤝 貢献
皆さまからの貢献を歓迎します!次の方法でご協力いただけます。
- リポジトリをフォークする
- 機能ブランチを作成する(
git checkout -b feature/AmazingFeature) - 変更をコミットする(
git commit -m 'Add some AmazingFeature') - ブランチにプッシュする(
git push origin feature/AmazingFeature) - プルリクエストを作成する
PR の説明には、問題と解決策を明確に記載してください。該当する場合は、関連する issue 番号も含めてください。
📄 ライセンス
このプロジェクトは MIT ライセンスの下でライセンスされています。詳細については、LICENSE ファイルをご覧ください。
🔗 関連プロジェクト
- Model Context Protocol - MCP のコア実装
- GeoServer REST API - GeoServer REST の公式ドキュメント
- GeoServer REST Python Client - GeoServer REST API 用の Python クライアント
🌐 関連項目:GIS MCP
地理空間データの自動化を幅広く行い、GIS 関連の MCP 機能をさらに利用するには、mahdin75 による GIS MCPをご覧ください。
📞 サポート
サポートが必要な場合は、issueを作成してください。
🏆 バッジ
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
