pricing-mcp
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., "@pricing-mcpCan we raise the 12 oz ground coffee to $10.49? Check guardrails and margin."
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.
pricing-mcp
An MCP server that gives AI agents real pricing analytics (elasticity, price simulation, guardrails, price-ladder and competitor checks), plus an eval suite that checks whether an agent using those tools actually gets the right answer.
Built around a packaged-coffee category, because that's where I spent years doing pricing at Starbucks and Nestlé. All data is synthetic.
Why this exists
Giving an agent pricing tools is easy. Knowing whether it uses them correctly is the hard part. An agent that says "raise the price to $10.49, margin looks fine" when the margin rule says otherwise is worse than no agent. So this project is built backwards from the evals:
The data is generated from known answers. Each SKU's true price elasticity is set in the generator, and a few pricing problems are planted on purpose. The tools are tested against that ground truth, not against themselves.
Agents are graded on behavior, not vibes. Did it call the right tool? Did it report a blocked price as blocked? Does every number in its answer actually appear in a tool result?
The tools are built for agents. Every result carries its inputs, assumptions and confidence. Errors list what's valid. Every tool is read-only, and every call writes a structured audit log line.
Related MCP server: Kryve Agent Evaluation MCP
Tools
Tool | What it answers |
| Which SKUs exist, with tier, pack size, price, cost, and the pricing policy |
| How sensitive is this SKU to price? Log-log regression over 52 weeks with seasonal controls, a 95% interval, and a confidence label |
| What happens to weekly units, revenue and margin at a new price, and what does that projection assume |
| Is a proposed price allowed? Hard rules (margin floor, ±15% per move) block; the competitor band warns |
| Do bigger packs cost less per ounce, and are tiers spaced value < core < premium by at least 10%? |
| Where each SKU sits against the median competitor and its tier's target band |
Quick start
pip install -e ".[dev,evals]"
pytest # unit tests + tool evals
python -m evals.tool_evals # tool evals with a readable report
pricing-mcp # run the server over stdio
pricing-mcp --http --port 8000 # or over streamable HTTPUse it from Claude Code
claude mcp add pricing -- pricing-mcpThen ask: "Are there any problems with our ground coffee price ladder?"
Use it from Claude Desktop or another MCP client
{
"mcpServers": {
"pricing": { "command": "pricing-mcp" }
}
}Evals
There are two layers.
1. Tool evals (deterministic, run in CI)
python -m evals.tool_evals checks the analytics against the generator's ground truth:
Suite | Checks | Result |
Elasticity | Each SKU's estimate is within 0.30 of the true value and the true value falls in the 95% interval | 14 / 14 |
Price ladder | Finds exactly the two planted breaks, with no false alarms | 1 / 1 |
Competitor index | Flags exactly the two planted out-of-band SKUs | 3 / 3 |
Guardrails | Correct verdict and the exact rules that failed, across pass / warn / block cases | 7 / 7 |
Simulation | Revenue moves in the direction elasticity implies (elastic SKUs lose revenue on a price rise; inelastic ones gain) | 14 / 14 |
39 / 39 passing. Largest elasticity error is 0.24 (true −2.6, estimated −2.84).
2. Agent evals (needs an API key)
python -m evals.agent_evals runs Claude against the server's tools on ten scenarios in evals/agent_cases.yaml and grades each transcript:
Tools used: did it call the tool the question needs?
Verdict: when the guardrail tool says
block, does the answer say so instead of approving the price?Grounding: every dollar figure, percentage and decimal in the answer must appear in a tool output or the question, or be the result of a calculation the agent wrote out. The grader re-does that arithmetic and checks that its inputs came from tools. Invented numbers, and derived numbers with no work shown, fail the case.
Must not say: no claiming to have changed data through read-only tools, no inventing an elasticity for a SKU that doesn't exist.
Multi-step: asked to fix the ground-coffee ladder, the agent has to find a price for the 32 oz that is cheaper per ounce than the 24 oz but still inside the competitor band, and prove it by getting a
passfrom the guardrail tool.
export ANTHROPIC_API_KEY=...
python -m evals.agent_evals # all cases
python -m evals.agent_evals --repeat 5 # measure consistency
python -m evals.agent_evals --case fix-ladder-multistep
PRICING_EVAL_MODEL=claude-haiku-5-5 python -m evals.agent_evals # compare modelsEach run writes a JSON report with full transcripts, pass rate, tool-call count and token usage to evals/results/. The held-out run below is saved in evals/reports/ so you can read every transcript. The graders have their own tests in tests/test_grading.py.
Results: Claude Sonnet 5.5, October 2026
Held-out run: 10 cases × 3 attempts, graded by a grader frozen before the run.
Result | |
Cases passed | 27 / 30 (90%) |
Behavior checks (right tool, right verdict, no approving a blocked price, no claimed writes, no invented estimates) | 72 / 72 |
Number grounding | 27 / 30 |
Tool calls | 100 (about 3.3 per question) |
Tokens | 187k in, 28k out |
The three misses were all grounding: a "26% below competitors" with no calculation shown, an example price ($5.49) offered unprompted, and a correct calculation written too far from its result for the grader to connect.
What the first live run taught me
The first run scored 11 / 30, and reading the transcripts showed most failures were the eval's fault, not the agent's:
The grader graded the wrong call. Asked about $4.99, the agent correctly reported it blocked, then helpfully tested $5.10 too. The grader checked the last guardrail call instead of the one for the price asked about.
Correct arithmetic looked like hallucination. The agent computed things like the price needed to hit the margin floor ($5.90 ÷ (1 − 0.52) = $12.29) and flagged them as its own math. A strict "must appear in tool output" rule failed them. Loosening the rule would have let real inventions through, so instead the agent is asked to show its work, and the grader re-checks it.
Phrase checks were too literal. "Isn't a known SKU" failed a check for the word "not", and "getting $10.49 approved would need a policy exception" tripped a check for "approved".
After fixing those, the same transcripts re-graded at 19 / 30. The remaining failures were genuine: derived numbers with no work shown. A prompt change to show calculations, plus parser fixes for the ways the agent actually writes math, brought a fresh held-out run to 27 / 30. The lesson: when an eval score is low, read the transcripts before you touch the prompt.
Design notes
Deterministic code for the math, the model for judgment. The agent decides which question to ask and how to explain the answer; it never does the regression or the policy check itself.
Hard versus soft rules. Margin and change-size limits block a price; competitor position only warns. That mirrors how most pricing teams actually run approvals.
Results explain themselves. Simulations list their assumptions and the observed price range they're reliable within. Elasticity comes with an interval and a confidence label, so an agent can say "medium confidence" instead of overstating.
Safe by construction. No tool writes anything. Every tool carries MCP read-only annotations, and the audit log records each call's tool, arguments, status and latency.
Data
scripts/generate_data.py writes 14 SKUs across whole bean, ground and cold brew in value, core and premium tiers, with 52 weeks of sales, three competitors' prices, and a pricing policy. Weekly units follow each SKU's true elasticity with seasonality (hot coffee peaks in winter, cold brew in summer) and noise. Planted problems:
Ground 32 oz costs more per ounce than ground 24 oz.
Premium ground 12 oz is priced below core ground 12 oz, and below its own margin floor.
Premium whole bean 12 oz sits well above competitors; value ground 12 oz sits well below.
Point the server at your own data with PRICING_MCP_DATA=/path/to/dir using the same four files.
Layout
src/pricing_mcp/
analytics.py pure pricing functions
server.py MCP server and tool definitions
data.py dataset loader
data/ synthetic dataset
evals/
tool_evals.py deterministic checks against ground truth
agent_evals.py model-in-the-loop harness
agent_cases.yaml scenarios and expectations
grading.py graders
ground_truth.json answers from the generator (never read by the server)
scripts/generate_data.py
tests/License
MIT
Available Tools
6 toolscheck_price_guardrailsARead-onlyIdempotent
Check a proposed price against the pricing policy.
Hard rules (minimum margin, maximum change per move) produce "block". The soft rule (competitor price index band) produces "warn". Otherwise "pass".
| Name | Required | Description | Default |
|---|---|---|---|
| sku | Yes | ||
| proposed_price | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral detail by explaining that hard rules produce 'block', the soft rule produces 'warn', and otherwise 'pass'. Annotations already confirm this is a read-only, idempotent check, so the description adds outcome semantics rather than repeating safety metadata. It does not describe error behavior or policy-source details, but it is solid for a read-only guardrail check.
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 short, front-loaded with the core action, and immediately explains the possible outcomes. Every sentence contributes directly to understanding the tool.
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 has an output schema, so return values do not need full explanation. However, with 0% input schema description coverage, the description leaves gaps in parameter semantics and does not distinguish this check from closely related sibling 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 must compensate for the two undocumented parameters. It mentions the proposed price conceptually but does not explain SKU format, price currency, units, or expected value ranges, leaving parameter semantics largely to inference.
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 and resource: checking a proposed price against the pricing policy. It clearly explains the tool's core function, but it does not explicitly distinguish it from similar siblings such as check_price_ladder or simulate_price_change.
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 by the name and description: use this to evaluate a proposed price before making a price change. However, there is no explicit guidance on when to use it versus simulate_price_change or check_price_ladder, nor are prerequisites or exclusions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_price_ladderARead-onlyIdempotent
Find price-ladder breaks in a category.
Flags bigger packs that cost more per ounce, and higher tiers priced too close to or below lower tiers.
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only, idempotent, closed-world profile, so the bar is lower. The description still adds real behavioral value by naming the two anomaly conditions it flags, which tells the agent what the output represents beyond a generic 'check'.
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, zero filler, with the core action front-loaded and the detection criteria following as supporting 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-value explanation is unnecessary, and the description covers the detection logic well. The remaining gap is the ambiguous category parameter, which is a minor but real omission for a one-parameter 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?
Only one parameter and schema description coverage is 0%, so the description must carry the burden. It says the check runs 'in a category' but gives no indication of the expected format (name vs. ID, taxonomy level), leaving the sole parameter under-specified.
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 ('Find') and resource ('price-ladder breaks') and then defines the detection rules concretely (bigger packs cost more per ounce, higher tiers priced at or below lower tiers). It is clearly distinguishable from siblings like check_price_guardrails or get_price_elasticity, though it never names an alternative explicitly.
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: it's an analysis/audit tool scoped to a single category. There is no explicit statement of when to reach for this versus check_price_guardrails or simulate_price_change, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
competitor_price_indexBRead-onlyIdempotent
Compare each SKU's price with the median competitor price, against its tier's target band.
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=false, so the safety profile is covered. The description adds that this is an aggregate per-SKU comparison producing an indexed score versus a target band, but it says nothing about how SKUs outside a band are treated or what the computation needs to run.
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?
A single front-loaded sentence with no filler; the comparison logic and the target-band criterion both earn their place. It is arguably too terse for a tool whose only parameter is undocumented, but there is no structural waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and read-only annotations, return values and safety need no explanation. However, the required `category` argument and the scope of 'each SKU' (all products in that category?) are left unstated, leaving the agent under-informed before 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?
Schema description coverage is 0% and the single required parameter `category` is never mentioned in the description. The agent must guess whether it is a product category, a filter scope, or an enum-like value, so the description does not compensate for the schema 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 names a specific verb (compare) and a precise comparison basis: each SKU's price vs. the median competitor price, evaluated against its tier's target band. That is enough to distinguish it from siblings like check_price_ladder or check_price_guardrails, though it never states the scope the required `category` argument implies.
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 explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as check_price_ladder or get_price_elasticity. The phrase 'against its tier's target band' hints at context but leaves the agent to infer when this analysis is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_elasticityARead-onlyIdempotent
Estimate how sensitive a SKU's unit sales are to price, from 52 weeks of sales.
Returns the elasticity, a 95% confidence interval, R², and a confidence label.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world behavior; the description adds the meaningful trait that the estimate is derived from a 52-week historical window and that it is a statistical output with a confidence interval and confidence label. It does not say what happens when a SKU has insufficient history, which is the main remaining behavioral 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?
Two sentences, purpose front-loaded, nothing redundant. The second sentence on returns is arguably covered by the output schema, but it is short and useful.
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 single-parameter read-only tool with an output schema, the description covers what is computed, the data window, and the shape of the result. It stops short of stating data-sufficiency requirements or SKU-level scope, which matters for a statistical estimator.
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?
Only one parameter exists and schema description coverage is 0%, so the description must carry the burden. It implies the input is a SKU ('a SKU's unit sales') but adds no format, identifier convention, or granularity (per channel? per region?) beyond the property name 'sku'.
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 (estimate) and resource (price elasticity / sensitivity of unit sales to price) with the data basis (52 weeks of sales). It is distinguishable from siblings like simulate_price_change by framing itself as an estimation from historical data rather than a forward simulation, though it never names or contrasts those siblings explicitly.
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: the 'from 52 weeks of sales' framing suggests this is the historical-measurement tool and not the what-if tool, but there is no explicit when-to-use, when-not-to-use, or reference to simulate_price_change / check_price_guardrails as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_productsARead-onlyIdempotent
List SKUs with tier, pack size, current price and unit cost, plus the pricing policy.
category: optional filter, one of whole_bean, ground, cold_brew.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful content-level disclosure (that a pricing policy accompanies the SKU rows), but says nothing about ordering, completeness, pagination, or whether the category filter is an exact match.
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 lines, front-loaded with the primary purpose before the parameter note; every clause carries information. Minor waste from the trailing line break and the slightly list-like formatting.
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?
A read-only, single-parameter listing tool with an output schema that already documents the return shape. The description covers purpose, return contents, and the one parameter's allowed values, so an agent has everything needed to call 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% and the schema declares category as an unconstrained anyOf string/null with no enum, so the description is the sole source of the allowed values whole_bean, ground, cold_brew, and confirms it is optional. It does not state case sensitivity or the behavior when omitted (list all), keeping it off 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 ('List') and resource ('SKUs') and enumerates the returned fields (tier, pack size, price, unit cost, pricing policy), so the agent knows exactly what comes back. It does not explicitly contrast with siblings like get_price_elasticity or competitor_price_index, but the resource-level purpose is distinct enough to disambiguate.
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 contains no when-to-use guidance, no prerequisites, and no exclusions relative to the sibling pricing tools. The only context given is that the category parameter is an optional filter, which is parameter semantics rather than usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_price_changeARead-onlyIdempotent
Project weekly units, revenue and gross margin if a SKU moves to new_price.
Uses the SKU's estimated elasticity. Read the returned assumptions before relying on it.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | Yes | ||
| new_price | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world), and the description goes beyond them by disclosing the mechanism ('uses the SKU's estimated elasticity') and warning that the output is model-based and carries assumptions worth reading. That is genuine behavioral context: the numbers are projections, not measurements. It does not mention precision, edge cases (missing elasticity for a SKU), or failure modes.
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 what is computed, followed by the mechanism and the caveat. Nothing is redundant and every sentence carries information an agent would otherwise have to guess.
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 presence of an output schema means return values need not be described, and the description covers inputs, mechanism, and the caveat about assumptions. The remaining gap is units/currency for new_price, which matters for a pricing tool and is documented nowhere.
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% – both parameters carry only bare titles. The description clarifies what new_price means (the price the SKU 'moves to', i.e., a target price, not a delta or percentage) and that the sku drives an elasticity lookup. It does not state currency/units for new_price or expected SKU format, so it only partially compensates for the 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 verb 'Project' plus the concrete outputs (weekly units, revenue, gross margin) and the trigger condition (a SKU moving to new_price) make the tool's function unmistakable and clearly different in kind from siblings like get_price_elasticity or check_price_guardrails. It stops short of naming a sibling to route away from, so it is clear but not fully differentiated in text.
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: the word 'Project' signals a what-if simulation, so an agent can infer this is a pre-change evaluation rather than a data lookup. There is no explicit statement of when to use this instead of get_price_elasticity (the input side) or check_price_guardrails (the validation side), and no stated prerequisites.
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.
6 tool updates
v0.1.0- First observed
check_price_guardrails - First observed
check_price_ladder - First observed
competitor_price_index - First observed
get_price_elasticity - First observed
list_products - First observed
simulate_price_change
TDQS
Scored across 6 tools
Each tool occupies a distinct analytical niche: elasticity estimation, simulation, policy guardrails, internal ladder checks, and competitor benchmarking. The three 'check/compare' tools could look similar at a glance (guardrails vs ladder vs competitor index), but their descriptions clearly separate hard policy rules, internal consistency, and external market position.
Five of six tools follow a clean verb_noun pattern (list_products, get_price_elasticity, simulate_price_change, check_price_guardrails, check_price_ladder). The lone outlier, competitor_price_index, is a noun-only name but is still readable and unambiguous.
Six tools is well-scoped for a pricing decision-support server, with each tool covering a distinct step in the analyze-simulate-validate workflow. No filler or redundant tools.
The read/analyze/simulate/validate lifecycle is covered, including guardrails and ladder checks that agents would otherwise have to invent. The notable gap is the absence of any write or apply operation (e.g. commit a price change or record a decision), so the workflow ends at advice.
Maintenance
Related MCP Connectors
See, price, and control every tool call your AI agents make: policy checks, cost, and audit tools.
Paid deterministic data-quality and execution-verification tools for AI agents.
Public web tools for agents: product extraction, claim checks, webpage QA and ranked audits.
Create and run AI evaluations, record traces, and inspect results with scoped organization access.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to access observability and evaluation data, including run history, span traces, LLM-as-judge evaluation results, and regression reports.MIT
- AlicenseAqualityAmaintenanceProvides read-only tools to generate test plans for AI agents, score agent runs, and produce reusable evaluation scorecards.3MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to query BigQuery ecommerce datasets like TheLook via guarded, read-only SQL tools (dry_run_sql and execute_sql), with benchmarked performance over wiki-style documentation lookup.MIT
- FlicenseNot gradedqualityCmaintenanceEnables natural-language supply-chain analysis over synthetic datasets through governed SQL/Python tools, providing supplier scorecards, forecast accuracy, risk detection, landed-cost comparisons, capacity planning, and quality trend insights without the LLM performing quantitative calculations.-