Skip to main content
Glama
tmpk13

digi-mouse-search

by tmpk13

digi-mouse-search

一个 MCP 服务器,用于在 DigiKey 和 Mouser 上搜索电子元器件。 每个分销商可以单独查询,也可以同时查询两者,相同零件编号的报价会合并为一条记录,方便比较价格。

工具

工具

用途

search_parts

在一个或两个分销商中进行关键词搜索

part_details

按制造商或分销商零件编号查询单个零件

source_status

哪些数据源已配置,以及剩余多少请求预算

clear_cache

清除缓存的响应,以强制获取最新的库存和价格

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 应用,它归属于某个组织(Organization):

  1. 使用你的 DigiKey 账户登录 developer.digikey.com。

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

速率限制

两家分销商每天大约提供一千次调用,因此每个请求都有预算。每秒和每分钟的窗口通过等待来强制执行;每日窗口是硬性停止,会报告错误而不是等待,因为调用方无法有效地等待一个在午夜重置的配额。每日计数器会持久化,因此重启服务器不会重置它。

默认值:

窗口

DigiKey

Mouser

每秒

2

1

每分钟

60

25

每天

1000

1000

突发

5

3

最大等待

10 秒

10 秒

每个值都可以按提供商配置,既可以通过环境变量,也可以通过 TOML 文件。使用 noneoffunlimited0 来禁用某个窗口:

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

一次提供商调用的请求流程:

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 客户端凭据。令牌有效期为十分钟,并缓存在内存中;请求需要在 bearer 令牌之外同时携带客户端 ID 头。过滤器以不透明的 ID 表示,因此制造商名称首先通过 manufacturers 端点解析。

Mouser 使用作为查询参数传递的 API 密钥,即使请求失败也会以 HTTP 200 响应,并将失败信息放在 Errors 数组中。适配器将该数组视为权威信息。价格以本地化的显示字符串形式到达,而不是数字。

参数化规格在两个分销商之间没有共享的词汇表,因此它们以名称/值映射的形式透传,而不是规范化为统一的模式。

此工具的制作过程中使用了 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