Skip to main content
Glama
shinichinomura

pesticide-mcp

README.md
# pesticide-mcp

FAMIC が公開する農薬登録情報 CSV を取り込み、ローカル DB に正規化し、Claude Code から MCP 経由で検索・照会できるようにする MVP プロジェクトです。

> **注意**: 本ツールが返すのは農薬登録情報の検索結果であり、使用可否を保証するものではありません。実際に使用する前に、製品ラベルと最新の農薬登録情報を必ず確認してください。

## ドキュメント

- [CLAUDE.md](CLAUDE.md): プロジェクト方針と運用ルールの要点
- [docs/MVP_DESIGN.md](docs/MVP_DESIGN.md): 設計(アーキテクチャ、データモデル、検索仕様、MCP tool 仕様)
- [docs/BACKLOG.md](docs/BACKLOG.md): マイルストーンとバックログ
- [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md): 開発ガイド(技術スタック、環境変数、実行コマンド)

## 必要要件

- Python 3.12+
- [uv](https://docs.astral.sh/uv/)

## セットアップ

```bash
# 依存関係のインストール
uv sync

# Lint / format
uv run ruff check .
uv run ruff format .

# テスト
uv run pytest
```

## データの取り込み

FAMIC の農薬登録情報 CSV/ZIP を `data/raw/` に配置してから取り込みます。

```bash
uv run python -m pesticide_mcp.import_famic --source-dir ./data/raw --db ./data/pesticides.duckdb
```

FAMIC の登録基本部(例: `R0807010.zip`)と登録適用部一・二(例: `R0807011/012.zip`)を
`data/raw/` に置いて実行します。ZIP のまま取り込めます。主なオプション:

- `--source-month YYYY-MM`: 更新年月を明示(省略時はファイル名から推定)
- `--dry-run`: DB へ書き込まず解析・検証のみ

再実行しても `pesticides` / `applications` の内容は同じになります(取り込み履歴は `source_imports` に追記)。

## Claude Code への MCP 接続

ローカル stdio MCP として接続します。

```bash
claude mcp add --transport stdio pesticide-registry \
  -- uv run python -m pesticide_mcp.server
```

プロジェクト共有用に `.mcp.json.example` を用意しています。コピーして利用してください。

```bash
cp .mcp.json.example .mcp.json
```

環境変数は以下を利用できます(詳細は [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md))。

| 変数名 | 用途 | 既定値 |
|---|---|---|
| `PESTICIDE_DB_PATH` | DuckDB ファイルパス | `./data/pesticides.duckdb` |
| `PESTICIDE_SOURCE_DIR` | FAMIC ZIP/CSV 保存先 | `./data/raw` |

接続後、Claude Code から `dataset_status` を呼ぶと取り込み状態を確認できます。

## 公開している MCP tools

いずれも「登録情報の検索結果」を返すもので、使用可否の判定は行いません。

| tool | 用途 | 主な入力 |
|---|---|---|
| `dataset_status` | 取り込み状態(件数・出典・取り込み日時)を返す | (なし) |
| `search_pesticides` | 農薬基本情報を検索 | `name` / `register_no` / `active_ingredient` / `pesticide_type` |
| `get_pesticide_by_register_no` | 登録番号で基本情報+適用サマリを取得 | `register_no`(`12345`/`0012345` 両対応) |
| `get_applications` | 適用情報を検索 | `crop` / `pest` / `pesticide_name` / `register_no` / `usage_method` |
| `check_registered_use` | 条件に該当する登録行候補を返す(可否判定ではない) | `pesticide_name_or_register_no` + `crop` (+ `pest` / `usage_method`) |

各レスポンスには出典(`source`)と注意文(`safety_notice`)が含まれ、`check_registered_use` は
`allowed` のような可否を断定するフィールドを返しません。

## 使い方(Claude Code での自然文例)

```text
- 「登録番号 12345 の農薬を見て」                → get_pesticide_by_register_no
- 「除虫菊で農薬を検索して」                      → search_pesticides
- 「りんごの黒星病に登録のある適用を出して」      → get_applications
- 「ダコニールはりんごの黒星病に登録がある?登録行を出して」 → check_registered_use
```

`check_registered_use` は「使えます」と断定せず、該当する登録行の候補と根拠フィールド
(作物名・適用病害虫雑草名・使用時期・使用方法・使用回数・総使用回数など)を返します。
Claude が結果を説明するときの返答テンプレートは
[docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) を参照してください。

## データソースと利用条件

- 一次データ: [FAMIC 農薬登録情報ダウンロード CSV](https://www.acis.famic.go.jp/ddata/index2.htm)
- 補助(任意): WAGRI 農薬情報取得 API
- 外部公開・二次配信を行う場合は、FAMIC/WAGRI の利用条件・表示条件を必ず再確認してください。

TDQS

A3.8/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: checking registered use candidates, dataset status, application search, pesticide details by registration number, and general pesticide search. No overlap in functionality.

Naming Consistency5/5

All tools use consistent snake_case with a verb_noun pattern (e.g., check_registered_use, get_applications, search_pesticides). No mixed conventions or unclear abbreviations.

Tool Count5/5

Five tools is appropriate for a pesticide information server, covering essential query operations without being too few or excessive.

Completeness5/5

The tool set provides comprehensive coverage for searching and retrieving pesticide information, including status, registration details, applications, and usage candidates. References between tools (e.g., get_pesticide_by_register_no suggesting get_applications) show good integration.

Maintenance

ActivityInactive
ResponsivenessNo issues