PyMC Marketing 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., "@PyMC Marketing MCPfit an MMM to my data and analyze channel contributions"
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.
PyMC Marketing MCP
Decision-safe Bayesian marketing science for MCP-compatible agents
LLMs can explain marketing data. They should not invent marketing science
PyMC Marketing MCP gives AI agents a controlled interface to PyMC-Marketing for Marketing Mix Modeling, Bayesian decision support, experimentation, budget allocation, customer lifetime value, and durable analytical workflows
The design boundary is deliberate
the agent frames the business question, chooses an allowed operation, and explains the evidence
PyMC-Marketing, PyMC, and ArviZ compute model-dependent quantities
this project owns validation, persistence, authorization, diagnostic policy, decision gates, provenance, jobs, and MCP contracts
decision-grade actions stop when the statistical evidence is not strong enough
This is not a thin tool wrapper around a probabilistic library, and it is not an autonomous media-buying agent
What you can do today
The current public registry contains 39 MCP capabilities: 25 stable, 12 experimental, and 2 deprecated
The generated source of truth is docs/CAPABILITIES.md. Capability maturity is evidence-backed, so an exposed tool is not automatically considered stable
Area | What the MCP can do | Representative capabilities |
Dataset readiness | Register, inspect, fingerprint, and validate modeling data |
|
MMM | Fit models, inspect status, compare models, calibrate with lift tests, and evaluate sensitivity |
|
Diagnostics | Run the mandatory statistical decision gate |
|
Measurement | Cross-validate models and suggest evidence-gathering work |
|
Decision science | Contributions, incremental ROAS, scenarios, budget allocation, and weekly flighting |
|
CLV | Purchase, churn, monetary-value, and lifetime-value modeling |
|
Visual evidence | Produce posterior plot artifacts |
|
Durable work | Submit, inspect, list, cancel, and execute background jobs |
|
Provenance | Inspect datasets, models, diagnostics, plots, CLV records, and model lineage through MCP resources |
|
Some capabilities above are still experimental. Check the generated inventory before treating a capability as verified behavior
Related MCP server: simba-mcp
Why this project exists
A useful marketing agent needs more than access to a model
It needs a boundary between reasoning about marketing and claiming a statistically supported decision
Business question
|
v
AI agent
|
v
MCP tool or resource
|
v
validation + authentication + tenant authorization
|
v
application service
|
v
PyMC-Marketing / PyMC / ArviZ
|
v
posterior evidence + diagnostics
|
v
decision policy
|
v
structured result + warnings + provenanceThe model library owns the math. The MCP owns the rules around when that math may be used as decision evidence
Decision safety is a runtime rule
The repository separates descriptive analytical outputs from decision-grade actions
For example, a fitted MMM is not automatically allowed to drive budget optimization. diagnose_mmm persists the current decision status, and gated tools such as simulate_budget, optimize_budget, and optimize_flighting refuse to execute when the model does not satisfy the decision contract
The important rule is simple
model fitted != model approved for decisionsThe gate does not claim that an approved model proves causal truth. It establishes whether the repository permits a defined class of downstream decisions under the current diagnostics contract
Read docs/DECISION-INTEGRITY.md and docs/STATISTICAL-SAFETY.md before extending model-dependent decision behavior
What the project deliberately does not do
The current runtime does not provide unrestricted autonomous marketing control
It does not
let an LLM replace PyMC-Marketing for model-dependent calculations
allow arbitrary shell, SQL, Python, or callback execution through MCP tools
bypass diagnostics because a caller asks to "continue anyway"
change priors, model families, variables, or diagnostic thresholds until a model passes
treat a recent KPI movement as proof that something is broken
mutate Google Ads, Meta Ads, LinkedIn Ads, or other ad-platform campaigns as a current public capability
infer production readiness from the presence of tests or planning documents
These restrictions are product behavior, not prompt conventions
Quick start
Requirements
Python 3.12 or 3.13
Install the development environment
git clone https://github.com/imMamdouhaboammar/pymc-marketing-mcp.git
cd pymc-marketing-mcp
uv sync --frozen --extra devRun the synthetic demo
uv run marketing-mcp-demo --fastStart the MCP server over stdio
uv run marketing-mcp --transport stdioLocal stdio intentionally runs as a trusted local principal. Use an authenticated security profile for remote HTTP access
Runtime modes
Local stdio
Use this for local MCP clients and development
uv run marketing-mcp --transport stdioLocal Streamable HTTP
Use loopback HTTP for development
uv run marketing-mcp \
--transport streamable-http \
--host 127.0.0.1 \
--port 8000The runtime exposes the MCP endpoint at /mcp, plus /health, /health/live, and /health/ready
Private HTTP with an API key
The http-private-api-key profile requires authentication before startup
export MARKETING_MCP_SECURITY_PROFILE=http-private-api-key
export MARKETING_MCP_API_KEY='replace-with-a-real-secret'
uv run marketing-mcp \
--transport streamable-http \
--host 127.0.0.1 \
--port 8000Do not commit credentials or place them in examples, fixtures, logs, screenshots, or release evidence
Production OAuth profile
The codebase includes an http-production-oauth profile with asymmetric token verification, required scopes, and tenant claim mapping
Production deployment is not release-approved. External identity-provider integration and exact-commit release evidence remain part of the production-readiness contract
Use docs/SECURITY.md, docs/DEPLOYMENT-GCP.md, and docs/PRODUCTION-READINESS.md instead of treating this README as a production deployment runbook
Background jobs
Expensive statistical work can be represented as durable jobs rather than tying computation to one MCP request
Run a standalone worker with
uv run marketing-mcp-worker --poll-interval 2.0The current job implementation includes durable job records, semantic idempotency, cancellation, leases, fencing, retry limits, and stale-lease recovery
Production claims about distributed workers remain subject to the G2 and H4 evidence requirements in docs/PRODUCTION-READINESS.md
Typical MMM workflow
A normal model-to-decision path is
1. register_dataset
2. inspect_dataset
3. validate_dataset
4. fit_mmm or submit_fit_mmm_job
5. diagnose_mmm
6. inspect descriptive posterior evidence
7. use decision-grade tools only when the gate permits them
8. retain dataset, model, configuration, package, and decision provenanceA useful agent should not skip directly from fit_mmm to a budget recommendation
Example decision path
fit_mmm
|
v
diagnose_mmm
|
+-- rejected/caution requiring stop --> explain evidence or request more measurement
|
+-- decision access permitted ------> simulate_budget / optimize_budget / optimize_flightingTypical CLV workflow
The CLV surface separates purchase behavior from monetary value instead of hiding both behind one generic prediction call
1. fit_purchase_model
2. predict_expected_purchases / predict_probability_alive
3. fit_value_model when monetary modeling is required
4. predict_expected_spend
5. estimate_customer_lifetime_valueLegacy compatibility wrappers remain visible in the capability inventory as deprecated rather than pretending they are current first-choice APIs
Architecture
The project is structured so the MCP transport does not own marketing or statistical behavior
src/marketing_mcp/
MCP transport
mcp/
tools + resources + envelopes + request context
|
v
Application services
services/
datasets + modeling + diagnostics + decisions + plots + CLV + jobs
|
+--------------------+
| |
v v
Domain policy Computation adapters
domain/ adapters/
validation PyMC-Marketing boundary
diagnostics PyMC / ArviZ integration
decision rules
| |
+----------+---------+
|
v
Persistence + artifacts
storage/ + repositories/ + jobs/ + credentials/
Cross-cutting boundaries
security/ principals + scopes + tenant authorization + OAuth
observability/ structured logs + metrics + traces
http/ health + request safety + credential control API
schemas/ typed public contractsThe main ownership rule is that orchestration may coordinate domain owners, but it should not duplicate their math, persistence semantics, or authorization rules
Read docs/ARCHITECTURE.md for the current and target topology
Persistence and artifacts
The default local runtime uses SQLite-backed metadata, jobs, and credential state with local artifact storage
The repository also contains a shared-SQL persistence path used by the production-hardening work. Multi-instance production readiness must be judged against the current persistence and artifact evidence, not the existence of an adapter alone
Important local paths can be configured with environment variables including
MARKETING_MCP_INGEST_DIR
MARKETING_MCP_ARTIFACT_DIR
MARKETING_MCP_METADATA_DB
MARKETING_MCP_MAX_DATASET_MB
MARKETING_MCP_PERSISTENCE_BACKEND
MARKETING_MCP_SHARED_SQL_URLSee src/marketing_mcp/config.py for the runtime configuration contract
Security model
Remote access is request-scoped and tenant-aware
The security boundary includes
authenticated principals propagated into MCP tool execution
scope checks mapped to public tools
object and tenant authorization
backend-controlled API-key verification and revocation
asymmetric OAuth verification for the production profile
request safety middleware
structured-log secret redaction
fail-closed startup checks for insecure HTTP configurations
A valid token or API key does not imply access to every tenant or every operation
Read docs/SECURITY.md for the full contract and known production gaps
Observability
The runtime includes
structured JSON logging
secret scrubbing
low-cardinality metrics
trace context propagation
liveness and readiness endpoints
Identifiers useful for correlation belong in logs or trace context where allowed, not in metric labels that create uncontrolled cardinality
Production exporters, alerts, and SLO evidence are tracked separately from the local observability implementation
Capability maturity
Public capability status comes from src/marketing_mcp/capabilities.py and is rendered into docs/CAPABILITIES.md
stable executable evidence is referenced for the capability
experimental exposed, but the required evidence is incomplete or absent
deprecated retained for compatibility and scheduled for removalThe registry, actual MCP discovery, generated documentation, and evidence references are checked for drift in tests
Do not hand-edit docs/CAPABILITIES.md
Current maturity
Advanced beta / release-candidate implementation, not release-approved
The repository contains substantial hardening work across scientific correctness, recovery, remote security, observability, release evidence, agent quality, and upstream compatibility
That does not make every release gate green for the current commit
A gate is green only when machine-collected evidence for the exact commit being assessed proves the required property. Older test runs, historical release notes, a passing local command, or the existence of a test file are not substitutes for current release evidence
Current gate interpretation lives in docs/PRODUCTION-READINESS.md
Planned next capability: Marketing Reconciliation Engine
The repository now has an implementation-ready plan for a bounded reconciliation capability
This is planned work, not a current MCP runtime capability
The v1 direction is intentionally narrow
detect machine-checkable operational, data-integrity, and decision-safety incidents
persist incident evidence and action attempts
run shadow-first
allow automatic mutation only for explicit low-risk internal recipes
verify every repair before reporting an incident as healed
escalate when evidence is uncertain
keep commercial ad-platform mutation outside v1
The first planned automatic repair is subject-scoped expired worker-lease recovery. The plan explicitly rejects a free-form autonomous growth agent and arbitrary campaign actuation
Planning artifacts
Do not expose planned reconciliation tools or scopes as current capability until implementation, discovery, authorization, and evidence tests land together
Verify the repository
Install the development dependencies first
uv sync --frozen --extra devFast and integration-oriented checks
uv run pytest -m "not statistical" -vStatistical checks
These run real PyMC-Marketing sampling and can take materially longer than ordinary unit tests
uv run pytest -m statistical -vStatic checks
uv run ruff check src tests scripts
uv run pyrightDocumentation and capability drift
uv run python scripts/generate_capability_inventory.py --check
uv run python scripts/check_docs_drift.pyFull suite and package build
uv run pytest -v
uv buildPassing these commands locally is useful engineering evidence. It is not by itself a production release approval
Repository map
.
├── src/marketing_mcp/
│ ├── adapters/ PyMC-Marketing computation boundary
│ ├── credentials/ API-key issuance, verifier storage, and revocation
│ ├── domain/ validation, diagnostics, allocation, and decision policy
│ ├── http/ health, request safety, and control-plane routes
│ ├── jobs/ durable jobs, idempotency, leases, fencing, worker CLI
│ ├── mcp/ tools, resources, envelopes, context, and task adapter
│ ├── observability/ structured logging, metrics, and tracing
│ ├── schemas/ typed public contracts
│ ├── security/ principals, scopes, authorization, OAuth, redaction
│ ├── services/ application workflows
│ └── storage/ SQLite migrations and durable stores
├── tests/
│ ├── contract/ public and decision-gate contracts
│ ├── integration/ transport, auth, persistence, resource, and worker behavior
│ ├── release/ G0-G5 and H0-H6 release assertions
│ ├── statistical/ real PyMC-Marketing statistical invariants
│ └── unit/ focused domain and service tests
├── docs/
│ ├── plans/ active implementation plans and engineering ledgers
│ ├── release-evidence/ machine-collected release proof
│ └── README.md documentation truth map
├── scripts/ documentation, capability, release, and verification tooling
├── pyproject.toml package and tool configuration
└── task_plan.md broader implementation and phase trackerDocumentation map
Start with the document that owns the question you are asking
Question | Source of truth |
What is publicly exposed | |
What does each tool promise | |
How is the code organized | |
When may model outputs drive decisions | |
What statistical rules are non-negotiable | |
How does authentication and tenancy work | |
What is actually release-ready | |
What evidence supports release claims | |
How should conflicting documentation be interpreted | |
What are engineers building next |
Plans are targets. Tests are evidence for the behavior they actually exercise. Release evidence is commit-specific. The current source and executable checks outrank historical prose
Dependency policy
The supported package contract currently targets
Python >=3.12,<3.14
PyMC-Marketing >=1.0.0,<2
MCP Python SDK >=2,<3
Pydantic >=2.12,<2.13
NumPy >=2,<3
Pandas >=2.2,<3
ArviZ >=0.21,<2The upstream canary can test newer dependency combinations without silently widening the committed package contract
PyMC-Marketing 2.x should be adopted only after adapter, statistical, plotting, optimization, calibration, and persisted-artifact compatibility is proven and any required migration is explicit
Historical releases
Earlier v0.3 and v0.4 material remains in CHANGELOG.md and docs/FINAL-REVIEW.md for provenance
Historical release notes do not establish the readiness of the current commit
License
Apache License 2.0. See LICENSE
Available Tools
33 toolsarchive_modelB
Archive a model record and update its lifecycle state.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavior and safety burden. It discloses that lifecycle state changes, which is useful, but does not say whether archiving is reversible, whether it blocks prediction or comparison workflows, or what side effects occur. 'Update its lifecycle state' is a vague gesture at consequences.
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 nine words, front-loaded with the action and object, and contains no filler. The added 'lifecycle state' clause earns its place by clarifying the broader behavior.
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 state-changing tool with no annotations and no output schema, the description omits lifecycle details, irreversibility, return value, and any prerequisites. It could be called by an agent, but not with confidence about consequences or downstream effects.
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 description mentions no parameters and does not explain model_id semantics beyond the schema. Context reports 0% schema description coverage, so the description does not compensate; though the single parameter name is fairly self-explanatory, there is no guidance on identifiers, format, or required state.
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 clear imperative verb ('Archive') and names the specific resource ('a model record'), then adds that it updates lifecycle state. Among siblings focused on prediction, fitting, and comparison, archive_model is unambiguous and not a tautology.
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 is provided about when archiving is appropriate, whether archived models are excluded from other workflows, or when to prefer a sibling like compare_models or get_model_status. The agent must infer usage solely from the verb and tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calibrate_mmmA
Calibrate an existing MMM using experimental lift test measurements. Produces a new calibrated model artifact linked via lineage.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden. It usefully states that calibration produces a new artifact rather than modifying in place and that lineage is recorded. However, it does not disclose potential side effects such as long-running MCMC computation, random-seed behavior, 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?
A single sentence delivers the action, the subject, the mechanism, and the output with no filler. The most decision-relevant information is front-loaded ('Calibrate an existing MMM') before the more detailed outcome.
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 complex calibration tool with no output schema and no annotations, the description is adequate but not complete. It communicates the core purpose and the main output behavior, but omits details such as the necessity of a prior fit_mmm step, how sampler settings affect the run, and what the lineage-linked artifact means operationally.
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 description only loosely implies the required inputs ('existing MMM' and 'experimental lift test measurements') without naming model_id, lift_tests, or sampler. Since schema description coverage is 0% and the top-level parameter has no description, the tool description needed to document the parameter structure; it does not. Nested schema $defs include per-field descriptions, which partially help, but this dimension credits the description text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Calibrate' and a precise object, 'an existing MMM', and names the method, 'experimental lift test measurements'. It also states the outcome ('a new calibrated model artifact linked via lineage'), which separates it from siblings like fit_mmm or recommend_next_measurement.
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 'existing MMM' clearly establishes the prerequisite that a fitted model must already exist, and 'experimental lift test measurements' identifies the data condition that triggers this tool. It does not explicitly list exclusions or alternatives, but the context is clear enough for an agent to distinguish this from initial model fitting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_jobA
Cancel a currently queued or running background job.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It does state that only queued or running jobs are eligible, which is useful. However, it does not mention irreversibility, what happens after cancellation, what errors may occur, or whether any related resources are affected. The state constraint is a positive signal, but the description is not fully transparent.
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. Every word carries meaning: 'currently queued or running' is essential and 'background job' identifies the resource. Nothing extraneous is included.
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 simple one-parameter contract and no output schema, the description is minimally adequate. It covers the core purpose and the eligibility condition, but lacks details an agent might need for robust invocation, such as how to obtain a valid job_id or what response to expect. The low complexity prevents a lower score, but the missing behavioral details prevent a higher one.
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 parameters, and the description does not explain job_id at all. The parameter is somewhat self-evident from the tool name, but the description adds no guidance on where to find it, its format, or how it relates to the job lifecycle. For a low-coverage schema, the description should compensate; it does not.
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 ('cancel') and a clear resource ('background job'), and adds a meaningful state qualifier ('currently queued or running'). This distinguishes it from sibling tools like get_job_status, list_jobs, and submit_fit_mmm_job without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'currently queued or running' gives an implicit when-to-use condition: cancel only jobs in those states. It implies reliance on job IDs from submission or listing tools, though it does not explicitly name alternatives such as get_job_status or list_jobs for retrieving job IDs. Clear context, but no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_modelsA
Compare diagnostics, predictive metrics, and lineage across multiple fitted MMMs.
| Name | Required | Description | Default |
|---|---|---|---|
| input | 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 of behavioral disclosure. Beyond naming the action, it does not state whether the tool is read-only, what output format is returned, whether any side effects occur, or any prerequisites. 'Compare' suggests a read operation, but this is inference, not disclosure.
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 with no wasted words. It packs the verb, the resource, the scope ('multiple'), and the specific comparison dimensions into a compact, scannable form.
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 one required parameter documented in the schema, no annotations, and no output schema, the description gives the core purpose but omits behavioral context such as read-only status and return format. It is adequate for a straightforward comparison tool but leaves the agent to infer important execution details.
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 description does not mention model_ids, and the schema coverage is reported as 0%, so a strict reading says the description fails to compensate. However, the input schema itself contains the description 'List of model IDs to compare' for the sole parameter, which fully explains its meaning. The description adds contextual value by stating what the comparison covers, but does not directly elaborate the parameter syntax.
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 the specific verb 'compare' with a clear resource: 'multiple fitted MMMs', and names the aspects compared: diagnostics, predictive metrics, and lineage. This clearly distinguishes it from siblings like diagnose_mmm (single-model diagnostics) and select_best_model (selecting one), so an agent can tell them apart.
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 appropriate use case—when multiple fitted MMMs need to be compared—but provides no explicit guidance on when not to use it or which alternative to choose. It never mentions select_best_model or diagnose_mmm as alternatives, so usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cross_validate_mmmB
Run rolling Time-Slice Cross-Validation with PyMC-Marketing. Evaluates out-of-sample predictive RMSE/NRMSE across multiple temporal folds.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It does disclose that the operation runs multiple temporal folds and evaluates out-of-sample predictive RMSE/NRMSE, which is useful. However, it remains silent on side effects, computational cost, whether the model must already be fitted, and the exact return structure.
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 tight and front-loaded: two sentences, no filler, with the primary action stated first. The second sentence adds meaningful outcome information without 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 no annotations, no output schema, and a wrapped input object, the description is too thin for safe autonomous invocation. An agent would need to infer that model_id is required and would have no clear idea what the returned RMSE/NRMSE artifact looks like or when this evaluation is appropriate.
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 description never references model_id, n_init, step_size, forecast_horizon, or sampler settings, and schema description coverage is reported as 0%, so the description was expected to compensate. The phrases 'rolling' and 'temporal folds' only vaguely hint at fold-related parameters and do not clarify the required fitted model ID.
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 is specific: 'Run rolling Time-Slice Cross-Validation with PyMC-Marketing' names a clear verb and resource, and it states the evaluation outcome (out-of-sample RMSE/NRMSE across temporal folds). This distinguishes it from sibling tools like fit_mmm, diagnose_mmm, or evaluate_prior_sensitivity.
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 no guidance on when to use this tool versus alternatives such as diagnose_mmm, evaluate_prior_sensitivity, or calibrate_mmm. It also does not state prerequisites such as requiring a successfully fitted model before cross-validation can run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_mmmA
Mandatory diagnostic gate. Checks sampler health plus posterior predictive coverage, predictive error, and residual behavior before decision tools may run.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the categories of diagnostics performed and the gating behavior, but it does not say what happens when diagnostics fail, whether the operation is read-only, or what the return value looks like. This is a moderate gap for a gating 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, efficient sentence with no filler. The most important information ('Mandatory diagnostic gate') is front-loaded, and every clause adds specific value.
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 tool, the description covers its purpose and placement well. However, it lacks any information about output format, failure semantics, or how results should inform next steps. Given the absence of annotations and output schema, the description is not fully 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% and the description never mentions model_id. The parameter name is somewhat self-explanatory, but the description adds no meaning beyond the schema field name, so it only minimally 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 description states a specific verb ('Checks') and a precise resource (sampler health, posterior predictive coverage, predictive error, residual behavior), and frames the tool as a 'Mandatory diagnostic gate' that precedes decision tools. This clearly differentiates it from the many prediction and optimization 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?
The description explicitly says this runs 'before decision tools may run,' giving clear when-to-use context. It does not name specific alternative tools or exclusions, but the mandatory-gate framing strongly signals its required position in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_customer_lifetime_valueA
Estimate discounted net present Customer Lifetime Value (CLV) by combining a fitted purchase model (e.g. BG/NBD) and monetary value model (e.g. Gamma-Gamma).
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes |
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. It does reveal that the tool computes a discounted net present value and requires fitted models, but it does not state side effects (e.g. read-only vs model mutation), compatibility expectations between the two model IDs, or the shape of the returned estimate.
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 focused sentence that leads with the action and resource, then adds method details and concrete example models. Every clause earns its place with no 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?
The description is adequate for a read-only estimation task and the schema covers parameter semantics. However, with no output schema and no annotations, it omits information about return format, error behavior if models are not fitted or incompatible, and whether this should be used instead of close siblings like predict_customer_clv.
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 description does not explain any parameters, but the input schema fully documents each nested field (top_n, future_t, discount_rate, value_model_id, purchase_model_id) with descriptions and defaults. Since the schema does the heavy lifting, the missing parameter detail in the description is acceptable.
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 ('Estimate') and a concrete resource ('discounted net present Customer Lifetime Value (CLV)'), and it identifies the key inputs (fitted purchase and monetary value models). However, it does not explicitly differentiate this from the sibling tool predict_customer_clv, which likely performs a similar CLV prediction.
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 the tool: after fitting a purchase model (e.g. BG/NBD) and a monetary value model (e.g. Gamma-Gamma), because it combines those fitted models. It does not state when not to use it or which sibling to prefer instead, such as compare_models or predict_customer_clv.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_prior_sensitivityA
Evaluate sensitivity of commercial conclusions (channel rank order and iROAS) under alternative adstock and saturation priors.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It does explain that the tool evaluates sensitivity under alternative priors, which implies a read-only diagnostic analysis, but it does not disclose the output format, side effects, or whether it refits models. The behavioral intent is clear but incomplete.
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 with no filler or redundancy. It packs the key resource, the exact quantities of interest, and the condition being varied into a compact and readable form.
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 tool, the description provides enough to understand the core purpose and the sensitivity dimensions being examined. However, without an output schema or annotations, it should ideally say what kind of result is returned (e.g., summary tables, plots, metrics) and whether any fitted model prerequisite applies. The missing return-value clarity prevents a higher score.
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 only parameter, model_id, is already described in the schema as 'Model ID to evaluate for prior sensitivity'. The tool description adds no parameter-level detail, but with a single obvious parameter this is not a significant gap. The description neither enriches nor contradicts the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Evaluate') and clearly identifies the resource: sensitivity of commercial conclusions, specifically channel rank order and iROAS, under alternative adstock and saturation priors. This distinguishes it from sibling tools like model fitting, prediction, or budget optimization even without naming them 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?
The context of use is implied: this should be used when one needs to check whether prior choices materially affect commercial conclusions. However, it does not explicitly say when to use it versus alternatives like diagnose_mmm, compare_models, or cross_validate_mmm, nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fit_clv_modelA
Fit a Bayesian Customer Lifetime Value (CLV) model on RFM transaction data. (Deprecated: prefer fit_purchase_model or fit_value_model).
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It discloses deprecation status and the model family, but not what happens during fitting, whether artifacts are written, how long it runs, or what the return value is.
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 plus a short parenthetical deprecation note. Every token earns its place, and the most important behavioral signal (deprecation) is clearly set off.
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 tool with a complex nested config requiring column mappings, sampler settings, and model types, one sentence is incomplete. There is no output schema and no annotation coverage to offset the missing details about required config, return values, or side effects.
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 description does not mention any parameters or config fields. The nested schema has its own property descriptions, but the tool description itself adds no parameter meaning to compensate for the low 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 states a specific verb ('Fit'), a specific resource ('Bayesian Customer Lifetime Value model'), and a specific input domain ('RFM transaction data'). It also names sibling alternatives, which differentiates it from the many other model-fitting tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly warns the tool is deprecated and instructs the agent to prefer fit_purchase_model or fit_value_model. This is direct when-not-to-use guidance, even if it does not detail when to choose between those two alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fit_mmmB
Fit a real Bayesian Marketing Mix Model with PyMC-Marketing using typed, controlled configuration. No arbitrary Python is accepted. Supports adstock types: geometric (default), delayed, weibull_cdf, weibull_pdf, binomial, none. Supports saturation types: logistic (default), tanh, tanh_baselined, michaelis_menten, hill, hill_sigmoid, inverse_scaled_logistic, log, root, none. Per-channel adstock/saturation overrides can be set via channel_priors.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. It only adds the constraint 'No arbitrary Python is accepted' and lists supported types, but does not mention side effects (e.g., whether a model is overwritten), compute time, return value behavior, or failure modes. This is a significant gap for a fitting 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 compact and front-loaded with the main purpose. The listing of types is fairly long but directly relevant to configuration. It avoids redundant filler, though some enum lists duplicate schema 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?
For a complex tool with a nested config object and no output schema, the description is too high-level. It does not explain return values, synchronous/asynchronous behavior, prerequisites (like registered dataset), or consequences of fitting. The schema covers parameter syntax, but the description leaves key operational context unaddressed.
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% in the textual description, but the input schema itself has rich descriptions for nested parameters (e.g., dataset_id, date_column, AdstockConfig). The description adds the 'No arbitrary Python' constraint and summarizes the type enums, which is marginal value beyond the schema. Since the schema already carries parameter explanations, a baseline of 3 is appropriate.
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 ('Fit') and resource ('Bayesian Marketing Mix Model'), and clearly differentiates itself with 'No arbitrary Python is accepted' – signaling this is a controlled-config tool rather than a code execution tool. It also names the supported adstock and saturation types, which helps distinguish it from prediction/analysis 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?
No guidance is given on when to use this tool versus alternatives like submit_fit_mmm_job (likely async) or other model-fitting tools. It does not mention prerequisites such as the dataset being registered, nor does it state that this is a blocking operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fit_purchase_modelA
Fit a Bayesian purchase/transaction frequency model (BG/NBD or Shifted Beta-Geometric). Normalizes user column names to canonical RFM attributes.
| Name | Required | Description | Default |
|---|---|---|---|
| config | 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 a notable behavior: normalization of column names, which is helpful. However, it does not mention that fitting runs MCMC (evident from sampler schema), potential runtime expectations, or that it likely requires a registered dataset (implied by dataset_id). Given the Bayesian natureamented, it is a moderate disclosure.
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 concise: two sentences, with the core purpose in the first and the normalization side-effect in the second. It is front-loaded and avoids redundancy, though mentioning the model types could be omitted since they are in the schema enum, but it helps clarify 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?
For a complex Bayesian model fitting tool with an extensive sampler config, the description is sparse. It does not explain what the output will be (though no output schema exists, so this is a gap), nor does it clarify the data requirements beyond 'RFM data'. It relies heavily on the schema for parameter specifics, but lacks guidance on prerequisites or expected behavior.
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%, meaning all parameter descriptions come from the schema itself. The description adds no additional meaning beyond what the schema already states, but the schema is quite self-explanatory with detailed descriptions for each parameter. Since coverage is high in terms of schema self-documentation, a baseline 3 is appropriate; the description doesn't need to compensate.
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 action ('Fit a Bayesian purchase/transaction frequency model'), specifies the resource (BG/NBD or Shifted Beta-Geometric), and mentions a key side effect: normalizing user column names to canonical RFM attributes. This clearly distinguishes it from sibling tools that fit value models or predict other metrics.
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 fitting frequency models but does not explicitly state when to use this vs. alternatives like `fit_value_model` or `fit_clv_model`. It mentions two model types, suggesting when each might be appropriate (continuous vs. contractual), but there is no explicit guidance on when to select this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fit_value_modelC
Fit a Bayesian monetary value transaction model (Gamma-Gamma) on repeat customer spending. Requires frequency and average monetary value columns.
| Name | Required | Description | Default |
|---|---|---|---|
| config | 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 burden. It discloses that this is Bayesian and Gamma-Gamma, but not what happens on invocation—whether a model artifact is saved, how long MCMC runs, or what output is returned. Sampler settings exist in the schema, but the description does not explain their behavioral effect.
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 one efficient sentence with two useful clauses. No filler or redundant restatement of the tool name. It could be slightly more structured by front-loading prerequisites, but overall it is compact.
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 fitting tool with no annotations and no output schema, key operational details are missing: dataset_id is required, a registered dataset must exist, and the return/result behavior is unspecified. It also does not signal how sampler configuration affects runtime. The description is not complete enough to invoke correctly from context alone.
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% at the top-level config parameter, so the description must compensate, but it only references frequency and monetary value columns. It does not mention required dataset_id, model_type constraint, or sampler configuration. The schema's nested descriptions carry most of the burden.
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 opens with a specific verb and resource: 'Fit a Bayesian monetary value transaction model (Gamma-Gamma) on repeat customer spending.' This distinguishes it from frequency/purchase siblings by naming the value model explicitly. It does not name a sibling, but the model type and subject make the tool's role clear.
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?
It states required inputs ('Requires frequency and average monetary value columns'), which is a clear precondition. It does not state when to prefer this over fit_purchase_model or fit_clv_model, nor any exclusions. The usage context is implied by the model type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_contributionsA
Return posterior channel contribution summaries from the fitted PyMC-Marketing model. Does not fabricate estimates.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. 'Does not fabricate estimates' adds a useful transparency guarantee that outputs are model-derived rather than invented, and 'fitted model' signals a prerequisite. However, it does not disclose output format, error behavior, or what happens when model_id is invalid or the model is not fitted.
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 with no filler; the core action is front-loaded and the non-fabrication guarantee earns its place. The length is appropriate for a simple one-parameter 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 definition is adequate for selecting the tool but not fully complete for invoking it blind: there is no output schema, no return-structure details, and no guidance on where model_id comes from. Complexity is low and the parameter is obvious, so the gaps are moderate rather than severe.
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 input schema has a single required model_id with no description (0% coverage), so the description must compensate. 'From the fitted PyMC-Marketing model' implies model_id identifies a previously fitted model, adding some meaning beyond the schema. It does not explain how to obtain or format model_id, leaving partial compensation.
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 precise operation ('Return posterior channel contribution summaries') and scope ('from the fitted PyMC-Marketing model'), which clearly distinguishes it from sibling tools like get_response_curves or optimize_budget. There is no ambiguity about the resource being operated on.
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 'from the fitted PyMC-Marketing model' implies the tool should be used after fitting a model, but it never explicitly states when to choose this over related tools like get_incremental_roas, get_response_curves, or get_posterior_plots. No alternatives or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_churn_risk_cohortsA
Identify customers at churn risk from a fitted CLV model. Returns customers whose Bayesian P(alive) is below the specified threshold. Lower threshold = higher confidence of churn. Default threshold: 0.3.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | ||
| threshold_p_alive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It clearly explains the filtering rule, default threshold, and the confidence interpretation, but it does not disclose output format, error behavior, or whether the operation has side effects. It is accurate but not deeply transparent.
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 sentences with no filler. The purpose is front-loaded, followed by the core behavioral rule and default value, and every sentence adds useful 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?
The tool is simple and the description covers selection and threshold behavior, but there is no output schema and the description does not explain the shape of the returned customers or whether additional fields like P(alive) are included. This leaves some ambiguity for an agent invoking the 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 coverage is 0%, so the description must compensate. It explains threshold_p_alive well, including the default value and the inverse confidence relationship, and it ties model_id to 'a fitted CLV model.' It does not state the valid numeric range for the threshold, but the probability context makes it reasonably inferable.
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: identify churn-risk customers from a fitted CLV model. It further distinguishes itself by specifying that it returns customers whose Bayesian P(alive) is below a threshold, which separates it from sibling prediction and model-fitting tools.
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 it should be used after fitting a CLV model and explains how to interpret the threshold, but it does not explicitly compare against alternatives like predict_probability_alive or state when this tool should be preferred. No exclusions are given, only implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_incremental_roasA
Return total and marginal iROAS from PyMC-Marketing's official incrementality API, including posterior uncertainty. No ad-hoc LLM ROAS calculation.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It discloses the output type (total and marginal iROAS, posterior uncertainty) and clarifies it uses the official API rather than ad-hoc computation. However, it does not mention prerequisites like whether the model must be fitted, how model_id is validated, or any failure/error behavior.
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, front-loaded with the core action and resource, with a clarifying negative statement at the end. Every word earns its place and there is no redundant or vague 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?
This is a low-complexity tool with a single required parameter and no output schema. The description covers what is returned and the source API. It could be slightly more explicit about the model_id's role, but overall it provides enough context for a correct call in most situations.
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 needs to compensate for the model_id parameter. It does not explain what model_id refers to, where to obtain it, or any format constraints. The parameter name is somewhat self-explanatory, but the description adds no semantic guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns total and marginal iROAS from a specific official API, and explicitly distinguishes it from ad-hoc LLM-based calculations. This is a precise verb-resource pair that differentiates it from the sibling tools, which focus on CLV, churn, and MMM budgeting.
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 clear context: this is the official incrementality API for iROAS, not an improvised calculation. It does not name a specific sibling alternative, but the 'No ad-hoc LLM ROAS calculation' line provides an explicit exclusion and implicitly tells the agent to prefer this API when authoritative iROAS is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_job_statusA
Retrieve the execution status, results, or error details of an asynchronous job.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden, and it does state read-only retrieval and the kinds of output (status, results, error details). However, it does not disclose details such as whether the call can be polled, whether partial results appear before completion, or any ownership/authorization expectations.
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 sentence with no filler or repeated schema information. The verb and resource are front-loaded, and every word contributes to the tool's meaning.
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-only status tool the basic call is fully specified, but with no output schema and no annotations, the description leaves out workflow context: expected statuses, polling behavior, and the relationship to submit/list/cancel siblings. An agent could call it correctly but would have to infer the surrounding async workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the single parameter job_id is self-descriptive by name and title. The description adds a small amount of meaning by tying the ID to an asynchronous job, yet it does not specify the ID's format or where to obtain it (e.g., from a submit_*_job response).
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 clear verb ('Retrieve') and identifies the resource precisely: execution status, results, or error details of an asynchronous job. This differentiates it from sibling status-like tools such as get_model_status and from lifecycle tools like submit_fit_mmm_job, cancel_job, and list_jobs.
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 'asynchronous job' implies use after a job has been submitted, but there is no explicit when-to-use guidance or comparison with alternatives such as list_jobs for finding job IDs or get_model_status for model-level status. The usage context is implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_statusB
Get persisted model fit state, lineage, and safe failure information.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a non-mutating read via 'Get' and 'persisted', and 'safe failure information' hints at error semantics. However, it does not disclose permissions, side-effect absence beyond implication, or any rate/performance considerations.
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 compact sentence with no filler. It front-loads the verb and resource and adds meaningful qualifiers ('persisted', 'lineage', 'safe failure information') without wasting 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?
For a low-complexity one-parameter status tool, the description names the high-level content of the response. But with no output schema, it leaves unspecified the exact return structure, what 'safe failure information' means, and how this differs from get_job_status or archive_model in practical usage.
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?
There is only one parameter, model_id, and schema description coverage is 0%. The description contextualizes the parameter by tying it to 'model fit state', but it does not explicitly explain how model_id is used, what format it takes, or where it comes from. The parameter is self-explanatory enough to partially compensate.
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 names concrete resources: persisted model fit state, lineage, and safe failure information. This distinguishes it from prediction, fitting, and optimization siblings, though it does not explicitly contrast with get_job_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to use this tool versus alternatives such as get_job_status, archive_model, or the fitting tools. The agent must infer from the name that this is a status/retrieval tool rather than a mutation or prediction tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_posterior_plotsA
Generate posterior visualization plots from a fitted and approved MMM. Returns base64-encoded PNG/SVG images in the evidence envelope and caches them as MCP resources at marketing://models/{model_id}/plots/{plot_type}. Supported plot types: saturation_curves, waterfall_decomposition, actual_vs_predicted, channel_contribution_share.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden. It discloses the output format (base64-encoded PNG/SVG), where images go (evidence envelope and MCP resources at a specific URI pattern), and the prerequisite that the model must be 'fitted and approved.' This is substantial coverage of side effects and constraints, though it omits error cases or 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?
The description is a single, dense sentence that front-loads the main action and then packs in output format, caching, and supported types. No filler words. It earns its place, though it could be split into two sentences for readability without losing concision.
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?
Despite zero schema coverage and no annotations, the description conveys the tool's purpose, output format, caching side effect, and valid plot types. It falls short on explaining the format and model_id parameters in detail, and it does not clarify what 'approved' means or how failures are reported. For a tool with only three simple parameters, this is adequate but not 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. It explicitly lists the allowed plot_types, which maps directly to the plot_types parameter. However, it does not explain model_id (though its role is obvious from context) or format (though the output description implies it). The description partially covers parameters but leaves some 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 opens with a specific verb and resource: 'Generate posterior visualization plots from a fitted and approved MMM.' It enumerates the exact plot types supported, which sharply distinguishes it from sibling tools like get_response_curves or get_channel_contributions. The purpose is unambiguous and not a tautology.
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 explicit guidance on when to use this tool versus alternatives. It implies a precondition (fitted and approved model) but does not mention when not to use it, nor does it point to any sibling for other plot types. An agent must infer usage from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_response_curvesB
Return response/saturation information sampled by PyMC-Marketing rather than raw posterior arrays.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses an important behavioral trait: it returns sampled response/saturation information rather than raw posterior arrays. However, with no annotations provided, the description carries the burden and does not mention potential prerequisites, error conditions, or whether any computation is required. The read-only nature is only implied by 'Return.'
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 with no filler and is front-loaded with the action and object. It conveys the key distinction about the output efficiently.
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 retrieval tool, the description states the core purpose and output nature, but with no output schema or annotations it leaves the exact return shape, model_id semantics, and relationship to fitted models implicit. It is adequate for selection but not fully self-contained for confident 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 description does not mention model_id or how it selects the model. The parameter name 'Model Id' is somewhat self-explanatory, but the description adds no meaning beyond what the schema already trivially provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Return response/saturation information sampled by PyMC-Marketing rather than raw posterior arrays.' It clearly conveys what the tool computes and adds a distinguishing qualifier about the output. It does not explicitly differentiate from sibling tools such as get_posterior_plots, but the core purpose is 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 phrase 'rather than raw posterior arrays' implies when this tool is appropriate, but it does not name alternatives or state explicit conditions for selecting this tool over siblings. Usage context is present only by implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_datasetA
Inspect a registered dataset before MMM configuration. Returns candidate targets, channels, controls, frequency, and data issues.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does add transparency by naming the prerequisite (dataset must be registered) and all the return contents, but it does not explicitly state that inspection is read-only, requires no special permissions, or has no side effects. The verb 'inspect' implies safety but does not fully guarantee it.
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 only two sentences with no filler. It is front-loaded with the primary action and then states the output. Every phrase adds value and none is tautological.
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 a simple single-parameter tool with no output schema, this description is nearly complete: it explains what to pass, when to use the tool, and what will be returned. The only noticeable gap is not specifying the structure or format of the returned fields, but the output schema is absent, so the agent can still make a correct call with the identifier information.
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% for dataset_id, so the description must compensate. It explains that the dataset must already be registered, which gives dataset_id the essential context that an ID of an already-registered dataset is expected. It could have elaborated on where to find this ID, but the core need is met.
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 ('inspect'), a specific resource ('a registered dataset'), and a clearly scoped purpose ('before MMM configuration'). It also enumerates the output (candidate targets, channels, controls, frequency, and data issues), which distinguishes it from siblings like register_dataset or validate_dataset.
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 'before MMM configuration' establishes a precise temporal and functional context, telling the agent exactly when this is the right tool. However, it does not explicitly point to alternatives or provide any 'when not to use' guidance, which would cap the score at 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jobsC
List recent asynchronous background jobs for the active tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for disclosing behavior. It only states that it lists jobs, implying a read-only operation, but does not mention pagination, result ordering, what 'recent' means, or any authentication or rate-limit requirements. The brevity leaves important behavioral details undisclosed.
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 with no redundant wording. The core purpose is front-loaded and the structure is appropriate for a simple list operation.
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 lack of an output schema and annotations, the description must convey return behavior and parameter semantics. It does neither. The tool is simple, but an agent cannot know what the response looks like or how to filter effectively without additional information.
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 description provides no explanation of the 'limit' or 'status' parameters. The agent gets only type and default values from the schema, with no semantic context (e.g., what limit caps, what status values are valid). This is a critical 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 clearly states the verb 'List' and the resource 'recent asynchronous background jobs' with an explicit scope of 'for the active tenant'. It is unambiguous and distinguishes itself from siblings like get_job_status (single job) and cancel_job (mutation) without consulting schemas.
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 is given on when to use this tool versus alternatives such as get_job_status. The description provides no exclusions, prerequisites, or context for selecting this tool over sibling list-like operations, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_budgetC
Use PyMC-Marketing budget optimization under channel or dimension-cell constraints, then compare baseline and recommended posterior responses. Requires a diagnosed model.
| Name | Required | Description | Default |
|---|---|---|---|
| config | 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 of behavioral disclosure. It mentions the high-level workflow and a diagnostic prerequisite, but it does not disclose whether the operation mutates the model, what the returned comparison looks like, failure modes, or any rate/performance constraints. This is a significant gap for an unannotated 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 sentences with no filler. The core action is front-loaded, and the prerequisite is placed second. Every sentence earns its place, and the structure is easy to scan.
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 a nested config schema, no output schema, and no annotations, so the description must compensate for missing return and behavior details. It does not explain what the output comparison contains, what conditions could cause errors, or whether the model is modified. An agent would still have significant uncertainty before invoking 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?
The description does not name or explain parameters like budget, constraints, cell_constraints, or planning_periods. It only paraphrases the constraint concept already visible in the schema. Since schema description coverage is reported as 0%, the description needed to compensate by mapping its workflow to config fields, but it does not.
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 action and resource: 'PyMC-Marketing budget optimization' with 'channel or dimension-cell constraints', followed by the comparison of baseline and recommended posterior responses. This is clear enough to distinguish it from siblings like simulate_budget or optimize_flighting, though it does not explicitly name a sibling or state what the tool is not.
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 only usage guidance is the prerequisite 'Requires a diagnosed model.' There is no guidance on when to choose this tool over alternatives such as simulate_budget, optimize_flighting, or get_response_curves, and no exclusions or failure-prevention advice. Usage context is mostly implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_flightingA
Optimize a dynamic weekly media flighting schedule over a planning horizon, accounting for adstock carryover dynamics, channel spend constraints, target iROAS floors, and profit-maximization objectives. The model must be approved or approved_with_caution before optimization. Returns a week-by-week spend table per channel, posterior response distribution, and net-profit estimates.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the optimization behavior (adstock carryover, constraints, iROAS floors), the approval precondition, and the return values (weekly spend table, posterior response distribution, net-profit estimates). It does not explicitly state whether the operation mutates any state or requires authentication, but for a compute-and-return tool that is a minor 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 dense sentences with zero filler. The main action, constraints, prerequisite, and return values are all packed into clear, front-loaded prose.
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 complex optimizer with no output schema, the description covers the key inputs, constraints, and outputs, plus the approval prerequisite. It could mention failure modes or parameter bounds, but those are largely captured in the schema.
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% for the single top-level parameter (config), and the description does not explain how to structure the input or map the mentioned constraints/objectives to specific parameter fields. Some compensation is attempted by naming channel spend constraints and target iROAS floors, but it does not compensate for the undocumented config object.
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 ('Optimize') and a specific resource ('dynamic weekly media flighting schedule'), and details the constraints and objectives. It clearly distinguishes from sibling optimize_budget by focusing on weekly flighting across a planning horizon with adstock carryover.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states a prerequisite: the model must be approved or approved_with_caution before optimization. It does not name alternative tools or exclusion conditions, but this clear precondition provides actionable context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
predict_customer_clvA
Generate per-customer CLV predictions from a fitted BG/NBD model. (Deprecated: prefer predict_expected_purchases or estimate_customer_lifetime_value).
| Name | Required | Description | Default |
|---|---|---|---|
| config | 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 disclosure burden. It only restates the core function and deprecation; it does not mention output shape, side effects, limits, or any assumptions of the BG/NBD prediction.
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 plus a parenthetical deprecation warning. It is front-loaded with the primary action and contains no filler, making it well-structured and appropriately concise.
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 description plus the nested schema gives enough context for a simple prediction tool: required model_id, optional future_t and top_n_customers, and clear deprecation routing. The absence of an output schema and any behavioral detail prevents it from being fully 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?
Context signals report 0% schema description coverage, so the description needed to compensate for parameter meaning. It only implies model_id through 'fitted BG/NBD model' and does not clarify future_t or top_n_customers in the description text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb and resource: generating per-customer CLV predictions from a fitted BG/NBD model. It also names the preferred sibling tools, distinguishing its purpose from predict_expected_purchases and estimate_customer_lifetime_value.
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 deprecation notice explicitly instructs the agent to prefer predict_expected_purchases or estimate_customer_lifetime_value, providing a clear when-not-to-use signal and alternatives. It does not state the exact conditions under which this deprecated tool should still be called, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
predict_expected_purchasesB
Predict expected future purchase counts per customer from a fitted purchase model (BG/NBD).
| Name | Required | Description | Default |
|---|---|---|---|
| config | 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 clarifies that it works on a fitted BG/NBD model, but does not disclose whether it mutates state, requires specific permissions, what the output format is, or whether predictions are per period or cumulative. The phrase 'from a fitted purchase model' hints at a read-only operation but does not confirm it.
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 clear sentence with no fluff. It front-loads the core purpose. Could include a usage hint, but for its length it's well structured.
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 1 parameter with 0% schema coverage, no output schema, and no annotations, the description is insufficient. It does not explain how 'top_n' and 'future_t' interact, the return format, or any edge cases (e.g., what if model is not fitted). An agent would need more info 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%, so the description must compensate. The description adds that the model is BG/NBD and points to 'purchase model', but it does not explain the semantics of 'top_n' (e.g., cutoff threshold) or 'future_t' (period units: days, weeks?). The schema provides basic descriptions like 'Return top N customers' and 'Number of future periods', but the description adds little beyond that.
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 ('predict'), a resource ('expected future purchase counts per customer'), and mentions the model type (BG/NBD). It distinguishes from sibling tools like 'predict_expected_spend' and 'predict_customer_clv' which predict different quantitiesable. However, it doesn't explicitly contrast with 'predict_expected_spend' or 'predict_probability_alive', which might lead to confusion.
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 post-fitting prediction, but does not state when to use this tool over siblings such as 'predict_expected_spend' or 'predict_probability_alive'. No exclusions or alternatives are mentioned, so the agent must infer the scope from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
predict_expected_spendA
Predict average transaction monetary spend per customer from a fitted Gamma-Gamma value model.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden. The verb 'Predict' implies a read-only inference, and 'from a fitted Gamma-Gamma value model' states the prerequisite. However, it does not disclose behavior such as error handling, side effects, or what happens if the model is not available.
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 with no filler. Every word contributes to identifying what the tool does and what it depends on.
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 description is adequate for a simple prediction tool: it states the output and the prerequisite model type. However, with no annotations and no output schema, it does not explain the optional top_n parameter or the expected return shape, leaving some inference burden on the agent.
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 description mentions Gamma-Gamma model context and the spend metric, which indirectly relates to model_id, but it does not mention top_n or parameter names. Given the context signal of 0% schema description coverage, the description should compensate for parameter details but fails to do so.
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 ('Predict'), a specific resource ('average transaction monetary spend per customer'), and the required model type ('fitted Gamma-Gamma value model'). This clearly distinguishes it from siblings like predict_expected_purchases and estimate_customer_lifetime_value.
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 'from a fitted Gamma-Gamma value model' clearly implies this tool should be used after fitting a value model and not before. It provides clear context, though it does not explicitly name alternatives or 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.
predict_probability_aliveB
Estimate probability of customer retention/alive from a fitted purchase or churn model.
| Name | Required | Description | Default |
|---|---|---|---|
| config | 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 only states an estimation action; it does not disclose whether the operation is read-only, what the response shape is, or whether any model state or requirements matter beyond having a fitted model.
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 with no filler. It communicates the core action and object efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should clarify what the tool returns and how top_n changes the result. It does not explain the return shape or whether it returns one probability, a list of customers, or a scored table, leaving an agent to infer important behavior.
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 description mentions the fitted model, which maps to model_id, but it does not mention the optional top_n parameter. The input schema already describes both parameters clearly, so the description reaches the schema-covered baseline without adding much meaning beyond it.
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 action ('Estimate'), a specific output ('probability of customer retention/alive'), and a source ('fitted purchase or churn model'). This is clear enough to distinguish it from sibling spend/purchase prediction tools, though it does not explicitly name an alternative.
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 'from a fitted purchase or churn model' implies the tool is used after model fitting and for retention/alive probability questions Echo. However, there is no explicit when-not-to-use guidance or comparison to alternatives such as predict_expected_purchases or get_churn_risk_cohorts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_next_measurementA
Recommend evidence-gathering options when model/data signals imply material uncertainty. It can explicitly return that no single experiment is implied.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses one behavioral nuance (can return that no single experiment is implied) but remains silent on side effects, data access, or output format. Minimal but not misleading.
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 purpose, no redundant filler. 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?
Given there is no output schema and no annotations, the description is too sparse: it does not explain what model_id is, what form the recommendations take, or how to interpret the result. An agent could call it but would not know what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description never mentions model_id, leaving the sole parameter's meaning and usage entirely unexplained.
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 ('recommend') and resource ('evidence-gathering options'), plus a triggering condition ('material uncertainty'). Also discloses the special case of returning no experiment, which differentiates it from prediction and fitting 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?
Gives a clear context for when to use (uncertainty in model/data signals) but does not name alternative tools or state when not to use. No exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_datasetA
Register a local CSV or Parquet marketing dataset and return a stable dataset reference.
| Name | Required | Description | Default |
|---|---|---|---|
| path | 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 that the tool returns a stable dataset reference, but it does not explain side effects (e.g., whether the dataset is persisted, whether registration overwrites existing references, whether the file is copied or referenced), permission requirements, or validation behavior. This is a significant gap for an operation that likely creates or mutates state.
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, directly worded sentence that front-loads the core action and return value. No filler or redundant phrasing.
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 description is adequate for a simple registration action but leaves gaps: no mention of prerequisites, error handling, or what the stable dataset reference looks like. With no output schema and no annotations, an agent may not know how to confirm success or use the returned reference 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?
The schema only defines 'path' as a string with no description (0% coverage). The description partially compensates by specifying it is a local file path for CSV or Parquet marketing datasets, but it does not provide details such as whether the path must be absolute, whether the file must already exist, or format constraints beyond the file types.
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 ('Register') and resource ('a local CSV or Parquet marketing dataset'), and explicitly mentions the return value ('a stable dataset reference'). This clearly distinguishes it from sibling tools like inspect_dataset or validate_dataset, which perform different actions.
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 the tool: when you need to register a local CSV or Parquet dataset for later reference. However, it does not explicitly mention alternatives, exclusions, or a broader workflow context such as 'use this before fitting models' or 'use inspect_dataset to examine the dataset'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_best_modelC
Compare multiple fitted MMMs using PSIS-LOO, WAIC, or Bayesian stacking weights via ArviZ. All models must be fitted on the same dataset. Returns ranked specifications, LOO/WAIC scores, and recommended model ID. Methods: loo (PSIS-LOO), waic (WAIC), stacking (BMA weights), all (run all three).
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden and does usefully disclose the same-dataset constraint and return payload. However, its method list ('loo, waic, stacking, all') is stale relative to the schema, which splits this into 'criterion' ('loo', 'waic', 'both') and 'weighting' ('stacking', 'bb-pseudo-bma', 'pseudo-bma') and marks 'method' as deprecated — so the description can actively mislead an agent about valid inputs.
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 compact (~60 words) and front-loaded with the primary action, followed by concrete return details and method options. The trailing 'Methods:' list repeats PSIS-LOO/WAIC/stacking already named in the first sentence, a minor redundancy that keeps it from a 5.
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 a nested four-property config, no output schema, no annotations, and a closely named sibling ('compare_models') yet the description covers only the core action and returns. It does not map the method list onto the actual parameters, does not disambiguate from 'compare_models', and gives no sense of error behavior or how the 'recommended model ID' is determined.
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 'config' parameter has no description (0% coverage per signals), though the nested ModelComparisonInput properties are individually documented. The description attempts to compensate but introduces a value ('all') that does not exist in the schema ('both' does), conflates criterion and weighting into a single 'Methods' list, and omits the deprecation warning, so it partially undermines parameter clarity.
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 ('Compare multiple fitted MMMs') and names concrete statistical methods (PSIS-LOO, WAIC, Bayesian stacking) plus the outputs (ranked specifications, scores, recommended model ID). However, it does not differentiate from the close sibling 'compare_models', so it cannot reach 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?
A clear prerequisite is given ('All models must be fitted on the same dataset') and the method enumeration helps the agent choose values, implying when the tool is appropriate. But there is no explicit when-not-to-use guidance and no reference to the overlapping sibling 'compare_models', leaving the choice between them ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_budgetC
Evaluate the exact requested channel or dimension-cell scenario with posterior response sampling. Rejected models are blocked.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It mentions posterior response sampling and blocked rejected models, but does not clarify whether the tool is read-only, what model status is required, or what happens on success or failure.
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 and mostly front-loaded, but 'Rejected models are blocked.' is cryptic and adds little without supporting context. It is concise but not fully self-contained.
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 complex nested config schema, no output schema, and zero annotations, this description is insufficient. It does not explain expected return values, input construction, constraints, or how the simulation results are delivered.
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 description adds no meaning to the sole 'config' parameter. The agent receives no help understanding model_id, changes, cell_changes, or planning_periods from the description.
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 it evaluates an exact requested channel or dimension-cell scenario via posterior response sampling, which helps distinguish it from optimization and prediction siblings. However, it omits the word 'budget' and does not explicitly contrast itself with optimize_budget or get_response_curves.
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 tool versus alternatives. The description implies use for specific scenario evaluation but provides no exclusions, prerequisites, or comparison to sibling tools like optimize_budget or predict_expected_spend.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_fit_mmm_jobB
Submit an asynchronous MMM fitting job that executes in the background without blocking.
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes | ||
| idempotency_key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It honestly discloses the central trait — the call returns without blocking and work continues in the background — which is genuinely useful beyond the tool name. But it says nothing about what the call returns (e.g., a job ID), how to track job progress, idempotency semantics, or failure behavior, all of which matter for a submission-style 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?
A single tight sentence that front-loads the verb and the defining async trait. There is a slight redundancy between 'asynchronous' and 'without blocking,' but otherwise every word earns its place. It is appropriately sized for a job-submission 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?
For a job-submission tool with no annotations and no output schema, the description omits the two things an agent most needs: what the call returns (a job identifier to reference later) and how it connects to the sibling job tools (get_job_status, cancel_job, list_jobs). The complex config object is also left entirely unexplained at the top level, so an agent must open the schema to learn even the minimal call shape.
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 at the parameter level is 0%: neither top-level parameter ('config', 'idempotency_key') has a description, and the tool description adds no parameter information. Since coverage is low, the description needed to compensate — especially because 'config' is a large opaque nested object and 'idempotency_key' is a non-obvious concept — and it does not.
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 ('Submit') with a clear resource ('asynchronous MMM fitting job') and adds a defining behavioral trait (background, non-blocking execution). It implicitly contrasts with the synchronous fit_mmm sibling, but it does not name that sibling explicitly, so the differentiation is present yet implicit rather than fully explicit.
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 async/background phrasing implies the intended use case: long-running fitting jobs the caller does not want to block on. However, there is no explicit when/when-not guidance, no mention that fit_mmm is the synchronous alternative, and no routing to the job-lifecycle siblings (get_job_status, cancel_job, list_jobs) that clearly exist in the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_datasetA
Run MMM-specific data quality, panel-shape, and identifiability checks. This must pass before fitting.
| Name | Required | Description | Default |
|---|---|---|---|
| dims | No | ||
| dataset_id | Yes | ||
| date_column | Yes | ||
| target_column | Yes | ||
| channel_columns | Yes | ||
| control_columns | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does disclose that the tool performs a pass/fail validation gate and gives categories of checks, but it doesn't state what happens on failure, whether it writes anything, or what the response looks like.
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 compact sentences that front-load the purpose and end with the critical workflow constraint. 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?
With no output schema or annotations and six parameters, the description is too thin: it omits return format, failure behavior, and how the parameters map to the validation checks. It gives the workflow position, but not enough for an agent to call it confidently.
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 description names none of the six parameters or their roles. The agent must infer that dataset_id, date_column, target_column, and channel_columns are required and how dims/control_columns affect checks; nothing in the description compensates.
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 action ('Run') on MMM-specific checks (data quality, panel-shape, identifiability) and clearly identifies the resource. The closing 'must pass before fitting' links it to the fit_mmm workflow, distinguishing it from fitting and diagnosis 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?
Explicitly says this must pass before fitting, giving a clear temporal usage context. It doesn't name alternatives or exclusions, but the before-fitting gate is enough to route an agent.
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.
33 tool updates
v0.4.0- First observed
archive_model - First observed
calibrate_mmm - First observed
cancel_job - First observed
compare_models - First observed
cross_validate_mmm - First observed
diagnose_mmm - First observed
estimate_customer_lifetime_value - First observed
evaluate_prior_sensitivity - First observed
fit_clv_model - First observed
fit_mmm - First observed
fit_purchase_model - First observed
fit_value_model - First observed
get_channel_contributions - First observed
get_churn_risk_cohorts - First observed
get_incremental_roas - First observed
get_job_status - First observed
get_model_status - First observed
get_posterior_plots - First observed
get_response_curves - First observed
inspect_dataset - First observed
list_jobs - First observed
optimize_budget - First observed
optimize_flighting - First observed
predict_customer_clv - First observed
predict_expected_purchases - First observed
predict_expected_spend - First observed
predict_probability_alive - First observed
recommend_next_measurement - First observed
register_dataset - First observed
select_best_model - First observed
simulate_budget - First observed
submit_fit_mmm_job - First observed
validate_dataset
TDQS
Scored across 33 tools
Most tools target distinct actions, but several overlap: deprecated fit_clv_model and predict_customer_clv duplicate newer fit/predict tools, compare_models and select_best_model both compare fitted MMMs, and predict_probability_alive overlaps somewhat with get_churn_risk_cohorts. Descriptions do help clarify boundaries, so the set is usable but not sharply distinct.
The dominant pattern is consistent snake_case verb_noun (fit_, predict_, get_, optimize_, register_), which is easy to follow. Minor deviations exist, such as recommend_next_measurement, get_churn_risk_cohorts, and inconsistent use of the mmm suffix (fit_mmm vs get_channel_contributions), but the overall style remains predictable.
With 33 tools, this is a large surface and above the 25+ threshold that typically signals overload. The count is inflated by deprecated tools, separate synchronous/asynchronous fit paths, and many highly granular getter tools, making the set feel heavier than necessary even for a complex marketing analytics domain.
The toolset covers the main MMM lifecycle well: data registration, validation, fitting, diagnosis, cross-validation, calibration, comparison, budget optimization, plotting, and archival. CLV coverage also includes fitting, prediction, and churn risk. Minor gaps such as no generic model listing/deletion tool and no CLV-specific dataset validation are noticeable but workable.
Maintenance
Related MCP Connectors
Analytics your AI agent can actually use. Track, experiment, and optimize via MCP.
AI marketing agent for Google Ads, Meta, GA4, TikTok, LinkedIn, Shopify, HubSpot and more.
Deterministic what-if & scenario simulation for AI agents: projections, sensitivity & break-even.
AI marketing platform your agent runs end to end: ads, analytics, content, and reports.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Calling Protocol server that enables LLMs to perform rigorous Bayesian analysis and probabilistic reasoning, including inference, model comparison, and predictive modeling with uncertainty quantification.4MIT
- -licenseNot gradedqualityBmaintenanceConnects AI assistants to marketing mix models, enabling natural language data upload, performance modeling, budget optimization, and scenario testing.-
- AlicenseAqualityBmaintenanceDeterministic time-series statistics for AI agents. This MCP server gives any LLM agent unit-tested statistical tools — anomaly detection, changepoint detection, seasonal decomposition, stationarity/trend tests, data-quality audits, baseline forecasts — with schema-validated structured output and no arbitrary code execution.17MIT
- AlicenseNot gradedqualityCmaintenanceProvides a virtual statistician for AI agents, offering real statistical methods such as design of experiments, hypothesis testing, regression, and process control. It includes an advisor tool to recommend appropriate analyses and generates plain-language interpretations of results.MIT