# MLIT DATA PLATFORM MCP Server

## 目次
- [MLIT DATA PLATFORM MCP Server](#mlit-data-platform-mcp-server)
  - [目次](#目次)
  - [1. 概要](#1-概要)
  - [2. 主な機能](#2-主な機能)
  - [3. 動作環境](#3-動作環境)
  - [4. インストールとセットアップ](#4-インストールとセットアップ)
    - [前提条件](#前提条件)
    - [手順](#手順)
  - [5. ディレクトリ構成](#5-ディレクトリ構成)
  - [6. ライセンス](#6-ライセンス)
  - [7. 注意事項](#7-注意事項)
  - [8. お問い合わせ](#8-お問い合わせ)


## 1. 概要
国土交通省が保有するデータと民間等のデータを連携し、一元的に検索・表示・ダウンロードを可能にする[国土交通データプラットフォーム](https://data-platform.mlit.go.jp/)が提供する利用者向けAPIと接続するMCP (Model Context Protocol) サーバー（α版）です。

本MCPサーバーを利用することで、大規模言語モデル（LLM）と直接連携し、対話形式で直感的にデータを検索・取得することが可能になります。APIに関する専門的な知識がなくても、誰でも簡単に国土交通データプラットフォームから曖昧な指示や複雑な条件設定でデータを検索・取得が可能な、新しいデータ活用のかたちを提供します。


## 2. 主な機能
国土交通データプラットフォームの利用者向けAPIを活用し、以下の機能を提供します：
* `search`（キーワードの指定によりデータを検索します。並べ替えや件数の指定も可能です。）
* `search_by_location_rectangle`（指定した矩形範囲と交差するデータを検索します。）
* `search_by_location_point_distance`（指定した地点と半径からなる円形範囲と交差するデータを検索します。）
* `search_by_attribute`（カタログ名、データセット名、都道府県、市区町村などの属性を指定してデータを検索します。）
* `get_data`（データの詳細情報を取得します。）
* `get_data_summary`（データIDとタイトルなどのデータの基本情報を取得します。）
* `get_data_catalog`（データカタログやデータセットの詳細情報を取得します。）
* `get_data_catalog_summary`（IDやタイトルなどのデータカタログやデータセットの基本情報を取得します。）
* `get_file_download_urls`（ファイルのダウンロード用URLを取得します（有効期限：60秒）。）
* `get_zipfile_download_url`（複数ファイルをZIP形式でまとめたダウンロードURLを取得します（有効期限：60秒）。）
* `get_thumbnail_urls`（サムネイル画像のURLを取得します（有効期限：60秒）。）
* `get_all_data`（条件に一致する大量のデータを一括取得します。）
* `get_count_data`（条件に一致するデータ件数を取得します。）
* `get_suggest`（キーワード検索時の候補を取得します。）
* `get_prefecture_data`（都道府県名・コードの一覧を取得します。）
* `get_municipality_data`（市区町村名・コードの一覧を取得します。）
* `get_mesh`（指定したメッシュに含まれるデータを取得します。）
* `normalize_codes`（入力された都道府県名・市区町村名を正規化します。）


## 3. 動作環境

* OS：Windows 10 / 11 または macOS 13以降
* MCPホスト：Claude Desktopなど
* MCPサーバー実行環境：Python 3.10+
* メモリ：8GB以上推奨
* ストレージ：空き容量 1GB以上（キャッシュやログを含む）

## 4. インストールとセットアップ

### 前提条件
Claude DesktopなどのMCP対応AIアプリケーション および Python がインストールされていることを前提としています。以下は、Claude Desktopでの利用を想定した手順です。

### 手順

1. **国土交通データプラットフォームでアカウントを作成し、APIキーを取得**
   
   詳しい手順は、[こちら](https://data-platform.mlit.go.jp/api_docs/usage/introduction.html)をご覧ください。

2. **リポジトリをクローン**

   ```bash
   git clone https://github.com/MLIT-DATA-PLATFORM/mlit-dpf-mcp.git
   cd mlit-dpf-mcp
   ```

3. **仮想環境を作成 & 有効化**

   ```bash
   python -m venv .venv
   .venv\Scripts\activate      # Windows
   source .venv/bin/activate   # macOS/Linux
   ```

4. **依存ライブラリをインストール**

   ```bash
   pip install -e .
   pip install aiohttp pydantic tenacity python-json-logger mcp python-dotenv
   ```

5. **環境変数を設定**

   `.env.example`をコピーし、 `.env` ファイルを作成します：

   ```
   MLIT_API_KEY=your_api_key_here
   MLIT_BASE_URL=https://data-platform.mlit.go.jp/api/v1/
   ```

   あるいはコマンドラインから直接設定することも可能です：

   ```bash
   export MLIT_API_KEY=your_api_key_here
   export MLIT_BASE_URL=https://data-platform.mlit.go.jp/api/v1/
   ```

   `your_api_key_here`は必ず、手順1で取得したAPIキーに置き換えてください。

6. **MCP サーバーの起動**

   ```bash
   python -m src.server
   ```

7. **Claude Desktopの設定ファイルを開く**

   * **Windows：** `C:\Users\<ユーザー名>\AppData\Roaming\Claude\claude_desktop_config.json`
   * **macOS：** `~/Library/Application Support/Claude/claude_desktop_config.json`
   * Claude Desktopアプリの設定画面にある「開発者」メニューの「設定を編集」ボタンをクリックして`claude_desktop_config.json`を開くことも可能です。

8. **MCPサーバーの構成を追加**

   ```json
   {
     "mcpServers": {
       "mlit-dpf-mcp": {
         "command": "......./mlit-dpf-mcp/.venv/Scripts/python.exe",
         "args": [
           "....../mlit-dpf-mcp/src/server.py"
         ],
         "env": {
           "MLIT_API_KEY": "your_api_key_here",
           "MLIT_BASE_URL": "https://data-platform.mlit.go.jp/api/v1/",
           "PYTHONUNBUFFERED": "1",
           "LOG_LEVEL": "WARNING"
         }
       }
     }
   }
   ```

   `command`と`args`は必ず、実際のパスに変更してください。  
   `your_api_key_here`は必ず、手順1で取得したAPIキーに置き換えてください。

9. **Claude Desktop を再起動**


## 5. ディレクトリ構成

```
mlit-dpf-mcp/
├─ src/
│  ├─ server.py   # MCP サーバー & ツール定義
│  ├─ client.py   # MLIT GraphQL API クライアント
│  ├─ schemas.py  # Pydantic モデル（入力バリデーション）
│  ├─ config.py   # 環境変数ロード & 設定検証
│  └─ utils.py    # ロギング、タイマー、レート制限
├─ pyproject.toml
├─ README.md
└─ LICENSE
```

## 6. ライセンス
* 本リポジトリはMITライセンスで提供されています。[ライセンス](./LICENSE)を参照してください。



## 7. 注意事項
* 本リポジトリで提供されるデータの利用に関しては、 [国土交通データプラットフォームの利用規約](https://data-platform.mlit.go.jp/assets/policy/%E5%9B%BD%E5%9C%9F%E4%BA%A4%E9%80%9A%E3%83%87%E3%83%BC%E3%82%BF%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%88%A9%E7%94%A8%E8%A6%8F%E7%B4%84.pdf)に従う必要があります。ご使用前に国土交通データプラットフォームの利用規約を必ずご確認ください。
* 本リポジトリの個人情報の取り扱いは、[国土交通データプラットフォームのプライバシーポリシー](https://data-platform.mlit.go.jp/assets/policy/%E5%9B%BD%E5%9C%9F%E4%BA%A4%E9%80%9A%E3%83%87%E3%83%BC%E3%82%BF%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0_%E3%83%97%E3%83%A9%E3%82%A4%E3%83%90%E3%82%B7%E3%83%BC%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC.pdf)に準拠しております。
* 本リポジトリはα版として提供しているものです。動作保証は行っておりません。
* 本リポジトリの内容は予告なく変更・削除する可能性があります。
* 本リポジトリの利用により生じた損失及び障害等について、国土交通省及び国土交通データプラットフォームはいかなる責任も負わないものとします。

## 8. お問い合わせ
本リポジトリはα版です。お気づきの点があれば下記お問い合わせフォームまでご連絡下さい。
* [国土交通データプラットフォームお問い合わせフォーム](https://docs.google.com/forms/d/e/1FAIpQLScHlMUInwpoyREX672SFJuwo8ZfpllQUatPuYNRiKYZkoe6nQ/viewform)
