Arcgis Portal Mcp について
ArcGIS Enterprise Portal および ArcGIS Online 向けの MCP サーバーで、81 個のツールを提供します。GIS 管理者や分析担当者が AI アシスタントからコンテンツの検索、クエリ、編集、管理を行う用途を想定しており、リードオンリーモード、ツール許可リスト、監査ログによりアクセスを制限できます。
主な機能
- 01アイテムの検索とメタデータの確認
- 02属性および空間フィルターによるフィーチャーレイヤーのクエリ
- 03ホステッドレイヤーのフィーチャーの追加・更新・削除
- 04ユーザー、グループ、コンテンツ共有の管理
- 05リードオンリーモード、ツール許可リスト、監査ログ
活用シーン
- 01フィーチャーレイヤーのクエリによるデータに関する質問への回答
- 02担当者変更時のコンテンツ所有権の一括移管
- 03Web マップ内の切れたサービス参照の検出
MCP 対応
本プロジェクトは MCP サーバーであり、ArcGIS Portal および ArcGIS Online のコンテンツ、フィーチャー、ユーザー、管理用ツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
arcgis-portal-mcp
v1.15.0. ArcGIS Enterprise Portal と ArcGIS Online 向けの 81 個のツールです。
AI アシスタントから ArcGIS コンテンツに直接アクセスできる Model Context Protocol(MCP)サーバーです。自然言語で検索、確認、編集、公開、管理ができます。
Claude Desktop、Cursor、VS Code Copilot、および MCP 対応のあらゆるクライアントで動作します。
免責事項: これは独立したオープンソースプロジェクトです。Esri との提携関係はなく、Esri による承認や支援も受けていません。「ArcGIS」は Esri の登録商標です。
v1.14.0 の新機能
- ArcGIS Enterprise 12.x での公開処理を修正:
upload_itemが正しい/addItemエンドポイントを使用するようになり、publish_from_itemは ArcGIS が想定する正確なワイヤ形式(fileType、小文字のitemid、公開 URL 内のユーザー GUID)を送信します。Enterprise 12.x では、以前のコードは「成功」を返しても、ArcGIS Server にホストサービスが作成されていませんでした。 - CSV をそのまま公開可能:
layerInfoを指定せずに CSV を公開すると、ヘッダーと最初のデータ行から、緯度/経度の座標検出を含むフィールドスキーマが自動生成されます。これがないと、ArcGIS は CSV の公開に失敗しても何も通知しません。
v1.13.0 の新機能
- Enterprise の検索を修正:
search_items("*")が Enterprise ポータルで動作するようになりました。文字列*で検索して項目が 0 件の場合、アクセスベースのクエリに自動でフォールバックします。 - システムコンテンツのフィルタリング:
portal_inventoryは、デフォルトで Esri のシステムアカウント(esri_*、portaladmin)を除外するようになり、組織の実際のコンテンツ数を正確に把握できます。システムコンテンツを含めるには、exclude_system_content=falseを渡します。
v1.12.0 の新機能
portal_inventory: ポータルコンテンツをスキャンし、タイプ、所有者、経過期間、ストレージ別に項目数を表示します。組織のコンテンツを俯瞰できます。bulk_reassign_ownership: 複数のユーザー間でコンテンツの所有権を一括で移譲します。退職やチーム変更の際に役立ちます。offboard_user: コンテンツを移譲してグループから削除することで、ユーザーのオフボーディングを行います。- AGOL の修正:
portal_inventoryが ArcGIS Online の組織を正しくクエリするようになりました(以前は項目が 0 件と表示されていました)。 - 信頼性の高い自動接続: 認証情報を常に
.envから新たに読み込むようになり、ゲートウェイの再起動後に発生する古い認証情報の問題が修正されました。
v1.11.1 の新機能
- Enterprise の検索を修正:
contentStatus=allが必要な Enterprise ポータルでsearch_items("*")が動作するようになりました。 - 自動再接続: 長時間の操作(古いコンテンツのスキャン、壊れた参照の検出)中にトークンが期限切れになると、自動的に再認証します。
- 壊れた参照のスキャンを高速化: HEAD リクエストを使用し、405 の場合は GET にフォールバックします。
- エラー診断を改善:
admin_requestのエラーにhttp_statusコードが含まれるようになり、server_statusに認証方法とトークンの有効期限が表示されます。 find_stale_itemsを最適化: ガバナンスチェック用の項目の詳細情報は、すでに古いと判定された項目についてのみ取得します。- フィールド名を統一: どこでも
full_nameを使用します(以前はget_user_detailsでfullnameが使われていました)。 portal_healthにportal_urlとconnected_asが表示されるようになりました。search_contentのデフォルトのmax_itemsを 20 から 100 に引き上げました。list_usersに、書式設定された日付に加えてlast_login_epoch(生のミリ秒値)が含まれるようになりました。
v1.11.0 の新機能
- 壊れた参照のスキャナー: ウェブマップ、ダッシュボード、アプリをスキャンし、到達できないサービス URL を検出します。ユーザーから報告される前に、壊れたレイヤーを見つけられます。
- 古いコンテンツの検出: N 日間変更されていない項目を特定し、ガバナンス違反も検出します。ポータル内の不要なコンテンツを整理できます。
- グループコンテンツのエクスポート: グループの項目を Enterprise の .epk パッケージにエクスポートし、ポータル間でコンテンツを移行します。
- グループコンテンツのインポート: .epk パッケージから項目をターゲットグループにインポートします。
v1.10.0 の新機能
- グループのライフサイクル管理: グループの更新、削除、メンバー管理が可能になり、ポータルグループの CRUD 操作が一通りそろいました。
- フォルダーの削除: コンテンツフォルダーを削除します(フォルダー内のコンテンツに関する警告付き)。
- ユーザー検索: ユーザー一覧全体を出力せずに、名前、メールアドレス、またはユーザー名でユーザーを検索します。
v1.9.0 の新機能
- 読み取り専用モード:
MCP_READ_ONLY=trueまたは--read-onlyCLI フラグを使って、すべての書き込み/変更ツールをブロックします - ツールの許可リスト:
MCP_ALLOWED_TOOLS=name1,name2を使って、AI クライアントが参照および呼び出しできるツールを制限します - 監査ログ:
MCP_AUDIT_LOG=pathを使って、すべてのツール呼び出しを JSONL ファイルに記録します。パスワードとトークンは自動的にサニタイズされます
v1.8.0 の新機能
- コラボレーション:分散 GIS コラボレーションの一覧表示、詳細の確認、同期の開始ができます
- ロールと権限:組織のロールと、それぞれの完全な権限セットを一覧表示します
- スケジュール済みタスク:組織全体またはユーザーごとのスケジュール済みタスクを一覧表示し、フィルタリングします
v1.7.0 の新機能
- Webhook:ポータルの自動化に使用する組織の Webhook を一覧表示、作成、更新、削除、テストできます
- ログ:レベル、ソース、時間のフィルターを使ってポータルのログを検索、消去します
- 組織の設定:ポータルの設定を読み取り、更新します
- フォルダー:アイテムをより適切に整理するためのコンテンツフォルダーを作成、一覧表示します
v1.6.0 の新機能
- TLS 検証の設定:証明書検証はデフォルトで有効になりました。自己署名の Enterprise 証明書を使用する場合は
MCP_TLS_VERIFY=falseを設定します - スコープ付き許可リスト:
MCP_ALLOWED_*環境変数を使って、サーバーがアクセスできるポータル、所有者、グループ、サービス URL を制限します
Esri Community の muend から寄せられたコミュニティのフィードバックを参考にしたセキュリティ強化です。
v1.5.0 の新機能
- アイテム影響分析:アイテムを削除した場合に何が機能しなくなるかを確認します。
- 関連性エクスプローラー:サービス、Web マップ、レイヤー、アプリの関連性をマッピングします。
- 使用状況分析:API 呼び出し、アクティブユーザー、ストレージの傾向を確認します(管理者向け)。
- グループメンバーシップ監査:各グループのメンバーと、非アクティブなユーザーを確認します。
- サービス依存関係スキャナー:リンク切れやデータソースの不足を確認します。
- 一括操作:複数のアイテムを一度に更新、共有、削除します。
機能
- 任意の ArcGIS Enterprise Portal または ArcGIS Online に接続します。
- アイテム(フィーチャサービス、Web マップ、レイヤー、ダッシュボード)を検索します。
- アイテムのメタデータ、タグ、説明を確認します。
- レイヤーを説明します:フィールド、ドメイン、サブタイプ、関連性、レンダラー情報を含む完全なスキーマを確認します。
- 属性フィルター、空間フィルター、フィールド選択、ページネーションを使ってフィーチャをクエリします。
- ホストフィーチャレイヤーのフィーチャを追加、更新、削除します。
- コンテンツを管理します:プロパティの更新、共有/共有解除、アイテムの削除、Web マップ定義の読み取りを行います。
- ユーザーを管理します:ユーザーを一覧表示し、詳細なプロフィールを取得します。
- グループを管理します:グループを一覧表示、作成し、ユーザーを招待します。
- サービスを公開します:ファイルをアップロードし、ホストフィーチャサービスとして公開します。
- GP ツールを確認します:実行前にタスクを一覧表示し、パラメータースキーマを確認します。
- ジオプロセシングを実行します:同期および非同期の GP タスクを実行します。
- マップ画像をエクスポートします:レイヤーを JPG/PNG/GIF/PDF/SVG としてレンダリングします。
- ポータル管理:システム情報、ライセンス管理、使用統計を確認します。
- 一括操作:複数のアイテムを一括で削除、共有、更新します。
- ヘルスチェック:ポータルのシステムステータスを確認します(管理者権限が必要です)。
設計原則
arcgisPython パッケージへの依存なし:requests経由で REST API を直接呼び出すため、Esri の Python SDK に悩まされる必要はありません。- Enterprise Portal と ArcGIS Online の両方で動作:同じツール、同じ API を使用します。
- 複数の認証方法:トークン、ユーザー名/パスワード、client_credentials、OAuth2 に対応しています。
- 自動接続:起動時に
.envファイルを読み込むため、セッションごとに手動で認証する必要はありません。 - 2 要素認証に対応:2 要素認証を必須とする Enterprise ポータルで動作します。
- 自己署名証明書に対応:自己署名証明書を使用する Enterprise ポータルを処理できます。
- セキュリティ強化:WHERE 句の SQL インジェクション検証、OAuth コールバックの XSS 保護、指数バックオフによる自動再試行、読み取り専用モード、ツールの許可リスト、監査ログを備えています。
- スコープ付き許可リスト:ポータル、所有者、グループ、サービス URL を任意で制限し、本番環境でエージェントが影響を及ぼす範囲を縮小できます。
インストール
pip install git+https://github.com/Asem-D/arcgis-portal-mcp.git
または、ソースからクローンしてインストールします。
git clone https://github.com/Asem-D/arcgis-portal-mcp.git
cd arcgis-portal-mcp
pip install -e .
Windows ユーザー: pywin32 はプラットフォーム固有の依存関係として自動的にインストールされます。
設定
.env ファイル(推奨)
起動時に自動接続するには、.env ファイルを作成します。テンプレートが用意されています。
cp .env.example .env
# Edit .env with your portal credentials
portal_url=https://gis.example.com/portal
# Option 1: Username/password (recommended for most users)
username=your-portal-username
password=your-portal-password
# Option 2: OAuth2 app credentials (app-level, limited permissions)
# oauth_client_id=your-oauth-app-client-id
# oauth_client_secret=your-oauth-app-client-secret
サーバーは次の順序で .env を検索します。
- パッケージディレクトリ(サーバーコードと同じ場所)— ソースからインストールした場合に使用します
- 現在の作業ディレクトリ — プロジェクトのルートから起動した場合に使用します
~/.arcgis-portal-mcp/.env—pip installを使用した場合に使用します
引用符で囲まれた値にも対応しています:password="my secret"。既存の OS 環境変数は .env の値より優先されます。
サーバーは起動時に .env を読み込み、自動的に接続します。username と password が指定されている場合は、generateToken(ユーザーレベル、完全な権限)を使用します。それ以外の場合は、client_credentials(アプリレベル、制限付き)にフォールバックします。手動で connect_portal を呼び出す必要はありません。
注:
.envファイルは gitignore の対象です。認証情報は決してコミットしないでください。.env.exampleは安全にコミットできます。
MCP クライアントの設定
MCP クライアント(Claude Desktop、Cursor など)では、.env ファイルを使うのが最も簡単です。
{
"mcpServers": {
"arcgis-portal": {
"command": "python",
"args": ["-m", "arcgis_portal_mcp.server"],
"cwd": "/path/to/arcgis-portal-mcp"
}
}
}
サーバーは .env(パッケージディレクトリ、CWD、または ~/.arcgis-portal-mcp/ を検索)から自動接続します。MCP 設定に環境変数を指定する必要はありません。
または、MCP クライアントの環境変数で認証情報を渡します。
{
"mcpServers": {
"arcgis-portal": {
"command": "python",
"args": ["-m", "arcgis_portal_mcp.server"],
"env": {
"portal_url": "https://gis.example.com/portal",
"username": "your-portal-username",
"password": "your-portal-password"
}
}
}
}
MCP クライアントの接続
一般的な AI コーディングアシスタントの設定手順です。
Claude Desktop
- arcgis-portal-mcp をインストールします(インストールを参照)
- 認証情報を記載した
~/.arcgis-portal-mcp/.envを作成します - Claude Desktop の設定を開きます(Claude メニュー > Settings > Developer > Edit Config)
claude_desktop_config.jsonに追加します。
{
"mcpServers": {
"arcgis-portal": {
"command": "python",
"args": ["-m", "arcgis_portal_mcp.server"],
"cwd": "/path/to/arcgis-portal-mcp"
}
}
}
- Claude Desktop を再起動します。サーバーは
.envから自動接続します。
macOS/Linux: 必要に応じて
pythonをpython3に置き換えてください。which python3を使うと、フルパスを確認できます。
Cursor
- arcgis-portal-mcp をインストールします(インストールを参照)
- 認証情報を記載した
~/.arcgis-portal-mcp/.envを作成します - Cursor の設定を開きます(歯車アイコン > MCP)
- 「Add new global server」をクリックし、次の設定を貼り付けます。
{
"name": "arcgis-portal",
"command": "python",
"args": ["-m", "arcgis_portal_mcp.server"],
"cwd": "/path/to/arcgis-portal-mcp"
}
- サーバーをオンに切り替えます。Cursor が自動的に接続します。
VS Code(GitHub Copilot)
- arcgis-portal-mcp をインストールします(インストールを参照)
- 認証情報を記載した
~/.arcgis-portal-mcp/.envを作成します - ワークスペース(またはユーザー設定)の
.vscode/mcp.jsonに追加します。
{
"servers": {
"arcgis-portal": {
"command": "python",
"args": ["-m", "arcgis_portal_mcp.server"],
"cwd": "/path/to/arcgis-portal-mcp"
}
}
}
- VS Code を再読み込みします。Copilot のチャットパネルに MCP サーバーが表示されます。
Windsurf
- arcgis-portal-mcp をインストールします(インストールを参照)
- 認証情報を記載した
~/.arcgis-portal-mcp/.envを作成します - Windsurf の設定 > Cascade > MCP Servers を開きます
- 新しいサーバーを追加します。
{
"name": "arcgis-portal",
"command": "python",
"args": ["-m", "arcgis_portal_mcp.server"],
"cwd": "/path/to/arcgis-portal-mcp"
}
- Windsurf を再起動します。
nanobot(このエージェント)
設定済みです。MCP サーバーは config.json の tools.mcpServers.arcgis-portal に登録されています。
connect_portal ツールのパラメーター
connect_portal ツールでは、次の auth_method の値を指定できます。
| 値 | 動作 |
|---|---|
auto | .env から読み込みます(デフォルト)。最初に username/password を試し、次に client_credentials を試します |
username_password | ポータルのユーザー名とパスワード -> generateToken(ユーザーレベル) |
token | 明示的に指定したポータルトークンを使用します |
client_credentials | 明示的に指定した client_id/secret を使用します |
oauth2 | ブラウザーを使用する OAuth2(約 2 分間ブロックされます) |
使用方法
接続して検索する
User: Search for all feature services in my portal
Agent: [calls connect_portal, then search_content with item_type="Feature Service"]
レイヤーの完全なスキーマを確認する
User: Show me the field schema of the infrastructure layer
Agent: [calls list_layers to find the layer, then describe_layer to get fields, domains, relationships]
レイヤーをクエリする
User: Show me the first 10 parcels from the cadastral layer
Agent: [calls list_layers to find the parcel layer, then query_features with limit=10]
実行前に GP ツールを確認する
User: What parameters does the buffer analysis tool expect?
Agent: [calls get_gp_task_info with the GP service URL to inspect parameter schemas]
フィーチャを追加する
User: Add these 3 buildings to the infrastructure layer
Agent: [calls add_features with the feature service URL and JSON features]
Web マップを共有する
User: Share item abc123 with the "Planning Team" group and the whole org
Agent: [calls share_item with org=true and groups=<planning-team-id>]
Web マップを読み込む
User: What basemap and layers are in this web map?
Agent: [calls get_item_data to read the web map JSON, summarizes basemap and operational layers]
シェープファイルを公開する
User: Publish this shapefile as a hosted feature service
Agent: [calls upload_item to upload the .zip, then publish_from_item to create the service]
ジオプロセシングタスクを実行する
User: Run the buffer analysis on the parcels layer with a 100m distance
Agent: [calls get_gp_task_info to inspect parameters, then execute_gp_task with the right inputs]
一括操作
User: Delete all my draft items
Agent: [calls search_content to find items, then batch_delete_items to remove them]
ポータル管理
User: How many licenses do we have left?
Agent: [calls list_licenses to show license allocation and usage]
参照切れをスキャンする
User: Check if any layers in my web map are broken
Agent: [calls scan_broken_references with the web map item ID]
古いコンテンツを見つける
User: Show me items nobody has touched in over a year
Agent: [calls find_stale_items with days_threshold=365]
利用可能なツール(81)
検出と確認
| ツール | 説明 |
|---|---|
connect_portal | ポータルで認証します(auto、token、username/password、client_credentials、または OAuth2) |
search_content | キーワード、種類、所有者でアイテムを検索します |
get_item_details | 特定のアイテムの詳細なメタデータを取得します |
list_layers | フィーチャサービスまたはマップサービスのレイヤーを、ジオメトリタイプと件数とともに一覧表示します |
describe_layer | レイヤーの完全なスキーマを取得します。フィールド、型、ドメイン、サブタイプ、リレーションシップ、範囲、レンダラーを含みます |
query_features | 属性または空間フィルター、ページネーション、個別の値を指定してフィーチャをクエリします |
list_users | ポータルユーザーをロールとステータスとともに一覧表示します |
list_groups | ポータルグループをアクセスレベルとともに一覧表示します |
portal_health | ポータルの健全性とシステムステータスを確認します |
server_status | MCP サーバーの接続状態を確認します |
search_users | 名前、メールアドレス、またはユーザー名でポータルユーザーを検索します |
check_service_health | サービスエンドポイントに ping を送信し、ステータス、レイテンシ、バージョン、機能を返します |
get_item_thumbnail | アイテムのサムネイル画像をローカルファイルにダウンロードします |
フィーチャ CRUD、ユーザー/グループ、コンテンツ管理
| ツール | 説明 |
|---|---|
add_features | ホスト型フィーチャレイヤーに新しいフィーチャを追加します |
update_features | 既存のフィーチャを更新します(OBJECTID による指定) |
delete_features | OBJECTID または WHERE 句でフィーチャを削除します |
apply_edits_batch | 追加、更新、削除を 1 回のアトミックなトランザクションで適用します |
get_user_details | ユーザープロフィールの詳細を取得します(ロール、権限、ストレージ、最終ログイン) |
create_group | アクセス制御を設定して新しいグループを作成します |
update_group | グループのプロパティを更新します(タイトル、説明、公開範囲) |
delete_group | ポータルからグループを削除します |
list_group_users | 特定のグループに所属するユーザーを一覧表示します |
invite_to_group | ロールを割り当ててユーザーをグループに招待します |
remove_from_group | グループからユーザーを削除します |
update_item | アイテムのプロパティを更新します(タイトル、説明、タグ、アクセス権、accessInformation、licenseInfo) |
delete_item | ポータルからアイテムを削除します |
share_item | アイテムを全員、組織、または特定のグループと共有/共有解除します |
get_item_data | アイテムデータを読み込みます(Web マップの JSON、アプリ設定、フィーチャコレクション) |
create_folder | アイテムを整理するためのコンテンツフォルダーを作成します |
list_folders | ユーザーのコンテンツフォルダーを一覧表示します |
delete_folder | コンテンツフォルダーを削除します(フォルダー内のすべてのアイテムも削除されます) |
clone_item | 同じポータル内でアイテムを複製します |
move_items | ポータルユーザー間でアイテムの所有権を再割り当てします |
公開、ジオプロセシング、管理、バッチ処理
| ツール | 説明 |
|---|---|
upload_item | ローカルファイル(CSV、シェープファイルなど)をポータルのコンテンツにアップロードします |
publish_from_item | アップロードしたアイテムをホスト型フィーチャサービスとして公開します(省略した場合、CSV の layerInfo が自動生成されます) |
create_service | スキーマを指定して、空のホスト型フィーチャサービスを作成します |
get_gp_task_info | GP ツールのスキーマを確認します。タスクの一覧表示や、実行前のパラメーター定義の確認ができます |
execute_gp_task | 同期ジオプロセシングタスクを実行します |
submit_gp_job | 非同期 GP ジョブを送信し、ポーリング用のジョブ ID を取得します |
get_gp_job_status | 実行中の非同期ジオプロセシングジョブのステータスを確認します |
export_map_image | MapServer/FeatureServer レイヤーを JPG/PNG/GIF/PDF/SVG としてエクスポートします |
portal_system_info | ポータルのバージョン、プラットフォーム、システム情報を取得します(管理者向け) |
list_licenses | ライセンス情報と割り当てを取得します(管理者向け) |
portal_usage | ポータルの使用状況統計(ユーザー、API 呼び出し、ストレージ)を取得します(管理者向け) |
get_org_settings | 組織の設定を取得します(管理者向け) |
update_org_settings | 組織の設定を更新します(管理者向け) |
batch_delete_items | 複数のアイテムを一括で削除します |
batch_share_items | 同じ対象者に複数のアイテムを一括で共有または共有解除します |
batch_update_items | 複数のアイテムのプロパティを一括で更新します |
explore_item_relationships | アイテム間の関連(サービス、Web マップ、レイヤー、アプリ)を調べます |
audit_group_members | グループのメンバーを監査します。各グループの所属ユーザーや非アクティブユーザーを確認できます |
scan_service_dependencies | フィーチャサービスの依存関係をスキャンします。リンク切れやソースの不足を確認できます |
analyze_item_impact | アイテムの影響を分析します。アイテムを削除した場合に何が影響を受けるかを確認できます |
get_usage_analytics | ポータルの利用状況分析(API 呼び出し、アクティブユーザー、ストレージの推移)を取得します |
portal_inventory | ポータルのコンテンツをスキャンし、種類、所有者、経過期間、ストレージ別のアイテム数を確認します |
bulk_reassign_ownership | ユーザー間でコンテンツの所有権を一括移転します |
offboard_user | ユーザーのオフボーディングを行います。コンテンツを移転し、グループから削除します |
Webhook とログ(v1.7.0)
| ツール | 説明 |
|---|---|
list_webhooks | 組織のすべての Webhook を一覧表示します |
create_webhook | イベントトリガーを指定して、新しい組織 Webhook を作成します |
update_webhook | Webhook のプロパティ(名前、URL、トリガー、有効状態)を更新します |
delete_webhook | ID を指定して Webhook を削除します |
test_webhook | Webhook の接続を確認するテストペイロードを送信します |
query_logs | レベル、ソース、時間でフィルターしてポータルのログを検索します |
clean_logs | 指定した期間より古いポータルのログを削除します |
コラボレーション、ロール、スケジュール済みタスク(v1.8.0)
| ツール | 説明 |
|---|---|
list_collaborations | ポータルが参加しているすべてのコラボレーションを一覧表示します |
get_collaboration | 特定のコラボレーションの詳細を取得します |
sync_collaboration | コラボレーションのワークスペースの同期を開始します |
list_roles | 組織内のすべてのロールとその権限を一覧表示します |
get_role_privileges | 特定のロールの権限を取得します |
list_scheduled_tasks | 組織内のすべてのスケジュール済みタスクを一覧表示します(管理者向け) |
get_user_scheduled_tasks | 特定のユーザーのスケジュール済みタスクを一覧表示します |
管理上の問題を解決するツール(v1.11.0)
| ツール | 説明 |
|---|---|
scan_broken_references | Web マップ/アプリで到達不能なサービス URL をスキャンします(アイテムまたはグループ単位) |
find_stale_items | N 日間更新されていないアイテムを、ガバナンス違反の検出とともに検索します |
export_group_content | コンテンツ移行用に、グループのアイテムを .epk パッケージにエクスポートします(Enterprise のみ) |
import_group_content | .epk パッケージのアイテムを対象グループにインポートします(Enterprise のみ) |
サーバー管理(v1.15.0、Enterprise 専用)
| ツール | 説明 |
|---|---|
list_server_services | ホスティングサーバー上のサービスを、フォルダーごとにステータスとともに一覧表示します |
get_service_details | サービスの管理者向け設定の全詳細(ステータス、インスタンス、機能)を取得します |
start_service | ホスティングサーバー上で停止中のサービスを開始します |
stop_service | サービスを停止します(破壊的操作のため、confirm=true が必要です) |
list_server_machines | ホスティングサーバーサイト内のマシンを、役割とステータスとともに一覧表示します |
list_data_stores | 登録済みのデータストア(データベース、フォルダー、クラウドストア)を一覧表示します |
認証方法
| 方法 | メリット | デメリット |
|---|---|---|
| 自動(デフォルト) | 設定不要で、起動時に .env を読み込みます | ユーザー名/パスワードがない場合、アプリレベルにフォールバックします |
| ユーザー名/パスワード | generateToken によるユーザーレベルの権限 | トークンの有効期限は2時間で、2FA によってブロックされます |
| トークン | 手早く利用でき、依存関係がありません | トークンには有効期限があり、別途取得する必要があります |
| クライアント認証情報 | ブラウザー不要で、2FA も不要です | アプリレベルのみ(ユーザー ID なし) |
| OAuth2 | 完全なユーザー権限と、14日間有効なトークン | ブラウザーが開き、約2分間待機します |
2FA を使用する Enterprise ポータル: auto(client_credentials を設定した .env)を使用してください。2FA によってトークン生成がブロックされるため、トークン認証は機能しません。client_credentials フローはアプリレベルの OAuth2 を使用するため、ブラウザー、2FA、ユーザー操作は不要です。
ArcGIS Online または2FAを使用しないポータル: MCP では、generateToken によるユーザー名/パスワード認証が最も高速です。起動時に自動接続するには、.env ファイルに username と password を設定してください。
完全なユーザー権限: OAuth2 を一度使用して長期間有効なトークンを取得し、その後はトークンを直接渡してください。
セキュリティ
TLS 証明書の検証
デフォルトでは、TLS 証明書の検証は有効です。自己署名証明書を使用する Enterprise ポータルでは、.env で無効にしてください。
MCP_TLS_VERIFY=false
検証が無効になると、サーバーは警告をログに記録します。有効な証明書を使用する本番環境へのデプロイでは、検証を再度有効にしてください。
スコープ付き許可リスト
本番環境で使用する場合は、サーバーがアクセスできるポータル、所有者、グループ、サービスエンドポイントを限定してください。すべての許可リストは任意です。設定されていない場合、サーバーは制限なしで動作します(後方互換性があります)。
# Only connect to these portals
MCP_ALLOWED_PORTAL_URLS=https://gis.example.com/portal
# Only access items owned by these users
MCP_ALLOWED_OWNERS=jsmith,mgarcia,admin
# Only share with these group IDs
MCP_ALLOWED_GROUPS=abc123,def456
# Only operate on services at these URL prefixes
MCP_ALLOWED_SERVICE_URLS=https://gis.example.com/portal/sharing/rest/services
許可リスト外のリソースを対象とする操作は、明確なエラーメッセージとともに拒否されます。一括操作では、所有者の許可リスト外の項目はスキップされ、項目ごとに結果が報告されます。
読み取り専用モード(v1.9.0)
サーバー側ですべての書き込み/変更ツールをブロックします。評価、デモ、AI にデータの読み取りのみを許可する環境で役立ちます。
# Via environment variable
MCP_READ_ONLY=true
# Or via CLI flag (overrides env var)
python -m arcgis_portal_mcp.server --read-only
有効な場合、ポータルコンテンツを作成、更新、削除するツールは、明確なエラーメッセージとともに拒否されます。読み取り専用ツール(検索、クエリ、一覧表示、説明)は引き続きすべて使用できます。
ツールの許可リスト(v1.9.0)
AI クライアントが認識して呼び出せるツールを制限します。設定すると、指定されたツールのみが MCP プロトコル経由で公開されます。
# Only expose these 5 tools to the AI
MCP_ALLOWED_TOOLS=search_content,query_features,list_layers,describe_layer,portal_health
設定されていない場合(デフォルト)、81個すべてのツールを使用できます。リストにないツールは AI クライアントから見えず、直接呼び出された場合も拒否されます。
監査ログ(v1.9.0)
セキュリティレビューとコンプライアンスのために、すべてのツール呼び出しを JSONL ファイルに記録します。
# Log all tool calls to this file
MCP_AUDIT_LOG=/path/to/audit.jsonl
各エントリーには次の内容が含まれます。
{"ts": 1723500000.0, "tool": "search_content", "args": {"query": "parcels"}, "status": "ok", "duration_ms": 142.3}
機密性の高い引数(password、token、client_secret、secret)は、ログ内で自動的に *** に置き換えられます。
次の予定
今後のリリースに向けて、以下の機能に取り組んでいます。
v2.0.0 — フィーチャサービスの同期
- createReplica / sync:オフラインのワークフローと双方向のデータ同期
- アイテムの関連付け CRUD:アイテムの依存関係の追加/削除
- AI サービス管理:AI アシスタントの有効化/無効化(Enterprise 12.0 以降)
v2.1.0 — サーバーインフラストラクチャ
- サーバーフェデレーション:サーバーの一覧表示、検証、フェデレーション、フェデレーション解除
- マシンの監視:マシンとデプロイ状況の一覧表示
- SSL 証明書管理:一覧表示、インポート、生成
これらのいずれかでお困りの問題を解決できそうな場合は、issue を作成してお知らせください。実際のニーズに基づいて優先順位を決めています。
開発
# Install dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run linting
ruff check arcgis_portal_mcp/
ライセンス
MIT。詳細はLICENSEをご覧ください。
作者
Asem Daaboul ([email protected])
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。