digi-mouse-search
digi-mouse-search
MCP-сервер для поиска электронных компонентов в DigiKey и Mouser. Каждого дистрибьютора можно опрашивать по отдельности или обоих вместе, при этом предложения для одного и того же номера детали объединяются в одну запись, чтобы можно было сравнивать цены.
Инструменты
Инструмент | Назначение |
| Поиск по ключевым словам у одного или обоих дистрибьюторов |
| Поиск отдельной детали по артикулу производителя или дистрибьютора |
| Какие источники настроены и сколько осталось запросов в бюджете |
| Сброс кэшированных ответов для получения актуальных остатков и цен |
search_parts принимает список sources. Если его опустить, поиск выполняется по всем настроенным дистрибьюторам; передача ["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. Личное приложение разработчика получает только доступ к песочнице, а песочница возвращает синтетические данные. Для реальных остатков и цен нужно приложение Production, которое находится в организации:
Войдите на developer.digikey.com, используя свою учётную запись DigiKey.
Откройте Организации на панели навигации и создайте организацию, если вы ещё не участник.
В разделе Операции выберите Production-приложения, затем Создать Production-приложение.
Включите Информация о продукте для приложения.
Откройте приложение, чтобы скопировать его Client ID и Client Secret.
Поле OAuth callback используется только трёхсторонним OAuth. Этот сервер использует двухсторонний поток client credentials, поэтому перенаправление на callback никогда не происходит; https://localhost подходит для формы.
Учётные данные песочницы и продакшена не взаимозаменяемы. Учётные данные песочницы работают только с sandbox-api.digikey.com, именно это выбирает DIGIKEY_SANDBOX=true.
Mouser. Запросите ключ Search API на mouser.com/api-hub. Это один ключ, передаваемый как параметр запроса; он приходит по электронной почте.
Настройка 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": "..."
}
}
}
}Лимиты запросов
Оба дистрибьютора предоставляют примерно тысячу вызовов в день, поэтому каждый запрос расходует бюджет. Секундные и минутные окна соблюдаются за счёт ожидания; дневное окно — жёсткое ограничение, которое вместо этого сообщает об ошибке, поскольку ожидать восстановления квоты, сбрасываемой в полночь, бессмысленно. Дневной счётчик сохраняется на диске, поэтому перезапуск сервера не сбрасывает его.
Значения по умолчанию:
Окно | DigiKey | Mouser |
в секунду | 2 | 1 |
в минуту | 60 | 25 |
в день | 1000 | 1000 |
всплеск | 5 | 3 |
макс. ожидание | 10 s | 10 s |
Каждое значение настраивается для каждого провайдера — через переменную окружения или TOML-файл. Используйте none, off, unlimited или 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 сообщает, сколько осталось на день.
Прочие настройки
Переменная | По умолчанию | Значение |
| не задана | Путь к TOML-файлу конфигурации |
|
| База данных кэша и использования |
| 3600 | Время жизни кэшированного ответа в секундах |
| 30 | HTTP-таймаут в секундах |
| false | Использовать хост песочницы DigiKey, возвращающий синтетические данные |
| US | Сайт DigiKey для поиска |
| USD | Валюта для цен DigiKey |
| 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Поток запроса для одного вызова провайдера:
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Примечания по двум API
DigiKey использует OAuth2 client credentials. Токен действует десять минут и кэшируется в памяти; запросы требуют заголовок client id вместе с bearer-токеном. Фильтры выражаются непрозрачными идентификаторами, поэтому имя производителя сначала преобразуется через endpoint manufacturers.
Mouser использует ключ API, передаваемый как параметр запроса, и отвечает HTTP 200, даже если запрос не удался, помещая ошибку в массив Errors. Адаптер считает этот массив источником истины. Цены приходят в виде локализованных строк для отображения, а не чисел.
Параметрические характеристики не имеют общего словаря между двумя дистрибьюторами, поэтому они передаются как карта «имя/значение», а не нормализуются в общую схему.
При создании этого инструмента использовался Claude Code.
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