Skip to main content
Glama
tmpk13

digi-mouse-search

by tmpk13

eparts-search-mcp

MCP-сервер, который ищет электронные компоненты в DigiKey, LCSC и Mouser. Каждый дистрибьютор может быть запрошен отдельно или все вместе, при этом предложения для одного и того же номера детали объединяются в одну запись, чтобы можно было сравнить цены.

Инструменты

Инструмент

Назначение

search_parts

Поиск по ключевым словам у одного или нескольких дистрибьюторов

part_details

Поиск одной детали по номеру производителя или дистрибьютора

source_status

Какие источники настроены и сколько осталось запросов

clear_cache

Сброс кэшированных ответов для получения свежих данных о наличии и ценах

search_parts принимает список sources. Если его опустить, поиск выполняется по всем настроенным дистрибьюторам; передача ["mouser"] ищет только у него. По умолчанию результаты объединяются по номеру детали с сравнением cheapest_at_quantity; передайте merge=false, чтобы сохранить результаты каждого дистрибьютора в отдельном списке.

Сравнение учитывает только предложения, у которых есть цена на запрашиваемое количество. LCSC продает многие детали кратно десяти, поэтому при количестве один такое предложение не имеет применимого диапазона и исключается из сравнения, а не считается бесплатным.

Если один дистрибьютор выходит из строя, не настроен или исчерпал квоту, остальные все равно возвращают результаты, а ошибка сообщается в разделе errors.

Related MCP server: Nexar MCP Server

Установка

Чтобы использовать сервер из любого места системы, установите его как отдельный инструмент. Исполняемый файл попадает в ~/.local/bin ($XDG_BIN_HOME, если задан), а его зависимости — в собственное окружение в ~/.local/share/uv/tools:

uv tool install .

mise run install-tool делает то же самое, а mise run uninstall-tool удаляет его. После установки eparts-search-mcp запускает сервер через stdio из любого каталога, читая учетные данные из файла конфигурации XDG, описанного ниже. Ничего за пределами ~/.local и ~/.config не затрагивается, поэтому привилегированный шаг установки не требуется.

Убедитесь, что ~/.local/bin есть в PATH:

export PATH="$HOME/.local/bin:$PATH"

Настройка разработки

Для работы над сервером, а не его использования:

mise install
mise run install
mise run test

Учетные данные могут поступать из файла конфигурации или из окружения. Файл хранит их вне окружения и списков процессов; по умолчанию он читается из ~/.config/eparts-search-mcp/config.toml (или $XDG_CONFIG_HOME, если задан), поэтому EPARTS_CONFIG не требуется:

# ~/.config/eparts-search-mcp/config.toml
[providers.digikey]
# DigiKey: register an app at developer.digikey.com with Product Information enabled
client_id = "..."
client_secret = "..."

[providers.lcsc]
# LCSC: partner credentials issued by an account manager
key = "..."
secret = "..."

[providers.mouser]
# Mouser: request a Search API key from mouser.com/api-hub
api_key = "..."

Поскольку файл содержит секреты, оставьте его доступным только для чтения вами. Сервер предупреждает при запуске, если он доступен группе или другим:

chmod 600 ~/.config/eparts-search-mcp/config.toml

Те же значения могут быть переданы через окружение, которое переопределяет файл:

export DIGIKEY_CLIENT_ID=...
export DIGIKEY_CLIENT_SECRET=...
export LCSC_KEY=...
export LCSC_SECRET=...
export MOUSER_API_KEY=...

Нужны только учетные данные тех дистрибьюторов, которые вы действительно хотите использовать. Источник без учетных данных сообщается как не настроенный, а не приводит к сбою поиска.

Получение учетных данных

DigiKey. Личное приложение разработчика получает только доступ к песочнице, а песочница возвращает синтетические данные. Для реальных данных о наличии и ценах нужно Production-приложение, которое находится в организации:

  1. Войдите на developer.digikey.com с помощью своей учетной записи DigiKey.

  2. Откройте Organizations в навигационной панели и создайте организацию, если вы еще не участник.

  3. В разделе Operations выберите Production Apps, затем Create Production App.

  4. Включите Product Information для приложения.

  5. Откройте приложение, чтобы скопировать его Client ID и Client Secret.

Поле обратного вызова OAuth используется только для трехстороннего OAuth. Этот сервер использует двухсторонний поток учетных данных клиента, поэтому обратный вызов никогда не перенаправляется; https://localhost удовлетворяет форме.

Учетные данные песочницы и продакшена не взаимозаменяемы. Учетные данные песочницы работают только с sandbox-api.digikey.com, что выбирается с помощью DIGIKEY_SANDBOX=true.

LCSC. Open API — это партнерская интеграция, а не самостоятельная регистрация, поэтому учетные данные предоставляются менеджером аккаунта LCSC после того, как вызывающий IP-адрес будет внесен в белый список. Онбординг начинается в тестовой среде на отдельном хосте (fatapi.lcsc.com), который отвечает имитированными данными каталога; LCSC_SANDBOX=true выбирает его. Производственные учетные данные появляются после подписания интеграции и используются с api.lcsc.com.

Вызов аутентифицируется подписью SHA-256 по параметрам запроса, ключу, одноразовому номеру (nonce) и временной метке. Секрет является входом для этого хэша и никогда не передается, поэтому он не появляется ни в URL, ни в журнале; временная метка проверяется, что означает, что сильно неправильные системные часы интерпретируются как истекший запрос, а не как отклоненный ключ.

Mouser. Запросите ключ Search API на mouser.com/api-hub. Это один ключ, передаваемый как параметр запроса, и он приходит по электронной почте.

Конфигурация MCP-клиента

После установки, как описано выше, команда находится в PATH и не требует пути или окружения, поскольку учетные данные берутся из файла конфигурации:

{
  "mcpServers": {
    "eparts-search-mcp": {
      "command": "eparts-search-mcp"
    }
  }
}

Некоторые клиенты запускают серверы с пустым окружением, которое не включает ~/.local/bin; укажите там абсолютный путь:

{
  "mcpServers": {
    "eparts-search-mcp": {
      "command": "/home/you/.local/bin/eparts-search-mcp"
    }
  }
}

Чтобы запустить из исходников без установки или передать учетные данные через клиент, а не через файл конфигурации:

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

Лимиты запросов

Каждый дистрибьютор предоставляет примерно тысячу вызовов в день, поэтому каждый запрос учитывается в бюджете. Окна в секунду и в минуту обеспечиваются ожиданием; дневное окно — это жесткая остановка, которая вместо этого сообщает об ошибке, поскольку вызывающий не может полезно ждать квоту, которая сбрасывается в полночь. Дневной счетчик сохраняется, поэтому перезапуск сервера не сбрасывает его.

Значения по умолчанию:

Окно

DigiKey

LCSC

Mouser

в секунду

2

1

1

в минуту

60

45

25

в день

1000

1000

1000

всплеск

5

5

3

макс. ожидание

10 с

10 с

10 с

LCSC документирует 60 поисков по ключевым словам в минуту и тысячу в день, и учитывает только успешные вызовы. Его значение по умолчанию в минуту установлено ниже документированного потолка, поскольку ограничение со стороны дистрибьютора стоит дороже, чем локальное ожидание. Если собственный счетчик LCSC все же отклоняет вызов, ошибка сообщает об этом, чтобы отличить её от локального бюджета.

Каждое значение настраивается для каждого провайдера либо переменной окружения, либо TOML-файлом. Используйте none, off, unlimited или 0, чтобы отключить окно:

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

Они также находятся в файле конфигурации (~/.config/eparts-search-mcp/config.toml по умолчанию или там, куда указывает EPARTS_CONFIG), см. config.example.toml. Переменные окружения переопределяют файл, поэтому команда запуска клиента может изменить лимит без редактирования конфигурации на диске.

Кэшированные ответы обслуживаются без расходования бюджета. source_status сообщает, сколько осталось на день.

Другие настройки

Переменная

По умолчанию

Значение

EPARTS_CONFIG

~/.config/eparts-search-mcp/config.toml

Путь к TOML-файлу конфигурации; если не задан, читается расположение по умолчанию

EPARTS_CACHE_PATH

$XDG_STATE_HOME/eparts-search-mcp/cache.sqlite3

База данных кэша и использования

EPARTS_CACHE_TTL

3600

Время жизни кэшированного ответа в секундах

EPARTS_REQUEST_TIMEOUT

30

Тайм-аут HTTP в секундах

DIGIKEY_SANDBOX

false

Использовать хост песочницы DigiKey, который возвращает синтетические данные

DIGIKEY_LOCALE_SITE

US

Сайт DigiKey для поиска

DIGIKEY_LOCALE_CURRENCY

USD

Валюта для цен DigiKey

DIGIKEY_LOCALE_LANGUAGE

en

Язык для результатов DigiKey

LCSC_SANDBOX

false

Использовать тестовый хост LCSC, который возвращает имитированные данные

LCSC_CURRENCY

USD

Валюта для цен LCSC: USD, EUR, HKD или CNY

LCSC_LANGUAGE

EN

Язык для результатов LCSC: EN или CN

Файлы на диске

Все, что хранит сервер, находится в базовых каталогах XDG, поэтому установка не владеет ничем за пределами домашнего каталога:

Что

Где

Исполняемый файл

$XDG_BIN_HOME, т.е. ~/.local/bin/eparts-search-mcp

Окружение инструмента

~/.local/share/uv/tools/eparts-search-mcp

Учетные данные и настройки

$XDG_CONFIG_HOME/eparts-search-mcp/config.toml

Кэш и счетчики дневного использования

$XDG_STATE_HOME/eparts-search-mcp/cache.sqlite3

XDG_CONFIG_HOME и XDG_STATE_HOME по умолчанию равны ~/.config и ~/.local/state, если не заданы. EPARTS_CONFIG и EPARTS_CACHE_PATH переопределяют последние два. Удаление с помощью uv tool uninstall eparts-search-mcp оставляет конфигурацию и кэш на месте; удалите эти каталоги, чтобы убрать и их.

Архитектура

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 LCSCProvider {
        -_headers(payload)
        -_to_part(entry)
        +sign(payload, key, secret, nonce, timestamp)
    }
    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 <|-- LCSCProvider
    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 с учетными данными клиента. Токен действует десять минут и кэшируется в памяти; запросы требуют заголовок с идентификатором клиента вместе с токеном носителя. Фильтры выражаются как непрозрачные идентификаторы, поэтому имя производителя сначала разрешается через конечную точку производителей.

LCSC подписывает каждый запрос вместо токена: ключ, nonce, временная метка и отсортированные параметры запроса хэшируются с секретом, и дайджест передается в заголовке. Как и Mouser, он отвечает HTTP 200 даже при неудачном запросе, помещая реальный результат в поле code тела, которое адаптер считает авторитетным. Нет конечной точки для отдельной детали, поэтому поиск деталей — это поиск по ключевым словам, из которого выбирается точное совпадение; поиск по ключевым словам, возвращающий только близкие совпадения, не дает результата, а не правдоподобного неправильного. Также нет фильтра производителя, поэтому производитель включается в ключевое слово, а результаты фильтруются на обратном пути.

Mouser использует ключ API, передаваемый как параметр запроса, и отвечает HTTP 200 даже при неудачном запросе, помещая ошибку в массив Errors. Адаптер считает этот массив авторитетным. Цены приходят как локализованные строки отображения, а не числа.

Параметрические спецификации не имеют общего словаря между тремя дистрибьюторами, поэтому они передаются как карта имя/значение, а не нормализуются в общую схему. Надбавка за катушку LCSC сообщается так же, поскольку это плата за заказ, которую лестница цен за единицу не может выразить.

При создании этого инструмента использовался Claude Code.

Available Tools

4 tools
clear_cacheA

Drop cached distributor responses to force fresh stock and pricing.

Cached responses do not count against the daily quota, so clearing the cache makes subsequent searches spend real request budget.

NameRequiredDescriptionDefault
sourceNoClear one source only; omit to clear everything

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that cached responses are dropped (a destructive action) and that doing so affects the quota of subsequent searches, which is a meaningful behavioral trait. It does not mention undoability, but for a cache clear that is acceptable. No contradictions with annotations exist since none are provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise paragraphs, front-loaded with the primary action and then explaining the quota implication. There is no fluff or redundancy; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one optional parameter, no required parameters) and that an output schema exists, the description adequately covers purpose, effect, and quota behavior. There is nothing missing that an agent would need to decide when and how to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully documents the 'source' parameter with 'Clear one source only; omit to clear everything' (100% schema coverage). The description adds no extra meaning about the parameter, so it meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (drop cached distributor responses) and the goal (force fresh stock and pricing). This is a distinct resource and action, and none of the sibling tools (search_parts, source_status, part_details) perform cache clearing, so it's easily differentiated without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context that clearing the cache forces fresh data and makes subsequent searches consume real request budget, implying the tool should be used when fresh data is required. However, it does not explicitly name alternative tools or state when not to use it, so it falls short of the full 'when/when-not' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

part_detailsA

Look up one part by part number, with full specifications and pricing.

Distributor part numbers only resolve at the distributor that issued them, so a lookup by one distributor's number will normally return a result from that source alone.

NameRequiredDescriptionDefault
sourcesNoWhich distributors to query. Omit to query all configured sources.
part_numberYesManufacturer part number, or a distributor part number such as 296-1234-ND for DigiKey, C22452 for LCSC or 511-LM317T for Mouser

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses a key behavioral trait: distributor part numbers only resolve at the issuing distributor, and results will normally come from that source alone. This is genuinely non-obvious and valuable. It does not mention auth, rate limits, or error handling, but for a lookup tool with an output schema, this covers the main gotcha.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, each earning its place. The first states the core purpose; the second delivers a critical behavioral caveat. No filler, no repetition, and the purpose is front-loaded. This is an efficient, well-structured description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 parameters, 1 optional), the existence of an output schema, and the key distributor caveat being addressed, the description is functionally complete. It lacks only more explicit usage routing, which is covered under usage guidelines, but overall nothing essential is missing for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already includes detailed descriptions for both parameters, including concrete examples for part_number (e.g., '296-1234-ND' for DigiKey) and the meaning of sources. The description adds no additional parameter-specific meaning beyond what the schema provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('look up one part by part number'), the resource ('part'), and the scope ('full specifications and pricing'). It distinguishes from sibling tools: search_parts is for searching, source_status is for status, and clear_cache is for cache management. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description hints at when to use this tool (when you have a specific part number) versus searching, but it does not explicitly name alternatives or exclusion conditions. The distributor-resolution note gives behavioral context but not direct routing. Sibling differentiation is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_partsA

Search DigiKey, LCSC and Mouser for electronic components.

Searches every configured distributor by default and merges offers for the same part number so prices can be compared. Pass sources to query one distributor on its own. If a distributor fails or is out of quota, results from the others are still returned and the failure is listed under errors.

NameRequiredDescriptionDefault
limitNoMaximum parts per source
mergeNoGroup offers for the same part number into one entry with a price comparison. Set false to keep each distributor's results separate.
keywordYesPart number, description or search phrase
sourcesNoWhich distributors to query: ['digikey'], ['lcsc'], ['mouser'], or any combination. Omit to search every configured source.
quantityNoQuantity used for the price comparison
manufacturerNoRestrict results to one manufacturer, by name
in_stock_onlyNoExclude parts with no stock
include_specsNoInclude parametric specifications

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the full burden falls on the description — and it delivers. It discloses aggregation (merges offers by part number), default scope (every configured distributor), and importantly the partial-failure semantics (a failing or quota-exhausted distributor still yields results from others, with the failure surfaced under errors). These are non-obvious behaviors not visible in the schema. No contradictions exist since no annotations were declared.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight, front-loaded sentences: purpose first, then merge behavior, then source-scoping and failure tolerance. Each sentence adds a distinct piece of information with no padding or repetition. Minor nit — 'electronic components' is slightly generic — but overall the structure is efficient and well-ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter multi-distributor tool with a 100%-coverage schema and an output schema present, the definition is largely complete: it covers default behaviors, the sources override, quantity/limit context, and edge-case handling. The one genuine gap is sibling routing — when the keyword is an exact part number, an agent may need guidance that part_details is the better fit. Minor given the overall richness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% — every one of the 8 parameters already carries a descriptive schema entry (limit, merge, keyword, sources, quantity, manufacturer, in_stock_only, include_specs). Baseline is therefore 3. The description adds marginal value by explaining the sources override and the merge default, but it does not compensate beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource set: 'Search DigiKey, LCSC and Mouser for electronic components.' This is precise and clearly distinguishes the tool from its siblings — source_status checks health, part_details fetches a single part, clear_cache manages cache. An agent can tell this is the multi-distributor search tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description thoroughly explains the tool's own operating behavior: default all-sources search, merging of same-part offers, the `sources` override, and failure tolerance. However, it never names an alternative or states when NOT to use it. Critically, since the `keyword` field accepts a part number, an agent could be torn between search_parts and part_details, and nothing here routes that choice. Context is strong, but explicit exclusions/alternatives are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

source_statusA

Report which distributors are configured and how much request budget is left.

Use this when a search reports a rate limit error, to see the configured limits and how many requests remain for the day.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of disclosing behavior. It states the tool reports configuration and budget, which implies a read-only operation, but it does not explicitly clarify that it has no side effects or mention any caveats (e.g., caching, staleness). This is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with the primary purpose front-loaded and the usage guidance immediately following. Every sentence earns its place, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters) and the existence of an output schema (so return values need not be described), the description fully covers what the tool does and when to use it. Nothing an agent needs to know to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters and 100% coverage (empty object), so the description has nothing to add for parameters. Per calibration, a tool with 0 parameters gets a baseline of 4, and the description does not detract from that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Report') followed by the precise resource ('which distributors are configured and how much request budget is left'). It uniquely distinguishes this from sibling tools like search_parts or clear_cache, which clearly have different functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit trigger condition ('Use this when a search reports a rate limit error'), making the intended context clear. However, it does not name alternatives or explicitly state when not to use it, so it misses the full when/when-not/alternatives structure that would merit a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.1.0
    • First observedclear_cache
    • First observedpart_details
    • First observedsearch_parts
    • First observedsource_status

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool serves a distinct purpose: searching across distributors, reporting status/quotas, fetching detailed part info, and clearing cache. There is no overlap or ambiguity between actions.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (search_parts, source_status, part_details, clear_cache), making the API predictable and easy to navigate.

Tool Count5/5

With 4 tools, the server is well-scoped for its purpose of component search and comparison. Each tool earns its place, covering search, details, status, and cache management without bloat.

Completeness4/5

The core workflow is covered: search, view details, check quota, and manage cache. Minor gaps exist (e.g., no bulk operation or category browsing), but the essential lifecycle for a search-focused server is present.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables searching for electronic components through the Nexar Supply API, providing detailed part information including manufacturer, pricing, specifications, and datasheets.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables searching for electronic components, comparing prices across distributors, checking availability, and retrieving datasheets through the Nexar/Octopart API with specialized tools for resistors, capacitors, inductors, semiconductors, crystals, and connectors.
    11
    -
  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides access to the DigiKey Product Search API v4, allowing users to search for electronic components and retrieve detailed product specifications. It supports keyword searches, pricing inquiries, manufacturer lookups, and access to technical datasheets.
    3
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables searching and filtering over 1.5 million electronic components across JLCPCB, Mouser, and DigiKey using parametric queries and smart parsing. It supports finding alternative parts, accessing pinout data, and downloading KiCad footprints directly through AI coding assistants.
    11
    134
    MIT