Skip to main content
Glama
MSPbotsAI

ingrammicro-mcp

by MSPbotsAI

ingrammicro-mcp

MCP server for the entire Ingram Micro Reseller purchasing lifecycle — a stateless HTTP MCP service wrapping the full non-webhook surface of Ingram Micro's Reseller REST API: product catalog/pricing, quotes, order placement/change/cancel/lookup, invoices, renewals, special-pricing deals, returns, and freight estimates.

Tech stack: Python 3.12 + uv + FastMCP (Starlette/Uvicorn)

Why this exists instead of just using Ingram Micro's own MCP Server

Ingram Micro also publishes its own official, remote-hosted MCP Server (developer.ingrammicro.com/reseller/mcp-server). Verified directly against that page's own content (2026-09-01): it is query-only — product/pricing search, quotes, invoices, returns, renewals, subscriptions, and freight estimate. It never mentions "Create Order" or "Place Order" anywhere, so it cannot place a purchase order.

Rather than deploying two separate Ingram Micro connectors (their query- only MCP plus a second one just for ordering — which would mean provisioning two separate sets of credentials for the same vendor, and the agent having to pick between two connectors for overlapping capability), this server reimplements the official MCP's query capabilities itself, directly against the same underlying Reseller REST API, and adds the order-placement/change/cancel capability the official one lacks. One connector, one set of credentials, full coverage — this server is meant to fully replace Ingram Micro's own MCP Server for MSPbots' purposes, not run alongside it.

Related MCP server: pax8-mcp

Authentication

OAuth2 client_credentials grant — pure server-to-server, no browser redirect — but via Ingram Micro's own documented shape: GET /oauth/oauth20/token with client_id/client_secret as query parameters, not the more common HTTP Basic Auth header. Verified against Ingram Micro's own published OpenAPI spec (github.com/ingrammicro-xvantage/xi-sdk-openapispec, openapispec/unified/XI-Resellers-API-Spec.json, checked 2026-09-01), not guessed.

Every real Orders/Quote-to-Order call additionally requires three business-context headers Ingram Micro's own docs mark mandatory — IM-CustomerNumber, IM-CountryCode, IM-CorrelationID — plus an optional IM-SenderID. IM-CorrelationID must be unique per transaction, so this server generates a fresh UUID for every call itself; it is not something the caller supplies.

Getting credentials is not self-serve. Per Ingram Micro's own onboarding docs, applying for API access requires:

  • An existing, active Ingram Micro reseller account in good standing

  • Current sales history with Ingram Micro

  • Sandbox testing, then a formal app-approval submission (~2 business days)

This is a real prerequisite, not a formality — confirm the tenant already has an active Ingram Micro reseller relationship before attempting to provision credentials for this server.

Since this is a stateless multi-tenant service, the token is not cached — every tool call re-authenticates from scratch (same pattern as cisco-umbrella-mcp/covedataprotection-mcp/webroot-mcp).

HEADER 授权参数说明

Header

类型

是否必填

默认值

枚举值

字段描述

Example

X-IngramMicro-Client-Id

string

OAuth2 client_credentials 的 Client ID

abc123...

X-IngramMicro-Client-Secret

string

OAuth2 client_credentials 的 Client Secret

xyz789...

X-IngramMicro-Customer-Number

string

Ingram Micro 经销商账号(对应上游 IM-CustomerNumber),如 20-222222

20-222222

X-IngramMicro-Country-Code

string

两位 ISO 国家代码(对应上游 IM-CountryCode

US

Missing any of the four required headers returns 401 Unauthorized.

Quick Start

docker compose up --build

The server starts on http://localhost:8080.

Local (uv)

uv sync
python -m ingrammicro_mcp

Health Check

curl http://localhost:8080/health
# {"status": "ok"}

No credentials are required for the health endpoint.

Environment Variables

Variable

Default

Description

MCP_TRANSPORT

stdio

http (production) or stdio (local dev)

MCP_HTTP_PORT

8080

Listening port

MCP_HTTP_HOST

0.0.0.0

Listening host

AUTH_MODE

gateway

gateway (per-request headers, SOP-compliant) or env (shared credential, local dev only)

INGRAMMICRO_CLIENT_ID / _CLIENT_SECRET / _CUSTOMER_NUMBER / _COUNTRY_CODE

Only used in env mode

INGRAMMICRO_SENDER_ID

MSPbots

IM-SenderID value sent on every call

INGRAMMICRO_BASE_URL

https://api.ingrammicro.com

Override for sandbox testing (see Known Gaps — the exact sandbox URL is unverified)

Tool List

24 tools, covering every non-webhook endpoint in Ingram Micro's Resellers API. Every order-placing/modifying tool spends real money against the reseller's Ingram Micro net-terms account — Ingram Micro does not support credit-card API ordering, only net-terms trade credit, so a mistaken order is a real invoice, not a rejected charge.

Catalog(对应官方MCP:Product Info & Pricing)

Tool

功能

方法+路径

ingrammicro_search_products

按关键词/厂商/分类搜索产品目录

GET /resellers/v6/catalog

ingrammicro_get_product_detail

按Ingram Part Number查产品详情

GET /resellers/v6/catalog/details/{ingramPartNumber}

ingrammicro_get_product_detail_by_reference

按厂商料号/订阅计划id或名查产品详情

GET /resellers/v6/catalog/details

ingrammicro_get_price_and_availability

查实时价格与库存

POST /resellers/v6/catalog/priceandavailability

Quotes(对应官方MCP:Quotes)

Tool

功能

方法+路径

ingrammicro_search_quotes

搜索报价单

GET /resellers/v6/quotes/search

ingrammicro_get_quote

查报价单详情

GET /resellers/v6/quotes/{quoteNumber}

ingrammicro_create_quote

创建报价单(占价,不是下单)

POST /resellers/v6/quotes/create

ingrammicro_validate_quote_to_order

转单前校验报价,返回必填字段

GET /resellers/v6/q2o/validatequote

Orders(对应官方MCP:Orders,但官方只读;下单/改单/取消是官方没有的能力)

Tool

功能

方法+路径

主要参数

ingrammicro_create_order

下单:库存/直发/授权/保修类SKU

POST /resellers/v6/orders

customer_order_number(必填), lines(必填), ship_to_info, end_user_info, reseller_info, shipment_details, vendor_auth_number(保修单必填)

ingrammicro_create_cloud_order

下单:云订阅 / Quote-to-Order / Configure-to-Order(异步,结果通过webhook推送,不在本次响应里)

POST /resellers/v7/orders

quote_numberlines 二选一(必须给一个)

ingrammicro_modify_order

改单:仅限带customer-hold标记、下单后24小时内的订单

PUT /resellers/v6/orders/{orderNumber}

order_number(必填), action_code(如"release"), lines(ADD/UPDATE/DELETE)

ingrammicro_cancel_order

取消订单:仅限尚未放行到仓库前

DELETE /resellers/v6/orders/{OrderNumber}

order_number(必填)

ingrammicro_get_order

查单个订单详情/物流状态

GET /resellers/v6.1/orders/{ordernumber}

ingrammicro_search_orders

按PO号/状态/产品搜索订单

GET /resellers/v6/orders/search

Invoices(对应官方MCP:Invoices)

Tool

功能

方法+路径

ingrammicro_search_invoices

搜索发票

GET /resellers/v6/invoices

ingrammicro_get_invoice

查发票详情

GET /resellers/v6.1/invoices/{invoiceNumber}

Renewals(对应官方MCP:Subscriptions/Renewals)

Tool

功能

方法+路径

ingrammicro_search_renewals

搜索续订机会

POST /resellers/v6/renewals/search

ingrammicro_get_renewal

查续订详情

GET /resellers/v6/renewals/{renewalId}

Deals(特价/Special Bid,官方MCP未单独列出,但同属查询类能力)

Tool

功能

方法+路径

ingrammicro_search_deals

搜索特价/Special Bid

GET /resellers/v6/deals/search

ingrammicro_get_deal

查特价详情

GET /resellers/v6/deals/{dealId}

Returns(对应官方MCP:Returns)

Tool

功能

方法+路径

ingrammicro_search_returns

搜索退货(RMA)申请

GET /resellers/v6/returns/search

ingrammicro_get_return

查退货详情

GET /resellers/v6/returns/{caseRequestNumber}

ingrammicro_create_return

提交退货申请

POST /resellers/v6/returns/create

Freight(对应官方MCP:Freight & Shipping)

Tool

功能

方法+路径

ingrammicro_get_freight_estimate

运费预估

POST /resellers/v6/freightestimate

复杂嵌套参数(lines/ship_to_info/end_user_info/reseller_info/shipment_details/additional_attributes/products/returns等)以 dict/list[dict] 形式传入,具体字段见每个工具自己的参数说明(已对照官方 OpenAPI spec 核实字段名)。

ingrammicro_search_quotes/ingrammicro_create_quote/ingrammicro_get_freight_estimate 额外要求一个 requester_email 参数(对应上游 IM-CustomerContact/CustomerContact:发起请求的登录用户邮箱)——这是调用方个人身份信息,不是租户级凭据,所以做成工具参数而不是网关 Header。

测试示例

curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "X-IngramMicro-Client-Id: <client_id>" \
  -H "X-IngramMicro-Client-Secret: <client_secret>" \
  -H "X-IngramMicro-Customer-Number: 20-222222" \
  -H "X-IngramMicro-Country-Code: US" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "ingrammicro_validate_quote_to_order",
      "arguments": { "quote_number": "QUO-14551943-D2Y9L9" }
    }
  }'

⚠️ 本仓库为公开仓库,请勿在任何提交的文件中写入真实的 client_id/client_secret/customer_number 等敏感信息。

API Reference

Known Gaps

  • ⚠️ Not yet verified against a real Ingram Micro account. This build was written entirely from Ingram Micro's own published OpenAPI spec — schema/tool count confirmed via the real MCP protocol (tools/list, 24 tools) and unit tests passing, but no call has been exercised against a real, credentialed Ingram Micro reseller account. Getting one requires an existing reseller relationship with sales history (see Authentication) — needs re-verification once real sandbox or production credentials are available.

  • Sandbox base URL is unconfirmed. Ingram Micro's own sources disagree: the support/auth documentation references a https://api.ingrammicro.com:443/sandbox path, while the official OpenAPI spec's own servers block lists a single URL (https://api.ingrammicro.com:443/) labeled "Sandbox" with no /sandbox suffix. INGRAMMICRO_BASE_URL is fully overridable specifically so this can be corrected without a code change once confirmed.

  • IM-ApplicationID vs IM-SenderID: Ingram's own spec documents Invoices/Deals-details as requiring IM-ApplicationID while every other endpoint documents the identical concept as IM-SenderID. Treated as a spec-naming inconsistency rather than two different things — this server sends both headers with the same configured sender id on every call rather than guessing which name a given endpoint actually validates.

  • Webhooks (Order Status, Stock Update) are out of scope. These are inbound push notifications Ingram Micro sends to a callback URL a reseller registers — not something an MCP tool (which the agent calls) can meaningfully wrap. ingrammicro_create_cloud_order (v7) is documented as asynchronous specifically because its real result arrives via this webhook mechanism, not in the tool's own response — there is no tool here to receive or poll for that result; a separate webhook receiver component would be needed for that, out of scope for this build.

  • Complex nested body parameters (lines, ship_to_info, end_user_info, reseller_info, shipment_details, additional_attributes) are passed through as dict/list[dict] rather than fully typed as individual Python parameters — the real request bodies have dozens of optional nested fields per object (verified against the spec, field names are accurate), but modeling every one as a typed parameter was out of scope. Field names/shapes are documented in each parameter's own description.

Available Tools

24 tools
ingrammicro_cancel_orderA
DestructiveIdempotent

Cancel an order before it reaches Ingram Micro's warehouse.

    Irreversible once it fails: an order already released to the
    warehouse CANNOT be canceled through this API at all — Ingram
    Micro requires the order to still be on customer hold. Confirm
    with a human before calling; there is no way to check "is it too
    late" ahead of time other than trying and reading the error.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
order_numberYesIngram Micro's own sales order number, e.g. "20-RD128".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the destructiveHint and idempotentHint annotations, the description discloses the irreversible failure behavior, the customer-hold requirement, and the lack of a preflight check. This is exactly the sort of contextual risk information an agent needs before invoking a destructive API.

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?

The description is slightly verbose but every sentence adds meaningful warning or constraint information. The opening sentence states the core purpose immediately, and the subsequent block explains critical edge-case behavior without unnecessary fluff.

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 single parameter, the presence of an output schema, and strong annotations, the description covers all essential guidance for a destructive operation: when it is valid, what makes it fail, why human confirmation is needed, and what cannot be determined in advance. Nothing critical is missing.

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 describes the single parameter, order_number, including a concrete example. The tool description adds no additional parameter-level detail, but since schema coverage is 100%, the baseline score 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 states a specific verb and resource: 'Cancel an order before it reaches Ingram Micro's warehouse.' This clearly distinguishes the tool from sibling order-related tools like create_order, modify_order, and get_order by focusing on the cancellation action and its timing constraint.

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 explicit timing conditions for use: cancellation is only possible before the order reaches the warehouse and while it is on customer hold. It also warns against using it after release and advises human confirmation. It does not explicitly name alternative tools, but the guidance is practical and clear enough for an agent to decide when to call it.

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

ingrammicro_create_cloud_orderA
Destructive

Place a cloud-subscription order, or convert an existing Quote (Quote-to-Order / Configure-to-Order) into a real order. Asynchronous: this call only returns a confirmationNumber acknowledging receipt — Ingram Micro pushes the actual order result (success or error) later via its own webhook, not in this response.

    For standard stocked/direct-ship/licensing/warranty SKUs (not
    cloud, not quote-based), use ingrammicro_create_order instead.
    Real money against the reseller's net-terms account — no dry-run,
    no credit-card ordering. Always validate a quote first with
    ingrammicro_validate_quote_to_order before passing quote_number
    here.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
linesNoStandard-order line items (ignored in Quote-to-Order mode): [{"customerLineNumber", "ingramPartNumber", "vendorPartNumber", "quantity", "unitPrice", "endUserPrice" (required for export orders), "specialBidNumber", "notes"}]. Required unless quote_number is given.
notesNoOrder header-level notes.
quote_numberNoIngram Micro quote number for Quote-to-Order or Configure-to-Order. When given, any SKU/quantity/price in `lines` is IGNORED — the quote's own details are used instead. Validate it first with ingrammicro_validate_quote_to_order to learn any vendor-mandatory fields to pass here.
ship_to_infoNoOptional shipping destination override: {"addressId" (Ingram-issued address id from onboarding), "contact", "companyName", "name1", "name2", "addressLine1/2/3", "city", "state", "postalCode", "countryCode", "phoneNumber", "email"}. Omit to ship to the address tied to addressId on the account.
end_user_infoNoOptional end-customer identity, used for pricing/discount purposes: {"endUserId", "contact", "companyName", "name1", "name2", "addressLine1/2/3", "city", "state", "postalCode", "countryCode", "phoneNumber", "email"}.
reseller_infoNoOptional reseller identity/address override: {"resellerId", "companyName", "contact", "addressLine1/2/3", "city", "state", "postalCode", "countryCode", "phoneNumber", "email"}. Omit to use the account's on-file reseller info.
shipment_detailsNoOptional shipping instructions: {"carrierCode", "freightAccountNumber" (bill reseller's own carrier account directly), "shipComplete" ("true"/"C"=hold until all lines ship, "P"=ship-complete per line, "E"=ship-complete across all distributions), "requestedDeliveryDate" (date, not guaranteed), "signatureRequired" (bool), "shippingInstructions"}.
accept_back_orderNoAccept the order even if backordered.
bill_to_address_idNoBilling address suffix from onboarding.
special_bid_numberNoHeader-level special-pricing bid number.
vendor_auth_numberNoVendor authorization number, if the specific vendor requires it.
additional_attributesNoOptional Ingram-specific flags as [{"attributeName", "attributeValue"}] pairs — e.g. allowPartialOrder, allowDuplicateCustomerOrderNumber, government-order fields (govtProgramType, govtEndUserType, etc). Rarely needed; omit unless a specific Ingram-documented flag is required.
customer_order_numberNoYour own order number for reference (max 18 chars). Strongly recommended even though not strictly required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing asynchronous behavior (only returns confirmationNumber, actual result via webhook), real-money impact, and no dry-run capability. This is critical for setting an agent's expectations about side effects. No contradiction with the destructiveHint annotation.

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?

Every sentence carries operational weight: purpose, async caveat, sibling disambiguation, financial warning, and validation prerequisite. There is no filler, and the core action is front-loaded. The length is appropriate for the complexity.

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 13 parameters with zero required fields and a rich schema, the description covers the essential operational context: async receipt, webhook-based results, financial consequences, and quote validation. It does not need to enumerate all parameters because the schema already documents them thoroughly.

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?

Schema coverage is 100%, so the baseline is 3. The top-level description adds meaningful context about the quote_number dependency, the need to validate quotes, and the distinction between quote-based and line-item ordering. This supplements the schema's already-strong parameter descriptions.

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 specific actions: placing a cloud-subscription order or converting a Quote-to-Order/Configure-to-Order into a real order. It also explicitly differentiates itself from ingrammicro_create_order by naming that sibling for standard SKUs. This makes the tool's purpose unambiguous.

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

Usage Guidelines5/5

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

Provides explicit when-to-use and when-not-to-use guidance: standard SKUs should use ingrammicro_create_order instead. It also instructs the agent to validate a quote first with ingrammicro_validate_quote_to_order before passing quote_number. This is direct and actionable routing.

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

ingrammicro_create_orderA
Destructive

Place a real purchase order for stocked, direct-ship, licensing, or warranty SKUs. Real money against the reseller's net-terms account — Ingram does not support credit-card API ordering.

    For cloud subscriptions, Quote-to-Order, or Configure-to-Order, use
    ingrammicro_create_cloud_order instead — this tool is for standard
    SKU ordering only. Confirm every SKU/quantity/price with a human
    first; there is no dry-run mode. Returns per-line success/error/
    warning counts and, on partial failure, a rejectedLineItems list
    naming exactly which lines failed and why.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
linesYesOrder line items: [{"customerLineNumber": <unique numeric string, 1-884>, "ingramPartNumber": <Ingram's own SKU, required>, "quantity": <int>, "unitPrice": <optional decimal, not guaranteed>, "specialBidNumber": <optional, line-level pricing bid>, "notes": <optional>}]. Resolve ingramPartNumber via Ingram Micro's own MCP Server's product/catalog search first — this server has no catalog lookup of its own.
notesNoOrder-level notes.
ship_to_infoNoOptional shipping destination override: {"addressId" (Ingram-issued address id from onboarding), "contact", "companyName", "name1", "name2", "addressLine1/2/3", "city", "state", "postalCode", "countryCode", "phoneNumber", "email"}. Omit to ship to the address tied to addressId on the account.
end_user_infoNoOptional end-customer identity, used for pricing/discount purposes: {"endUserId", "contact", "companyName", "name1", "name2", "addressLine1/2/3", "city", "state", "postalCode", "countryCode", "phoneNumber", "email"}.
reseller_infoNoOptional reseller identity/address override: {"resellerId", "companyName", "contact", "addressLine1/2/3", "city", "state", "postalCode", "countryCode", "phoneNumber", "email"}. Omit to use the account's on-file reseller info.
shipment_detailsNoOptional shipping instructions: {"carrierCode", "freightAccountNumber" (bill reseller's own carrier account directly), "shipComplete" ("true"/"C"=hold until all lines ship, "P"=ship-complete per line, "E"=ship-complete across all distributions), "requestedDeliveryDate" (date, not guaranteed), "signatureRequired" (bool), "shippingInstructions"}.
accept_back_orderNoAccept the order even if a line is backordered. Ignored if shipment_details.shipComplete is set.
bill_to_address_idNoBilling address suffix issued during onboarding. Omit for the default.
special_bid_numberNoHeader-level special-pricing bid number from the vendor. Line-level bids in `lines` take precedence.
vendor_auth_numberNoVendor authorization number — REQUIRED for warranty-SKU orders (the specific vendor mandates this; ask Ingram Micro sales which vendors need it). Without it, warranty orders are placed on hold.
additional_attributesNoOptional Ingram-specific flags as [{"attributeName", "attributeValue"}] pairs — e.g. allowPartialOrder, allowDuplicateCustomerOrderNumber, government-order fields (govtProgramType, govtEndUserType, etc). Rarely needed; omit unless a specific Ingram-documented flag is required.
customer_order_numberYesYour own unique PO/order number for this order (max 35 chars). Ingram Micro tracks orders by this, not just its own order number — reuse of a number that already exists is rejected unless allowDuplicateCustomerOrderNumber is set via additional_attributes.
end_customer_order_numberNoThe end customer's own PO number, if any.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the operation as destructive and non-idempotent, and the description meaningfully enlarges on that: real money against net-terms, no credit-card API support, no dry-run mode, and partial-failure behavior via rejectedLineItems. This is exactly the kind of behavioral context the annotations alone cannot convey.

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 compact and front-loaded with the most important warning: 'Real money... no dry-run mode.' Every sentence earns its place, covering funding constraints, tool routing, approval requirements, and response behavior without redundancy.

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?

For a high-stakes, 13-parameter ordering tool, the description plus fully documented schema and output schema covers scope, exclusions, risk, prerequisites, and post-call outcomes. Nothing essential is missing for an agent to decide whether and how to invoke the tool.

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 description coverage is 100%, and the schema already documents all 13 parameters in detail, so the description correctly avoids re-explaining them. The description adds process-level context like confirming SKUs with a human, but this is not parameter-specific semantic detail, 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 opens with a specific action and resource: 'Place a real purchase order for stocked, direct-ship, licensing, or warranty SKUs.' It also explicitly names the sibling tool to use instead for cloud/quote/configure-to-order, making differentiation from the large sibling list immediate.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance: use this tool for standard SKU ordering, and use ingrammicro_create_cloud_order for cloud subscriptions, Quote-to-Order, or Configure-to-Order. It also prescribes a human-approval step, since there is no dry-run mode.

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

ingrammicro_create_quoteA

Create a new quote — a price hold, not a purchase. Convert it to a real order later with ingrammicro_create_cloud_order(quote_number=...) after validating with ingrammicro_validate_quote_to_order.

ParametersJSON Schema
NameRequiredDescriptionDefault
deal_idNoSpecial-pricing deal id to apply to the quote.
productsYesLine items: [{"customerLineNumber", "ingramPartNumber", "vendorPartNumber", "quantity", "specialBid", "lineLevelNotes", "pricingType"}].
last_nameNoRequester's last name.
first_nameNoRequester's first name.
quote_nameNoReference name for the quote.
pricing_typeNoPricing type for the quote.
customer_needNoFree-text note on what the customer needs.
end_user_infoNoOptional end-customer identity: {"companyName", "contact", "addressLine1/2", "city", "state", "postalCode", "countryCode", "email", "phoneNumber"}.
requester_emailYesEmail of the person creating this quote (Ingram requires it).
send_quote_copyNoComma-separated emails to send the quote to (max 10).
quote_expiry_dateNoDate the quote should expire.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/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 mentions that the quote is a 'price hold, not a purchase' (implying non-finality) and notes that Ingram requires the requester's email. However, it does not disclose potential side effects (e.g., sending emails via send_quote_copy), success/failure behaviors, or authentication/permission requirements, leaving some ambiguity.

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 concise, consisting of two sentences that efficiently convey the purpose and workflow. It avoids redundancy and is well-structured, with the core action and important clarifications presented in a compact manner.

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?

The description provides key contextual information: it explains the non-purchase nature, the conversion path, and the required requester_email. It does not elaborate on output or further details, but since an output schema exists (per context signals), explaining return values is unnecessary. Overall, the description gives sufficient context for an agent to decide when to invoke this tool.

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 schema descriptions cover 100% of the parameters, providing clear meaning for each field (e.g., requester_email, products, end_user_info). The tool description does not add extra semantics beyond the schema, so the score aligns with the baseline for full schema coverage.

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 tool's purpose: create a new quote as a price hold, not a purchase. It explicitly contrasts with order creation and provides the subsequent conversion path via ingrammicro_create_cloud_order and validation via ingrammicro_validate_quote_to_order, which distinguishes it from sibling tools.

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

Usage Guidelines5/5

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

The description indicates when to use the tool (when creating a quote) and clarifies that it is not a purchase, while also guiding the user on the recommended next steps (conversion and validation). This effectively communicates the usage context and alternative pathways.

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

ingrammicro_create_returnA
Destructive

File one or more return (RMA) requests against already-invoiced product. Each entry needs the original invoice, a quantity, primary/secondary reason, box count, and a full ship-from address — Ingram rejects a request missing any of those. Confirm with a human before filing; a filed return cannot be un-filed through this API.

ParametersJSON Schema
NameRequiredDescriptionDefault
returnsYesReturn line requests: [{"invoiceNumber" (required), "invoiceDate" (required, YYYY-MM-DD), "customerOrderNumber", "ingramPartNumber", "vendorPartNumber", "serialNumber", "quantity" (required), "primaryReason" (required), "secondaryReason" (required), "notes", "referenceNumber", "billToAddressId", "numberOfBoxes" (required), "shipFromInfo" (required): [{"companyName", "contact", "addressLine1", "city", "state", "postalCode", "countryCode", "email" — all required, "addressLine2/3", "phoneNumber" optional}]}].

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and idempotentHint=false. The description adds that a filed return cannot be un-filed through this API, explicitly explaining the destructive consequence. This is valuable behavioral context beyond the annotation flags.

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 compact and front-loaded, with the core action stated first, followed by required fields and a critical warning. No wasted words; every sentence contributes necessary information.

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 a destructive creation operation, the description covers prerequisites, field requirements, rejection behavior, and irreversibility. An expected output schema exists (though not shown), so return details need not be described. Minor omission: no mention of response format or any operation-specific rate limits, but these are less critical given the output schema and basic usage context.

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 schema description covers 100% of parameters with detailed field lists and required markers. The tool description repeats the key fields and adds that missing any causes rejection, which is somewhat redundant but reinforces the schema. Since schema coverage is complete, the description doesn't need to add much parameter-level detail.

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 tool's function: filing one or more return (RMA) requests against already-invoiced product. It uses a specific verb ('file') and resource ('return requests'), and is easily distinguished from sibling tools like search_returns or get_return.

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 specifies when to use the tool: against already-invoiced product, and notes that a request is rejected if required fields are missing. It also instructs to confirm with a human before filing, which is critical usage guidance. It does not explicitly contrast with alternative tools, but the context strongly implies it is for creation, not lookup.

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

ingrammicro_get_dealA
Read-onlyIdempotent

Get full detail for one special-pricing deal, including which products/vendors it covers.

ParametersJSON Schema
NameRequiredDescriptionDefault
deal_idYesIngram Micro's unique deal id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the read-only and idempotent nature is covered. The description adds only return-content context (covered products/vendors), not behavioral traits such as error behavior or auth requirements. This is acceptable given the strong annotation coverage.

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 a single, front-loaded sentence that quickly states the operation and its key output. There is no wasted wording, and the most important information ('get full detail for one deal') appears first.

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?

With one well-described required parameter, a read-only/idempotent annotation profile, and an output schema available, this description is sufficient for an agent to call the tool correctly. The only missing context is how to discover a deal_id, but that is the job of sibling search tools and not essential for this get-by-id operation.

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 schema has 100% coverage: deal_id is described as 'Ingram Micro's unique deal id.' The description adds no further meaning about how to use or format the parameter, so the baseline score of 3 applies where the schema already documents it.

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

Purpose4/5

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

The description clearly states the operation ('Get full detail'), the resource ('one special-pricing deal'), and a key aspect of the result ('which products/vendors it covers'). However, it does not explicitly differentiate itself from sibling tools like ingrammicro_search_deals, relying on the reader to infer that a 'detail' endpoint for a single deal is distinct from a search endpoint.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus alternatives such as ingrammicro_search_deals. The description does not mention that this tool is intended for retrieving details after finding a deal, nor does it provide any prerequisites for obtaining a deal_id.

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

ingrammicro_get_freight_estimateA
Read-onlyIdempotent

Estimate freight/shipping cost for a set of SKUs and quantities before placing an order — check this when shipping cost matters to the customer's decision.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesYesLine items to estimate: [{"customerLineNumber", "ingramPartNumber", "quantity", "warehouseId", "carrierCode"}].
requester_emailYesEmail of the person requesting this estimate (Ingram requires it).
ship_to_addressNoShipping destination(s) (used only if ship_to_address_id is not given): [{"companyName", "addressLine1/2/3", "city", "state", "postalCode", "countryCode"}].
bill_to_address_idNoBilling address suffix from onboarding.
ship_to_address_idNoIngram-issued shipping address id from onboarding. Preferred over ship_to_address.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description does not need to restate safety. It adds the context that this happens before order placement, but does not disclose any additional behavioral traits such as return format, side effects, or prerequisites beyond what annotations and schema already provide.

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 short, front-loaded with the core action, and includes a practical usage condition. Every sentence contributes value, and there is no redundant 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 rich input schema, output schema, and read-only/idempotent annotations, the description is complete enough for an agent to select and invoke the tool correctly. The purpose and usage context are clearly stated, and no critical information is missing.

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 description coverage is 100%, so the parameters are fully documented. The description's 'SKUs and quantities' loosely maps to the lines parameter but does not add meaningful detail beyond the schema. Baseline 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 identifies the tool's function: estimating freight/shipping costs for SKUs and quantities before placing an order. It uses a specific verb and resource, and the 'before placing an order' context differentiates it from order-placement siblings.

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 explicitly states when to use the tool: when shipping cost matters to the customer's decision. It does not name alternatives or provide when-not-to-use guidance, but no obvious freight-estimate sibling exists, so the context is sufficient.

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

ingrammicro_get_invoiceA
Read-onlyIdempotent

Get full line-level detail for one invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
invoice_numberYesIngram Micro invoice number.
include_serial_numbersNoInclude per-unit serial numbers in the response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering safety. The description adds the behavioral trait that it returns 'full line-level detail', indicating the response includes detailed invoice lines rather than a summary. This adds context beyond annotations and aligns with the read-only nature.

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?

A single highly informative sentence that front-loads the verb and resource. No filler or redundant words; every word contributes to understanding the tool's purpose and scope.

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?

For a simple read-only tool with 2 parameters (1 required), full schema coverage, and an output schema, the description is complete. It specifies the core purpose and scope, and the schema and annotations cover the remaining details such as optional serial numbers and safety. No critical information is missing.

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 description coverage is 100%, with both parameters documented ('Ingram Micro invoice number' and 'Include per-unit serial numbers in the response'). The description does not add additional parameter meaning beyond the schema; the baseline of 3 applies since the schema carries the burden.

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 clear verb ('Get'), a specific resource ('invoice'), and a specific scope ('full line-level detail for one invoice'). This distinguishes it from sibling search tools like ingrammicro_search_invoices, which handle lists, and other get tools focusing on different resources. An agent can understand exactly what this tool does.

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 implies usage when a specific invoice number is known and line-level detail is needed, but it does not explicitly mention alternatives or exclusions. It could have stated 'Use ingrammicro_search_invoices to find invoices' or noted this tool is for a single invoice only. The context is clear but the guidance is implied rather than explicit.

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

ingrammicro_get_orderA
Read-onlyIdempotent

Get full status/line detail for one order — shipping status, tracking, per-line fulfillment. Use ingrammicro_search_orders instead if you don't already have the exact order number.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_numberYesIngram Micro's own sales order number, e.g. "20-RD3QV".
vendor_numberNoFilter/scope by vendor number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds that the result includes shipping status, tracking, and per-line fulfillment, which is useful context beyond the schema, but it doesn't disclose additional behavioral details such as rate limits or authentication requirements.

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 compact sentences with no filler. The primary purpose and scope are front-loaded, and the routing instruction is placed at the end where it belongs.

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?

The tool is simple, has annotations covering safety, an output schema for return shape, and fully documented parameters. The description is sufficient for an agent to select and invoke this tool 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?

Schema description coverage is 100%, so the schema already documents both parameters. The description reinforces that an exact order number is required, but it doesn't add new semantic meaning beyond what the schema provides. Baseline 3 applies.

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 operation: get full status/line detail for one order, including shipping status, tracking, and per-line fulfillment. This distinguishes it from the sibling search_orders tool by emphasizing that it targets a specific order.

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

Usage Guidelines5/5

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

Explicitly tells the agent when to use the alternative: use ingrammicro_search_orders if you don't already have the exact order number. This provides a clear routing condition and prevents misuse.

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

ingrammicro_get_price_and_availabilityA
Read-onlyIdempotent

Get real-time price and/or stock availability for one or more SKUs — the step before placing an order, to confirm current price and that stock exists before calling ingrammicro_create_order.

ParametersJSON Schema
NameRequiredDescriptionDefault
productsYesProducts to price/check: [{"ingramPartNumber"} or {"vendorPartNumber"}]. Mix of both forms across entries is fine.
include_pricingNoInclude live pricing in the response.
include_availabilityNoInclude per-warehouse stock availability in the response.
availability_by_warehouseNoRestrict availability to specific warehouses: [{"availabilityByWarehouseId": <id>}].
include_product_attributesNoAlso include detailed product attributes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds useful context about real-time data and pre-order usage, but does not disclose additional behavioral details such as constraints, warehouse-related behavior, or response semantics beyond what the output schema and parameter descriptions already provide.

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 a single, focused sentence with the core action front-loaded and the business context following afterward. There is no redundant wording or repetition of schema details.

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 fully documented input schema, an output schema, and annotations covering safety and idempotency, the description provides the missing business context: this is the pre-order verification step. Nothing essential is left unexplained for an agent to select and invoke the tool 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?

Schema description coverage is 100%, so the input schema already explains the products, include_pricing, include_availability, availability_by_warehouse, and include_product_attributes parameters. The description only paraphrases the high-level purpose ('price and/or stock availability' and 'one or more SKUs') without adding meaning beyond the schema.

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 uses a specific verb ('Get'), a clear resource (real-time price and/or stock availability), and scopes the operation to one or more SKUs. It also distinguishes itself from order creation by explicitly positioning this as the pre-order check before calling ingrammicro_create_order.

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 clearly states when to use it: before placing an order, to confirm current price and stock. It names the downstream sibling (ingrammicro_create_order), though it does not explicitly discuss when not to use it or compare it with search/products/detail alternatives.

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

ingrammicro_get_product_detailA
Read-onlyIdempotent

Get full catalog detail for one product by its Ingram Micro part number (from ingrammicro_search_products). Use ingrammicro_get_product_detail_by_reference instead if you only have the vendor's own part number or a subscription plan id/name.

ParametersJSON Schema
NameRequiredDescriptionDefault
ingram_part_numberYesIngram Micro's own unique SKU for the product (max 6 chars).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description need not restate safety. It adds context that the part number comes from ingrammicro_search_products, which is useful, but does not disclose any additional behavioral traits such as error handling, pagination, or rate limits. With annotations covering the core safety profile, a 3 is appropriate for the minimal extra context.

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 with zero redundancy. The first sentence states the primary action and the source of the parameter; the second sentence provides the alternative usage. It is front-loaded with the most important information and no wasted words.

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?

For a single-parameter read-only tool with an output schema available, the description is complete. It tells the agent what the tool does, where to get the required parameter, and when to use a different tool. Nothing an agent needs to invoke 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?

Schema description coverage is 100% for the single parameter, and the schema already states it's a unique SKU with a max length. The tool description adds valuable context by telling the agent that the part number is obtained from ingrammicro_search_products, which ties the parameter to a specific source and helps the agent understand how to populate it correctly. This goes beyond the schema's basic description.

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 tool's purpose: 'Get full catalog detail for one product by its Ingram Micro part number'. It also differentiates from the sibling tool ingrammicro_get_product_detail_by_reference by naming the condition (when you only have vendor part number or subscription plan id/name). This gives an agent precise understanding of what this tool does and how it differs from its sibling.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool (when you have the Ingram part number from ingrammicro_search_products) and when to use the alternative (ingrammicro_get_product_detail_by_reference for vendor part numbers or subscription plan id/name). This is a clear, direct usage guideline with an explicit alternative and condition, leaving nothing to inference.

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

ingrammicro_get_product_detail_by_referenceA
Read-onlyIdempotent

Get catalog detail for a product identified by the vendor's own part number, or by subscription plan id/name — for when you don't have Ingram's own part number. Exactly one of vendor_part_number, plan_id, or plan_name must be given.

ParametersJSON Schema
NameRequiredDescriptionDefault
plan_idNoSubscription plan id (for cloud/subscription SKUs).
plan_nameNoSubscription plan name (for cloud/subscription SKUs).
vendor_part_numberNoThe vendor's own part number for the product.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered; the description adds the cross-parameter constraint that exactly one of the three identifiers must be supplied, which is genuine behavioral disclosure not present in the schema. Since an output schema exists, the absence of return-format detail is not a gap. No contradiction with annotations.

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 tight sentences, front-loaded with verb and resource, followed by the routing condition and the invocation constraint. Every clause earns its place; there is no filler or repetition of schema content.

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 a 3-parameter lookup with an output schema and safety annotations, the description covers the essential decisions: what it does, when to use it, and the exactly-one parameter rule. The only minor gap is not naming the alternative tool explicitly and not stating failure behavior when the constraint is violated, but the tool remains correctly callable from the given information.

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?

Schema description coverage is 100%, so the schema documents each parameter individually. The description adds the exactly-one-of-three mutual-exclusivity rule, which the individual parameter descriptions do not convey — meaningful cross-parameter semantics above the baseline.

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-resource pair ('Get catalog detail') and precisely scopes the lookup to reference identifiers (vendor part number, plan id/name). The phrase 'for when you don't have Ingram's own part number' distinguishes this tool from the sibling ingrammicro_get_product_detail, which is keyed by Ingram's part number, and it also separates it from search_products.

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 phrase 'for when you don't have Ingram's own part number' gives an explicit trigger condition that routes the agent to this tool rather than the Ingram-part-number alternative. The 'Exactly one of...' sentence is a hard operational constraint for correct invocation. It does not name the alternative sibling explicitly or say when to prefer plan_id over plan_name, but the context is sufficiently clear for selection.

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

ingrammicro_get_quoteA
Read-onlyIdempotent

Get full detail for one quote — line items, pricing, expiry, and current status.

ParametersJSON Schema
NameRequiredDescriptionDefault
quote_numberYesQuote number, e.g. "QUO-10926-Y8G1B3".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safe read nature is covered. The description adds value by specifying the return components (line items, pricing, expiry, status), giving the agent a clear expectation of the response. However, it does not disclose error behavior, permission requirements, or any other non-obvious behavior, which would elevate beyond a 3.

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 a single focused sentence with no filler. The main action and key components are front-loaded. Every word contributes to understanding the tool's purpose and output.

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 (one parameter, read-only annotations, output schema provided), the description covers what an agent needs to invoke it correctly. It states what the response contains and the resource acted upon. A slight gap is the absence of any note about alternatives or error cases, but these are not critical for a read-only get-by-ID tool.

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 provides 100% documentation for the only parameter, including a concrete example. The description does not add any parameter-specific semantics beyond what the schema gives, so the baseline of 3 applies.

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 ('Get') and resource ('full detail for one quote'), and enumerates the actual content (line items, pricing, expiry, status). This clearly differentiates the tool from siblings like search_quotes, which focus on searching rather than retrieving a single quote's full detail.

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 implies usage for retrieving a single quote's full detail, contrasting with search_quotes which naturally handles discovery. However, it does not explicitly state when to use this tool over alternatives, nor does it mention exclusions or prerequisites. Usage guidance is present but only implicit.

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

ingrammicro_get_renewalA
Read-onlyIdempotent

Get full detail for one renewal opportunity.

ParametersJSON Schema
NameRequiredDescriptionDefault
renewal_idYesIngram Micro's unique renewal id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the non-mutating behavior. The description's 'Get full detail' aligns with those hints but does not add extra behavioral context such as error conditions or data freshness.

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 a single clear sentence that front-loads the purpose with no filler. It is minimal without being under-specified.

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?

With an output schema, a single fully documented parameter, and safety hints in annotations, the description is largely sufficient. It could add a note on how to obtain renewal_id or when results might be empty, but these are not critical for such a simple retrieval tool.

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 sole parameter renewal_id is fully described in the schema as 'Ingram Micro's unique renewal id', so schema coverage is 100%. The description adds no additional parameter-level meaning beyond what the schema already provides.

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?

Description uses a specific verb ('Get'), a specific resource ('renewal opportunity'), and scopes it to 'one' item with 'full detail'. This clearly distinguishes it from siblings like ingrammicro_search_renewals, which would return a list.

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 need for a single renewal_id implies the agent should already have a specific ID, likely from a search tool, but no explicit when-to-use or alternative guidance is given. There is no mention of using search_renewals first or any exclusion criteria.

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

ingrammicro_get_returnA
Read-onlyIdempotent

Get full detail and current status for one return (RMA) request.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_request_numberYesUnique return request number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description's claim of getting details aligns with those. It adds that the response includes 'full detail and current status', but no further behavioral context (e.g., error cases, permissions) is provided. No contradiction exists.

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?

A single, concise sentence that front-loads the purpose. No wasted words, and it clearly communicates the resource and the kind of information returned.

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 a single-parameter read-only tool with readOnly/idempotent annotations and an output schema, the description is sufficient. The lack of detail about status values or possible response nuances is a minor gap, but not critical given the output schema.

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 description coverage is 100% and the parameter 'case_request_number' is well-documented as 'Unique return request number.' The description does not add extra meaning beyond the schema, so it meets the baseline for complete schema coverage.

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

Purpose4/5

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

The description states a specific verb ('Get'), resource ('return (RMA) request'), and scope ('full detail and current status', 'one'). It clearly differentiates from sibling search_returns by focusing on a single return's detail, though it does not explicitly name the sibling.

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 implies use when you need details/status of a specific return (RMA) using its case_request_number, while search_returns would be for finding returns. It does not explicitly state when to prefer this tool over alternatives or provide exclusion criteria.

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

ingrammicro_modify_orderA
Idempotent

Change an order placed with the customer-hold flag — add/update/ delete lines, change ship-to, or release the hold.

ONLY works within roughly 24 hours of placement, and only if the order was created with the customer-hold flag (void after 24h if never released). An order placed WITHOUT customer-hold cannot be modified — this call fails. Confirm with a human before changing quantities or the shipping address.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNoLine changes: [{"ingramPartNumber", "ingramLineNumber", "customerLineNumber", "addUpdateDeleteLine": "ADD"|"UPDATE"|"DELETE", "quantity", "notes"}]. ingramLineNumber identifies an existing line for UPDATE/DELETE; omit it when adding a new line.
notesNoShipment-level notes.
action_codeNoSet to "release" to release an order held with the customer-hold flag.
order_numberYesIngram Micro's own sales order number, e.g. "20-RC1RD".
ship_to_infoNoOptional shipping destination override: {"addressId" (Ingram-issued address id from onboarding), "contact", "companyName", "name1", "name2", "addressLine1/2/3", "city", "state", "postalCode", "countryCode", "phoneNumber", "email"}. Omit to ship to the address tied to addressId on the account.
additional_attributesNoOptional Ingram-specific flags as [{"attributeName", "attributeValue"}] pairs — e.g. allowPartialOrder, allowDuplicateCustomerOrderNumber, government-order fields (govtProgramType, govtEndUserType, etc). Rarely needed; omit unless a specific Ingram-documented flag is required.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only declare idempotentHint, so the description carries the burden of behavioral disclosure. It adds important operational constraints: the 24-hour window, the void-after-24h behavior, failure on non-held orders, and the human-confirmation requirement. This goes well beyond what the schema or annotations alone provide.

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 compact and front-loaded: the primary purpose is stated first, followed by critical constraints and a safety note. Every sentence earns its place; there is no filler or redundancy.

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?

For a mutating order-modification tool, the description covers prerequisites, the time window, failure behavior, and the need for human confirmation. Return-value details are covered by the output schema, and parameter details by the input schema. Nothing essential is missing for an agent to decide correctly when and how to invoke it.

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 description coverage is 100%, with each parameter already thoroughly documented via descriptions and examples. The description adds high-level operation mapping (lines, ship-to, release) but does not materially improve on the detailed parameter docs already present in the schema.

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 uses a specific verb ('Change') with a clear resource ('an order placed with the customer-hold flag') and enumerates the exact operations: add/update/delete lines, change ship-to, or release the hold. This clearly distinguishes it from sibling tools like cancel_order or create_order.

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 explicitly states when the tool works (within ~24 hours, customer-hold flag required) and gives a hard exclusion: orders without the flag cannot be modified and the call fails. It also advises human confirmation before changing quantities or shipping address. It does not name specific sibling tools as alternatives, so it falls just short of a 5.

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

ingrammicro_search_dealsA
Read-onlyIdempotent

Search special-pricing deals (vendor discount bids) by vendor or end customer. A deal's id can be passed as special_bid_number when placing an order, or as deal_id when creating a quote. Use this to find the exact deal id before ingrammicro_get_deal.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number.
sizeNoRecords per page, max 100.
vendorNoVendor/manufacturer name.
deal_idNoDeal/special-bid number.
end_userNoEnd-customer name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds useful context about how a found deal id is consumed in orders and quotes, which helps the agent understand the broader workflow.

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?

Three sentences with no filler: purpose, practical identifier significance, and workflow routing. Every sentence contributes information the agent needs.

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?

The description, complete parameter schema, annotations, and presence of an output schema fully cover what an agent needs to invoke this search tool correctly. Optional filters and pagination are documented in the schema.

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 description coverage is 100%, so all five parameters are already documented. The description reinforces vendor and end-customer search intent, but it does not add meaningful syntax or formatting detail beyond the schema.

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 action ('Search special-pricing deals') and defines the resource precisely as vendor discount bids. It distinguishes itself from ingrammicro_get_deal by noting this tool finds the exact deal id before retrieval.

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

Usage Guidelines5/5

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

It explicitly names the companion tool ingrammicro_get_deal and states that this search should be used first to obtain the deal id. The filtering dimensions by vendor or end customer are also stated up front.

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

ingrammicro_search_invoicesA
Read-onlyIdempotent

Search invoices by order, invoice number, date range, or status. Use this to find the exact invoice number before calling ingrammicro_get_invoice.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoRecords per page, max 100, default 25.
page_numberNoPage number, default 1.
invoice_dateNoInvoice date, YYYY-MM-DD.
invoice_typeNoInvoice type.
order_numberNoOrder number the invoice is for.
serial_numberNoProduct serial number.
invoice_numberNoIngram Micro invoice number.
invoice_statusNoInvoice status.
delivery_numberNoDelivery number.
invoice_to_dateNoInvoice date range end, YYYY-MM-DD.
invoice_due_dateNoInvoice due date, YYYY-MM-DD.
invoice_from_dateNoInvoice date range start, YYYY-MM-DD.
special_bid_numberNoSpecial-pricing bid number.
customer_order_numberNoYour own PO/order number.
end_customer_order_numberNoThe end customer's own PO number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description does not add further behavioral context such as pagination limits or result size, but that is available in the parameter schema. With annotations carrying the safety burden, a 3 is appropriate because it adds no extra behavioral disclosure beyond a read-only search.

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, front-loaded with the core action and immediately followed by the workflow note. No redundant words 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 high schema coverage and annotations, plus an output schema, the description is complete: it states the purpose, the filter scope, and how it fits with get_invoice. An agent has enough 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?

Schema description coverage is 100%, so every parameter (page_size, invoice_date, order_number, etc.) is already documented with formats and defaults. The description only summarizes the filter categories without adding new meaning beyond the schema. Baseline 3 applies.

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 uses the specific verb 'Search' with the resource 'invoices', enumerates searchable criteria (order, invoice number, date range, status), and differentiates itself from sibling ingrammicro_get_invoice by framing this as the discovery step. This is clear and distinguishes the tool from related order/search tools.

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

Usage Guidelines5/5

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

It explicitly tells the agent to use this tool to find the exact invoice number before calling ingrammicro_get_invoice. This gives both a clear use case and an alternative, with the relationship stated. Nothing is left to inference.

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

ingrammicro_search_ordersA
Read-onlyIdempotent

Search past/current orders by PO number, status, product, or date. Use this to find the exact order number before calling ingrammicro_get_order, ingrammicro_modify_order, or ingrammicro_cancel_order.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoRecords per page, max 100, default 25.
order_dateNoOrder date, YYYY-MM-DD.
page_numberNoPage number, default 1.
vendor_nameNoVendor/manufacturer name.
order_statusNoOne of "SHIPPED", "PROCESSING", "ON HOLD", "BACKORDERED", "CANCELLED".
serial_numberNoProduct serial number.
tracking_numberNoShipment tracking number (not available in Australia).
ingram_part_numberNoIngram Micro SKU on the order.
special_bid_numberNoSpecial-pricing bid number.
vendor_part_numberNoVendor's SKU on the order.
ingram_order_numberNoIngram Micro's order number.
customer_order_numberNoYour own PO/order number for the order.
end_customer_order_numberNoThe end customer's own PO number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description is not required to restate safety. It adds the behavioral context that this search returns order-identifying information needed for subsequent operations, and clarifies it covers past and current orders. This goes beyond the annotations without contradicting them, though it does not detail pagination or output shape (partly covered by output schema).

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 compact sentences with no filler. The core action and criteria are front-loaded, followed by the critical workflow context naming downstream tools. Every word 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 13 optional parameters fully documented in the schema, the annotations covering read-only/idempotent behavior, and the existence of an output schema, the description provides all necessary contextual information: what it searches, the workflow it supports, and the tools it precedes. Nothing critical is missing.

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 description coverage is 100% — every parameter already has a meaningful description including defaults and allowed values for order_status. The tool description merely mentions general search criteria already present in the schema, adding no extra semantic nuance, so baseline 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 verb 'Search' and the resource 'past/current orders', listing key filter dimensions (PO number, status, product, date). It also distinguishes itself from downstream operations like get/modify/cancel by explicitly naming them, making its role unambiguous relative to sibling tools.

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

Usage Guidelines5/5

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

Provides explicit guidance: 'Use this to find the exact order number before calling ingrammicro_get_order, ingrammicro_modify_order, or ingrammicro_cancel_order.' This tells an agent when to invoke this tool and positions it as a prerequisite step in an order workflow, which is exactly what an agent needs to route correctly.

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

ingrammicro_search_productsA
Read-onlyIdempotent

Search Ingram Micro's product catalog by keyword, vendor, category, or SKU type. "What's the Ingram part number for Cisco switch model X" or "list Microsoft cloud SKUs with discounts" both start here. Returns matching products with Ingram/vendor part numbers; call ingrammicro_get_price_and_availability next for live pricing/stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
vendorNoVendor/manufacturer name(s).
keywordNoFree-text keyword(s): Ingram/vendor part number, product title, or vendor name.
categoryNoProduct category, e.g. "Displays".
sku_typeNoSKU type: "IM::physical", "IM::digital", or "IM::any".
page_sizeNoRecords per page, max 100, default 25.
page_numberNoPage number, default 1.
has_discountsNoFilter to products with an available discount.
vendor_numberNoVendor number.
vendor_part_numberNoVendor's own part number(s).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds behavior beyond that by explaining that it returns matching products with Ingram/vendor part numbers and that pricing/stock requires a follow-up call, giving the agent a clear expectation of the operation's outcome.

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 with no filler. The first sentence states scope and search dimensions, the second provides examples and a forward pointer to the pricing tool. All information is relevant and efficiently front-loaded.

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?

For a search tool with a rich output schema, read-only annotations, and self-explanatory parameters, the description covers the essential purpose, examples, and next step. Nothing necessary for correct invocation is missing.

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%, so all nine parameters are already documented with descriptions. The description mentions keyword, vendor, category, and SKU type but adds no semantic detail beyond the schema. It provides examples that imply usage but does not deepen parameter understanding, so baseline 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?

Description states a specific verb (search) and resource (product catalog) with clear search dimensions (keyword, vendor, category, SKU type). Concrete example queries make the purpose unmistakable and distinguish it from sibling get_product_detail by focusing on search over retrieval.

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?

Provides clear context on when to use it via realistic example queries and explicitly routes the agent to ingrammicro_get_price_and_availability for live pricing/stock. It does not explicitly exclude alternatives, but the guidance is sufficient for an agent to select this tool for catalog search.

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

ingrammicro_search_quotesA
Read-onlyIdempotent

Search quotes by number, status, vendor, or end customer. Use this to find a quote's number before ingrammicro_get_quote, ingrammicro_validate_quote_to_order, or converting it to an order with ingrammicro_create_cloud_order.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoQuote status, e.g. "Ready to Order".
page_sizeNoRecords per page, default 25.
quote_nameNoQuote name given at creation time.
page_numberNoPage number, default 1.
vendor_nameNoVendor/manufacturer name.
quote_numberNoQuote number, e.g. "QUO-10985-C4C3F7".
requester_emailYesEmail of the person requesting this search (Ingram requires it).
end_user_contactNoEnd-customer name on the quote.
special_bid_numberNoSpecial-pricing bid number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds no additional behavioral context beyond the search intent—no mention of pagination behavior, error conditions, or response shape. It does not contradict the annotations, but it also does not enrich them. With annotations in place, a score of 3 is appropriate.

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?

The description is concise and front-loaded: the first sentence states the action and filters, and the second sentence explains the usage context. No wasted words. It could be considered slightly repetitive in listing filters that are also in the schema, but overall it is well-structured and efficient.

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 that this is a search tool with an output schema, annotations for read-only and idempotency, and 100% parameter coverage in the schema, the description provides the needed context for when to use it and how it fits into a workflow. It does not explain the output structure, but that is already covered by the output schema. Minor gap: it doesn't mention that this is a paginated query, though the schema already documents page_size and page_number defaults, so it is reasonably complete.

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 description coverage is 100%, with each parameter already described (e.g., status, page_size, quote_name, etc.). The description's mention of search criteria (number, status, vendor, end customer) partially mirrors those parameters but adds no new meaning beyond the schema. Baseline 3 is correct when the schema carries the parameter documentation.

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 uses a specific verb 'Search' with the resource 'quotes' and lists distinct filter criteria (number, status, vendor, end customer). It clearly distinguishes itself from sibling tools like ingrammicro_get_quote (which retrieves a single known quote) by positioning itself as the way to find a quote number before subsequent operations. The purpose is unambiguous and non-tautological.

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 explicitly states when to use this tool: 'Use this to find a quote's number before ingrammicro_get_quote, ingrammicro_validate_quote_to_order, or converting it to an order with ingrammicro_create_cloud_order.' This gives clear context and connects to related tools. However, it does not explicitly state when not to use it or mention alternative search tools, so it falls just short of a 5.

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

ingrammicro_search_renewalsA
Read-onlyIdempotent

Search upcoming or past subscription/support renewals by order, vendor, end customer, or opportunity status. Use this to find the renewal id before ingrammicro_get_renewal.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number.
sizeNoRecords per page, default 25.
vendorNoVendor/manufacturer name.
end_userNoEnd-customer name.
serial_numberNoProduct serial number.
opportunity_statusNoRenewal opportunity status: "Open" or "Closed".
customer_order_numberNoYour own PO/order number.
opportunity_sub_statusNoSub-status, e.g. "Ready to order", "Quote pending", "Expired", "Ordered" — see Ingram Micro docs for the full list.
ingram_purchase_order_numberNoIngram Micro sales order number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare the operation is read-only and idempotent, so the safety profile is covered. The description adds some scope information by stating 'upcoming or past' renewals and noting the lookup workflow, but it does not add behavioral details like pagination behavior, result size limits, or API quirks. This is acceptable given the strong annotation coverage.

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 compact: two sentences with no filler. The first sentence states the action and filter scope, while the second explains the tool's role in the larger workflow. 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 read-only/idempotent annotations, a 100%-covered schema, and the presence of an output schema, the description provides what an agent needs to select and invoke this tool correctly. It explains the tool's purpose and how it connects to ingrammicro_get_renewal without duplicating structured metadata.

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 description coverage is 100%, so all nine parameters are already documented in the schema. The description mentions several filter categories (order, vendor, end customer, opportunity status) but does not add meaningful semantics beyond what the schema provides. Baseline 3 is appropriate since the schema carries the parameter burden.

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 uses a specific verb ('Search') and resource ('renewals'), and identifies the key filter dimensions: order, vendor, end customer, and opportunity status. It also contextualizes the tool within a workflow by mentioning it is used to find the renewal id before ingrammicro_get_renewal, which clearly distinguishes it from other search/get tools.

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 clear usage context: 'Use this to find the renewal id before ingrammicro_get_renewal.' This makes the intended workflow explicit, though it does not spell out when-not-to-use alternatives or contrast with related search tools such as ingrammicro_search_orders or ingrammicro_search_deals.

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

ingrammicro_search_returnsA
Read-onlyIdempotent

Search return (RMA) requests by invoice, product, or status. Use this to find the exact case_request_number before calling ingrammicro_get_return.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number.
sizeNoRecords per page, default 25.
return_statusNoComma-separated statuses: Open, Approved, Partially Approved, Denied, Voided.
invoice_numberNoInvoice number the return is against.
return_claim_idNoUnique return claim id.
reference_numberNoReturn reference number.
ingram_part_numberNoIngram Micro SKU being returned.
vendor_part_numberNoVendor SKU being returned.
case_request_numberNoUnique return request number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds useful context about searchable criteria and the downstream use of the result, but it does not discuss pagination or result behavior beyond that, which is a minor gap given the annotations.

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 no redundancy. The main action and resource are front-loaded, and the follow-up instruction about calling ingrammicro_get_return earns its place by clarifying the tool's purpose in the workflow.

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?

The description covers the essential workflow for a search tool: find returns and retrieve the case_request_number for use in a follow-up call. All 9 parameters are documented in the schema, and an output schema exists, so the only minor gap is that the description does not enumerate every possible search key.

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 description coverage is 100%, so every parameter already has a clear description. The description references invoice, product, and status filters, but it does not add meaning beyond what the schema provides, warranting the baseline score.

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, 'Search', and names a concrete resource: 'return (RMA) requests'. It also lists meaningful search dimensions — invoice, product, or status — and clearly separates this tool from ingrammicro_get_return by presenting it as the prerequisite lookup step.

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

Usage Guidelines5/5

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

The description explicitly tells the agent to use this tool to find the exact case_request_number before calling ingrammicro_get_return. This establishes a clear retrieval workflow and identifies the relevant sibling tool to use next.

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

ingrammicro_validate_quote_to_orderA
Read-onlyIdempotent

Validate a quote before converting it to an order, and learn which fields the vendor requires at header and line level for the Quote-to-Order call.

    Always call this before ingrammicro_create_cloud_order(quote_number=...)
    — the response's vmfAdditionalAttributes (header level) and each
    line's vmfAdditionalAttributesLines name the exact vendor-mandatory
    fields to copy into that call's additional_attributes.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
quote_numberYesIngram Micro quote number, e.g. "QUO-14551943-D2Y9L9".

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the read-only, side-effect-free behavior is covered. The description adds valuable context about the response structure: vmfAdditionalAttributes at header level and vmfAdditionalAttributesLines at line level, which describe what the validation returns beyond the annotations.

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 tightly structured: purpose first, then the exact call sequence, then what to extract from the response. Every sentence adds actionable guidance with no filler or redundant restating of the tool name.

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?

With one documented parameter, an output schema present, and clear instructions on how to use the response, the description fully equips an agent to call this tool and act on its results. It also names the prerequisite relationship with a sibling, making the integration context complete.

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 description coverage is 100%, so the single quote_number parameter is already well documented. The description reinforces the parameter's purpose by showing it passed to create_cloud_order, but it does not add new semantic detail beyond what the schema provides.

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 names a specific verb ('Validate'), a specific resource ('a quote before converting it to an order'), and a secondary outcome ('learn which fields the vendor requires'). It clearly distinguishes the tool from siblings like ingrammicro_create_cloud_order and ingrammicro_create_order by positioning it as a prerequisite validation step.

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

Usage Guidelines5/5

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

The description explicitly says 'Always call this before ingrammicro_create_cloud_order(quote_number=...)' and names the exact sibling tool to pair with. This leaves no ambiguity about when to use this tool versus the order-creation alternatives.

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

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct resource and action, with search/get pairs clearly separated by whether an exact ID is known. Potential overlaps like create_order vs create_cloud_order and get_product_detail vs get_product_detail_by_reference are explicitly disambiguated in the descriptions.

Naming Consistency5/5

All tools follow the consistent ingrammicro_ prefix with verb_noun snake_case naming. Verbs like get, search, create, modify, cancel, and validate are used predictably across the set, making intent easy to infer.

Tool Count4/5

At 24 tools, this is slightly above the typical well-scoped range, but the count is justified by the broad distribution domain covering products, orders, quotes, invoices, returns, renewals, deals, and freight. Each tool has a clear place, so the set feels substantial rather than bloated.

Completeness5/5

The toolset covers the core reseller workflow end-to-end: product search/detail/pricing, order placement with modification/cancellation, quote creation through validation and conversion, plus invoices, returns, renewals, deals, and freight estimates. No significant dead ends or missing lifecycle operations for the stated domain are apparent.

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

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server for Sherweb Partner API - distributor billing, service provider management, customer subscriptions, and payable charges
    12
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Stateless HTTP MCP service that exposes the Pax8 Partner API as tools for AI assistants to query companies, subscriptions, invoices, orders, products, and usage data.
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides a multilingual, region-aware brand catalogue and click-through URL generation for MCP-compatible agents, enabling commerce recommendations with attribution tracking.
    MIT

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/MSPbotsAI/ingrammicro-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server