Amazon FBA Ops MCP Server
Provides tools for querying Amazon Selling Partner API to retrieve orders, financial events, inventory levels, and catalog details, and to compute profitability and low-stock alerts.
Click on "Install 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., "@Amazon FBA Ops MCP ServerShow me profitability for last month by SKU"
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.
Amazon FBA Ops MCP Server
A local MCP server that lets Claude query your Amazon Selling Partner API (SP-API) account directly, for two things:
Profitability — revenue, Amazon fees, reimbursements, cost-of-goods (COGS), and net margin, grouped by SKU / order / day.
Inventory alerts — FBA stock levels and low-stock warnings based on estimated days-of-supply.
Everything this server does against SP-API is read-only (GET requests). The only writes are to a local JSON file you control (data/sku_costs.json), which stores your own product costs since Amazon has no concept of COGS.
Not built yet (future phases): Amazon Ads/PPC, keyword research, Slack notifications, scheduled/cron runs, a dashboard UI.
1. Get SP-API credentials
You need three values from Amazon: an LWA app ID, an LWA client secret, and a refresh token. No AWS IAM / AWS keys are needed — SP-API dropped that requirement in October 2023.
Seller Central → gear icon → Apps and Services → Develop Apps → Add new app client. Choose Private app (not "Publish for others") — this is for your own seller account only.
When prompted for API access/roles, select the roles that cover Orders, Finances, Inventory and Order Tracking, and Product Listing (label wording can shift in the Seller Central UI — pick whatever maps to those four areas). Amazon may take a short time to approve the role grant even for a private app.
Open the app's detail page and copy the LWA Client ID and LWA Client Secret.
Still under Develop Apps, click Authorize on your app (self-authorization — since you're authorizing against the same account that created the app, no OAuth redirect server is needed). Confirm, and copy the refresh token shown — it's shown only once; if you lose it, re-run Authorize to get a new one.
Find your marketplace (e.g. US, UK, DE, JP) — this determines both the API endpoint region and the encoded
marketplace_id.
Related MCP server: amazon-mcp
2. Configure
cp .env.example .envFill in .env:
LWA_APP_ID=...
LWA_CLIENT_SECRET=...
SP_API_REFRESH_TOKEN=...
SP_API_DEFAULT_MARKETPLACE=US # match your seller's marketplace.env is gitignored — never commit it.
3. Install
python3 -m venv .venv
.venv/bin/pip install -e .4. Sanity-check credentials before wiring into Claude
PYTHONPATH=src .venv/bin/python3 -c "
from amazon_mcp.orders_service import get_orders
from datetime import datetime, timedelta, timezone
end = datetime.now(timezone.utc)
start = end - timedelta(days=7)
print(get_orders(start.strftime('%Y-%m-%d'), end.strftime('%Y-%m-%d')))
"If this prints an orders list (even an empty one) instead of an error, your credentials work. If it errors, re-check .env against step 1 before touching the MCP server itself.
5. Set your product costs
Profitability can't be computed without knowing what each SKU costs you to make/source. Use the set_sku_cost tool from Claude once the server is registered, or seed data/sku_costs.json directly (see data/sku_costs.example.json for the shape). SKUs with no configured cost show up in missing_cogs_skus in the profitability output rather than silently being treated as free.
6. Register with Claude Code
A .mcp.json is already checked into this project root. It points at .venv/bin/python, so make sure step 3's install happened inside this directory. Claude Code will pick it up automatically when you open this project — restart Claude Code (or run /mcp to reload) if it doesn't appear right away.
To also register it in Claude Desktop, add the same entry under mcpServers in ~/Library/Application Support/Claude/claude_desktop_config.json.
7. Verify end-to-end
All of these are safe, read-only checks against your real seller account:
get_ordersover a known recent window — cross-check the count/total against Seller Central's own Orders report.get_inventory_summary()— cross-check fulfillable quantities against the FBA inventory dashboard for 2-3 known SKUs.get_catalog_item(asin)for a known ASIN — confirm title/image match the live listing.calculate_profitabilityover a short window — manually reconstruct expected profit for 1-2 orders (revenue from Seller Central, fees from the Payments view, COGS from what you entered) and compare.get_low_stock_alerts— temporarily lowerdays_of_supply_thresholdto confirm it flags a SKU you know is low.
Run the unit tests (mocked, no network) any time after changing code:
.venv/bin/pip install -e ".[dev]"
PYTHONPATH=src .venv/bin/pytestTools
Tool | Purpose |
| List orders in a date range |
| Line items for one order |
| Raw fee/refund/reimbursement events |
| Revenue/fees/COGS/net profit, grouped by |
| Current FBA inventory levels |
| SKUs at risk of stocking out |
| Product title/image/dimensions |
| Record a SKU's cost-of-goods |
| List configured SKU costs |
Known limitations
Orders and financial events have a ~48-hour lag on Amazon's side — very recent orders won't show up yet.
get_low_stock_alertsandcalculate_profitability(when grouped by SKU) derive sales velocity/units by callingget_order_itemsonce per order in the window, capped at 200 orders (velocity_sampled/truncatedflags tell you if a cap was hit). High-volume sellers will eventually want a Reports-API-based bulk pull instead — not built in this MVP.Financial-event field parsing (
finances_service.py) is based on Amazon's documented Finances v0 schema but has not yet been checked against a live response — if the shapes don't match exactly, cross-checkget_financial_events's raw output the first time you run it for real and adjust_flatten_*infinances_service.pyif needed.
Available Tools
9 toolscalculate_profitabilityA
Compute profitability (revenue, Amazon fees, reimbursements, COGS, net profit, margin %) for a date range (YYYY-MM-DD), grouped by 'sku', 'order', or 'day'. Requires SKU costs to be set via set_sku_cost for accurate COGS -- SKUs missing a cost are flagged in 'missing_cogs_skus' rather than silently treated as zero-cost.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| group_by | No | sku | |
| start_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It discloses that SKUs missing costs are flagged in 'missing_cogs_skus' rather than silently treated as zero-cost, which is important behavioral context. It could mention date range inclusivity or grouping semantics, but the key edge-case behavior is covered.
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 sentences, front-loaded with the core operation and metrics, then adding a critical prerequisite and edge-case behavior. Every sentence earns its place with no redundancy or 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?
Given the presence of an output schema, the description covers purpose, metrics, grouping, date format, prerequisite tool, and missing-cost behavior. This is complete enough for an agent to select and invoke the tool correctly without additional context.
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 compensates by specifying the date format (YYYY-MM-DD) and the valid group_by values ('sku', 'order', 'day'). It does not clarify requiredness or default values, but those are available in the schema itself.
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?
Description clearly states a specific verb ('Compute') and resource ('profitability'), and lists the metrics computed (revenue, Amazon fees, reimbursements, COGS, net profit, margin %), date range, and grouping options. This distinguishes it from sibling data-retrieval tools like get_orders or get_financial_events.
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 provides clear context by stating that SKU costs must be set via set_sku_cost, explicitly naming the prerequisite tool. It does not offer explicit when-not-to-use guidance or compare against alternatives like get_financial_events, but it gives enough context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_catalog_itemA
Get a product's title, brand, image, and dimensions from the Amazon catalog by ASIN.
| Name | Required | Description | Default |
|---|---|---|---|
| asin | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 of behavioral disclosure. It only lists the fields returned (title, brand, image, dimensions) but does not mention whether the operation is read-only, potential errors (e.g., invalid ASIN), or any side effects. For a simple lookup tool, this is minimal but insufficient given the lack of annotation support.
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 description is a single sentence that front-loads the action and resource. It is concise, contains no redundant information, and effectively communicates the tool's purpose without unnecessary 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?
Given the tool's simplicity (one parameter) and the existence of an output schema, the description provides sufficient context for basic usage. It does not explain return structure, but that is covered by the output schema. The description lacks any mention of prerequisites or edge cases, but for a straightforward catalog lookup, this is acceptable.
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 schema has one required parameter 'asin' with zero description coverage. The description mentions 'by ASIN,' which adds context that the parameter is the Amazon Standard Identification Number, but it does not provide format details, examples, or validation rules. The description partially compensates for the low schema coverage but could be more explicit.
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 clearly states the tool's function: retrieving a product's title, brand, image, and dimensions from the Amazon catalog by ASIN. It uses a specific verb ('Get') and resource ('product... from the Amazon catalog'), distinguishing it from sibling tools that focus on costs, orders, and inventory.
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 provides clear context on when to use the tool: when you need catalog product details by ASIN. It does not list alternatives or exclusions, but the sibling tools are clearly in different domains, so the intended usage is unambiguous. No explicit when-not-to-use is given, but the description's clarity makes this a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financial_eventsA
List Amazon financial events (fees, refunds, reimbursements) posted in a date range (YYYY-MM-DD).
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| start_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must convey behavior. It states the tool lists events 'posted in a date range,' implying a read-only operation and a filtering constraint, but it does not disclose details like pagination, permissions, or response structure (which is covered by the output schema). It adds some context by specifying the date format.
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 description is a single concise sentence that front-loads the core action and resource. Every word adds value, and there is no redundant information or 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?
Given the low complexity (two simple string parameters) and the presence of an output schema, this description is quite complete: it identifies the action, the resource, the event categories, and the date-range input. It could be slightly more explicit about when to prefer it over sibling tools, but overall it provides sufficient context for an agent to use it 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 0%, so the description must compensate. It mentions the date range and format (YYYY-MM-DD), which aligns with start_date and end_date, but it does not explicitly map each parameter to its role or state constraints like start_date must precede end_date. It provides partial semantic support.
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 clearly states the tool lists Amazon financial events (fees, refunds, reimbursements) within a date range, using the specific verb 'List' and a well-defined resource. It distinguishes from sibling tools like get_orders and list_sku_costs by focusing on financial events, making the purpose unambiguous.
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 the tool is for retrieving financial events within a date range, but it does not explicitly state when to use it over alternatives or mention exclusions like 'use get_orders for order details.' The context provides some guidance, but it lacks explicit usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inventory_summaryA
Get current FBA inventory levels (fulfillable, inbound, reserved, unfulfillable quantities), optionally filtered to one SKU.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It discloses the data categories and optional filtering, but does not mention any potential caveats such as data freshness, pagination, or scope limitations. For a read-only tool, this is adequate but not rich.
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 entire description is one clause-rich sentence that front-loads the action and resource, with no redundant words.
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 the tool has an output schema and only one optional parameter, the description covers the core functionality. It doesn't address potential error scenarios or required permissions, but those are reasonably outside scope.
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 schema only lists 'sku' with no description, and the description adds meaning by explaining it as an optional filter to a single SKU. This compensates for the 0% schema description coverage, though it could offer format or default behavior details.
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 uses a specific verb 'Get' and identifies the resource 'current FBA inventory levels', listing the quantity types (fulfillable, inbound, reserved, unfulfillable). This clearly distinguishes it from sibling tools focused on costs, orders, or profitability.
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 clearly implies the tool is for inventory level queries, and mentions optional SKU filtering. However, it does not explicitly name alternatives or exclusion scenarios, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_low_stock_alertsA
Flag SKUs at risk of stocking out soon, estimating days-of-supply from current fulfillable inventory and recent sales velocity (units sold over lookback_days).
| Name | Required | Description | Default |
|---|---|---|---|
| lookback_days | No | ||
| days_of_supply_threshold | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses that the tool estimates days-of-supply using fulfillable inventory and sales velocity, implying a read-only analytical operation. However, it does not explicitly state there are no mutations or discuss data freshness or authentication, but the context is sufficient for a simple analytical 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?
The description is a single, information-dense sentence that front-loads the main purpose. It avoids fluff and clearly states the computation without being verbose.
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?
The tool is relatively simple with two optional parameters and an output schema. The description covers the core logic, and the output format is presumably handled by the schema. However, it lacks a brief note on use cases or what the response contains, but that is not critical given the presence of an output schema. The ambiguity around the threshold is a minor 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 description coverage is 0%, so the description must explain the parameters. It explicitly mentions 'lookback_days' as the period for sales velocity, but the role of 'days_of_supply_threshold' is only implied by the 'at risk' phrase. The parameter names are self-explanatory to some extent, but the description doesn't fully clarify the threshold logic.
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 clearly identifies the tool's function as flagging SKUs at risk of stockout, with a specific calculation method (days-of-supply from inventory and sales velocity). This distinguishes it from sibling tools that handle costs, orders, profitability, and inventory summary.
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 explains what the tool does but does not explicitly state when to use it over alternatives like get_inventory_summary. The use case is implied by the 'at risk' framing, but there is no direct comparison or exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_itemsA
List the SKU/quantity/price line items for one Amazon order.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of behavioral disclosure. It accurately indicates a read-only list operation, but does not mention error behavior, order existence assumptions, or any side effects. The verb 'List' implies safety, but no explicit statement is made.
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 description is a single, concise sentence of 10 words. It is front-loaded with the verb and object, contains no filler, and every word contributes to understanding the tool's purpose.
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 the tool's simplicity, one parameter, and the presence of an output schema, the description sufficiently covers what the tool does. It does not explain error cases or pagination, but the output schema likely documents the return structure. The description is complete enough for correct selection and invocation.
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 schema only defines order_id as a string with no description. The tool description adds meaning by stating 'for one Amazon order', clarifying that order_id refers to an Amazon order identifier and that the scope is a single order. This compensates for 0% schema coverage.
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 uses a specific verb ('List') and identifies the exact resource ('SKU/quantity/price line items for one Amazon order'). This clearly distinguishes it from sibling tools like get_orders, which likely returns order headers rather than line items.
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 phrase 'for one Amazon order' provides clear context that this tool is for retrieving line items when a specific order is already identified. However, it does not explicitly name alternatives or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ordersA
List Amazon orders created in a date range (YYYY-MM-DD). Optionally filter by order status (e.g. Shipped, Unshipped, Canceled).
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| start_date | Yes | ||
| order_status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the core listing behavior and filters, but does not mention pagination, ordering, default status handling, or any access requirements. It is minimally transparent for a simple read 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?
The description is two sentences, front-loaded with the main action and resource. Every word adds value, with no filler or repetition.
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?
The tool is simple with an output schema present, so return values are documented elsewhere. The description covers the main inputs and purpose, though it omits edge-case behavior like invalid date ranges or default status handling. Adequately complete for a listing tool.
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 compensates by giving the date format (YYYY-MM-DD) and examples of order statuses (Shipped, Unshipped, Canceled). It covers all three parameters, adding meaning beyond the bare 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?
The description clearly states a specific action ('List') on a specific resource ('Amazon orders') with a defined scope (date range and optional status filter). This distinguishes it from siblings like get_order_items and get_financial_events, which focus on different resources.
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 for listing orders within a date range and optionally filtering by status, but it does not explicitly mention alternatives or when not to use this tool. The context is present but not compared with get_order_items or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sku_costsA
List all SKU costs currently configured for profitability calculations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. The verb 'List' strongly implies a read-only operation, and the scope 'currently configured' adds context, but it does not explicitly state safety, pagination, ordering, or auth requirements. It is adequate for a simple, low-risk list 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?
The description is a single, front-loaded sentence that directly states the tool's purpose. Every word contributes; no waste or 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?
Given the tool has no parameters and an output schema exists, the description adequately covers the core purpose and scope. It could mention ordering or pagination behavior, but for a simple 'list all' tool, the current description is sufficiently 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?
The tool has zero parameters, so the baseline is 4. There is nothing further to explain, and the description does not need to add parameter details. The schema coverage is trivially complete.
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 clearly states the tool lists all SKU costs for profitability calculations, using a specific verb and resource. It is distinct from siblings like set_sku_cost, but does not explicitly name alternatives or exclusion conditions.
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 use when needing to view all configured SKU costs, but it does not provide explicit when-to-use/when-not-to-use guidance or mention alternative tools. The context is clear but no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_sku_costA
Record the cost-of-goods (COGS) for a SKU, used by calculate_profitability_tool. Amazon has no concept of product cost, so this must be maintained manually.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | Yes | ||
| cost | Yes | ||
| effective_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 of disclosing behavior. It only explains why the tool exists, not what happens on invocation—whether costs are overwritten, how effective_date alters records, idempotency, or failure modes. This is a significant gap 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?
The description is two concise sentences, front-loaded with the core action. It adds useful rationale without superfluous words, earning its place.
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?
As a write operation with no annotations, minimal parameter documentation, and no behavioral detail, the description leaves critical gaps around record overwrites, effective-date semantics, and edge cases. The output schema may cover return values, but operational context remains underspecified.
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 schema has 0% description coverage for its three parameters. The description adds no clarification for sku, cost, or effective_date beyond 'SKU' and 'COGS'. In particular, effective_date is completely unexplained, leaving agents to guess its purpose and format. The description does not compensate for the missing schema documentation.
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 clearly states the tool records COGS for a SKU, using a specific verb and resource. It also distinguishes itself from the read-oriented sibling tools by explaining this is the manual maintenance mechanism for profitability calculations.
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 provides clear context for when to use the tool (because Amazon lacks product cost, it must be maintained manually) and mentions its role in calculate_profitability. However, it does not explicitly name alternatives like list_sku_costs or state when not to use it.
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.
9 tool updates
v0.1.0- First observed
calculate_profitability - First observed
get_catalog_item - First observed
get_financial_events - First observed
get_inventory_summary - First observed
get_low_stock_alerts - First observed
get_order_items - First observed
get_orders - First observed
list_sku_costs - First observed
set_sku_cost
TDQS
Scored across 9 tools
Each tool targets a distinct domain aspect (costs, orders, order items, financial events, profitability, inventory, low stock, catalog). No two tools serve the same purpose; even similarly named tools like get_orders and get_order_items are clearly differentiated in their descriptions.
All tools use snake_case, but the verb prefix is inconsistent: list_sku_costs uses 'list' while get_orders, get_order_items, get_financial_events, and get_low_stock_alerts all use 'get' for list-returning operations. This violates the common convention that 'get' fetches a single item and 'list' fetches multiple, which could mislead an agent.
With 9 tools, the server is well-scoped for Amazon FBA operations. Each tool covers a necessary capability without redundancy, and the count falls comfortably within the ideal 3-15 range.
The surface covers the core FBA operations: order retrieval, financials, inventory levels, low stock alerts, catalog lookup, and profitability calculation. Minor gaps include lack of a delete operation for SKU costs and no tool to fetch a single order's full header details, but these are not critical.
Maintenance
Related MCP Connectors
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Connects Amazon Seller Central and Amazon Advertising to any MCP client. Settlement-accurate P&L - every fee, refund and reimbursement as Amazon posted it - plus contribution margin and breakeven per product, per marketplace, per day. Full Sponsored Products, Brands and Display management: search terms, placements, keyword and competitor research, dayparting, automation rules. 107 tools: 72 read-only, 29 that stage a reviewable diff for your approval, and 6 confirmation/support actions. Write tools stage a reviewable diff; applying it takes a separate confirmation.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceHosted Amazon Seller Central & Vendor Central MCP server. Connect Claude, ChatGPT, Cursor, Codex, Gemini, and GitHub Copilot to live Amazon SP-API and Amazon Ads API data.14MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for Amazon Selling Partner API and Advertising API, enabling access to orders, inventory, pricing, ads, and reports via natural language.1MIT
- AlicenseNot gradedqualityCmaintenanceA lightweight, local inventory-intelligence MCP server that enables querying structured inventory schemas with read-only, zero-config tools for stock levels, velocity metrics, and purchase orders.7MIT
- FlicenseNot gradedqualityCmaintenanceA read-only MCP server for querying product inventory, providing tools to retrieve product details and stock quantities.-