digi-mouse-search
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 |
| Stichwortsuche über einen oder beide Distributoren |
| Einzelnes Teil per Hersteller- oder Distributor-Teilenummer nachschlagen |
| Welche Quellen konfiguriert sind und wie viel Anfragebudget übrig ist |
| 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 testAnmeldeinformationen 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:
Melde dich bei developer.digikey.com mit deinem DigiKey-Konto an.
Öffne Organizations in der Navigationsleiste und erstelle eine, falls du nicht bereits Mitglied bist.
Wähle unter Operations die Option Production Apps und dann Create Production App.
Aktiviere Product Information für die App.
Ö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=30Oder 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 |
| nicht gesetzt | Pfad zu einer TOML-Konfigurationsdatei |
|
| Cache- und Nutzungsdatenbank |
| 3600 | Lebensdauer einer zwischengespeicherten Antwort in Sekunden |
| 30 | HTTP-Timeout in Sekunden |
| false | DigiKey-Sandbox-Host verwenden, der synthetische Daten liefert |
| US | DigiKey-Site für die Suche |
| USD | Währung für DigiKey-Preise |
| 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 numberAnfragefluss 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 errorsAnmerkungen 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.
This server cannot be installed
Maintenance
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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