Binner MCP Server
Provides tools for querying the Binner Swarm cloud component service for pinout diagrams, package footprints, and manufacturer datasheets, with rate-limit tracking.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Binner MCP ServerShow me the BOM for my LED cube project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Binner MCP Server
A Model Context Protocol (MCP) server and Python API client providing a high-performance proxy to local Binner inventory instances (.NET 8 / Kestrel) and the Binner Swarm cloud component service (https://swarm.binner.io).
Overview
System Architecture
The codebase implements a decoupled dual-layered architecture with a common foundation core:
+-----------------------------------------------------------------------------------+
| Layer 2: MCP Protocol Binding Layer |
| |
| - MCP Server Setup (binner_mcp.mcp.server.BinnerMCPServer) |
| - Transports: stdio (JSON-RPC), http (Streamable HTTP), sse (Legacy SSE) |
| - 15 Registered Tools (System, Cloud, Inventory, Categories, Projects, BOM) |
| - 5 Dynamic Resources (Status, Categories, Low-Stock, Project BOM, Part Details) |
| - Single-Thread FIFO Task Queue (ThreadPoolExecutor(max_workers=1)) |
| - Pre-Flight Zero-Side-Effects Validation & extra="forbid" Safety Guard |
+-----------------------------------------------------------------------------------+
|
v
+-----------------------------------------------------------------------------------+
| Layer 1: Python API Client Interfaces |
| |
| Layer 1A: Local Binner API Client Layer 1B: Swarmer Cloud Client |
| (binner_mcp.api.client.BinnerAPIProxy) (binner_mcp.swarmer.SwarmClient) |
| ├── PartsComp (CRUD, stock deltas, labels) ├── Pinouts, Footprints, Schematics|
| ├── ProjectsComp (Maker projects, BOM items) ├── Direct PDF Datasheet URLs |
| ├── PartTypesComp (Category tree management) └── Quota Rate-Limit Tracking |
| ├── DataComp (CSV bulk import, ZIP export) |
| ├── SystemComp (Ping, version, server logs) |
| ├── PartCacheComp (Bidirectional ID <-> PN) |
| └── BaseBinnerClient (JWT + HttpOnly cookie) |
+-----------------------------------------------------------------------------------+
|
v
+-----------------------------------------------------------------------------------+
| Common Core & Upstream Services |
| |
| binner_mcp.common: |
| - BaseHttpClient (requests.Session pooling, threading.RLock re-entrant safety) |
| - logging (sys.stderr routing, custom TRACE level 5, sensitive data redaction) |
| - Pydantic v2 Base Models & Unified Exception Hierarchy |
| |
| Upstream Targets: |
| - Local Binner Instance (.NET 8 / Kestrel, default: http://127.0.0.1:8090) |
| - Binner Swarm Cloud Service (https://swarm.binner.io) |
+-----------------------------------------------------------------------------------+Layer Breakdown
Layer 1A: Binner Python API Interface (
binner_mcp.api):Programmatic, MCP-agnostic REST client (
BinnerAPIProxy) for local Binner instances.Composed from modular domain components (
PartsComp,ProjectsComp,PartTypesComp,DataComp,SystemComp).In-Memory Identity Cache (
PartCacheComp): Bidirectional mapping (_part_id_to_number,_part_number_to_id) that automatically resolves missing part numbers or IDs, eliminating upstream EF Core omission bugs.Dual-Token Authentication (
BaseBinnerClient): Manages JWT Bearer tokens and HttpOnly refresh cookies viaPOST /api/authentication/refresh-token, with 1-second timestamp granularity handling and automatic login fallback.
Layer 1B: Swarmer Cloud API Interface (
binner_mcp.swarmer):Dedicated REST client (
SwarmClient) for the Binner Swarm cloud service (https://swarm.binner.io).Searches and retrieves pinout diagrams, package footprints, and direct PDF datasheets.
Automatic rate-limit tracking via response headers (
x-rate-limit-limit,x-rate-limit-remaining,x-rate-limit-reset) and error classification (SwarmRateLimitError,SwarmTimeoutError).
Common Core Foundation (
binner_mcp.common):BaseHttpClient: Connection-pooled HTTP session manager guarded bythreading.RLock, ensuring thread safety for cookie jars and token rotation.logging: Stdio transport-safe logging strictly targetingsys.stderr, supporting customTRACElevel (level 5) and recursive credential/token redaction (sanitize_for_trace).
Layer 2: MCP Protocol Binding Layer (
binner_mcp.mcp):BinnerMCPServerexposes 15 tools and 5 dynamic resources using Python MCP SDK 2.Multi-transport support: Standard I/O (
stdio), modern Streamable HTTP (http), and legacy Server-Sent Events (sse).Single-thread FIFO task queue (
ThreadPoolExecutor(max_workers=1)) executing sync proxy operations sequentially to eliminate race conditions on session cookies or access tokens.Strict argument validation (
extra="forbid") and category path delimiter resolution (e.g.Passives::Resistors::SMD).
Key Capabilities
Dual Interface: Operate as a standalone Python library (
BinnerAPIProxy,SwarmClient) or as an autonomous MCP server for AI agents.Component Inventory Lifecycle: Batch creation/updates (
save_parts), deletion (delete_parts), selective field projection (fields=['quantity', 'location', 'bin_number']), and low-stock alerting.Strict Stock Adjustment Semantics: Explicit separation between absolute on-hand stock counts (
save_parts,PUT /api/part) and additive deltas (adjust_stock_delta,POST /api/part/quantity,/increment,/decrement).Hierarchical Category Management: Configurable delimiter-based category paths (default:
::, e.g.Passives::Resistors::SMD), automatic parent node provisioning, ambiguity detection with candidate suggestions, and lightweight tree inspection (depth,root_id,root_name).Maker Projects & BOM Engineering: Project registration, Bill of Materials component allocation with silkscreen reference designators (e.g.
R1, R2, C1), and optional simultaneous stock delta adjustments.Production Batch Deduction with Shortage Circuit Breaker: Automated component deduction (
consume_project_bom) for batch assemblies. If on-hand stock is insufficient for any BOM item, execution halts immediately with zero database mutations and returns a detailed shortage matrix.Swarm Cloud Component Enrichment: Live querying of
swarm.binner.iofor pinouts, package footprints, and manufacturer datasheets vialookup_cloud_parts.Pre-Flight Zero-Side-Effects Validation: In batch operations (
save_parts,manage_bom_parts), full payload validation runs before any mutation executes; an error on any item aborts the entire batch.Strict Parameter Enforcement: All MCP tools and models reject unknown arguments (
extra="forbid"), preventing hallucinated arguments or subtle typos from corrupting inventory.Deterministic Part Identity Resolution: Automatic reconciliation between numeric part IDs and alphanumeric part numbers, circumventing Binner backend query omission bugs.
Stdio Transport Safety: JSON-RPC transport stream protection via strict
sys.stderrlog routing.
Related MCP server: Relay
Installation
Prerequisites & Required Packages
Python: Version 3.10 or higher.
Binner Instance: A running local Binner server (default:
http://127.0.0.1:8090).Core Dependencies:
mcp(>=1.0.0): Official Model Context Protocol SDK providing tool, resource, and transport implementations.requests(>=2.31.0): HTTP client managing session connection pooling, cookie jars, and token refreshes.pydantic&pydantic-settings(>=2.0.0): Data validation, model definitions, and typed configuration loading.
Virtual Environment & Package Setup
Using an isolated virtual environment is recommended to manage dependencies cleanly:
# 1. Create a virtual environment
python3 -m venv .venv
# 2. Activate the virtual environment
# Linux / macOS:
source .venv/bin/activate
# Windows:
# .venv\Scripts\activate
# 3. Install package and dependencies in editable mode
pip install -e .
# Or install with optional development tools:
pip install -e ".[dev]"Agent Skill Integration (docs/SKILL.md)
The repository includes a domain skill conforming to the open Agent Skills standard in docs/SKILL.md. While MCP provides the execution layer (tools and resources), the skill equips AI assistants with procedural knowledge: the 6-step lifecycle workflow, batch schemas, parameter constraints (extra="forbid"), and the automated BOM shortage circuit breaker. It leverages progressive disclosure (indexing metadata at startup and loading instructions on demand).
1. Native Skill Clients (Antigravity, Claude Code, Cursor, Copilot)
Enables automatic discovery and progressive disclosure without manual prompt injection.
Installation (Project or Global):
# Workspace / Project install (shared with team via version control):
mkdir -p .agents/skills/binner
cp docs/SKILL.md .agents/skills/binner/SKILL.md
# Or Global / User install (available across all local workspaces):
mkdir -p ~/.gemini/config/skills/binner
cp docs/SKILL.md ~/.gemini/config/skills/binner/SKILL.mdSymlinks are also supported: ln -s "$(pwd)/docs/SKILL.md" ~/.gemini/config/skills/binner/SKILL.md.
Discovery Paths:
Google Antigravity / Gemini CLI:
Workspace:
.agents/skills/binner/SKILL.md(or.agent/skills/binner/SKILL.md)Global:
~/.gemini/config/skills/binner/SKILL.md(or~/.gemini/antigravity/skills/binner/SKILL.md)
Claude Code:
Workspace:
.claude/skills/binner/SKILL.mdGlobal:
~/.claude/skills/binner/SKILL.md
Cursor (Agent Mode):
.agents/skills/binner/SKILL.mdor.cursor/skills/binner/SKILL.mdGitHub Copilot (Agent Mode):
.agents/skills/binner/SKILL.mdor.github/skills/binner/SKILL.md
2. Instruction & Rule-Based Clients (Claude Desktop, Cursor Rules, Cline / Roo Code)
For clients without native skill discovery directories, reference docs/SKILL.md directly in configuration or rule files.
Configuration Snippet:
# Include in your client instructions / rule file:
Read and adhere to the Binner domain workflows and constraints in docs/SKILL.md
when handling electronic parts, category hierarchies, Maker projects, or BOM assembly.Configuration Paths:
Cursor: Add reference or include contents in
.cursorrulesor.cursor/rules/binner.mdc.VS Code (Cline / Roo Code): Include path or content in
.clinerules.Claude Desktop: Attach
docs/SKILL.mdto Project Knowledge or add reference in Project Custom Instructions.GitHub Copilot: Add reference to
.github/copilot-instructions.md.
Configuration
Configuration parameters are evaluated in the following order of precedence (highest to lowest):
Command-Line Arguments
Environment Variables
Configuration File (
binnermcp_config.json)Built-in Defaults
Configuration Parameters
Parameter | CLI Flag | Environment Variable | Default | Description |
| — |
|
| Base URL of local Binner instance |
| — |
|
| Username for Binner authentication |
| — |
|
| Password for Binner authentication |
|
|
|
| Logging level ( |
|
|
|
| MCP transport ( |
|
|
|
| Bind address for HTTP / SSE transport |
|
|
|
| Port for HTTP / SSE transport |
|
|
|
| Delimiter for category hierarchy paths |
|
|
|
| Optional path to write log output in addition to stderr |
|
|
|
| Delay in seconds between transient retry attempts |
|
|
|
| Max retry attempts for transient network errors |
config file |
|
|
| Explicit path to |
Configuration File Resolution (binnermcp_config.json)
If no CLI flags or environment variables are provided, values are read from binnermcp_config.json. The server searches the following paths in order:
Path passed via
--configorBINNER_MCP_CONFIGCurrent working directory:
./binnermcp_config.jsonProject root directory
User configuration directory:
~/.config/binnermcp/binnermcp_config.jsonSystem-wide configuration directory:
/etc/binnermcp/binnermcp_config.json
Example binnermcp_config.json:
{
"base_url": "http://localhost:8090",
"username": "admin",
"password": "your-password",
"log_level": "INFO",
"transport": "stdio",
"host": "127.0.0.1",
"port": 8000,
"category_delimiter": "::",
"retry_delay": 3.0,
"retry_count": 1
}MCP Server Usage
All logging routes strictly to sys.stderr to preserve JSON-RPC stream integrity.
# 1. Run with default stdio transport (local subprocess)
binner-mcp
# 2. Run over modern Streamable HTTP transport on port 8000
binner-mcp --transport http --host 127.0.0.1 --port 8000
# 3. Run over legacy Server-Sent Events (SSE) transport on port 8000
binner-mcp --transport sse --host 127.0.0.1 --port 8000
# 4. Run via Python module with explicit config and TRACE logging
python -m binner_mcp.main --config /path/to/binnermcp_config.json --log-level TRACEClient Integration
1. Stdio Clients (Gemini / Antigravity, Claude Desktop, Cursor, VS Code)
Launches the server directly as a local subprocess over stdio.
Configuration (mcpServers block):
{
"mcpServers": {
"binner": {
"command": "/path/to/venv/bin/binner-mcp",
"env": {
"BINNER_BASE_URL": "http://127.0.0.1:8090",
"BINNER_USERNAME": "admin",
"BINNER_PASSWORD": "your-password"
}
}
}
}If invoking via Python directly, set "command": "/path/to/venv/bin/python" with "args": ["-m", "binner_mcp.main"].
Configuration Paths:
Gemini / Antigravity:
~/.gemini/antigravity/mcp_config.jsonClaude Desktop:
Linux:
~/.config/Claude/claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
VS Code (Cline / Roo Code):
cline_mcp_settings.jsonCursor: Under Settings > Features > MCP, click + Add New MCP Server (
Name: binner,Type: command,Command: /path/to/venv/bin/binner-mcp).
2. Local HTTP & SSE Clients
Security Notice: Binner MCP is a local private sidecar. Never expose this server to external networks or the public internet.
For web-based or remote interfaces connecting via HTTP instead of a subprocess, run the server bound strictly to localhost (127.0.0.1):
# Modern Streamable HTTP (MCP SDK 2):
binner-mcp --transport http --host 127.0.0.1 --port 8000
# Legacy SSE:
binner-mcp --transport sse --host 127.0.0.1 --port 8000MCP API Reference
Tools Directory (15 Registered Tools)
All tools enforce strict argument checking (extra="forbid") and execute through a single-thread FIFO proxy queue.
Tool Name | Domain | Primary Parameters | Summary |
| System |
| Probe Binner connectivity, version, identity, and inventory statistics. |
| Cloud |
| Query Binner Swarm cloud for pinouts, package footprints, and datasheets. |
| Inventory |
| Paginated component search with metadata filtering and field projection. |
| Inventory |
| Batch component inspection returning details, bin locations, and datasheets. |
| Inventory |
| Batch create or update components with strict pre-flight validation. |
| Inventory |
| Batch component deletion by part number or ID. |
| Categories |
| Hierarchical category tree optimized for minimal LLM context usage. |
| Categories |
| Batch create or update category hierarchy nodes. |
| Categories |
| Batch category deletion by ID or name. |
| Projects |
| Paginated search of maker projects. |
| Projects |
| Batch maker project retrieval with optional normalized BOM breakdown. |
| Projects |
| Batch create or update maker projects. |
| Projects |
| Batch project deletion by ID or name. |
| BOM |
| Batch allocate, modify, or remove BOM line items for a project. |
| BOM |
| Deduct component stock for board unit assembly with shortage circuit breaker. |
Dynamic Resources Directory (5 Registered Resources)
Resource URI | MIME Type | Description |
|
| System health, version, auth identity, and aggregate inventory summary. |
|
| Hierarchical category tree with resolved category paths. |
|
| Filtered snapshot of components at or below low-stock thresholds. |
|
| Complete Bill of Materials item breakdown for a specified project ID. |
|
| Complete specifications and category path for a part (by ID or part number). |
Python API Quickstart
binner-mcp can also be used as a standard Python library:
from binner_mcp.api.client import BinnerAPIProxy
from binner_mcp.swarmer.client import SwarmClient
# 1. Connect to local Binner instance
client = BinnerAPIProxy(base_url="http://localhost:8090", username="admin", password="admin")
if client.ping():
client.login()
print(f"Logged in as: {client.get_identity().name}")
# 2. Query low stock parts
low_stock = client.get_low_stock(results=5)
for part in low_stock.items:
print(f"Low stock: {part.part_number} (Qty: {part.quantity}, Min: {part.low_stock_threshold})")
# 3. Add additive stock delta
client.increment_quantity(part_number="NE555P", quantity=10)
# 4. Query cloud datasheets & pinouts from Binner Swarm
swarm = SwarmClient()
result = swarm.search_parts(part_number="2N3904")
if result.is_success and result.response:
for part in result.response.parts:
print(f"Swarm part: {part.name} - {len(part.part_number_manufacturers)} manufacturers found")Development & Testing
Run tests and linting using the virtual environment:
# Run full test suite
virtenv/bin/python -m pytest tests/ -v
# Format with Black (100-char line length)
black --line-length 100 src/ tests/License
MIT License - see LICENSE.txt.
Available Tools
15 toolsconsume_project_bomC
Deduct inventory stock for assembling board units of a maker project's BOM.
Args: project_id: Numeric project ID to consume for. name: Project name to consume for. build_quantity: Number of complete board units to assemble (>= 1).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| project_id | No | ||
| build_quantity | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the core effect ('deduct inventory stock'), but for a destructive inventory mutation it omits critical traits: reversibility, behavior when stock is insufficient, atomicity/partial-failure handling, and required permissions.
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 purpose sentence is front-loaded and the args list is compact, with each line earning its place. Structure is clean, though the Args block is somewhat redundant with the schema keys.
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?
An output schema exists, so return values need not be described. However, for a destructive no-annotation mutation, the definition is thin on operational context (permissions, failure modes, whether both project_id and name are needed), leaving it only minimally complete.
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 0%, so the description must compensate, and it does document all three parameters (project_id, name, build_quantity with '>= 1'). However, it leaves the interaction between the two mutually optional identifiers (project_id vs name) unexplained, which is a meaningful gap.
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 description states a specific verb and resource: 'Deduct inventory stock for assembling board units of a maker project's BOM.' An agent can tell this mutates inventory for a project's bill of materials. It does not explicitly contrast itself with siblings like manage_bom_parts, so it earns a 4 rather than a 5.
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?
There is no guidance on when to use this tool versus alternatives such as manage_bom_parts, nor any stated prerequisites (e.g., that a BOM must already exist). The reader must infer usage entirely from the one-line purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_partsC
Batch delete parts by part number or ID.
Args: part_numbers: Part numbers to delete. part_ids: Numeric part IDs to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| part_ids | No | ||
| part_numbers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full disclosure burden. It says 'delete' but never states whether deletion is permanent, what happens to BOM references or dependent records, whether permissions are required, or what occurs if both identifier lists are omitted.
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 core action in one sentence, and the argument listing is terse. The Args block largely duplicates schema titles, which is minor waste but not bloat.
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?
An output schema exists so return values need no explanation, but this is a destructive, zero-required-parameter tool with no annotations and no coverage of cascade effects, mutual exclusivity of the two identifier inputs, or empty-input behavior. Significant behavioral gaps remain.
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 0%, so the description must compensate, but it only restates the parameter names ('Part numbers to delete', 'Numeric part IDs to delete'). It does not explain that both are optional, whether they are mutually exclusive, how they combine, or what happens with neither supplied.
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 ('Batch delete parts') and notes the two identification methods, so the operation is unambiguous. It does not differentiate from adjacent siblings such as delete_part_types or delete_projects, keeping it short of a 5.
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?
The description gives no when-to-use context, no alternatives (e.g., save_parts or manage_bom_parts), and no prerequisites. An agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_part_typesC
Batch delete part types by ID or name.
Args: part_type_ids: Numeric part type IDs to delete. names: Part type names to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | ||
| part_type_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: not that deletion is irreversible, not whether part types referenced by existing parts/BOMs can be deleted, not required permissions, and not what happens if both keys or neither key are supplied (both parameters are nullable with no required 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?
One front-loaded sentence stating verb, resource and scope, followed by a compact argument list. Nothing is padded, though the Args block largely restates schema field names rather than adding 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?
An output schema exists, so return values need not be explained, but for a destructive batch operation with zero annotation coverage the description is incomplete: no irreversibility warning, no dependency/constraint information, and no error behavior for invalid or partially matching IDs.
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 0%, so the description must compensate, and it does add brief meaning for both parameters ('Numeric part type IDs' vs 'Part type names'). However, it omits critical semantics: whether the two are mutually exclusive, whether one must be supplied, and how conflicts between a matching ID and name are resolved.
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 description gives a specific verb and resource ('Batch delete part types') plus the two lookup keys ('by ID or name'). It is clearly distinguishable from sibling delete_parts and delete_projects by resource, though it never explicitly contrasts itself with them.
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?
There is no when-to-use guidance, no statement of prerequisites, and no mention of alternatives such as delete_parts for removing part instances rather than type definitions. The agent must infer everything about selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_projectsC
Batch delete maker projects by ID or name.
Args: project_ids: Numeric project IDs to delete. names: Project names to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | ||
| project_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden for a destructive operation. It discloses only that deletion is batched; it says nothing about irreversibility, permission requirements, partial-failure behavior, or what happens when a name does not resolve to a project. For a destructive tool with zero annotation coverage this is a significant gap.
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?
Three short lines, front-loaded with the action and resource, with no filler. The 'Args:' block is boilerplate but compact and readable, so nothing wastes space.
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?
An output schema exists, so return values need no explanation. But for a destructive batch tool with no annotations, the description omits the safety-critical context an agent needs: irreversibility, whether project_ids and names are alternatives, and behavior on missing or duplicate identifiers.
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 0%, so the description must supply all parameter meaning, and it does document both params (numeric project_ids, project names). However it does not explain that both are optional with null defaults, whether at least one is required, or whether the two selectors can be combined, leaving key semantics unresolved.
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: 'Batch delete maker projects'. The 'batch' qualifier and the resource make it easy to distinguish from siblings like delete_parts or delete_part_types without opening the schema. It stops short of naming a sibling, so it is clear but not perfectly differentiated.
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?
There is no when-to-use or when-not-to-use guidance, no prerequisites, and no mention of the sibling alternatives (list_projects, get_projects, save_projects). The agent must infer that this is the deletion path for projects purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_partsC
Get component details, bin locations, category paths, and datasheets by part number or ID.
Args: part_numbers: Part numbers to fetch. part_ids: Numeric part IDs to fetch. fields: Optional list of specific fields to return (e.g. ['quantity', 'bin_number', 'location']).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| part_ids | No | ||
| part_numbers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: it does not say whether at least one of part_numbers/part_ids is required, what happens if both are supplied or neither is, whether batching is capped, or how missing parts are reported. Naming the data categories returned (bins, category paths, datasheets) is the only real added context.
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 single-sentence purpose followed by a tight Args block. The parameter restatements are mildly redundant with the schema titles, but they add the fields example and are brief enough not to be wasteful.
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?
An output schema exists, so return-value explanation is correctly omitted, and the description does name what is returned. Still, for a reader-only tool with zero annotations and zero schema descriptions, the omission of the part_numbers/part_ids requirement contract leaves a real gap an agent could trip on.
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 0% (only bare titles), so the description must compensate. It does restate each parameter and, notably, gives a concrete example for 'fields' (['quantity', 'bin_number', 'location']) that the schema lacks. However it never states the mutual-exclusion/at-least-one relationship between part_numbers and part_ids, which is the key ambiguity for a 0-required-parameter tool.
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 description states a specific verb ('Get') and resource ('component details, bin locations, category paths, and datasheets') and narrows the lookup key to part number or ID. It is clear on its own, but it never distinguishes itself from the close siblings list_parts or lookup_cloud_parts, so an agent cannot tell from the text alone which of the three to pick.
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?
There is no when-to-use or when-not-to-use guidance and no named alternative, despite three sibling tools (list_parts, lookup_cloud_parts) that plausibly overlap with this lookup. Usage is only implied by the phrase 'by part number or ID'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectsB
Batch inspect maker projects by IDs or names, with optional BOM inclusion.
Args: project_ids: Numeric project IDs to inspect. names: Project names to inspect. include_bom: Include Bill of Materials for each project.
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | ||
| include_bom | No | ||
| project_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It conveys a read-style batch fetch, but says nothing about what happens with unknown or missing IDs, whether partial failures abort the batch, whether BOM inclusion is expensive, or any permission requirements.
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?
Short and front-loaded: the summary sentence states the operation before the arg list. The Args block largely repeats the schema property names, but it is compact and wastes little space.
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?
An output schema exists, so return-value explanation is not required. Still, for a batch lookup tool with zero required parameters and no annotations, the description omits key calling details such as the IDs-or-names requirement and behavior for unresolved identifiers.
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 0%, so the description must compensate; it does gloss all three parameters (project_ids, names, include_bom) with their intent. That said, the glosses only restate the parameter titles, giving no format, cardinality, or the important constraint that at least one of project_ids/names is presumably required.
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 ('Batch inspect maker projects') plus the two lookup modes (IDs or names) and an optional enrichment (BOM). It is distinguishable from list_projects by its explicit 'by IDs or names' batch-lookup framing, though it never names that sibling.
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?
'Batch inspect ... by IDs or names' implies the usage context: direct retrieval when identifiers are already known, as opposed to enumerating. However, there is no explicit when/when-not guidance and no mention of list_projects as the alternative for browsing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_statusA
Get Binner instance health, version, user identity, and inventory summary.
Args: check_cloud: Probe Binner Swarm cloud reachability.
| Name | Required | Description | Default |
|---|---|---|---|
| check_cloud | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Get' implies a non-mutating read and the check_cloud flag is described as a reachability probe, which hints at an optional external call, but there is no disclosure of permissions, latency, or whether the cloud probe can fail independently.
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 purpose sentence followed by a one-line parameter note; nothing is padded. The 'Args:' formatting is slightly boilerplate for a single optional flag but is not wasteful.
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?
An output schema exists, so return values need not be described, yet the description helpfully lists the retrieved categories anyway. For a zero-required-param read tool this is nearly sufficient; only auth/permission expectations are absent.
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%, but the single parameter is explained in the description ('Probe Binner Swarm cloud reachability'), which adds real meaning beyond the schema's bare boolean. The default value of false is not mentioned, keeping it short of 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 and resource ('Get Binner instance health, version, user identity, and inventory summary') and enumerates exactly what the caller receives. This clearly separates it from every sibling, which deals with parts, part types, BOMs, and projects.
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?
Usage is implied rather than stated: the tool is obviously a diagnostics/health probe. There is no explicit when-to-use, no mention of prerequisites, and no routing to a sibling for related data (e.g. inventory summary vs. list_parts).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_partsB
Search and filter parts. Returns (id, part_number) unless extra fields are requested.
Args: query: Search keyword across part numbers and descriptions. part_type: Filter by category name or path. bin_number: Filter by storage bin. location: Filter by room or cabinet. package_type: Filter by footprint/package (e.g. '0805', 'SOIC-8'). manufacturer: Filter by manufacturer name. low_stock_only: Return only parts at or below threshold. fields: Extra fields to return (e.g. ['quantity', 'location', 'bin_number']). page: Page number (1-based). limit: Max results per page (1-500). sort_by: Column to sort by (default 'DateCreatedUtc'). direction: 'Ascending' or 'Descending'.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| query | No | ||
| fields | No | ||
| sort_by | No | DateCreatedUtc | |
| location | No | ||
| direction | No | Descending | |
| part_type | No | ||
| bin_number | No | ||
| manufacturer | No | ||
| package_type | No | ||
| low_stock_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the default return fields and that extra fields require the 'fields' param, but does not cover pagination behavior (despite page/limit params), permissions, rate limits, or mutation risk. An output schema exists, so return value detail is less critical, but behavioral context remains thin.
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 purpose statement followed by a compact parameter list. Each line earns its place by clarifying an otherwise undocumented parameter. Slightly list-heavy but appropriately sized for 12 params.
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?
Given 12 parameters with zero schema descriptions and no annotations, the description covers parameter semantics well but omits usage guidance, pagination behavior, and any behavioral risk context. It is minimally complete for invoking the tool but leaves gaps for an agent deciding between list_parts and get_parts.
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 0%, so the description must compensate. It does so thoroughly, defining all 12 parameters with meaning, examples (e.g., '0805', 'SOIC-8'), ranges (limit 1-500), and defaults (sort_by 'DateCreatedUtc', direction 'Ascending'/'Descending'). This is a strong param clarification effort, though 'part_type' enum values aren't listed.
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 (list/search) and resource (parts), and the return behavior '(id, part_number) unless extra fields are requested' distinguishes it from get_parts. Sibling differentiation is implicit via the broad filter set, but not explicitly contrasted with get_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?
No guidance on when to use list_parts vs get_parts or other siblings. The description implies search/filter usage but provides no when-to-use or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_part_typesA
List part types structured as a lightweight hierarchical tree focusing on IDs and names.
Args: depth: Optional maximum depth of tree recursion (e.g. 1 for top-level root categories only). root_id: Optional root category ID to scope the tree to a single subtree. root_name: Optional root category name to scope the tree to a single subtree. include_descriptions: If True, includes description per node (default False). include_part_counts: If True, includes parts count per part type (default False).
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| root_id | No | ||
| root_name | No | ||
| include_part_counts | No | ||
| include_descriptions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does disclose the return shape (lightweight tree of IDs/names, optional descriptions and part counts). It says nothing about pagination, permissions, or whether unmentioned part types are omitted, so the behavioral picture is only partially filled.
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 purpose sentence is front-loaded and the parameter list is tight with no filler. The Args block is somewhat formulaic but every entry adds 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?
An output schema exists, so explaining return values is unnecessary, and all five parameters are covered. What's missing is sibling routing and any note on permissions or result size for a potentially deep tree.
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 0%, so the description must compensate, and it does: it documents all five parameters with intent and defaults (depth as max recursion, root_id/root_name as subtree scoping, both include_* flags defaulting False). Only the interaction between depth and root scoping is left unstated.
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 ("List part types") plus a concrete shape ("lightweight hierarchical tree focusing on IDs and names"). It reads as distinct from get_parts/list_parts, but it never explicitly differentiates itself from those siblings.
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?
Usage is implied through the Args notes — e.g. "1 for top-level root categories only" and root scoping — which hints at how to narrow the tree. There is no explicit when-to-use-this-vs-list_parts guidance and no exclusions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
Search and list maker projects with pagination, keyword search, and metadata.
Args: page: Page number (1-based). limit: Max projects to return (1-500). sort_by: Column to sort by (default 'DateCreatedUtc'). direction: 'Ascending' or 'Descending'. query: Optional search keyword to filter projects by name or description.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| query | No | ||
| sort_by | No | DateCreatedUtc | |
| direction | No | Descending |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose useful behavior beyond the schema: pagination, and that the keyword search matches project name or description. However it says nothing about permissions/auth requirements, result ordering guarantees, or the fact that this is a non-mutating read — gaps that matter when no readOnlyHint is declared.
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 a single summary sentence, followed by a compact Args block. The Args list partially restates schema titles, but given the 0% schema coverage that duplication is earning its place rather than padding.
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?
An output schema exists, so return values need not be explained, and the description covers the paging/sorting/filtering surface an agent needs to call it correctly. It falls short only on auth/permission context and the enumeration of sortable columns.
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 0%, so the description must compensate, and it largely does: page is 1-based, limit is bounded 1-500, sort_by defaults to DateCreatedUtc, direction takes 'Ascending'/'Descending', and query filters by name or description. Only minor gaps remain (e.g., allowed sort_by columns beyond the default).
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 ('Search and list maker projects') plus the capabilities involved (pagination, keyword search, metadata). It is clearly separable from save_projects/delete_projects by the list verb, but it never distinguishes itself from get_projects (single-project retrieval), which a sibling-aware agent would want to know.
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?
The description implies when to use it (browsing/searching projects) through the query and pagination parameters, but gives no explicit when-to-use guidance and no exclusions or pointers to alternatives such as get_projects for a single project. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_cloud_partsB
Lookup manufacturer pinouts, package footprints, and datasheets from Binner Swarm cloud.
Args: part_numbers: Part numbers / MPNs to look up.
| Name | Required | Description | Default |
|---|---|---|---|
| part_numbers | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The word 'lookup' implies a non-destructive read, which is the main behavioral inference available, but there is no mention of network dependency, latency, caching, or what happens for unknown part numbers.
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?
One front-loaded sentence names the purpose and source; the Args block is brief. Slightly redundant restatement of the single parameter, but nothing wasteful.
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 one-parameter read tool with an output schema already documenting return values, this is close to sufficient. The main missing piece is guidance on local-vs-cloud selection against the many sibling part tools.
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 0%, so the description's 'part_numbers: Part numbers / MPNs to look up' does real work, clarifying that MPNs are acceptable and that multiple identifiers can be supplied. It stops short of specifying formats, case sensitivity, or array size limits.
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 (lookup) plus concrete resources (manufacturer pinouts, package footprints, datasheets) and a source (Binner Swarm cloud). It does not explicitly differentiate itself from siblings like get_parts or list_parts, which presumably serve the local inventory, so the agent must infer that 'cloud' is the distinguishing scope.
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?
No guidance on when to use this over get_parts/list_parts, no prerequisites, no note about behavior when a part is not found in the cloud. The agent must guess the routing between local and cloud lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_bom_partsC
Batch allocate, update, or remove BOM line items for a project.
Args: project_id: Target project ID. parts: BOM items with 'part_number'/'part_id', 'quantity', 'reference_designator', optional 'remove'.
| Name | Required | Description | Default |
|---|---|---|---|
| parts | Yes | ||
| project_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It signals that operations are batched and that 'remove' deletes a line item, but says nothing about permissions required, whether removals are reversible, or how the optional stock adjustment interacts with allocation—significant gaps for a destructive mutation 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-loaded with the purpose, followed by a compact Args block. It is appropriately sized, though the parameter list paraphrases schema content rather than adding new 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?
An output schema exists, so return values need not be explained, and the batch semantics are conveyed. Still, for an unannotated multi-operation mutation tool the description leaves gaps around permissions, reversibility, and the stock-adjustment behavior that an agent would want before calling.
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?
Top-level schema coverage is 0%, but the nested BomPartInput fields are individually documented in the schema. The description summarizes most item fields ('part_number'/'part_id', 'quantity', 'reference_designator', optional 'remove') yet omits 'notes' and 'adjust_stock_delta', so it adds only marginal value over the nested schema descriptions.
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 specific verbs (allocate, update, remove) with a clear resource (BOM line items) and scope (for a project), so an agent knows exactly what the tool mutates. It does not, however, explicitly distinguish itself from the nearby consume_project_bom sibling.
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?
The description implies batch manipulation of BOM items but gives no when-to-use guidance, no prerequisites, and no mention of alternatives such as consume_project_bom. The agent must infer which sibling to pick from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_partsB
Batch create or update parts. Each item requires 'part_number'.
Args: parts: Part records with fields (e.g. 'part_number', 'quantity', 'cost', 'bin_number', 'part_type'). 'part_type' accepts a numeric ID (e.g. 10 or '10') or a category path/name string.
| Name | Required | Description | Default |
|---|---|---|---|
| parts | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden for a mutation tool. It never states whether omitted fields are preserved or nulled on update, whether the batch is transactional or partially applied on failure, or what permissions are required. 'Batch' is the only behavioral signal given.
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 core action in the first sentence, and the Args block is short. The field examples and 'part_type' note are somewhat redundant with the nested schema, keeping it just short of maximally efficient.
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?
An output schema exists, so return values need no explanation. However, for a batch upsert with no annotations, the description should say how create vs. update is determined and how the batch behaves on partial failure; those gaps leave the agent guessing about mutation semantics.
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?
The top-level schema exposes only 'parts' with no description, but the nested PartSaveInput definition documents every field in detail, so the agent is not actually left in the dark. The description's Args block largely repeats what the nested schema already says ('part_number' required, 'part_type' accepting an ID or category path) rather than adding new meaning.
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 scope: 'Batch create or update parts'. Cleanly distinguishes from save_part_types (types, not part records) and get_parts/list_parts. It stops short of naming a sibling or the create-vs-update selection condition, so it is clear but not differentiating.
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?
Usage is only implied by the phrase 'Batch create or update', leaving the agent to infer that passing 'part_id' selects an update while omitting it creates. No guidance about when to prefer this over save_part_types, delete_parts, or manage_bom_parts, and no prerequisites or batch-size limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_part_typesC
Batch create or update part types.
Args: part_types: Part type records with 'name', optional 'description', optional 'parent_part_type_id', optional 'part_type_id'.
| Name | Required | Description | Default |
|---|---|---|---|
| part_types | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It reveals only that the operation is a batch upsert; it says nothing about what happens to existing fields not supplied, whether batch operations are atomic or partially applied on failure, or what permissions are needed. For a mutation tool with zero annotation coverage this is a substantial gap.
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 purpose sentence is front-loaded and the Args block is terse with no filler. The Args list is somewhat redundant with the nested schema descriptions, which costs a little value but the overall size is appropriate.
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 batch mutation tool with no annotations and no output-schema burden, the description omits upsert conflict semantics, batch failure behavior, and create-vs-update disambiguation. These are exactly the behaviors an agent needs before calling a batch write.
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?
Reported top-level schema description coverage is 0%, but the nested PartTypeSaveInput properties do carry their own descriptions (name, description, part_type_id, parent_part_type_id). The description's Args block largely restates those fields with 'optional' markers and adds little beyond them, so it only partially compensates for the top-level coverage gap.
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 description opens with a specific verb pair plus resource: 'Batch create or update part types.' An agent can distinguish this upsert tool from siblings like list_part_types and delete_part_types. It stops short of naming a specific alternative (e.g. save_parts), so it's clear but not sibling-differentiating.
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?
There is no guidance on when to use this versus save_parts or list_part_types, no prerequisites, and no explanation of when an update path (part_type_id) should be preferred over a create path. The 'create or update' phrasing implies upsert but leaves the selection criteria entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_projectsB
Batch create or update maker projects. Each item requires 'name' (for create) or 'project_id' (for update).
Args: projects: Project records with 'name', optional 'description', optional 'project_id', optional 'archived'.
| Name | Required | Description | Default |
|---|---|---|---|
| projects | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does disclose that operations are batched and that each item is either a create or an update, but it says nothing about partial-failure behavior, whether updates are merge/overwrite, permission requirements, or rate limits for a mutation 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?
Two short sentences plus a compact Args block, front-loaded with the core purpose. The first line and the Args section restate the name/project_id rule, a small redundancy, but nothing is bloated.
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?
An output schema exists, so return-value documentation is unnecessary, and the required-parameter structure is clear. Still, for an unannotated batch mutation the definition omits failure semantics and permission expectations that an agent needs before committing a batch write.
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?
Top-level schema description coverage is 0%, though the nested ProjectSaveInput properties do carry their own descriptions. The description compensates by naming the accepted keys ('name', 'description', 'project_id', 'archived') and the conditional requirement rule, but adds no format, range, or null-handling detail beyond what the nested schema already states.
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 ('Batch create or update maker projects') and captures the upsert nature, which distinguishes it from list_projects/get_projects/delete_projects. It does not explicitly name those siblings or clarify ordering/relationship with delete_projects, so it falls short of the 5 bar.
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?
The description implies usage through the create/update mode rule ('name' for create, 'project_id' for update), which is actionable context. However, it never says when to reach for this tool versus list_projects or delete_projects, nor does it warn about preconditions (e.g. fetching existing project_ids via get_projects first), so guidance is only implied.
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.
15 tool updates
v0.1.0- First observed
consume_project_bom - First observed
delete_part_types - First observed
delete_parts - First observed
delete_projects - First observed
get_parts - First observed
get_projects - First observed
get_system_status - First observed
list_part_types - First observed
list_parts - First observed
list_projects - First observed
lookup_cloud_parts - First observed
manage_bom_parts - First observed
save_part_types - First observed
save_parts - First observed
save_projects
TDQS
Scored across 15 tools
Most tools have clearly distinct purposes: parts, projects, part types, BOM operations, cloud lookup, and system status are largely separate concerns. The main potential confusion is between list_parts (search by keyword/filter) and get_parts (fetch by ID/number), and between manage_bom_parts and consume_project_bom, but the descriptions draw workable boundaries.
All names follow a consistent verb_noun snake_case pattern (list_parts, get_parts, save_parts, delete_parts, list_projects, save_part_types, etc.). The upsert verb 'save' is applied uniformly, and resource suffixes are consistent across the parts/projects/part_types families.
15 tools is well-scoped for a parts/inventory management server spanning parts, projects, part types, BOM, and cloud lookup. Each family (parts, projects, part types) has a coherent CRUD-style cluster with no redundant or filler tools.
Parts and projects have full list/get/save/delete coverage, and BOM plus cloud lookup round out the lifecycle. Minor gaps: part types lack a dedicated get (though list_part_types can scope a subtree), and there is no direct tool for managing bins/locations despite parts referencing them.
Maintenance
Related MCP Connectors
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Let AI agents query data and act across all your business apps via MCP.
Connect any AI agent to 1,000+ apps and 27,000+ actions through one remote MCP server (OAuth).
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server plugin for InvenTree, enabling AI assistants to interact with inventory data such as parts, stock, locations, orders, and BOMs.5MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to access a unified catalog of tools from various APIs (OpenAPI, GraphQL, MCP, Google Discovery) through the MCP protocol.173 npmMIT
- AlicenseAqualityAmaintenanceEnables AI agents to interact with the Meridian business-services platform, exposing services, service requests, workflow steps, payments, and meetings as MCP tools and resources.1636 npmMIT
- FlicenseAqualityCmaintenanceEnables AI agents to query tenants, browse catalogue items with pricing, pull recent orders, and add products through the MCP tool-calling interface.4-