Skip to main content
Glama
tmpk13

digi-mouse-search

by tmpk13

digi-mouse-search

DigiKey と Mouser の両方で電子部品を検索する MCP サーバーです。各販売代理店を単独で、または両方をまとめて検索でき、同じ部品番号のオファーは単一のエントリに統合されるため、価格を比較できます。

ツール

ツール

目的

search_parts

一方または両方の販売代理店を横断するキーワード検索

part_details

メーカーまたは販売代理店の部品番号で単一部品を検索

source_status

設定されているソースと、残りのリクエスト予算の確認

clear_cache

キャッシュされた応答を破棄し、最新の在庫と価格を取得

search_partssources リストを受け取ります。省略すると設定済みのすべての販売代理店を検索し、["mouser"] を渡すとその代理店のみを検索します。結果はデフォルトで部品番号ごとに統合され、cheapest_at_quantity 比較が行われます。merge=false を渡すと、各販売代理店の結果を別々のリストに保持します。

一方の販売代理店が失敗した場合、未設定の場合、または割り当て枠を使い切った場合でも、他の代理店は結果を返し、失敗は errors の下に報告されます。

セットアップ

mise install
mise run install
mise run test

認証情報は環境変数から取得します:

# DigiKey: register an app at developer.digikey.com with Product Information enabled
export DIGIKEY_CLIENT_ID=...
export DIGIKEY_CLIENT_SECRET=...

# Mouser: request a Search API key from mouser.com/api-hub
export MOUSER_API_KEY=...

実際に使用する販売代理店の認証情報のみが必要です。認証情報がないソースは、検索が失敗するのではなく未設定として報告されます。

認証情報の取得

DigiKey。 個人の開発者アプリは常にサンドボックスアクセスのみが付与され、サンドボックスは合成データを返します。実際の在庫と価格を取得するには、Organization 配下にある Production アプリが必要です:

  1. developer.digikey.com に DigiKey アカウントでサインインします。

  2. ナビゲーションバーの Organizations を開き、まだメンバーでない場合は作成します。

  3. Operations の下で Production Apps を選択し、Create Production App を選択します。

  4. アプリで Product Information を有効にします。

  5. アプリを開いて Client IDClient Secret をコピーします。

OAuth コールバックフィールドは、スリーレッグ OAuth でのみ使用されます。このサーバーはツーレッグのクライアント認証情報フローを使用するため、コールバックへのリダイレクトは発生しません。https://localhost でフォームを満たせます。

サンドボックスと本番の認証情報は互換性がありません。サンドボックスの認証情報は sandbox-api.digikey.com に対してのみ機能し、これは DIGIKEY_SANDBOX=true で選択されます。

Mouser。 mouser.com/api-hub で Search API キーをリクエストします。これは単一のキーで、クエリパラメータとして送信され、メールで届きます。

MCP クライアント設定

{
  "mcpServers": {
    "digi-mouse-search": {
      "command": "/path/to/digi-mouse-search/.venv/bin/python",
      "args": ["-m", "digi_mouse_search"],
      "env": {
        "DIGIKEY_CLIENT_ID": "...",
        "DIGIKEY_CLIENT_SECRET": "...",
        "MOUSER_API_KEY": "..."
      }
    }
  }
}

レート制限

両方の販売代理店は 1 日あたり約 1,000 回の呼び出しを許可するため、すべてのリクエストに予算が設定されています。1 秒あたりおよび 1 分あたりのウィンドウは待機によって強制されます。日次ウィンドウはハードストップで、代わりにエラーを報告します。呼び出し側が深夜にリセットされる割り当てを待つことは実用的ではないためです。日次カウンターは永続化されるため、サーバーを再起動してもリセットされません。

デフォルト:

ウィンドウ

DigiKey

Mouser

1 秒あたり

2

1

1 分あたり

60

25

1 日あたり

1000

1000

バースト

5

3

最大待機時間

10 秒

10 秒

すべての値は、環境変数または TOML ファイルによってプロバイダーごとに設定できます。ウィンドウを無効にするには noneoffunlimited、または 0 を使用します:

export DIGIKEY_RATE_PER_DAY=250
export DIGIKEY_RATE_PER_MINUTE=30
export MOUSER_RATE_PER_SECOND=none
export MOUSER_RATE_BURST=5
export MOUSER_RATE_MAX_WAIT=30

または DMS_CONFIG をファイルに指定します。config.example.toml を参照してください。環境変数はファイルより優先されるため、クライアントの起動コマンドでディスク上の設定を編集せずに制限を調整できます。

キャッシュされた応答は予算を消費せずに提供されます。source_status はその日の残りを報告します。

その他の設定

変数

デフォルト

意味

DMS_CONFIG

未設定

TOML 設定ファイルへのパス

DMS_CACHE_PATH

$XDG_STATE_HOME/digi-mouse-search/cache.sqlite3

キャッシュおよび使用状況データベース

DMS_CACHE_TTL

3600

キャッシュされた応答の有効期間(秒)

DMS_REQUEST_TIMEOUT

30

HTTP タイムアウト(秒)

DIGIKEY_SANDBOX

false

合成データを返す DigiKey サンドボックスホストを使用

DIGIKEY_LOCALE_SITE

US

検索する DigiKey サイト

DIGIKEY_LOCALE_CURRENCY

USD

DigiKey の価格表示通貨

DIGIKEY_LOCALE_LANGUAGE

en

DigiKey の結果の言語

アーキテクチャ

classDiagram
    class MCPServer {
        search_parts(keyword, sources, merge)
        part_details(part_number, sources)
        source_status()
        clear_cache(source)
    }
    class SearchService {
        +providers: dict
        +limiters: dict
        +resolve_sources(sources)
        +search(...) SearchResult
        +details(...) list~Part~
    }
    class Provider {
        <<abstract>>
        +name: str
        +configured: bool
        +search(...) list~Part~
        +details(...) Part
        #_cached_request(...)
    }
    class DigiKeyProvider {
        -_token: str
        -_access_token()
        -_manufacturer_filter_id(name)
        -_pick_variation(product)
    }
    class MouserProvider {
        -_parse_response(response)
        +parse_price(raw)
    }
    class RateLimiter {
        +acquire()
        +remaining_today()
    }
    class Cache {
        +get(key)
        +set(key, provider, value, ttl)
        +get_daily_usage(provider, day)
        +increment_daily_usage(provider, day)
    }
    class Part {
        +source, mpn, manufacturer
        +stock, price_breaks, specs
        +unit_price_at(quantity)
    }
    class MergedPart {
        +mpn
        +offers: list~Part~
        +sources
    }

    MCPServer --> SearchService
    SearchService --> Provider
    SearchService --> RateLimiter
    SearchService --> Cache
    Provider <|-- DigiKeyProvider
    Provider <|-- MouserProvider
    Provider --> RateLimiter : acquire before call
    Provider --> Cache : read before spending budget
    RateLimiter --> Cache : persist daily counter
    Provider --> Part : produces
    MergedPart o-- Part : groups offers by part number

1 つのプロバイダー呼び出しのリクエストフロー:

sequenceDiagram
    participant C as MCP client
    participant S as SearchService
    participant P as Provider
    participant K as Cache
    participant L as RateLimiter
    participant A as Distributor API

    C->>S: search_parts(keyword, sources)
    S->>S: resolve_sources
    par each source
        S->>P: search(keyword)
        P->>K: get(key)
        alt cached
            K-->>P: payload
        else not cached
            P->>L: acquire()
            alt budget available
                L-->>P: ok
                P->>A: HTTP request
                A-->>P: response
                P->>K: set(key, payload)
            else daily quota spent
                L--)P: RateLimitExceeded
            end
        end
        P-->>S: parts or error
    end
    S->>S: merge by part number
    S-->>C: results plus per source errors

2 つの API に関する注意事項

DigiKey は OAuth2 クライアント認証情報を使用します。トークンの有効期間は 10 分で、メモリにキャッシュされます。リクエストにはベアラートークンとともにクライアント ID ヘッダーが必要です。フィルターは不透明な ID で表現されるため、メーカー名は最初に manufacturers エンドポイントを通じて解決されます。

Mouser はクエリパラメータとして渡される API キーを使用し、リクエストが失敗した場合でも HTTP 200 で応答し、失敗を Errors 配列に入れます。アダプターはその配列を信頼できる情報として扱います。価格は数値ではなく、ローカライズされた表示文字列として届きます。

パラメトリック仕様は 2 つの販売代理店間で共通の語彙がないため、共通のスキーマに正規化するのではなく、名前/値のマップとしてそのまま渡されます。

このツールの作成には Claude Code が使用されました。

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Electronic component sourcing, BOM management, and PCB design workflows.

  • Electronic component datasheets for AI agents — specs, pinouts, package data on demand.

  • Hosted no-auth MCP for exact-spec packaging search, live price, stock, cart handoff, and no-match.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tmpk13/digikey-search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server