Skip to main content
Glama

Ask PartsPlan to collect datasheets for BOM lines it does not hold

request_datasheet_collection

Adds lines (manufacturer + part number) to the PartsPlan datasheet collection queue when the archive holds no document identified as that manufacturer for that exact part number (the same lines check_bom marks collection_request_eligible); lines already held, invalid lines and lines without a manufacturer are reported and not queued. Collection happens later and may find nothing; check_bom with the same lines shows collection_status. Each line is looked up again, with the same per-line status fields as check_bom, and draws from its own daily line budget (the same size as the check_bom budget). Up to 100 lines per call.

Input Schema

NameRequiredDescriptionDefault
linesYes

Output Schema

NameRequiredDescriptionDefault
noteNo
linesNo
limitsNo
reasonNo
statusYes
messageNo
n_linesNo
summaryNo
full_textNo
retryableNo
doc_sha256No
request_idNo
retry_after_msNo
withdrawn_noteNo
queue_availableNo
section_indexesNo
resolution_trimmedNo
section_indexes_coverageNo
withdrawn_documents_omittedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / lines / items / properties / brand_resolution / properties / rule / enum
      Previous value: -[
      -  "curated_display_label",
      -  "code_listing_supported"
      -]New value: +[
      +  "curated_display_label",
      +  "code_listing_supported",
      +  "part_number_scoped_label"
      +]
  2. Changed1 schema field changed
    • addedOutput schema / properties / lines / items / properties / mpn_section
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "basis": {
      +      "const": "printed_product_heading",
      +      "type": "string"
      +    },
      +    "doc_sha256": {
      +      "pattern": "^[0-9a-f]{64}$",
      +      "type": "string"
      +    },
      +    "end_page": {
      +      "maximum": 9007199254740991,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "mpn": {
      +      "maxLength": 80,
      +      "type": "string"
      +    },
      +    "next_heading": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "page": {
      +          "maximum": 9007199254740991,
      +          "minimum": 1,
      +          "type": "integer"
      +        },
      +        "title": {
      +          "maxLength": 160,
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "page",
      +        "title"
      +      ],
      +      "type": "object"
      +    },
      +    "start_page": {
      +      "maximum": 9007199254740991,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "title": {
      +      "maxLength": 160,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "doc_sha256",
      +    "mpn",
      +    "title",
      +    "start_page",
      +    "end_page",
      +    "basis"
      +  ],
      +  "type": "object"
      +}
  3. Changed11 schema fields changed
    • addedInput schema / properties / lines / items / properties / codes / additionalProperties
      Added value: +{}
    • changedInput schema / properties / lines / items / properties / codes / description
      Previous value: -"Optional distributor codes. codes.lcsc (LCSC/JLCPCB C number, e.g. the EasyEDA Supplier Part column) is compared with our stored LCSC listing: it can resolve an LCSC-style manufacturer label (brand_resolution) and is reported when that listing records another part number (lcsc_code_resolution); a listing never replaces a manufacturer label it does not match and never picks a document. digikey and mouser codes are not used."New value: +"Optional part codes. codes.easyeda_jlcpcb (the EasyEDA/JLCPCB part code — a C number, e.g. the EasyEDA Supplier Part column) is compared with our stored listing for that code: it can resolve a manufacturer label written the way that listing writes it (brand_resolution) and is reported when that listing records another part number (easyeda_jlcpcb_code_resolution); a listing never replaces a manufacturer label it does not match and never picks a document. digikey and mouser codes are not used."
    • addedInput schema / properties / lines / items / properties / codes / properties / easyeda_jlcpcb
      Added value: +{
      +  "maxLength": 40,
      +  "type": "string"
      +}
    • removedInput schema / properties / lines / items / properties / codes / properties / lcsc
      Removed value: -{
      -  "maxLength": 40,
      -  "type": "string"
      -}
    • addedOutput schema / properties / lines / items / properties / brand_resolution / properties / code
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / lines / items / properties / brand_resolution / properties / lcsc
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / properties / lines / items / properties / brand_resolution / properties / rule / enum
      Previous value: -[
      -  "curated_display_label",
      -  "lcsc_listing_supported"
      -]New value: +[
      +  "curated_display_label",
      +  "code_listing_supported"
      +]
    • addedOutput schema / properties / lines / items / properties / easyeda_jlcpcb_code_resolution
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "basis": {
      +      "const": "code_listing_label",
      +      "type": "string"
      +    },
      +    "code": {
      +      "type": "string"
      +    },
      +    "input_code": {
      +      "type": "string"
      +    },
      +    "listing_brand": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "listing_mpn": {
      +      "type": "string"
      +    },
      +    "status": {
      +      "enum": [
      +        "applied",
      +        "listing_mpn_differs",
      +        "code_not_found",
      +        "input_conflict",
      +        "unavailable"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "status"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / lines / items / properties / lcsc_code_resolution
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "basis": {
      -      "const": "lcsc_listing_label",
      -      "type": "string"
      -    },
      -    "code": {
      -      "type": "string"
      -    },
      -    "codes_lcsc": {
      -      "type": "string"
      -    },
      -    "listing_brand": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    },
      -    "listing_mpn": {
      -      "type": "string"
      -    },
      -    "status": {
      -      "enum": [
      -        "applied",
      -        "listing_mpn_differs",
      -        "code_not_found",
      -        "input_conflict",
      -        "unavailable"
      -      ],
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "code",
      -    "status"
      -  ],
      -  "type": "object"
      -}
    • addedOutput schema / properties / resolution_trimmed / properties / easyeda_jlcpcb_code_resolution
      Added value: +{
      +  "items": {
      +    "maximum": 9007199254740991,
      +    "minimum": 0,
      +    "type": "integer"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / resolution_trimmed / properties / lcsc_code_resolution
      Removed value: -{
      -  "items": {
      -    "maximum": 9007199254740991,
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  "type": "array"
      -}
  4. First observed

TDQS

A3.8/5.0
Behavior4/5

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

With annotations already declaring readOnlyHint=false, destructiveHint=true, idempotent=false and openWorld=false, the description goes further by disclosing that collection is asynchronous ('Collection happens later and may find nothing'), that each call consumes a per-line daily budget shared in size with check_bom, and that there is a 100-line cap. These are meaningful behavioral traits not derivable from annotations. It stops short of 5 because it says nothing about authorization requirements or the failure/retry implications of a non-idempotent call.

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

Conciseness3/5

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

The core action is front-loaded, but the description is delivered as a few very long, heavily parenthesized run-on sentences that bury conditions inside clauses. Every clause carries information, so nothing is truly wasted, but the structure makes it harder to parse the eligibility rules and budget details at a glance.

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?

Because an output schema exists, return values need not be explained, and the description instead supplies the context an agent needs: asynchronous collection, possible empty results, result visibility via check_bom, the daily line budget, and the batch size limit. For a single-parameter, non-idempotent queuing tool this is close to complete; only auth/permission context 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 0%, so the description must compensate, and it only partially does: it names the line constituents (manufacturer + part number), notes that a line without a manufacturer is reported as brand_missing, and states the 100-line ceiling. The richer field semantics (qty, ref echo behavior, the codes sub-object logic) are carried by nested schema descriptions rather than the tool description, and the ~100 budget/per-line behavior is described only vaguely. Adequate but not compensating fully for the coverage gap.

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 front-loads a specific verb and resource: it 'Adds lines (manufacturer + part number) to the PartsPlan datasheet collection queue.' It also anchors the tool to the sibling check_bom by stating it accepts the same lines check_bom marks collection_request_eligible, which lets an agent separate the two. The differentiation is a bit indirect (a reference to identical eligibility rather than a plain statement of contrast), so it falls just short of the top score.

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?

It gives an explicit qualifying condition (only lines the archive does not already hold) and an explicit exclusion set: 'lines already held, invalid lines and lines without a manufacturer are reported and not queued.' It also points to check_bom as the way to observe results. What it lacks is a direct 'prefer this tool over X when Y' statement, so usage is clear but not fully routed.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources