SheetsData
Server Details
Electronic component datasheets for AI agents: pinouts, specs, package info and design checks.
- Status
- Healthy
- Uptime
- 100.0% over 82 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- octoco-ltd/sheetsdata-mcp
- GitHub Stars
- 12
- Server Listing
- SheetsData MCP
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 14 tools
Most tools target distinct operations (search_parts by PN/keyword, find_parts by function/spec, search_datasheets by semantic content, read_datasheet for sections, compare_parts for head-to-head, get_part_details for drill-down). Boundaries are clarified by extensive cross-references in the descriptions, though part-discovery tools (search_parts vs find_parts vs get_part_details) and the two search modes still invite some misselection.
Every tool follows a clean snake_case verb_noun pattern (search_parts, read_datasheet, check_design_fit, request_datasheet_upload). Only minor singular/plural variance (get_part_details vs find_parts, read_datasheet vs search_datasheets), which is still perfectly readable and predictable.
14 tools is well within the ideal 3-15 range and each maps to a real step in the component-research workflow (discover, compare, read, extract, upload, verify design fit and BOM). No tool feels redundant or padded.
The surface covers the full lifecycle: part search, spec discovery, semantic datasheet search, section reading, image analysis, extraction orchestration, private upload, comparison, alternatives, BOM checks and design-fit screening. Minor gaps exist (no BOM-level pricing/export or cart/order assembly), but core research and validation workflows have no dead ends.
Available Tools
14 toolsanalyze_imageAnalyze Datasheet ImageARead-onlyIdempotentInspect
Costs 5¢ per call. Reads a datasheet image with vision AI: a graph, package drawing, pin diagram or schematic that read_datasheet returned. Pass the image_key from that response (the storage path in the image URL), optionally with a question. For exact electrical values prefer read_datasheet's text tables; use this for what only the picture shows (package dimensions, pin assignments, curve trends, approximate values off a curve). Example: analyze_image(part_number='IRFZ44N', image_key='images/abc123.png', question='What is the drain current at Vgs=5V?')
| Name | Required | Description | Default |
|---|---|---|---|
| question | No | Optional question about the image (e.g. 'What are the package dimensions?') | |
| image_key | Yes | Image storage path from read_datasheet output (e.g. 'images/abc123.png') | |
| part_number | Yes | MPN of the component |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive; the description adds real value beyond them with a cost disclosure ('Costs 5¢ per call'), the vision-AI processing model, and the precondition that image_key must come from a prior read_datasheet response. It does not describe the response shape, though idempotency is confirmed by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded with cost and core action before the routing guidance and example. Every sentence carries information, though the example and the parenthetical field explanations make it slightly longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent vision tool with no output schema, the definition covers purpose, cost, precondition, and selection guidance against its main sibling. What it does not state is the shape of the returned answer, which is the only material gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning: image_key is described as 'the storage path in the image URL' sourced from read_datasheet, and question is framed as optional with an inline call example. This goes beyond the schema's terse field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (reads with vision AI) and resource (datasheet image: graph, package drawing, pin diagram, schematic), and explicitly ties it to read_datasheet output. An agent can distinguish it from read_datasheet without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes: 'For exact electrical values prefer read_datasheet's text tables; use this for what only the picture shows (package dimensions, pin assignments, curve trends, approximate values off a curve).' Both the when and the when-not, plus the named alternative, are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_bomCheck BOMARead-onlyIdempotentInspect
Costs 2¢ per call. Check up to 50 BOM lines for lifecycle, stock against quantity, observed single-distributor sourcing, datasheet status and stale/missing prices. Accepts MPNs or LCSC numbers; duplicate MPN quantities are aggregated. Uses exact identities, catalogue snapshots and available distributor details. Unknown remains unknown; single_source does not prove only one supplier exists. Compact columns/rows by default; verbose returns objects. No extraction.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | Yes | ||
| verbose | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds real behavioral context on top: per-call cost, the 50-line limit, duplicate-MPN quantity aggregation, compact-vs-verbose output forms, and epistemic caveats ('Unknown remains unknown', 'single_source does not prove only one supplier exists'). That caveat is exactly the kind of semantic limit an agent needs and would not get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded with the cost signal, and nearly every clause carries information. A few clauses ('Uses exact identities, catalogue snapshots and available distributor details') are contextual filler, and the trailing 'No extraction.' is terse to the point of ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns, and it does via the compact/verbose distinction. Combined with cost, input limits, identifier semantics and result caveats, an agent has everything needed to call this tool correctly and interpret its output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it largely does: it defines what 'mpn' accepts (MPN or LCSC number), how quantities behave (duplicates aggregated), and what 'verbose' changes (compact columns/rows vs returned objects). It does not spell out the qty bounds (1–1e9) already in the schema, but the meaningful semantics are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Check) and resource (BOM lines) and enumerates exactly what is evaluated: lifecycle, stock vs quantity, single-distributor sourcing, datasheet status, stale/missing prices. No sibling is named explicitly, but the enumerated checks and the 'No extraction' note separate it from check_extraction_status, find_parts and compare_parts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear operating context: cost (2¢ per call), a 50-line cap, accepted identifier types (MPN or LCSC number), and duplicate-MPN aggregation. It stops short of naming when to prefer a different sibling or stating exclusions, so it is strong context without routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_design_fitCheck Design FitARead-onlyInspect
Costs 5¢ per call. Checks your operating conditions against the part's absolute maximum ratings and recommended operating conditions; returns PASS / WARNING / FAIL / INSUFFICIENT_DATA per condition and overall. Conditions by part type: converters and LDOs take input_voltage, output_voltage, output_current, ambient_temp, efficiency; MOSFETs take supply_voltage (VDS), output_current (ID), ambient_temp, power_dissipation; logic ICs take supply_voltage (VCC). Verdicts:
PASS: inside the recommended range, or at or below the derated limit. By default input_voltage and supply_voltage must stay at or below 80% of the absolute-maximum rating when no recommended maximum is known (inside a recommended range is a PASS), and output_current at or below 80% of its tightest rating; derating_pct changes this. Zero headroom on a rated current always warns. This is a screening policy; derating_reference cites the reliability guidance and its limits. Each check reports margin_pct against the raw limit, derating_pct and derated_limit.
WARNING: within the limit but above the derated limit, above the recommended maximum but below the absolute maximum, or within 10% of an absolute maximum that isn't derated.
FAIL: outside the range or over the limit.
INSUFFICIENT_DATA: not safely checkable, usually an ambient_temp that could not be turned into a junction-temperature check. It never counts as a PASS. Each check has limit_type (max / min / range / fixed); checks read from the datasheet text (source='llm') carry source_quote, the row the limit came from. A condition with no limit is listed in unmatched and holds the overall verdict at WARNING. If the ratings came from a different MPN than you asked for, resolved_as and data_quality_warning lead the response. Temperature: ambient_temp is never silently compared with a junction limit. When the part's own dissipation is known, the tool estimates Tj = Ta + Pd × RθJA (RθJA from the datasheet's thermal table) and judges Tj against the junction limits, reported as 'temperature (junction est.)'. Pd by part type: LDO (Vin - Vout) × Iout; switching converter Vout × Iout × (1/η - 1), which needs efficiency; anything else, pass power_dissipation (for a MOSFET, ID² × RDS(on)). Without these the check is INSUFFICIENT_DATA and its note says what to pass. Current ratings are read at ambient_temp (a MOSFET's 25 °C drain current is derated towards its maximum junction temperature). temperature_basis says which basis was used. Stored parameters answer instantly; anything else is read from the datasheet's ratings tables (validation_method says which). A part not yet extracted starts extraction and returns status='extracting' (not charged). A new datasheet takes about 2.5 minutes at the median and 6.5 minutes at the 90th percentile; a cold GPU start can take about 12 minutes. These are estimates, not deadlines. Not for: transient or full thermal analysis (the junction estimate is a steady-state screen), MOSFET SOA curves (analyze_image the SOA graph), passives with no ratings table. Example: check_design_fit('TPS54302', input_voltage=24, output_voltage=5, output_current=2.5, ambient_temp=70, efficiency=0.92)
| Name | Required | Description | Default |
|---|---|---|---|
| efficiency | No | Converter efficiency at this operating point, as a fraction (0.92) or a percentage (92). Lets the tool estimate a switching converter's junction temperature. | |
| part_number | Yes | Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1'). | |
| ambient_temp | No | Ambient temperature TA (°C). | |
| derating_pct | No | Percent below a rating a PASS must stay, for input_voltage, supply_voltage and output_current. Default 20 (run at no more than 80% of the rating). 0 turns optional derating off; no current headroom still warns. | |
| input_voltage | No | Input voltage / VIN (V). For converters. | |
| output_current | No | Output current / IOUT (A). For MOSFETs, this is drain current ID. | |
| output_voltage | No | Output voltage / VOUT (V). For converters/LDOs. | |
| supply_voltage | No | Supply voltage / VCC / VDD (V). For MOSFETs, VDS; compared against VDS(max) only. | |
| power_dissipation | No | The part's own power dissipation (W), if you have worked it out (e.g. ID² × RDS(on) for a MOSFET). Used for the junction-temperature estimate. | |
| switching_frequency | No | Switching frequency FSW (kHz). For converters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/safety, but the description goes well beyond: 5¢ per call charge, that a not-yet-extracted part returns status='extracting' and is not charged, and realistic latency estimates (2.5 min median, 6.5 min p90, ~12 min cold GPU). It also discloses the derating screening policy, the 'llm' source_quote provenance, and that a substituted MPN surfaces resolved_as/data_quality_warning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Cost and purpose are front-loaded and the verdicts are broken into labeled sections, but the middle paragraphs are dense run-on prose that could be tightened. For a tool of this complexity the length is largely earned, though a few sentences carry redundant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden and does so: it enumerates the returned fields (verdict, margin_pct, derating_pct, derated_limit, limit_type, source_quote, unmatched, temperature_basis, validation_method) and explains the special statuses. An agent has everything needed to interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real cross-parameter meaning: which parameters apply to which part type, that efficiency is required for the switching-converter junction estimate, and that power_dissipation covers 'anything else'. It stops short of documenting switching_frequency's role or the derating interaction with every parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('checks your operating conditions against the part's absolute maximum ratings and recommended operating conditions') and names the exact return vocabulary (PASS/WARNING/FAIL/INSUFFICIENT_DATA). It clearly separates itself from siblings by naming analyze_image for SOA analysis and excluding passives with no ratings table.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance broken out by part type (converters/LDOs vs MOSFETs vs logic ICs), states the per-call cost, and provides a concrete 'Not for' list with the alternative tool named. Also tells the agent what to pass when a check would otherwise be INSUFFICIENT_DATA.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_extraction_statusCheck Datasheet StatusARead-onlyIdempotentInspect
Free. Extraction status of 1-20 parts. A part being read reports current_step, elapsed_seconds, estimated_remaining_seconds with a range, and poll_after_seconds; a failed one reports its error; a part that isn't ready may list related_ready part numbers whose datasheet is readable now. A new datasheet takes about 2.5 minutes at the median and 6.5 minutes at the 90th percentile; a cold GPU start can take about 12 minutes. These are estimates, not deadlines. A part whose PDF is still being looked for reads 'resolving'. Not final. Keep polling while the status is 'resolving', 'queued', 'pending' or 'extracting' (after poll_after_seconds); stop at 'ready', 'failed', 'no_source' or 'unsupported'. datasheet_status: 'ready' → read it; 'extracting' / 'queued' / 'pending' / 'resolving' → poll check_extraction_status; 'not_extracted' → prefetch_datasheets; 'no_source' / 'unsupported' → request_datasheet_upload. Full list in the server instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| part_numbers | Yes | 1-20 parts. Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, but the description adds substantial context beyond annotations: return fields like current_step and poll_after_seconds, timing distributions (median 2.5 min, 90th percentile 6.5 min, cold start ~12 min), related_ready parts, and the fact that estimates are not deadlines. This is rich behavioral disclosure for a polling tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose ('Free. Extraction status of 1-20 parts.') and then delivers dense, necessary status, timing, and polling information without filler. Every sentence earns its place given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description explains the return values (current_step, elapsed_seconds, poll_after_seconds, errors, related_ready) and the full status lifecycle with polling guidance. Nothing an agent needs to call and correctly interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is fully documented in the schema. The description repeats '1-20 parts' but adds no new syntactic or semantic details about part_numbers beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: checks extraction status for 1-20 parts. It distinguishes itself from siblings by naming prefetch_datasheets and request_datasheet_upload as alternatives for specific status outcomes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit polling rules, stop conditions, and a status-to-action mapping that names sibling tools. An agent knows exactly when to keep polling this tool versus when to call read_datasheet, prefetch_datasheets, or request_datasheet_upload.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_partsCompare PartsARead-onlyIdempotentInspect
Costs 2¢ per call. Compares 2-5 parts you already know side by side in one call (find candidates with search_parts or find_alternative first). Returns each part's details (per-provider specs, price breaks and links, the cached datasheet summary), a comparison table of parameters × parts built from each part's own provider data, and per-part flags: lifecycle (obsolete, NRND, last-time-buy), stock, datasheet_status, and resolved_as when a lookup landed on a different MPN. compact=true returns only the flags and the table, a much shorter answer; add include_summaries=true for the summaries. Never starts extraction: prefetch_datasheets first if you need summaries. If any input is not a real part number, the whole call is rejected with a 'rejected' map; a valid MPN no provider knows still gets a column, with an error. Example: compare_parts(['TPS54302', 'LM2596', 'MP2359']) datasheet_status: 'ready' → read it; 'extracting' / 'queued' / 'pending' / 'resolving' → poll check_extraction_status; 'not_extracted' → prefetch_datasheets; 'no_source' / 'unsupported' → request_datasheet_upload. Full list in the server instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | Return the shorter answer: per-part flags and the comparison table, without per-provider detail or summaries. Default false: the full answer. | |
| part_numbers | Yes | 2-5 parts. Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1'). | |
| include_summaries | No | With compact=true, also return each part's cached datasheet summary (about 2-4k characters each). The full answer always has them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world, so the bar is lower; the description still adds real behavioral context beyond them: a 2¢ per-call cost, the all-or-nothing rejection of non-MPN inputs, the error column for valid-but-unknown MPNs, the resolved_as flag when a lookup lands on a different MPN, and the fact that it never itself starts extraction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but front-loaded: cost, then what it does, then the return shape, then the routing table, then the compact/mode behavior. Nearly every clause is actionable, though the routing enumeration is dense enough that it could be tightened without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description fully characterizes the return payload (per-provider specs, price breaks and links, cached datasheet summary, a parameters × parts table, and per-part lifecycle/stock/datasheet_status/resolved_as flags) plus the mode variants, so an agent knows both when and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; however the description adds meaning the schema does not, notably that include_summaries only applies with compact=true and that compact mode still retains the flags and comparison table. It restates the 2-5 bound and the 'not a value/reference designator' constraint that the schema already gives, so it does not reach 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Compares 2-5 parts ... side by side in one call') and explicitly scopes it to parts you already know, naming search_parts and find_alternative as the candidate-discovery siblings. An agent can distinguish this from every sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use and prerequisites: find candidates with search_parts/find_alternative first, prefetch_datasheets before expecting summaries. It also routes on results (datasheet_status 'ready' → read it; 'extracting' → poll check_extraction_status; 'not_extracted' → prefetch_datasheets; 'no_source' → request_datasheet_upload), which is unusually actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_datasheet_uploadConfirm Datasheet UploadADestructiveInspect
Costs 10¢ per call. That is the upload fee, charged only when the file passes its checks. Confirms an upload started with request_datasheet_upload: pass its upload_token. The server re-hashes the uploaded bytes, checks it is a PDF with the MPN on the first page, adds it to your organisation's private library and queues extraction. Success returns document_id, mpn, sha256, file_size_bytes and status='pending'; poll check_extraction_status with the MPN. A new datasheet takes about 2.5 minutes at the median and 6.5 minutes at the 90th percentile; a cold GPU start can take about 12 minutes. These are estimates, not deadlines. Failures (not charged): 'upload_not_found' (no bytes yet; retry the PUT), 'sha256_mismatch' (re-hash and re-request), 'invalid_pdf', 'mpn_not_in_pdf' (wrong file, or scanned image-only), 'token_expired' (older than 15 minutes; start again).
| Name | Required | Description | Default |
|---|---|---|---|
| upload_token | Yes | Opaque token returned by request_datasheet_upload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: discloses the 10¢ fee and that it is only charged on success, the server-side validation sequence (re-hash, PDF check, MPN-on-page-1 check), private-library insertion, extraction queueing, latency distribution (2.5/6.5/12 min), and the full failure taxonomy with per-error remediation. The destructiveHint/openWorldHint flags are consistent with this write-plus-fee operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but organized: fee, precondition, server behavior, return values, timing, then failures are ordered logically, and the failure list is packed with recovery hints. Slightly long and header-less, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden and delivers: it enumerates returned fields (document_id, mpn, sha256, file_size_bytes, status='pending'), the success/failure split, billing semantics, and expected latency. Nothing material for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for a single parameter, so the schema already documents upload_token as an opaque token from request_datasheet_upload. The description restates the same provenance and adds no format, length, or expiry semantics beyond what the schema carries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Confirms an upload') with an explicit pointer to the producing sibling (request_datasheet_upload) and the downstream poll target (check_extraction_status). An agent can place this tool in the workflow without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the precondition ('an upload started with request_datasheet_upload'), the required handoff value ('pass its upload_token'), and the follow-up action ('poll check_extraction_status with the MPN'). Both when-to-use and the next step are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_alternativeFind Alternative PartsARead-onlyIdempotentInspect
Costs 2¢ per call. Finds alternative and second-source parts for an MPN that is out of stock, end of life or too expensive, ranked by match_score with match_notes. Candidates come from provider search and from parts with the same function in our own datasheet index; they must do the same job (an accelerometer is not offered for a 6-axis IMU) and are compared on named electrical specs. Each has a lifecycle, stock and datasheet_status; obsolete and NRND parts rank last. Constraints: 'same_package' (fuzzy: SOT-23 ≡ SOT23, SOIC-8 ≡ SOP-8), 'in_stock', 'jlcpcb'. They are never relaxed silently: a candidate that fails one is left out of alternatives, removed_by_constraints counts what each removed, and when that leaves too few, relaxed_matches lists the best ones with the constraints they failed. When nothing matches at all, the call returns error_type 'not_found' (not charged) with the parts that would match without the constraints, under matches_without_constraints. The part's own family is also searched among datasheets already read (e.g. CH340C for CH340G). A score is similarity, not verified pin or electrical compatibility: check pinout and limits before substituting. Eval boards and modules are excluded. compact=true gives shorter rows (no per-source data or price breaks) and leaves out the reference part's summary unless include_original_summary=true. For a head-to-head of candidates you already have, use compare_parts. Example: find_alternative('TPS54302', constraints=['same_package', 'in_stock']) datasheet_status: 'ready' → read it; 'extracting' / 'queued' / 'pending' / 'resolving' → poll check_extraction_status; 'not_extracted' → prefetch_datasheets; 'no_source' / 'unsupported' → request_datasheet_upload. Full list in the server instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max alternatives to return (default 5, max 20). | |
| compact | No | Return the shorter answer: one short row per candidate (identity, lifecycle, stock, cheapest price, providers, match notes) and no reference-part summary. Default false: the full answer. | |
| constraints | No | Optional filters. 'in_stock' = known non-zero stock at some provider. 'same_package' = same footprint (fuzzy). 'jlcpcb' = orderable at JLCPCB (also limits the provider search to JLCPCB). | |
| part_number | Yes | Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1'). | |
| include_original_summary | No | With compact=true, also return the reference part's cached datasheet summary (about 2-3k characters). The full answer always has it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/openWorld/idempotent annotations: it discloses the 2¢ per-call cost, that constraints are never relaxed silently, that failures surface in removed_by_constraints/relaxed_matches, that not_found is not charged, and that match_score is similarity not verified compatibility. This is exactly the behavioral context an agent needs before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with cost and purpose, and nearly every sentence earns its place. It is dense and slightly sprawling toward the end (datasheet_status branching plus a pointer to server instructions), which keeps it just below a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so fully: match_score/match_notes, lifecycle/stock/datasheet_status, removed_by_constraints, relaxed_matches, and the not_found error with matches_without_constraints. An agent has everything required to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description adds real meaning beyond it: fuzzy package equivalence examples (SOT-23 ≡ SOT23, SOIC-8 ≡ SOP-8), the non-silent-relaxation semantics of constraints, and the compact/include_original_summary interaction ('leaves out the reference part's summary unless include_original_summary=true').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with the triggering conditions: 'Finds alternative and second-source parts for an MPN that is out of stock, end of life or too expensive.' It also explicitly differentiates from the sibling compare_parts ('for a head-to-head of candidates you already have, use compare_parts').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names when to use it (out of stock, EOL, too expensive) and routes to the alternative tool compare_parts for a different need. It even documents the downstream branching per datasheet_status, telling the agent which sibling to call next.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_partsFind Parts by SpecARead-onlyIdempotentInspect
Free. Find candidates by function and numeric specs with units, package or stock. Example: query='buck converter', constraints=[{parameter:'vin_max',op:'>=',value:'24 V'}, {parameter:'iout',op:'>=',value:'2 A'}]. Also accepts vds, rds_on, canonical parameter names and text constraints (interface contains I2C). Uses catalogue/JLCPCB parameters and DigiKey parametric filters when configured. Ranks pass/fail/unknown evidence; unknown is unverified. Values retain sources and test conditions. Compact columns/rows by default; verbose returns objects. Does not validate design fit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Function, e.g. buck converter, N-channel MOSFET, 6-axis IMU | |
| package | No | ||
| verbose | No | ||
| in_stock | No | Require positive stock observed within 24h; refresh at most six candidates. | |
| constraints | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/openWorld safety, and the description adds real behavioral context on top: evidence ranking semantics (pass/fail/unknown, unknown = unverified), source and test-condition retention, compact-vs-verbose return shape, 'Free' cost signal, and the DigiKey/JLCPCB configuration dependency. This is meaningful disclosure beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the cheapest useful fact ('Free') followed by the core action, and every sentence carries distinct information about constraints, ranking, or output format. It is dense and the inline example fattens the prose, but nothing is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter filtering tool with no output schema, the description covers result ranking, evidence reliability, and return shape (compact vs verbose), which is what the agent most needs. Remaining gaps are minor: limit/pagination behavior and package filtering semantics are left to the schema defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 33% schema coverage, the description compensates well: it shows the constraints object shape via example, clarifies value format ('24 V', '10 mΩ'), mentions text operators like 'contains', and explains verbose toggles output objects vs compact rows. It omits semantics for limit (1-20, default 5) and leaves package unelaborated, so not quite a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Find candidates by function and numeric specs') plus scope modifiers (units, package, stock) that differentiate it from a plain keyword lookup. It implicitly separates itself from check_design_fit via 'Does not validate design fit,' but never names search_parts or find_alternative, so sibling differentiation is incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a concrete usage example with query + constraints, explains what parameter naming schemes are accepted (vds, rds_on, canonical names, text constraints), and states a clear when-not boundary ('Does not validate design fit'). It stops short of routing the agent to alternatives like search_parts or find_alternative, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_part_detailsGet Part DetailsARead-onlyInspect
Free. Full details for one part: provider specs, price, stock and lifecycle, the per-MPN structured values (specialized_specs), the cached datasheet summary, and datasheet_status with available_sections when ready. Known lifecycle risks carry lifecycle_warning. Discovered in-document errata_sections and application_circuit_sections include names for read_datasheet (use read_args when supplied); absence does not prove the manufacturer has no separate errata. If any of it is for a different MPN than you asked for (an orderable variant, a base part, a sibling's datasheet), resolved_as and data_quality_warning at the top of the response say so, and prose written for another part is labelled as such at the start of datasheet_summary (family_summary with compact=true): trust specialized_specs for numbers. prefetch_datasheet=true starts extraction at no extra charge. Use after search_parts to drill into one result. datasheet_status: 'ready' → read it; 'extracting' / 'queued' / 'pending' / 'resolving' → poll check_extraction_status; 'not_extracted' → prefetch_datasheets; 'no_source' / 'unsupported' → request_datasheet_upload. Full list in the server instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | Return the shorter answer: prose written for another part comes back as family_summary instead of a labelled datasheet_summary. Default false: the full answer. | |
| verbose | No | Return every available_sections entry. By default the first 50 are returned, plus a '_truncated' entry saying how many more exist. | |
| provider | No | Which provider's sources to show (default 'all'). | all |
| part_number | Yes | Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1'). | |
| prefetch_datasheet | No | Start background datasheet extraction (no extra charge). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/openWorld annotations: it discloses cost behavior ('Free', prefetch at no extra charge), that resolved_as/data_quality_warning flag MPN mismatches, that lifecycle_warning marks risks, and cautions that absence of errata_sections does not prove absence of manufacturer errata. This is unusually rich behavioral context, though it leaves the return shape itself partly implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The routing guidance is front-loaded and valuable, but the body is a dense run-on paragraph with nested parentheticals (e.g. the read_datasheet / read_args aside) that is hard to scan. Much earns its place, but the structure could be broken into clearer segments.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter read tool with no output schema and heavy cross-tool interplay, the description covers purpose, cost, edge cases, warning fields, and downstream routing comprehensively. An agent has everything needed to call it and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all five parameters including compact, verbose, provider and prefetch_datasheet. The description mostly restates these (e.g. family_summary for compact, 'no extra charge' for prefetch), adding little interpretation beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource and enumerates exactly what the response contains (provider specs, price, stock, lifecycle, specialized_specs, datasheet_summary, datasheet_status, errata_sections). It is clearly distinguishable from siblings like search_parts, read_datasheet and check_extraction_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use after search_parts to drill into one result', and provides a complete decision table mapping datasheet_status values ('ready', 'extracting', 'not_extracted', 'no_source') to the specific sibling tool to call next. When-to-use and alternatives are fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prefetch_datasheetsPrefetch DatasheetsARead-onlyInspect
Free. Starts background extraction for up to 20 parts at once, e.g. a BOM, so they are ready before you read them. Returns immediately with each part's status. A new datasheet takes about 2.5 minutes at the median and 6.5 minutes at the 90th percentile; a cold GPU start can take about 12 minutes. These are estimates, not deadlines. Poll check_extraction_status (free). A part without a known datasheet comes back 'queued' while we look for its PDF, and reads 'resolving' until the search ends; only then is 'no_source' final: check the part number, or attach the PDF with request_datasheet_upload (org-private). The Free plan has a daily cap on new datasheets ('trial_limit'). MPNs or LCSC numbers only; resolve value-only BOM rows with search_parts first. Example: prefetch_datasheets(['TPS54302', 'ADS1115', 'LP5907']) datasheet_status: 'ready' → read it; 'extracting' / 'queued' / 'pending' / 'resolving' → poll check_extraction_status; 'not_extracted' → prefetch_datasheets; 'no_source' / 'unsupported' → request_datasheet_upload. Full list in the server instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| part_numbers | Yes | 1-20 parts. Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnly/non-destructive), but the description adds substantial behavior beyond them: it is free, returns immediately with per-part status, median/p90/cold-start latency estimates framed as non-deadlines, a Free-plan daily cap surfaced as 'trial_limit', and the non-obvious lifecycle of 'queued' → 'resolving' → final 'no_source'. This is exactly the context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with cost and effect, then timing, then status routing. Dense and nearly every sentence earns its place, though the status-to-action mapping reads as a compressed run-on and could be split for scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain returns, and it does: every status value is enumerated with the follow-up action for each, and the polling tool is named. An agent has everything needed to call it and act on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the MPN/LCSC-vs-value distinction, so baseline is 3. The description adds real meaning on top: the BOM-scale use case, the value-only-row exception routed to search_parts, and a concrete example call with sample identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Starts background extraction for ... parts') plus scope (up to 20 at once) and the motivating scenario (a BOM). It is immediately distinguishable from siblings like read_datasheet and check_extraction_status, which the description names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('so they are ready before you read them'), when-not/input constraints ('MPNs or LCSC numbers only'), and a full alternative-routing map: poll check_extraction_status, resolve value-only rows with search_parts, attach PDFs via request_datasheet_upload for 'no_source'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_datasheetRead DatasheetARead-onlyInspect
Costs 2¢ per call. Reads a part's datasheet. Section mode (default): start with section='summary' for an overview and available_sections, then ask for any section by name; names come from the datasheet's own headings (e.g. 'register_map', 'i2c_interface'); an unknown name returns the nearest section names and pages. Use max_chars and the returned next_offset to continue a long read. Search mode (mode='search' with a query): semantic search within this datasheet, for targeted questions such as a register bit field or an I2C address. Prefer specific sections to section='all', which can fill your context. The first read of a new part starts extraction and returns status='extracting' (not charged). A new datasheet takes about 2.5 minutes at the median and 6.5 minutes at the 90th percentile; a cold GPU start can take about 12 minutes. These are estimates, not deadlines. For microcontrollers, register-level programming detail usually lives in a separate reference manual, not the datasheet; available_sections shows what is present. datasheet_status: 'ready' → read it; 'extracting' / 'queued' / 'pending' / 'resolving' → poll check_extraction_status; 'not_extracted' → prefetch_datasheets; 'no_source' / 'unsupported' → request_datasheet_upload. Full list in the server instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 'section' (default) returns a named section, 'search' does semantic search | section |
| limit | No | Max search results in search mode (default 3). Each result includes adjacent context chunks. | |
| query | No | Search query; required when mode='search', ignored otherwise. Example: 'charge voltage register', 'I2C address'. | |
| format | No | For a named section, json returns tables as columns and rows plus remaining text, preserving source cells (useful for register_map). Paging and page citations still apply. | markdown |
| offset | No | Continue a section using next_offset from the previous read. | |
| section | No | Section name for section mode. Start with 'summary' to discover available sections. Common: summary, pinout, electrical, abs_max, register_map, timing, package. Any heading in the datasheet works (slugified). | summary |
| max_chars | No | Text budget; a whole sentence or table row may exceed it. | |
| part_number | Yes | Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly/openWorld/non-destructive; the description adds real behavioral context the annotations cannot: 2¢ per call cost, that the first extraction read is not charged, and concrete latency estimates (2.5 min median, ~12 min cold GPU). It also warns that microcontroller register detail may live in a separate reference manual. Only minor gap: no explicit statement about auth or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with cost and the core section-mode workflow, then search mode, then status routing. Long but dense and largely waste-free; the status-mapping sentence is a slight compression win but adds length rather than cutting it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, no-output-schema tool, the description covers mode selection, paging, cost, latency, failure states, and sibling routing – everything an agent needs to call it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), but the description still adds non-duplicative meaning: section names derive from the datasheet's own slugified headings, unknown names return nearest sections and pages, and next_offset/max_chars are framed as a paging workflow. This goes beyond the schema's field-level text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Reads a part's datasheet') and immediately distinguishes its two operating modes (section vs. search) with concrete examples of section names and queries. An agent can identify what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: start with section='summary', prefer named sections over 'all' which 'can fill your context', and maps each datasheet_status value to the correct alternative sibling (check_extraction_status, prefetch_datasheets, request_datasheet_upload). This is a full when/when-not/alternative map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_datasheet_uploadRequest Datasheet UploadAInspect
Free. The upload fee is charged by confirm_datasheet_upload, after the file is checked. Gives a signed URL to upload a datasheet PDF we don't have: use it when datasheet_status is 'no_source' (once the search has finished: not while it is 'resolving') or 'unsupported'. Three steps:
Call this with the MPN, the file's SHA-256 and its byte size; you get upload_url, upload_method ('PUT'), upload_headers and an upload_token.
Upload the bytes:
curl -X PUT -H 'Content-Type: application/pdf' --data-binary @file.pdf "$UPLOAD_URL"(plus any upload_headers).Call confirm_datasheet_upload with the upload_token. Checked at confirm (nothing charged if a check fails): a parseable PDF, the SHA-256 and size you declared, and the MPN or its stem on the first page (scanned image-only PDFs fail this). Max 50 MB; the part's datasheet, not a dev-kit manual, schematic or app note. Uploaded datasheets are private to your organisation. Tokens expire after 15 minutes; request a new one if needed.
| Name | Required | Description | Default |
|---|---|---|---|
| size_bytes | Yes | Size of the PDF in bytes (1,024 to 50,000,000). | |
| part_number | Yes | MPN the PDF belongs to. Not a value or description. | |
| manufacturer | No | Optional manufacturer name (e.g. 'Texas Instruments') when the MPN alone is ambiguous. | |
| expected_sha256 | Yes | Lowercase hex SHA-256 of the PDF bytes (64 chars), e.g. from `shasum -a 256 file.pdf`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it is a write with no destruction; the description adds substantial non-obvious behavior: it is free but the fee is charged at confirm, validation rules (parseable PDF, declared hash/size, MPN on first page, image-only PDFs fail), 50 MB limit, org-private results, and 15-minute token expiry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the key cost fact ('Free.') and organized as a numbered three-step flow, so structure is strong. It is long and slightly repetitive (fee and checks restated), which keeps it from a 5, but almost every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description enumerates the returned fields (upload_url, upload_method, upload_headers, upload_token) and the full two-step follow-through, so an agent has everything needed to complete the workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning by explaining what the SHA-256 and byte size are checked against at confirm time and by clarifying the MPN-or-stem matching rule on page one. It does not add syntactic detail beyond the schema's examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: obtaining a signed URL to upload a datasheet PDF. It clearly distinguishes itself from siblings by naming confirm_datasheet_upload as the follow-up and by scoping to cases where the datasheet is absent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit trigger conditions (datasheet_status 'no_source' after search completes, or 'unsupported'), an explicit exclusion (not while 'resolving'), and routes the agent to confirm_datasheet_upload as the required next step. 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.
search_datasheetsSearch DatasheetsARead-onlyIdempotentInspect
Costs 2¢ per call. Semantic search across every datasheet already extracted (not every part that exists), for spec-based discovery such as 'low-noise LDO with PSRR above 70dB'. Returns matching chunks with part_number and a 0-100 relevance_score. To find a specific part by number, use search_parts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 3) | |
| query | Yes | Natural language search query | |
| section_type | No | Optional: limit search to a specific section type | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint, non-destructive), but the description adds genuinely new operational facts: a 2¢ per-call cost and the shape of the return ('matching chunks with part_number and a 0-100 relevance_score'). It does not discuss empty-result behavior or how limit affects result quality, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, all front-loaded: cost first, then scope, then return shape, then the alternative. Every sentence carries a distinct fact and none restates the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description still supplies the return shape and relevance scale, plus corpus scope, cost, and the disambiguation rule. An agent has everything needed to decide between this and search_parts and to interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning for the required query parameter by showing the expected style (spec-based natural-language phrase rather than a part number). The limit and section_type parameters are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (semantic search) and resource (extracted datasheets) and immediately bounds the corpus with 'not every part that exists'. It also names the sibling it is not: search_parts for lookup by part number, so an agent can distinguish it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the positive trigger with a concrete example ('low-noise LDO with PSRR above 70dB') and an explicit when-not rule routing part-number lookups to search_parts. Both the condition and the alternative are named, 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.
search_partsSearch PartsARead-onlyIdempotentInspect
Free. Start here. Searches components by part number or keyword (e.g. 'STM32F103', 'buck converter 3A') across JLCPCB, Mouser and DigiKey in parallel. Results are merged by MPN with indicative price and stock per source and a datasheet_status. For an MPN query, eval boards and dev kits come back separately as related_kits. Parts in your organisation's private library whose MPN, manufacturer, description, type, category or tag matches are appended with source='private_library' and their tags. For spec-based discovery in plain language, use search_datasheets. datasheet_status: 'ready' → read it; 'extracting' / 'queued' / 'pending' / 'resolving' → poll check_extraction_status; 'not_extracted' → prefetch_datasheets; 'no_source' / 'unsupported' → request_datasheet_upload. Full list in the server instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results per provider (default 20). With providers='all' the total can be up to 3× this. | |
| query | Yes | Search query (part number or keyword) | |
| providers | No | Which providers to query (default 'all'). | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly, idempotent, openWorld, non-destructive), but the description adds substantial behavior the annotations cannot: queries run in parallel across three providers, results are merged by MPN, eval boards/kits are split out as related_kits for MPN queries, and private-library matches are appended with source='private_library'. That is exactly the kind of pre-call context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the cheapest signal ('Free. Start here.') and then builds from core behavior to return shape to routing. The datasheet_status mapping is dense but each mapping earns its place; the trailing 'Full list in the server instructions' is the only mild redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description carries the full burden, describing merged-by-MPN results with per-source price and stock, datasheet_status, related_kits and private_library entries with tags. Combined with the status-to-tool routing table, an agent has everything needed to call it and act on the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with limit, query and providers all documented including the 3× multiplier caveat for providers='all'. The description adds no syntax or format detail beyond that, so the baseline 3 applies; it does implicitly hint that private-library results are appended regardless of the provider selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Searches components by part number or keyword') plus the exact scope (JLCPCB, Mouser, DigiKey, in parallel). It explicitly contrasts itself with the closest sibling: 'For spec-based discovery in plain language, use search_datasheets,' so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Free. Start here.' gives an explicit entry-point recommendation, and the description names the alternative (search_datasheets) with the condition that selects it (spec-based plain-language discovery). It further routes downstream work: poll check_extraction_status, prefetch_datasheets, request_datasheet_upload, each keyed to a concrete datasheet_status value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
check_bom1 field changed- changed
Input schema / properties / lines / maxItemsPrevious value: -20New value: +50
- Changed
read_datasheet1 field changed- added
Input schema / properties / formatAdded value: +{ + "default": "markdown", + "description": "For a named section, json returns tables as columns and rows plus remaining text, preserving source cells (useful for register_map). Paging and page citations still apply.", + "enum": [ + "markdown", + "json" + ], + "type": "string" +}
10 tool updates
- Changed
analyze_image1 field changed- changed
Input schema / properties / question / descriptionPrevious value: -"Optional specific question about the image (e.g. 'What are the package dimensions?')"New value: +"Optional question about the image (e.g. 'What are the package dimensions?')"
- Changed
check_design_fit3 fields changed- added
Input schema / properties / derating_pctAdded value: +{ + "description": "Percent below a rating a PASS must stay, for input_voltage, supply_voltage and output_current. Default 20 (run at no more than 80% of the rating). 0 turns optional derating off; no current headroom still warns.", + "maximum": 50, + "minimum": 0, + "type": "number" +} - changed
Input schema / properties / part_number / descriptionPrevious value: -"Specific manufacturer part number to validate. Not a value or description."New value: +"Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1')." - changed
Input schema / properties / supply_voltage / descriptionPrevious value: -"Supply voltage / VCC / VDD (V). For MOSFETs, this is VDS (drain-source voltage). NOT used for power dissipation — compared against VDS(max) only."New value: +"Supply voltage / VCC / VDD (V). For MOSFETs, VDS; compared against VDS(max) only."
- Changed
check_extraction_status1 field changed- changed
Input schema / properties / part_numbers / descriptionPrevious value: -"1-20 MPNs to check. Must be specific manufacturer part numbers, not values or descriptions."New value: +"1-20 parts. Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1')."
- Changed
compare_parts3 fields changed- added
Input schema / properties / compactAdded value: +{ + "default": false, + "description": "Return the shorter answer: per-part flags and the comparison table, without per-provider detail or summaries. Default false: the full answer.", + "type": "boolean" +} - added
Input schema / properties / include_summariesAdded value: +{ + "default": false, + "description": "With compact=true, also return each part's cached datasheet summary (about 2-4k characters each). The full answer always has them.", + "type": "boolean" +} - changed
Input schema / properties / part_numbers / descriptionPrevious value: -"2-5 specific manufacturer part numbers or LCSC numbers to compare head-to-head. Must be real MPNs — the call is rejected upfront if any entry is a value, description, or reference designator."New value: +"2-5 parts. Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1')."
- Changed
find_alternative4 fields changed- added
Input schema / properties / compactAdded value: +{ + "default": false, + "description": "Return the shorter answer: one short row per candidate (identity, lifecycle, stock, cheapest price, providers, match notes) and no reference-part summary. Default false: the full answer.", + "type": "boolean" +} - changed
Input schema / properties / constraints / descriptionPrevious value: -"Optional filters to narrow alternatives. 'in_stock' = only parts with non-zero stock at any provider. 'same_package' = package footprint must match (fuzzy). 'jlcpcb' = must be available at JLCPCB (useful for JLCPCB-assembled boards — also restricts the provider search to JLCPCB)."New value: +"Optional filters. 'in_stock' = known non-zero stock at some provider. 'same_package' = same footprint (fuzzy). 'jlcpcb' = orderable at JLCPCB (also limits the provider search to JLCPCB)." - added
Input schema / properties / include_original_summaryAdded value: +{ + "default": false, + "description": "With compact=true, also return the reference part's cached datasheet summary (about 2-3k characters). The full answer always has it.", + "type": "boolean" +} - changed
Input schema / properties / part_number / descriptionPrevious value: -"The MPN to find alternatives for"New value: +"Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1')."
- Changed
get_part_details5 fields changed- added
Input schema / properties / compactAdded value: +{ + "default": false, + "description": "Return the shorter answer: prose written for another part comes back as family_summary instead of a labelled datasheet_summary. Default false: the full answer.", + "type": "boolean" +} - changed
Input schema / properties / part_number / descriptionPrevious value: -"Specific manufacturer part number (MPN) or LCSC number (e.g. 'C2837938'). Not a value or description."New value: +"Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1')." - changed
Input schema / properties / prefetch_datasheet / descriptionPrevious value: -"Trigger background datasheet extraction (no extra charge). Default false."New value: +"Start background datasheet extraction (no extra charge)." - changed
Input schema / properties / provider / descriptionPrevious value: -"Which provider to query: 'all' (default), 'jlcpcb', 'mouser', or 'digikey'"New value: +"Which provider's sources to show (default 'all')." - added
Input schema / properties / verboseAdded value: +{ + "default": false, + "description": "Return every available_sections entry. By default the first 50 are returned, plus a '_truncated' entry saying how many more exist.", + "type": "boolean" +}
- Changed
prefetch_datasheets1 field changed- changed
Input schema / properties / part_numbers / descriptionPrevious value: -"List of MPNs to prefetch (max 20). Must be specific manufacturer part numbers, not values or descriptions."New value: +"1-20 parts. Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1')."
- Changed
read_datasheet4 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max search results for search mode (default 3). Each result includes adjacent context chunks for continuity."New value: +"Max search results in search mode (default 3). Each result includes adjacent context chunks." - changed
Input schema / properties / mode / descriptionPrevious value: -"Reading mode: 'section' (default) returns a named section, 'search' does semantic search"New value: +"'section' (default) returns a named section, 'search' does semantic search" - changed
Input schema / properties / part_number / descriptionPrevious value: -"Specific manufacturer part number (MPN) or LCSC number. Not a value or description."New value: +"Specific manufacturer part number (MPN) or LCSC number (e.g. 'TPS54302DDCR', 'C2837938'). Not a value ('100nF'), description or reference designator ('R1')." - changed
Input schema / properties / query / descriptionPrevious value: -"Search query — REQUIRED when mode='search', ignored when mode='section'. Example: 'charge voltage register', 'I2C address'."New value: +"Search query; required when mode='search', ignored otherwise. Example: 'charge voltage register', 'I2C address'."
- Changed
request_datasheet_upload4 fields changed- changed
Input schema / properties / expected_sha256 / descriptionPrevious value: -"Lowercase hex SHA-256 of the PDF bytes (64 chars). Used both as the storage key (content-addressed) and to detect tampering. Compute with `shasum -a 256 file.pdf`."New value: +"Lowercase hex SHA-256 of the PDF bytes (64 chars), e.g. from `shasum -a 256 file.pdf`." - changed
Input schema / properties / manufacturer / descriptionPrevious value: -"Optional. Manufacturer name (e.g. 'Texas Instruments') if the MPN alone doesn't disambiguate."New value: +"Optional manufacturer name (e.g. 'Texas Instruments') when the MPN alone is ambiguous." - changed
Input schema / properties / part_number / descriptionPrevious value: -"Manufacturer part number the PDF belongs to. Must be a real MPN, not a value or description."New value: +"MPN the PDF belongs to. Not a value or description." - changed
Input schema / properties / size_bytes / descriptionPrevious value: -"Size of the PDF in bytes. Must be ≤ 50_000_000 (50MB) and > 1024."New value: +"Size of the PDF in bytes (1,024 to 50,000,000)."
- Changed
search_parts2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max results per provider (default 20). With providers='all', total results can be up to 3× this value (one set per provider)."New value: +"Max results per provider (default 20). With providers='all' the total can be up to 3× this." - changed
Input schema / properties / providers / descriptionPrevious value: -"Which providers to query: 'all' (default), 'jlcpcb', 'mouser', or 'digikey'"New value: +"Which providers to query (default 'all')."
1 tool update
- Changed
check_design_fit2 fields changed- added
Input schema / properties / efficiencyAdded value: +{ + "description": "Converter efficiency at this operating point, as a fraction (0.92) or a percentage (92). Lets the tool estimate a switching converter's junction temperature.", + "exclusiveMinimum": 0, + "maximum": 100, + "type": "number" +} - added
Input schema / properties / power_dissipationAdded value: +{ + "description": "The part's own power dissipation (W), if you have worked it out (e.g. ID² × RDS(on) for a MOSFET). Used for the junction-temperature estimate.", + "maximum": 1000, + "minimum": 0, + "type": "number" +}
2 tool updates
- Added
check_bom - Added
find_parts
2 tool updates
- Changed
read_datasheet4 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -10New value: +3 - changed
Input schema / properties / limit / descriptionPrevious value: -"Max search results for search mode (default 10). Each result includes adjacent context chunks for continuity."New value: +"Max search results for search mode (default 3). Each result includes adjacent context chunks for continuity." - added
Input schema / properties / max_charsAdded value: +{ + "description": "Text budget; a whole sentence or table row may exceed it.", + "maximum": 60000, + "minimum": 500, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Continue a section using next_offset from the previous read.", + "minimum": 0, + "type": "integer" +}
- Changed
search_datasheets2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -15New value: +3 - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 15)"New value: +"Max results (default 3)"
2 tool updates
- Changed
check_design_fit12 fields changed- added
Input schema / properties / ambient_temp / maximumAdded value: +200 - added
Input schema / properties / ambient_temp / minimumAdded value: +-65 - added
Input schema / properties / input_voltage / maximumAdded value: +1500 - added
Input schema / properties / input_voltage / minimumAdded value: +0 - added
Input schema / properties / output_current / maximumAdded value: +500 - added
Input schema / properties / output_current / minimumAdded value: +0 - added
Input schema / properties / output_voltage / maximumAdded value: +1500 - added
Input schema / properties / output_voltage / minimumAdded value: +0 - added
Input schema / properties / supply_voltage / maximumAdded value: +1500 - added
Input schema / properties / supply_voltage / minimumAdded value: +0 - added
Input schema / properties / switching_frequency / maximumAdded value: +10000000 - added
Input schema / properties / switching_frequency / minimumAdded value: +0
- Changed
read_datasheet1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"Search query for search mode (e.g. 'charge voltage register', 'I2C address')"New value: +"Search query — REQUIRED when mode='search', ignored when mode='section'. Example: 'charge voltage register', 'I2C address'."
2 tool updates
- Added
confirm_datasheet_upload - Added
request_datasheet_upload
3 tool updates
- Changed
check_extraction_status1 field changed- changed
Input schema / properties / part_numbers / descriptionPrevious value: -"List of MPNs to check (max 20)"New value: +"1-20 MPNs to check. Must be specific manufacturer part numbers, not values or descriptions."
- Changed
compare_parts1 field changed- changed
Input schema / properties / part_numbers / descriptionPrevious value: -"List of 2-5 specific manufacturer part numbers to compare. Not values or descriptions."New value: +"2-5 specific manufacturer part numbers or LCSC numbers to compare head-to-head. Must be real MPNs — the call is rejected upfront if any entry is a value, description, or reference designator."
- Changed
find_alternative6 fields changed- changed
Input schema / properties / constraints / defaultPrevious value: -""New value: +[] - changed
Input schema / properties / constraints / descriptionPrevious value: -"Optional constraints: 'in_stock' (only parts in stock), 'same_package' (must match package), 'jlcpcb' (available at JLCPCB). Comma-separated."New value: +"Optional filters to narrow alternatives. 'in_stock' = only parts with non-zero stock at any provider. 'same_package' = package footprint must match (fuzzy). 'jlcpcb' = must be available at JLCPCB (useful for JLCPCB-assembled boards — also restricts the provider search to JLCPCB)." - added
Input schema / properties / constraints / itemsAdded value: +{ + "enum": [ + "in_stock", + "same_package", + "jlcpcb" + ], + "type": "string" +} - changed
Input schema / properties / constraints / typePrevious value: -"string"New value: +"array" - changed
Input schema / properties / limit / descriptionPrevious value: -"Max alternatives to return (default 5)"New value: +"Max alternatives to return (default 5, max 20)." - added
Input schema / properties / limit / maximumAdded value: +20
2 tool updates
- Changed
check_design_fit6 fields changed- changed
Input schema / properties / ambient_temp / descriptionPrevious value: -"Ambient temperature (C)"New value: +"Ambient temperature TA (°C)." - changed
Input schema / properties / input_voltage / descriptionPrevious value: -"Input voltage (V)"New value: +"Input voltage / VIN (V). For converters." - changed
Input schema / properties / output_current / descriptionPrevious value: -"Output current (A)"New value: +"Output current / IOUT (A). For MOSFETs, this is drain current ID." - changed
Input schema / properties / output_voltage / descriptionPrevious value: -"Output voltage (V)"New value: +"Output voltage / VOUT (V). For converters/LDOs." - changed
Input schema / properties / supply_voltage / descriptionPrevious value: -"Supply voltage (V)"New value: +"Supply voltage / VCC / VDD (V). For MOSFETs, this is VDS (drain-source voltage). NOT used for power dissipation — compared against VDS(max) only." - changed
Input schema / properties / switching_frequency / descriptionPrevious value: -"Switching frequency (kHz)"New value: +"Switching frequency FSW (kHz). For converters."
- Changed
search_parts1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max results per provider (default 20)"New value: +"Max results per provider (default 20). With providers='all', total results can be up to 3× this value (one set per provider)."
2 tool updates
- Changed
read_datasheet2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -5New value: +10 - changed
Input schema / properties / limit / descriptionPrevious value: -"Max search results for search mode (default 5)"New value: +"Max search results for search mode (default 10). Each result includes adjacent context chunks for continuity."
- Changed
search_datasheets2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -10New value: +15 - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 10)"New value: +"Max results (default 15)"
Related MCP Connectors
Verified KiCad footprints, symbols & 3D models for AI agents. No signup, CC-BY-4.0, quality-gated.
Turn datasheets into source-backed JSON contracts, pinout matrices, and KiCad CAD for AI agents.
IC datasheet search: parametric part finding, spec lookup, price comparison — grounded in real PDFs.
Find electronic parts with live Mouser, DigiKey and JLCPCB stock and prices, check BOMs, order.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI assistants to search millions of electronic components and ICs, retrieve specifications, compare alternates, and submit turnkey BOM procurement requests.4MIT
- FlicenseNot gradedqualityCmaintenanceEnables searching for electronic components, comparing prices across distributors, checking availability, and retrieving datasheets through the Nexar/Octopart API with specialized tools for resistors, capacitors, inductors, semiconductors, crystals, and connectors.11-
- AlicenseBqualityBmaintenancedatasheet-lens gives the content of component datasheets (PDF) to an LLM agent, for electronics design (KiCad and other CAD tools) and firmware work.27MIT
- AlicenseAqualityCmaintenanceConnects AI assistants to a ~960,000-product electronics catalog across 955 categories, enabling keyword and parametric-filter search, stock and price lookups, substitute finding, BOM cost checking, and datasheet download/reading. Runs locally and requires no API key, membership, or fee.11MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.