Skip to main content
Glama

Funnel Calibrator

セールスファネルが実際にどう機能しているかに照らして、広告の意思決定を再調整するMCPサーバーです——想定上の機能に照らすのではなく。

⚠️ ステータス: 作業中です。 スキャフォールディングと設計はコミット済みです。MCPサーバーの実装は2026年8月24日に公開されます。ディフェンス: 2026年8月25日。

KSE AI Agentic Lab — 個別ラボ課題(第7週、MCP Integration)


このプロジェクトが解決する問題

このプロジェクトは、現在稼働中のウクライナの代金引換(COD)eコマース事業に基づいています。その事業はMeta広告を通じて女性向けの服を販売しており、ファネルは5つの段階で構成されています:

Meta ads ──► Lead ──► Call-centre approval ──► Shipment ──► Buyout at post office ──► Profit

支払いは配達時に行われるため、広告キャンペーンの成果はお金を費やした時点では分かりません。それが判明するのは2〜4週間後、顧客が荷物を受け取るか受け取らないかが決まったときです。この事業は、このギャップをポートフォリオ全体の2つの定数——65%の承認率と52.5%の買取率——で埋め、それらを用いて、各商品について、その商品がまだ損益分岐する最大リード単価(Stop CPL)と、最適化の目標とすべき数値(Goal CPL)とを計算しています。

この定数はポートフォリオ平均であり、それを個々の商品に適用しても、個々の商品はそこから大きくかい離します。 もとになる事業での実測例: あるメーカーの商品は、想定の52.5%に対し買取率が37%。ある商品の承認率は、想定の65%に対し53%でした。買取率は価格帯と強く相関しており、690~790₴では約93%であるのに対し、1290₴超では約55%です。

商品の実際の率が想定よりも悪い場合、その商品の真の損益分岐CPLは、事業が目安としている数字より低くなります。つまり、広告の目標数値が真の損益分岐点を上回る位置に置かれ得るのです。広告ダッシュボードではトラフィックが健全に見える一方で、すべてのリードが赤字を生み、その赤字は数週後の月次財務締めになるまで表面化しません。

これはオープンループ制御システムです。測定結果が意思決定に戻らないのです。Funnel Calibrator はこのループを閉じます。

Related MCP server: oficio

機能

サーバーは、履歴オーダーデータから各商品自身のファネル率を測定し、その商品の真のCPL境界値を再計算し、提案された広告の意思決定を修正後の数値に照らして監査します。判断を圧縮的に受け入れるのではなく、構造化されたエビデンスを返すという形で。

これら2つの問題が難しさを高めており、両方ともツール契約の中で明示的に処理されています。

  • 打ち切り(ア度制)。 最近の注文はまだ解決していません——配達中の荷物は、買取でも返品でもありません。このような注文を単純に加算すると、測定値が下方で引き出されます。サーバーは、設定可能なマチュリティ・ウィンドウよりも若いコホートを除外し、差し引いた注文数を報告します。

  • 小サンプル。商品、サイズ、場合によっては色がそれぞれ細かくなり、カウント数はすぐに少なくなります。すべての測定にはサンプルサイズと信頼性フラグが付き、サーバーは設定可能なしきい値を下回る場合には、自信に騒いで観測結果を報告するのではなく、結論を下すことを拒否します。

アーキテクチャ

┌─────────────────────────────────────────────────────────────┐
│  Agent  (Claude Agent SDK)                                  │
│                                                             │
│    ├── MCP ──► Obsidian Local REST API      [existing]      │
│    │           decision journal: reads the day's objective  │
│    │           and prior conclusions, writes calibrated      │
│    │           verdicts back as a durable record            │
│    │                                                         │
│    └── MCP ──► Funnel Calibrator            [custom]        │
│                measure → recalibrate → recommend → audit    │
│                        │                                     │
│                        ▼                                     │
│                 local snapshot dataset                       │
│                 (anonymised order cohorts + unit economics)  │
└─────────────────────────────────────────────────────────────┘

カスタムサーバーは独立したプロセスとして実行され、stdioで通信します。エージェントとは関係なく単独で起動できます。

エージェントのフロー

  1. Obsidian の保管庫(ボールト)から、今日の広告目標と昨日の結論を読み取る。

  2. スナップショットから各商品の実測ファネル率を測定する(サンプルとサンプルサイズを考慮)。

  3. その商品の真のStop/Goal CPLと、想定ベースラインに対する乖離を再計算する。

  4. 商品が土台と結果が悪い場合なぜが悪いかを診断する(対処法は原因ごとに異ります)し、次の一手を提案する。

  5. 今日提案された広告の決定内容を、修正後の境界に対して監査する。

  6. 修正された判定書と、その根拠となる日本のエビデンスチェーンをボールトに書き戻す。

各手順は前段の出力を使います。ボールトにあるものが何を検証させるかを決め、その測定結果が修正済みの範囲を決め、修正済みの範囲が提案された決定が維持なのか覆るのかを決定します。

カスタムツール

ツール

役割

measure_sku_funnel

1商品について、コーホートの限定とサンプルサイズ制限を適用しながら、承認・買取・返品率をそれぞれ実測する。主要なデータソール。

recalibrate_cpl_bounds

実測値をもとに真の Stop/Goal CPL を再計算し、想定ベースラインに対する差分を報告する。

recommend_next_action

失敗のモード(弱い商品提供、競争入札の悪化、トラフィックの質の低下、クリエイティブの疲れ、構造的な損害)を区別し、それに対応する次アクションを返す。

audit_ad_verdict

修正済みの境界に対して提案された広告の判断を検証し、supported / contradicted / insufficient_data と数値ベースの根拠チェーンを返す。

完全な入出力スキーマ、エラー条件、副作用、具体例は: docs/tool-contracts.md。

なぜこの4つが選ばれ、なぜMCP境界に置くのか、設計が何を諦めているのか: docs/design-rationale.md。

データソース

ローカルで匿名化されたスナップショット・データセットを、過去の注文コホートからインポートされたものではなく、scripts/export_snapshot.py によって事業CRMからエクスポートしています。実行時に認証やネットワークアクセスが不要なため、デモは決定論的で再現可能です。

顧客名・電話番号・住所・傳票番号など、個人を特定できる情報はすべてエクスポート時に除外されます。スナップショットには、較正タグに必要な情報のみが残ます: 商品コード、注文ステータス、タイムスタンプ、金額、単位あたりの経済性(単位経済性)です。匿名化ポリシーとスキーマは data/README.md を参照してください。

クイックスタート

前提条件: Python ≥ 3.11 と uv。Local REST API プラグインを導入した Obsidian はエージェントフローのみで必要であり、サーバーの実行には不要です。

git clone https://github.com/denkor1015-debug/funnel-calibrator.git
cd funnel-calibrator
uv sync

MCPサーバーをスタンドアロンで実行します(stdioでMCPを話し、クライアントを待ちます):

uv run funnel-calibrator

MCP Inspector を使い、公開されたツールを対話的に確認します:

npx @modelcontextprotocol/inspector uv run funnel-calibrator

設定は環境変数から読み取されます。テンプレートをコピーして編集してください:

cp .env.example .env

両方のMCP接続のためのエージェント配線: agent/mcp_config.example.json。

リポジトリ構成

src/funnel_calibrator/   MCP server: tool definitions, calibration math, policy engine
scripts/                 snapshot exporter (CRM ──► anonymised local dataset)
data/                    snapshot dataset + anonymisation policy
docs/                    tool contracts, design rationale, defence checklist
agent/                   MCP client configuration for both connections
tests/                   unit tests for calibration and policy logic

ビルド・プラン

  • リポジトリのスキャフォールディング、アーキテクチャ、設計根拠

  • PII除去付きスナップショットエクスポーター

  • measure_sku_funnel — 打ち切りとサンプルサイズ・ゲート

  • recalibrate_cpl_bounds — 単位経済の再計算

  • recommend_next_action — 失敗モードの診断

  • audit_ad_verdict — 意思決定の監査

  • Obsidian MCP連携とエンド・ツー・エンドのエージェントフロー

  • 障害系の処理とデモ

  • ツール契約のドキュメントとディフェンス用スクリプト

課題要件マップ

要件

対応場所

Part A — 承認済みの既存 MCP サーバー

Obsidian ローカル REST API。コントラクトは docs/tool-contracts.md に記載

Part B — カスタムMCPサーバー、実質的なツー項が3つ以上

src/funnel_calibrator/; 4ツールのうち、取得ではなく計算・診断・検証を実行する動的なツールが3つ

Part C — アプリ契約ドキュメント

docs/tool-contracts.md

Part D — 運用要件

シークレットはコミットしない。設定は環境変数。ローカルデータセットは実行時にネットワークアクセス不要

設計根拠

docs/design-rationale.md

ディエンス用スクリプト

docs/defence-checklist.md

ライセンス

MIT — LICENSE をご覧ください。

Available Tools

5 tools
audit_ad_verdictAudit a proposed advertising decisionA
Read-only

Test an advertising decision that originated elsewhere — a daily watchdog report, an operator's judgement, a note in the decision journal — against this product's recalibrated economics. Returns 'supported', 'contradicted', or 'insufficient_data', together with the numeric chain that produced the verdict and a counter-recommendation where the proposal is contradicted. Use before acting on any recommendation this server did not itself produce. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYesProduct code, e.g. 21-183
sourceNoWhere the proposal came from, for the audit record
current_cplYesCost per lead the proposal is based on, USD
cpl_trend_daysNoDays the cost per lead has held
proposed_actionYesThe decision being proposed
competitor_activeNoWhether a competitor is bidding on this product

Output Schema

ParametersJSON Schema
NameRequiredDescription
skuYes
verdictYes
evidenceYes
rationaleYes
reliabilityYes
proposed_actionYes
counter_recommendationYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral context beyond the annotations: it returns a numeric chain and a counter-recommendation when the proposal is contradicted, and clarifies the three verdict states. 'Read-only' duplicates readOnlyHint=true, so that portion is redundant rather than additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the purpose and immediately followed by return values and the usage rule. The em-dash enumeration of proposal sources is slightly verbose but earns its place by clarifying scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be exhaustively explained, yet the description still names the verdicts and the counter-recommendation. Combined with the pre-action usage rule, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema (sku, source, current_cpl, cpl_trend_days, proposed_action enum, competitor_active). The description adds no format, units, or edge-case guidance for any parameter, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (test/audit) and resource (an advertising decision originating elsewhere), and enumerates the three possible verdicts returned. It implicitly separates itself from siblings like recommend_next_action by scoping to decisions this server did not produce.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: 'Use before acting on any recommendation this server did not itself produce,' which also implies the exclusion (decisions the server generated). It does not name an alternative sibling tool by name, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_covered_skusList products the snapshot can answer forA
Read-only

List the product codes present in the loaded snapshot, with their order counts and whether price and cost data exist for them. Use to resolve a product code before measuring, or to see what the dataset covers. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
min_ordersNoOnly list products with at least this many orders

Output Schema

ParametersJSON Schema
NameRequiredDescription
windowYes
productsYes
total_ordersYes
status_taxonomyYes
snapshot_generated_atYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The trailing 'Read-only.' merely restates the annotation, and the listed return fields duplicate the output schema, so the description adds little behavioral context beyond what structured fields provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the first states what is listed and what each entry contains, the second states when to use it. Nothing is wasted and the purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list of one optional filter parameter, the definition covers purpose, contents, and usage adequately, and an output schema exists so return structure need not be explained. Only pagination or result-size behavior is unaddressed, a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single optional parameter, min_orders, whose schema description ('Only list products with at least this many orders') is complete at 100% coverage. The description does not reference this filter at all, so it adds no meaning beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('List the product codes present in the loaded snapshot') and even specifies the returned fields (order counts, price/cost availability). It implicitly routes the agent away from the measuring sibling by framing itself as the step 'before measuring', so an agent can distinguish it from measure_sku_funnel.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context cues: 'Use to resolve a product code before measuring, or to see what the dataset covers.' That covers the two main situations for calling it. It does not name a specific alternative sibling or state when not to use it, keeping it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

measure_sku_funnelMeasure a product's funnelA
Read-only

Measure the observed call-centre approval, post-office buyout, and return rates for one product over a date window, counting only order cohorts old enough to have resolved. Use this before any decision that depends on approval or buyout rates, instead of assuming the portfolio-wide 65% approval and 52.5% buyout. Returns rates together with sample size and a reliability flag, and returns null rates with reliability 'insufficient' rather than a number when the resolved sample is too small to support a conclusion. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYesProduct code as it appears in the snapshot, e.g. 21-183
window_toNoISO date YYYY-MM-DD; defaults to the snapshot date
window_fromNoISO date YYYY-MM-DD; defaults to the snapshot start
maturity_daysNoDays an order must be old before it counts as resolved. Defaults to FC_COHORT_MATURITY_DAYS (21). Range 0–90.

Output Schema

ParametersJSON Schema
NameRequiredDescription
skuYes
leadsYes
windowYes
refusedYes
approvedYes
bought_outYes
min_sampleYes
buyout_rateYes
reliabilityYes
return_rateYes
approval_rateYes
cohort_cutoffYes
maturity_daysYes
resolved_ordersYes
shipped_resolvedYes
excluded_in_flightYes
excluded_still_movingYes
snapshot_generated_atYes
excluded_awaiting_callYes
excluded_immature_cohortYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces 'Read-only' while adding real behavioral context: only mature/resolved cohorts are counted, null is returned with reliability 'insufficient' when the sample is too small, and results include sample size and a reliability flag. That is meaningful disclosure beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and scope, followed by usage guidance and return behavior; every sentence carries information. It runs slightly long, but nothing is redundant padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not enumerate return fields, and it still covers usage, cohort maturity, small-sample handling, and read-only status. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds conceptual meaning to the parameters by explaining that only cohorts 'old enough to have resolved' are counted, which clarifies the role of maturity_days and the window parameters beyond the raw ISO-date documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (measure) and resource (call-centre approval, post-office buyout, and return rates for one product) with explicit scope (date window, resolved cohorts only). An agent can distinguish this from the sibling tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use guidance: 'before any decision that depends on approval or buyout rates, instead of assuming the portfolio-wide 65% approval and 52.5% buyout.' It does not name a sibling alternative, but the triggering condition is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recalibrate_cpl_boundsRecalibrate CPL boundsA
Read-only

Recompute Stop CPL (the cost per lead at which profit reaches zero) and Goal CPL (the optimisation target) for one product from its own measured funnel rates instead of portfolio-wide assumptions, and report the drift against the baseline currently in use. Measures the product itself when observed rates are not supplied. Use whenever a cost-per-lead target is being set, defended, or questioned. Flags the case where the assumed target sits above the true break-even, which is invisible in the ads dashboard. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYesProduct code, e.g. 21-183
usd_uahNoHryvnia per US dollar; defaults to the product's rate
window_toNoISO date, used only when measuring on demand
window_fromNoISO date, used only when measuring on demand
observed_buyoutNoMeasured buyout rate 0–1; measured on demand when omitted
observed_approvalNoMeasured approval rate 0–1; measured on demand when omitted

Output Schema

ParametersJSON Schema
NameRequiredDescription
skuYes
drift_pctYes
inputs_usedYes
rate_sourceYes
reliabilityYes
observed_ratesYes
resolved_ordersYes
structural_lossYes
contribution_uahYes
goal_cpl_assumedYes
stop_cpl_assumedYes
goal_cpl_observedYes
stop_cpl_observedYes
economics_reliableYes
target_above_breakevenYes
contribution_uah_assumedYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description confirms 'Read-only.' Parity there. The description adds real behavior: it falls back to measuring the product itself when rates are omitted, and it reports drift vs. the current baseline. It does not disclose cost/latency of on-demand measurement, keeping it out of the 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each load-bearing: what is computed, the source substitution, the fallback, the trigger, and the flag. Verb+resource is front-loaded, and 'Read-only' is correctly placed last as a closing guarantee.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanations are unnecessary. For a 6-param read-only tool the description covers purpose, fallback behavior, and the business flag adequately. It omits when observed_* should be supplied vs. left null (beyond 'when omitted'), a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is documented in the schema. The description adds only the fallback semantics ('measured on demand when omitted'), which is already stated per-param in the schema. It does not explain the observed_* vs. window_* interaction beyond that. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (recompute) and two named resources (Stop CPL, Goal CPL), defines each parenthetically in business terms, and distinguishes the computation source ('from its own measured funnel rates instead of portfolio-wide assumptions'). An agent can separate this from siblings like measure_sku_funnel.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger: 'Use whenever a cost-per-lead target is being set, defended, or questioned.' Names the specific alert condition it surfaces (assumed target above true break-even, invisible in the ads dashboard). No sibling is named as an alternative, but the when-to-use clause is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recommend_next_actionRecommend the next advertising actionA
Read-only

Diagnose why a product is underperforming and return the matching remedy. Given the product's measured funnel, its current cost per lead, and optional competitor and creative signals, identifies the likeliest failure mode — structural loss, contested auction, traffic quality, offer or price mismatch, creative fatigue, or a weak offer — and returns the action that fits it. Use when a campaign misses its target and the cause is not yet established, because cheap leads that fail on the call and leads that fail at the post office need opposite remedies. Returns action 'hold' with diagnosis 'insufficient_data' rather than guessing when the sample is too small. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYesProduct code, e.g. 21-183
window_toNoISO date
current_cplYesCurrent cost per lead in USD
window_fromNoISO date
cpl_trend_daysNoDays the current cost per lead has held
competitor_activeNoWhether a known competitor is bidding on this product
creative_ctr_trendNoChange in click-through rate; negative means falling
creative_frequencyNoMeta frequency for the running creative

Output Schema

ParametersJSON Schema
NameRequiredDescription
skuYes
actionYes
evidenceYes
priorityYes
diagnosisYes
rationaleYes
confidenceYes
measurementYes
breakeven_conditionYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the closing 'Read-only' is redundant. However, the description adds real behavioral context beyond the annotations: the diagnosis taxonomy it applies, the signals it consumes, and the fallback behavior ('hold' with 'insufficient_data') instead of a forced recommendation. That fallback is the kind of trait an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose in the first sentence, then layers the failure taxonomy, the usage trigger, and the fallback rule in a logical order. The 'call vs. post office' analogy consumes a clause that is illustrative rather than strictly load-bearing, and the trailing 'Read-only' duplicates the annotation, so it is dense but not maximally tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not document return fields, and it correctly only hints at the shape ('action hold', 'diagnosis insufficient_data'). Given 8 parameters at full schema coverage plus annotations, nearly everything an agent needs to call this correctly is present; only explicit sibling routing is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 8 parameters, so the schema already defines sku, current_cpl, window_*, cpl_trend_days, competitor_active and the creative signals. The description only gestures at them collectively ('measured funnel, its current cost per lead, and optional competitor and creative signals') without adding format, units, or interaction semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Diagnose why a product is underperforming and return the matching remedy') and enumerates the exact failure modes it distinguishes (structural loss, contested auction, traffic quality, offer or price mismatch, creative fatigue, weak offer). An agent can tell this apart from measure_sku_funnel or audit_ad_verdict, which measure or judge rather than prescribe a remedy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('Use when a campaign misses its target and the cause is not yet established') and a justification for the tool's existence (opposite remedies for leads that fail on the call vs. at the post office). It also states a boundary condition — returns 'hold'/'insufficient_data' rather than guessing on small samples. It stops short of naming sibling tools as alternatives, so it is clear context without explicit routing.

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.

  1. 5 tool updatesv0.1.0
    • First observedaudit_ad_verdict
    • First observedlist_covered_skus
    • First observedmeasure_sku_funnel
    • First observedrecalibrate_cpl_bounds
    • First observedrecommend_next_action

TDQS

A4.3/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct decision stage: listing covered SKUs, measuring observed funnel rates, recalibrating CPL bounds, recommending remedies, and auditing external verdicts. The two diagnostic tools (recommend_next_action and audit_ad_verdict) are clearly separated by whether the decision originated from this server or elsewhere. No overlapping or indistinguishable purposes.

Naming Consistency5/5

All tools use a consistent snake_case verb_noun pattern (measure_sku_funnel, recalibrate_cpl_bounds, recommend_next_action, audit_ad_verdict, list_covered_skus). The convention is predictable and readable throughout.

Tool Count5/5

Five tools is well-scoped for a specialized funnel calibration server. Each tool earns its place: discovery, measurement, recalibration, diagnosis, and verification. There is no redundancy or thin surface.

Completeness4/5

The surface covers the full read-only analytics lifecycle from listing SKUs to auditing external decisions, with sensible fallbacks for insufficient data. A minor gap is the absence of a dedicated tool to fetch or compare the current portfolio-wide baseline assumptions, though descriptions imply those are internally available.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to turn customer conversations into provably correct remodeling quotes by extracting catalog-bounded line items with evidence and calculating prices deterministically.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables agents to query historical call-center call reason notes and tags on demand, detect statistically significant emerging problem spikes against baselines, and evaluate automated categorizers against ground truth.
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to retrieve analytics reports, compare periods, and inspect orders, leads, calls, visits, clients, and funnel data from allowed projects.
    1
    -