Skip to main content
Glama
tmpk13

digi-mouse-search

by tmpk13

digi-mouse-search

Ein MCP-Server, der elektronische Bauteile über DigiKey und Mouser sucht. Jeder Distributor kann einzeln oder beide zusammen abgefragt werden, wobei Angebote für dieselbe Teilenummer zu einem einzigen Eintrag zusammengeführt werden, sodass Preise vergleichbar sind.

Werkzeuge

Werkzeug

Zweck

search_parts

Stichwortsuche über einen oder beide Distributoren

part_details

Einzelnes Teil per Hersteller- oder Distributor-Teilenummer nachschlagen

source_status

Welche Quellen konfiguriert sind und wie viel Anfragebudget übrig ist

clear_cache

Zwischengespeicherte Antworten verwerfen, um frische Bestände und Preise zu erzwingen

search_parts akzeptiert eine Liste sources. Wird sie weggelassen, sucht das Tool über jeden konfigurierten Distributor; ["mouser"] sucht nur diesen. Die Ergebnisse werden standardmäßig nach Teilenummer zusammengeführt, mit einem Vergleich cheapest_at_quantity; mit merge=false bleiben die Ergebnisse jedes Distributors in einer eigenen Liste.

Wenn ein Distributor ausfällt, nicht konfiguriert ist oder sein Kontingent erschöpft hat, liefern die anderen weiterhin Ergebnisse, und der Fehler wird unter errors gemeldet.

Einrichtung

mise install
mise run install
mise run test

Anmeldeinformationen stammen aus der Umgebung:

# 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=...

Nur die Anmeldeinformationen der Distributoren, die du tatsächlich benötigst, sind erforderlich. Eine Quelle ohne Anmeldeinformationen wird als nicht konfiguriert gemeldet, anstatt die Suche fehlschlagen zu lassen.

Anmeldeinformationen erhalten

DigiKey. Eine persönliche Entwickler-App erhält nur Sandbox-Zugriff, und die Sandbox liefert synthetische Daten. Für echte Bestände und Preise benötigst du eine Produktions-App, die unter einer Organisation läuft:

  1. Melde dich bei developer.digikey.com mit deinem DigiKey-Konto an.

  2. Öffne Organizations in der Navigationsleiste und erstelle eine, falls du nicht bereits Mitglied bist.

  3. Wähle unter Operations die Option Production Apps und dann Create Production App.

  4. Aktiviere Product Information für die App.

  5. Öffne die App, um Client ID und Client Secret zu kopieren.

Das OAuth-Callback-Feld wird nur für Drei-Bein-OAuth verwendet. Dieser Server nutzt den Zwei-Bein-Client-Credentials-Flow, daher wird der Callback nie angesteuert; https://localhost erfüllt das Formular.

Sandbox- und Produktionsanmeldeinformationen sind nicht austauschbar. Sandbox-Zugangsdaten funktionieren nur gegen sandbox-api.digikey.com, was durch DIGIKEY_SANDBOX=true ausgewählt wird.

Mouser. Fordere einen Search-API-Schlüssel unter mouser.com/api-hub an. Es handelt sich um einen einzelnen Schlüssel, der als Abfrageparameter gesendet wird und per E-Mail ankommt.

MCP-Client-Konfiguration

{
  "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": "..."
      }
    }
  }
}

Ratenbegrenzungen

Beide Distributoren gewähren etwa tausend Aufrufe pro Tag, daher wird jede Anfrage budgetiert. Sekunden- und Minutenfenster werden durch Warten durchgesetzt; das Tagesfenster ist ein harter Stopp, der stattdessen einen Fehler meldet, da ein Aufrufer nicht sinnvoll auf ein Kontingent warten kann, das um Mitternacht zurückgesetzt wird. Der Tageszähler wird gespeichert, sodass ein Neustart des Servers ihn nicht zurücksetzt.

Standardwerte:

Fenster

DigiKey

Mouser

pro Sekunde

2

1

pro Minute

60

25

pro Tag

1000

1000

Burst

5

3

max. Wartezeit

10 s

10 s

Jeder Wert ist pro Anbieter konfigurierbar, entweder über eine Umgebungsvariable oder eine TOML-Datei. Verwende none, off, unlimited oder 0, um ein Fenster zu deaktivieren:

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

Oder verweise mit DMS_CONFIG auf eine Datei, siehe config.example.toml. Umgebungsvariablen überschreiben die Datei, sodass ein Client-Startbefehl ein Limit anpassen kann, ohne die Konfiguration auf der Festplatte zu bearbeiten.

Zwischengespeicherte Antworten werden ohne Budgetverbrauch ausgeliefert. source_status meldet, was für den Tag noch übrig ist.

Weitere Einstellungen

Variable

Standard

Bedeutung

DMS_CONFIG

nicht gesetzt

Pfad zu einer TOML-Konfigurationsdatei

DMS_CACHE_PATH

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

Cache- und Nutzungsdatenbank

DMS_CACHE_TTL

3600

Lebensdauer einer zwischengespeicherten Antwort in Sekunden

DMS_REQUEST_TIMEOUT

30

HTTP-Timeout in Sekunden

DIGIKEY_SANDBOX

false

DigiKey-Sandbox-Host verwenden, der synthetische Daten liefert

DIGIKEY_LOCALE_SITE

US

DigiKey-Site für die Suche

DIGIKEY_LOCALE_CURRENCY

USD

Währung für DigiKey-Preise

DIGIKEY_LOCALE_LANGUAGE

en

Sprache für DigiKey-Ergebnisse

Architektur

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

Anfragefluss für einen Anbieteraufruf:

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

Anmerkungen zu den beiden APIs

DigiKey verwendet OAuth2-Client-Anmeldeinformationen. Das Token hält zehn Minuten und wird im Speicher zwischengespeichert; Anfragen benötigen den Client-ID-Header zusammen mit dem Bearer-Token. Filter werden als undurchsichtige IDs ausgedrückt, daher wird ein Herstellername zunächst über den Hersteller-Endpunkt aufgelöst.

Mouser verwendet einen API-Schlüssel, der als Abfrageparameter übergeben wird, und antwortet auch bei fehlgeschlagener Anfrage mit HTTP 200, wobei der Fehler in einem Errors-Array steht. Der Adapter behandelt dieses Array als maßgeblich. Preise kommen als lokalisierte Anzeigestrings und nicht als Zahlen.

Parametrische Spezifikationen haben keinen gemeinsamen Wortschatz zwischen den beiden Distributoren, daher werden sie als Name/Wert-Zuordnung durchgereicht und nicht in ein gemeinsames Schema normalisiert.

Claude Code wurde bei der Erstellung dieses Tools verwendet.

-
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