Skip to main content
Glama
yukincom

rakuten-pantry-mcp

by yukincom
README.md
# rakuten-pantry-mcp

[mrslbt/rakuten-mcp](https://github.com/mrslbt/rakuten-mcp) をベースにした楽天市場(Ichiba)向け MCP サーバーです。  
upstream(npm の `rakuten-mcp`)にはない機能を追加しています。

## 追加機能(upstream にない)

| フィールド / 機能 | 説明 |
|------------------|------|
| `quantity` | 商品名から総個数を解析(例: `24本入り×2ケース` → 48) |
| `unitPrice` | `itemPrice ÷ quantity` |
| `postageLabel` | `送料無料` / `送料別` / `要確認` |
| `estimatedTotalPrice` | 送料無料時は `itemPrice` |
| `shippingVerified` | 送料が API 上で確定しているか |
| `compare_ichiba_value` | 単価比較+送料ウェブ確認のガイドプロンプト |

改造の詳細は [CHANGES.md](CHANGES.md)。upstream へのパッチは [patches/](patches/) を参照。

## リポジトリ構成

```
rakuten-pantry-mcp/
├── src/
│   ├── index.ts              # エントリポイント
│   ├── server.ts             # MCP サーバー組み立て
│   ├── client.ts             # 楽天 API クライアント
│   ├── config.ts / errors.ts / i18n.ts / auth.ts
│   ├── tools/
│   │   ├── ichiba.ts         # ★ 改造の本体(5ツール)
│   │   ├── index.ts
│   │   ├── types.ts
│   │   └── meta.ts
│   ├── prompts/
│   │   ├── ichiba.ts         # ★ compare_ichiba_value
│   │   ├── schema.ts         # ★ プロンプト引数の型変換
│   │   └── index.ts
│   ├── transports/           # stdio / HTTP
│   └── resources/
├── test/                     # ichiba / prompts / http のテスト
├── patches/                  # upstream 向け差分
├── dist/                     # ビルド成果物(npm run build)
├── package.json
├── README.md
├── CHANGES.md
├── AGENTS.md
└── LICENSE
```

Ichiba ツール 5個のみ(Books / Travel / Recipe / Kobo / GORA は含みません)。`resources/` は現時点では未使用(空のレジストリ)です。

## セットアップ

```bash
git clone https://github.com/yukin_co/rakuten-pantry-mcp.git
cd rakuten-pantry-mcp
npm install
npm run build
```

## MCP クライアント設定

環境変数 `RAKUTEN_APP_ID` と `RAKUTEN_ACCESS_KEY` が必要です([楽天デベロッパー](https://webservice.rakuten.co.jp/)で取得)。

### ローカル clone を使う場合

`args` には **clone 先の `dist/index.js` への絶対パス** を指定します。

```json
{
  "mcpServers": {
    "rakuten-pantry": {
      "command": "node",
      "args": ["/path/to/rakuten-pantry-mcp/dist/index.js"],
      "env": {
        "RAKUTEN_APP_ID": "your-app-id",
        "RAKUTEN_ACCESS_KEY": "your-access-key"
      }
    }
  }
}
```

### npx で使う場合(npm 公開後)

```json
{
  "mcpServers": {
    "rakuten-pantry": {
      "command": "npx",
      "args": ["-y", "rakuten-pantry-mcp"],
      "env": {
        "RAKUTEN_APP_ID": "your-app-id",
        "RAKUTEN_ACCESS_KEY": "your-access-key"
      }
    }
  }
}
```

> npm の `rakuten-mcp`([mrslbt/rakuten-mcp](https://github.com/mrslbt/rakuten-mcp))は別パッケージです。上記の `rakuten-pantry-mcp` を指定してください。

## ツール(5)

| ツール | 内容 |
|--------|------|
| `ichiba_item_search` | キーワード検索(quantity / unitPrice / 送料フラグ付き) |
| `ichiba_genre_search` | ジャンルツリー |
| `ichiba_tag_search` | タグ参照 |
| `ichiba_item_ranking` | 売れ筋ランキング |
| `ichiba_product_search` | 複数店舗横断の価格比較 |

## プロンプト(1)

| プロンプト | 内容 |
|------------|------|
| `compare_ichiba_value` | 単価比較と送料確認の手順をエージェントに渡す |

## 開発

```bash
npm run typecheck
npm test
npm run build
```

## ライセンス

MIT — 元: [mrslbt/rakuten-mcp](https://github.com/mrslbt/rakuten-mcp)(MIT)

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: genre navigation, ranking, item keyword search, cross-seller product comparison, and tag lookup. The descriptions explicitly differentiate them, e.g., ichiba_product_search is for price comparisons while ichiba_item_search is for general keyword search.

Naming Consistency4/5

All tools follow the pattern 'ichiba_<domain>_<operation>' (e.g., ichiba_genre_search, ichiba_item_ranking). The only minor deviation is that most use '_search' but 'ichiba_item_ranking' uses '_ranking' instead. Overall, the convention is consistent and predictable.

Tool Count5/5

With 5 tools, the server is well-scoped for browsing and searching the Rakuten Ichiba marketplace. Each tool covers a necessary function, and the count is neither too slim nor too heavy for this domain.

Completeness4/5

The tool set covers core browsing and search needs (genre, ranking, item search, product comparison, tags). A minor gap is the lack of a tool to retrieve detailed information for a single item by ID, which could be useful. However, the existing tools are sufficient for the main use cases.

Maintenance

ActivityInactive
ResponsivenessResponsive