aibvf-mcp
What this MCP does
Evaluates AI initiatives and portfolios using deterministic value, readiness, confidence, process-efficiency, and cost-of-waiting models, then produces improvement plans and sequencing.
Tools
Input schema
{'type': 'object', 'required': ['organization', 'initiatives'], 'properties': {'readiness': {'type': 'string', 'description': 'Organisational readiness, canonical or plain language (bureaucratic resolves to siloed). Drives estimation of missing pillars. Defaults to traditional.'}, 'initiatives': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'function', 'ai_tier'], 'properties': {'id': {'type': 'string', 'description': 'Optional slug (lowercase letters, digits, hyphens, max 64). Generated from the name when absent, deduplicated deterministically.'}, 'name': {'type': 'string', 'description': 'Plain name. Also the source of the generated id when none is given.'}, 'bucket': {'enum': ['Agent-Proof', 'Agent-Augmented', 'Agent-Replaceable'], 'type': 'string', 'description': 'Optional workforce-impact label retained in the document; it does not change the verdict today.'}, 'scores': {'type': 'object', 'properties': {'governance_risk': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional evidenced governance-risk score, 0-100, where higher means more risk; omitted values are estimated.'}, 'financial_return': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional evidenced financial-return score, 0-100; omitted values are estimated.'}, 'change_enablement': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional evidenced change-enablement score, 0-100; omitted values are estimated.'}, 'strategic_alignment': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional evidenced strategic-alignment score, 0-100; omitted values are estimated.'}}, 'description': 'The pillar scores you have real evidence for, as bare numbers 0 to 100. Do NOT invent the rest: missing pillars are estimated deterministically, carry low confidence in the document, and are reported in estimated_pillars.'}, 'ai_tier': {'type': 'string', 'description': 'Canonical id or plain language: RPA resolves to gen1, copilot to gen2, agentic to gen3.'}, 'function': {'type': 'string', 'description': 'Canonical id or plain language: customer service resolves to cx, procurement to supply.'}, 'compliance': {'type': 'array', 'items': {'enum': ['eu_ai_act', 'dora', 'csrd', 'gdpr_ai'], 'type': 'string'}, 'description': 'Optional known compliance regimes retained in the document; governance risk still comes from the supplied or estimated pillar score.'}}}, 'description': 'One entry per initiative, from whatever the user gave you. Only name, function and ai_tier are required.'}, 'organization': {'type': 'object', 'required': ['name', 'industry'], 'properties': {'name': {'type': 'string', 'description': 'The organisation the portfolio belongs to.'}, 'region': {'type': 'string', 'description': 'Optional operating region retained as portfolio context; it does not alter scoring today.'}, 'industry': {'type': 'string', 'description': 'Canonical id or plain language: banking resolves to financial, pharma to healthcare.'}, 'headcount': {'type': 'number', 'minimum': 0, 'description': 'Optional employee count retained as portfolio context; it does not alter scoring today.'}, 'revenue_eur': {'type': 'number', 'description': 'Optional annual revenue in EUR. Needed later for value modelling in score_portfolio.'}}, 'description': 'Organisation identity and context shared by every initiative in the assembled portfolio.'}}, 'description': 'Build a valid portfolio document from loose organisation and initiative inputs. organization and at least one initiative are required. readiness defaults to traditional; missing pillar scores are estimated and reported, while unresolved taxonomy values return issues instead of guesses.'}
Output schema
{'type': 'object', 'required': ['bvf_version', 'resolutions', 'assumptions', 'estimated_pillars', 'issues', 'readiness_used', 'guidance', 'audit'], 'properties': {'audit': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'engine': {'type': 'string'}, 'bvf_version': {'type': 'string'}, 'inputs_used': {'type': 'object', 'description': 'The resolved inputs the result was computed on, including estimated pillar values.'}, 'rules_fired': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The rules that actually fired, in order: estimation, gates, classification, value arithmetic.'}, 'engine_version': {'type': 'string'}}, 'description': 'Reproducibility record: engine version, the rules that fired, and the resolved inputs. Deterministic, no timestamps. If the verdict is challenged months later, the same inputs on the same engine version reproduce it exactly.'}, 'issues': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Unresolved inputs, each with path, message and suggestions where the taxonomy has them.'}, 'guidance': {'type': 'string'}, 'portfolio': {'type': 'object', 'description': 'The assembled BVF v1.0 document, ready for validate_portfolio, score_portfolio and sequence_portfolio. Null when assembly is blocked on issues.'}, 'validation': {'type': 'object', 'description': 'validate() run on the assembled document.'}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Every default the assembler applied, in plain language. Surface these to the user: what was not given is named here.'}, 'bvf_version': {'type': 'string'}, 'resolutions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Every alias resolution performed, in plain language.'}, 'readiness_used': {'type': 'string'}, 'estimated_pillars': {'type': 'object', 'description': 'Initiative id to the pillars the assembler estimated. Gather evidence for these, or expect scoring to haircut confidence.'}}}
Input schema
{'type': 'object', 'required': ['proposal'], 'properties': {'scores': {'type': 'object', 'properties': {'governance_risk': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional; when omitted, estimated from tier and regulated context (gen1 30 / gen2 42 / gen3 55, +10 in a regulated function, +8 in a regulated industry — agentic AI in regulated finance estimates at 73 and forces a Stop until governance evidence exists). This pillar is INVERTED: higher means MORE risk. ≥ 70 forces a Stop on its own; must be ≤ 40 for Accelerate.'}, 'financial_return': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional; when omitted, estimated from the disclosed AI BVF planning range for the function (40–52, never enough to clear 60 unmodelled, never low enough to force a Stop). Strength of the modelled return (0–100, higher is better). A value ≤ 20 forces a Stop on its own; ≥ 60 is one of the four conditions required for Accelerate.'}, 'change_enablement': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional; when omitted, estimated from readiness (agile 55, traditional 45, siloed 32 — always below the 60 floor, because an unevidenced change capability is unproven). Sponsor in place, owner named, change budget funded (0–100, higher is better). Must be ≥ 60 for an Accelerate verdict.'}, 'strategic_alignment': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional; estimated at 50 (unproven) when omitted, since alignment to a board KPI cannot be read from context. How clearly this moves a board-level KPI (0–100, higher is better). Must be ≥ 60 — together with financial_return ≥ 60, change_enablement ≥ 60 and governance_risk ≤ 40 — for an Accelerate verdict.'}}, 'description': 'OPTIONAL, and each pillar inside it is optional. The four AI BVF pillars, each an honest 0–100 self-assessment, combining deterministically into the verdict: governance_risk ≥ 70 OR financial_return ≤ 20 returns Stop; strategic_alignment, financial_return and change_enablement all ≥ 60 with governance_risk ≤ 40 returns Accelerate; everything else returns Fix. Pass ONLY the pillars the user has real evidence for — do NOT invent numbers for the rest. Missing pillars are estimated deterministically by the engine from disclosed AI BVF planning assumptions, the response reports which via pillar_basis and scores_used, decision confidence is haircut by how much was estimated, and a fully-estimated pass can never return Accelerate (it returns Fix pending confirmation). So call immediately with whatever the user gave you, then ask for evidence on the estimated pillars and re-call to firm the verdict up.'}, 'ai_tier': {'type': 'string', 'description': 'Optional correction or answer: automation/RPA, GenAI/copilot, or agentic/autonomous. Overrides anything inferred from proposal.'}, 'function': {'type': 'string', 'description': 'Optional correction or answer in canonical or everyday language, for example customer service, procurement, finance or risk. Overrides anything inferred from proposal.'}, 'industry': {'type': 'string', 'description': 'Optional correction or answer in canonical or everyday language, for example retail, hospital, bank or public sector. Overrides anything inferred from proposal.'}, 'proposal': {'type': 'string', 'minLength': 1, 'description': 'The AI initiative in ordinary business language. Include the organisation, industry, approximate annual revenue, business function, AI ambition and how the organisation works today when known. The resolver extracts what it can and, when several inputs are missing, asks for all of them in one clarification; it never guesses an unresolved taxonomy value.'}, 'readiness': {'type': 'string', 'description': 'Optional correction or answer: agile, traditional, or siloed, including everyday descriptions such as cross-functional, hierarchical or bureaucratic. Overrides anything inferred from proposal.'}, 'revenue_eur': {'type': 'number', 'minimum': 0, 'description': 'Optional approximate annual revenue in EUR. Overrides any EUR amount extracted from proposal. No currency conversion is performed.'}, 'work_architecture': {'type': 'object', 'properties': {'measures_updated': {'type': 'boolean', 'description': 'True only when performance measures and incentives reflect the redesigned work, false when the old measures remain.'}, 'roles_redesigned': {'type': 'boolean', 'description': 'True only when affected roles, accountabilities and capability expectations have been rewritten, false when roles remain unchanged.'}, 'workflow_redesigned': {'type': 'boolean', 'description': 'True only when the end-to-end workflow has been redesigned around the AI and retained human judgement, false when the existing workflow remains.'}, 'decision_rights_defined': {'type': 'boolean', 'description': 'True only when decision, override and escalation rights have named human owners, false when authority remains unclear.'}}, 'description': 'Optional evidence that the work around the AI has been redesigned. Pass only what is known. Any explicit false value blocks Accelerate until the gap is closed; omitted checks remain visible as unknown.'}, 'signal_completeness': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Optional 0–1. How grounded the four pillar scores are in real evidence versus estimated from context. Defaults to 1 (treated as measured). If the organisation lacks formal change-readiness or risk metadata, estimate the pillars from what you know AND set this lower to say so — decision confidence is reduced proportionally and a caveat is attached, instead of returning a falsely confident verdict on soft inputs.'}}}
Output schema
{'type': 'object', 'required': ['bvf_version', 'status', 'proposal', 'resolved_inputs', 'resolutions', 'missing_fields'], 'properties': {'status': {'enum': ['needs_input', 'verdict'], 'type': 'string', 'description': 'needs_input when one or more required decision inputs remain unresolved; verdict when scoring completed.'}, 'verdict': {'type': 'object', 'required': ['bvf_version', 'classification', 'reason', 'net_value_eur', 'gross_value_eur', 'decision_confidence', 'multipliers', 'drivers', 'benchmark_source', 'applied_modules', 'work_architecture'], 'properties': {'audit': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'engine': {'type': 'string'}, 'bvf_version': {'type': 'string'}, 'inputs_used': {'type': 'object', 'description': 'The resolved inputs the result was computed on, including estimated pillar values.'}, 'rules_fired': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The rules that actually fired, in order: estimation, gates, classification, value arithmetic.'}, 'engine_version': {'type': 'string'}}, 'description': 'Reproducibility record: engine version, the rules that fired, and the resolved inputs. Deterministic, no timestamps. If the verdict is challenged months later, the same inputs on the same engine version reproduce it exactly.'}, 'caveat': {'type': 'string', 'description': 'Present only when signal_completeness was low: warns the verdict rests on soft inputs and confidence was reduced.'}, 'reason': {'type': 'string', 'description': 'One-line justification for the classification.'}, 'drivers': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Named value drivers behind the estimate.'}, 'feedback': {'type': 'object', 'required': ['question', 'url'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'question': {'type': 'string'}}, 'description': 'Optional three-question feedback route, present only for Fix/Stop verdicts. The page records the response anonymously only when the user chooses an answer; no assessment data is attached.'}, 'bvf_version': {'type': 'string', 'description': 'AI BVF protocol version used.'}, 'multipliers': {'type': 'object', 'required': ['industry', 'tier', 'capture_low', 'capture_high'], 'properties': {'tier': {'type': 'number'}, 'industry': {'type': 'number'}, 'capture_low': {'type': 'number'}, 'capture_high': {'type': 'number'}}, 'description': 'Factors applied to the base rates.'}, 'scores_used': {'type': 'object', 'properties': {'governance_risk': {'type': 'number'}, 'financial_return': {'type': 'number'}, 'change_enablement': {'type': 'number'}, 'strategic_alignment': {'type': 'number'}}, 'description': 'The four pillar values the verdict was actually computed on, whether given by the caller or estimated by the engine. Show these to the user when any pillar was estimated.'}, 'sensitivity': {'type': 'object', 'properties': {'verdict_flips': {'type': 'array', 'items': {'type': 'string'}}, 'revenue_minus_20pct': {'type': 'object'}, 'readiness_one_notch_down': {'type': 'object', 'description': 'Null when readiness is already siloed.'}}, 'description': 'What moves this verdict, computed deterministically: the value if readiness were one notch worse, the value at revenue minus 20 percent, and the nearest single-pillar movements that flip the classification. Boards trust ranges with visible assumptions over point estimates; show this.'}, 'pillar_basis': {'type': 'object', 'properties': {'governance_risk': {'enum': ['given', 'estimated'], 'type': 'string'}, 'financial_return': {'enum': ['given', 'estimated'], 'type': 'string'}, 'change_enablement': {'enum': ['given', 'estimated'], 'type': 'string'}, 'strategic_alignment': {'enum': ['given', 'estimated'], 'type': 'string'}}, 'description': 'Per pillar: "given" (caller supplied it) or "estimated" (deterministic prior). When any pillar is estimated, tell the user which, and ask for evidence on those to firm up the verdict.'}, 'net_value_eur': {'type': 'object', 'required': ['low', 'high'], 'properties': {'low': {'type': 'number'}, 'high': {'type': 'number'}}, 'description': 'Modelled net value in EUR after capture rate, low/high.'}, 'classification': {'enum': ['Accelerate', 'Fix', 'Stop'], 'type': 'string', 'description': 'The verdict for this initiative.'}, 'applied_modules': {'type': 'array', 'items': {'type': 'string'}, 'description': 'BVF scoring modules that fired for this input.'}, 'gross_value_eur': {'type': 'object', 'required': ['low', 'high'], 'properties': {'low': {'type': 'number'}, 'high': {'type': 'number'}}, 'description': 'Modelled gross value in EUR before capture, low/high.'}, 'benchmark_source': {'type': 'string', 'description': 'Provenance and evidence status for the AI BVF planning rates applied.'}, 'work_architecture': {'type': 'object', 'required': ['status', 'blocks_accelerate', 'checks', 'gaps', 'unknowns', 'gate'], 'properties': {'gaps': {'type': 'array', 'items': {'type': 'string'}}, 'gate': {'type': 'string'}, 'checks': {'type': 'array', 'items': {'type': 'object'}}, 'status': {'enum': ['unknown', 'partial', 'gap', 'ready'], 'type': 'string'}, 'unknowns': {'type': 'array', 'items': {'type': 'string'}}, 'next_question': {'type': 'string'}, 'blocks_accelerate': {'type': 'boolean'}}, 'description': 'The work architecture gate across workflow, roles, human decision rights and performance measures. A stated gap or missing evidence blocks Accelerate.'}, 'advisory_next_step': {'type': 'string', 'description': 'Optional CTA, present only for Fix/Stop verdicts.'}, 'decision_confidence': {'type': 'number', 'description': 'Confidence in the verdict, 0-100.'}}, 'description': 'The AI BVF score. Present only when status is verdict.'}, 'proposal': {'type': 'string', 'description': 'The supplied proposal, returned so the next call can preserve it verbatim.'}, 'bvf_version': {'type': 'string'}, 'resolutions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Every deterministic resolution, naming the field, canonical value, source and matched phrase.'}, 'suggestions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Accepted values for an explicitly supplied field that could not be resolved.'}, 'next_question': {'type': 'string', 'description': 'One clarification covering every unresolved input. Present only when status is needs_input; ask it once, then call the tool again with the answers in the explicit fields.'}, 'missing_fields': {'type': 'array', 'items': {'enum': ['industry', 'revenue_eur', 'function', 'ai_tier', 'readiness'], 'type': 'string'}}, 'resolved_inputs': {'type': 'object', 'description': 'Canonical fields resolved so far. Explicit corrections override proposal inference.'}}}
Input schema
{'type': 'object', 'required': ['revenue_eur', 'ai_tier', 'readiness'], 'properties': {'ai_tier': {'enum': ['gen1', 'gen2', 'gen3'], 'type': 'string', 'description': 'Ambition of the AI operating model: gen1 = automation/RPA, gen2 = GenAI, gen3 = agentic. Paired with readiness to set pace_gap severity — gen3 on any readiness below agile, or gen2 on siloed, is severe; a higher tier against a slower operating model widens the gap and raises the drag.'}, 'industry': {'enum': ['universal', 'creative', 'education', 'energy', 'financial', 'healthcare', 'logistics', 'manufacturing', 'nonprofit', 'professional', 'public_sector', 'real_estate', 'retail', 'technology'], 'type': 'string', 'description': 'Optional; defaults to universal if omitted. Reserved for future vertical drag-rate adjustments — does not change the result today. Call list_taxonomy for accepted values.'}, 'readiness': {'enum': ['agile', 'traditional', 'siloed'], 'type': 'string', 'description': 'Organisational readiness, honest self-assessment: agile = cross-functional, fast decisions; traditional = functional hierarchy; siloed = rigid, hand-off heavy. Agile readiness yields minimal drag at any tier; the mismatch between a fast AI tier and a slower operating model is what generates the Organisational Drag Cost.'}, 'revenue_eur': {'type': 'number', 'minimum': 0, 'description': 'Approximate annual revenue in EUR (must be ≥ 0). The result scales with this: annual_drag_eur is returned as an absolute range and as drag_rate, a fraction of this revenue (e.g. 0.02 = 2%).'}}}
Output schema
{'type': 'object', 'required': ['bvf_version', 'annual_drag_eur', 'drag_rate', 'pace_gap', 'drivers', 'source'], 'properties': {'source': {'type': 'string', 'description': 'Citation for the drag-rate model applied.'}, 'drivers': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Named factors contributing to the drag.'}, 'pace_gap': {'enum': ['minimal', 'moderate', 'severe'], 'type': 'string', 'description': 'Severity of the tier↔readiness mismatch.'}, 'drag_rate': {'type': 'object', 'required': ['low', 'high'], 'properties': {'low': {'type': 'number'}, 'high': {'type': 'number'}}, 'description': 'Drag as a fraction of revenue (e.g. 0.02 = 2%), low/high.'}, 'bvf_version': {'type': 'string', 'description': 'AI BVF protocol version used.'}, 'annual_drag_eur': {'type': 'object', 'required': ['low', 'high'], 'properties': {'low': {'type': 'number'}, 'high': {'type': 'number'}}, 'description': 'Estimated annual Organisational Drag Cost in EUR, low/high.'}}}
Input schema
{'type': 'object', 'required': ['process_id', 'function', 'instances_per_year', 'fte_hours_per_instance', 'loaded_hourly_rate_eur', 'cycle_time_days', 'touch_ratio', 'handoffs', 'rework_rate', 'automation_level', 'direct_spend_eur'], 'properties': {'function': {'enum': ['finance', 'hr', 'sales', 'supply', 'cx', 'risk', 'it', 'rd'], 'type': 'string', 'description': 'Business function the process belongs to. See list_taxonomy.'}, 'handoffs': {'type': 'number', 'minimum': 0, 'description': 'Distinct owners/systems an instance passes through. Weighed against the per-function median; many handoffs make handoff drag dominant and point to Consolidate & re-sequence.'}, 'readiness': {'enum': ['agile', 'traditional', 'siloed'], 'type': 'string', 'description': 'Optional. Org change-absorption capacity — agile / traditional / siloed — which caps the realised (net) saving below the gross potential. Defaults to traditional.'}, 'process_id': {'type': 'string', 'description': 'Stable identifier for the process.'}, 'rework_rate': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Fraction of instances reopened/reworked (0–1). When rework is the dominant drag factor the intervention becomes Quality controls, and it also sets the addressable share for that path.'}, 'touch_ratio': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Touch-time ÷ cycle-time (0–1). The remainder is wait; a low value means the process is mostly waiting, which pushes the intervention toward Consolidate & re-sequence.'}, 'cycle_time_days': {'type': 'number', 'minimum': 0, 'description': 'Median wall-clock days per instance, end to end. Long cycles relative to touch-time signal wait/latency drag.'}, 'automation_level': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Share already automated (0–1). Low automation makes manual effort the dominant drag and selects Automate; the un-automated remainder is the addressable share.'}, 'direct_spend_eur': {'type': 'number', 'minimum': 0, 'description': 'Annual licence/vendor/tooling spend on the process in EUR. Added to the labour baseline and shifts how much of the saving is labour- vs spend-addressable.'}, 'instances_per_year': {'type': 'number', 'minimum': 0, 'description': 'Process volume: how many times it runs per year. Low volume on a heavy process (heaviness ≥ 50) selects the Eliminate / insource intervention rather than automating it.'}, 'signal_completeness': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Optional 0–1. How much of the above was measured versus defaulted. Governs decision_confidence proportionally — lower it when you estimated inputs so the verdict stays honest. Defaults to 0.7.'}, 'fte_hours_per_instance': {'type': 'number', 'minimum': 0, 'description': 'Human touch-time in hours per instance. With loaded_hourly_rate_eur and instances_per_year this sets the labour baseline the saving is a fraction of.'}, 'loaded_hourly_rate_eur': {'type': 'number', 'minimum': 0, 'description': 'Fully-loaded labour cost per hour in EUR (salary + on-costs). Multiplies fte_hours_per_instance × instances_per_year into the annual labour baseline.'}}}
Output schema
{'type': 'object', 'required': ['bvf_version', 'brain_version', 'process_id', 'function', 'baseline_cost_eur', 'heaviness', 'drag_decomposition', 'intervention', 'net_saving_eur', 'efficiency_gain_pct', 'verdict', 'decision_confidence', 'assumptions', 'offer_to_execute', 'evidence_maturity', 'disclaimer'], 'properties': {'verdict': {'enum': ['Accelerate', 'Fix', 'Stop'], 'type': 'string', 'description': 'The call on the intervention.'}, 'function': {'type': 'string', 'description': 'Business function diagnosed.'}, 'heaviness': {'type': 'number', 'description': 'Process heaviness index, 0–100.'}, 'disclaimer': {'type': 'string', 'description': 'Directional decision aid, not an audited figure.'}, 'process_id': {'type': 'string', 'description': 'Echo of the input process id.'}, 'assumptions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The assumptions behind the figure — never a naked number.'}, 'bvf_version': {'type': 'string', 'description': 'AI BVF protocol version used.'}, 'intervention': {'enum': ['Automate', 'Consolidate & re-sequence', 'Quality controls', 'Eliminate / insource'], 'type': 'string', 'description': 'Recommended move.'}, 'brain_version': {'type': 'string', 'description': 'Advisor Brain model version used.'}, 'net_saving_eur': {'type': 'object', 'required': ['low', 'high'], 'properties': {'low': {'type': 'number'}, 'high': {'type': 'number'}}, 'description': 'Modelled net annual saving in EUR after readiness capture, low/high.'}, 'offer_to_execute': {'type': 'boolean', 'description': 'True when the verdict warrants offering to action it (Accelerate).'}, 'baseline_cost_eur': {'type': 'number', 'description': 'Current annual cost: labour + direct spend.'}, 'evidence_maturity': {'enum': ['High', 'Medium', 'Low'], 'type': 'string', 'description': 'Strength of the benchmark evidence behind the effectiveness band.'}, 'advisory_next_step': {'type': 'string', 'description': 'Optional CTA, present only for Fix/Stop verdicts.'}, 'drag_decomposition': {'type': 'object', 'required': ['manual', 'handoffs', 'wait', 'rework', 'cycle'], 'properties': {'wait': {'type': 'number'}, 'cycle': {'type': 'number'}, 'manual': {'type': 'number'}, 'rework': {'type': 'number'}, 'handoffs': {'type': 'number'}}, 'description': 'Share of heaviness from each friction factor (sums to ~1).'}, 'decision_confidence': {'type': 'number', 'description': 'Confidence in the verdict, 0–100.'}, 'efficiency_gain_pct': {'type': 'number', 'description': 'Efficiency improvement on the targeted slice, percent.'}}}
Input schema
{'type': 'object', 'required': ['function', 'industry'], 'properties': {'function': {'enum': ['finance', 'hr', 'sales', 'supply', 'cx', 'risk', 'it', 'rd'], 'type': 'string', 'description': 'Business function to benchmark — must be one of the list_taxonomy function values. Selects the base revenue-uplift and cost-reduction rate ranges (returned as fractions of revenue) and the value drivers.'}, 'industry': {'enum': ['universal', 'creative', 'education', 'energy', 'financial', 'healthcare', 'logistics', 'manufacturing', 'nonprofit', 'professional', 'public_sector', 'real_estate', 'retail', 'technology'], 'type': 'string', 'description': 'Industry whose multiplier to apply — must be one of the list_taxonomy industry values. The returned industry_multiplier is applied to the function base rates; pass "universal" for the un-adjusted rates.'}}}
Output schema
{'type': 'object', 'required': ['function', 'industry', 'revenue_uplift_range', 'cost_takeout_range', 'industry_multiplier', 'drivers', 'source'], 'properties': {'source': {'type': 'string', 'description': 'Citation for the benchmark figures.'}, 'drivers': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Named value drivers behind the benchmark.'}, 'function': {'type': 'string', 'description': 'Business function the rates apply to.'}, 'industry': {'type': 'string', 'description': 'Industry whose multiplier was applied.'}, 'cost_takeout_range': {'type': 'object', 'required': ['lo', 'hi'], 'properties': {'hi': {'type': 'number'}, 'lo': {'type': 'number'}}, 'description': 'Cost take-out as a fraction of revenue, lo/hi.'}, 'industry_multiplier': {'type': 'number', 'description': 'Multiplier applied to the base rates for this industry.'}, 'revenue_uplift_range': {'type': 'object', 'required': ['lo', 'hi'], 'properties': {'hi': {'type': 'number'}, 'lo': {'type': 'number'}}, 'description': 'Revenue uplift as a fraction of revenue, lo/hi.'}}}
Input schema
{'type': 'object', 'required': ['function'], 'properties': {'function': {'enum': ['finance', 'hr', 'sales', 'supply', 'cx', 'risk', 'it', 'rd'], 'type': 'string', 'description': 'Business function the process belongs to. Selects the disclosed AI BVF cycle-time and hand-off reference points used to interpret the signals. Call list_taxonomy if unsure.'}, 'handoffs': {'type': 'number', 'minimum': 0, 'description': 'Distinct owners or systems an instance passes through. Read against the function median: 1.5x or more the median reads siloed, at or above the median reads traditional, below it reads agile.'}, 'rework_rate': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Fraction of instances reopened or reworked (0-1). 15% or more reads siloed, 5-15% traditional, under 5% agile.'}, 'touch_ratio': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Touch-time divided by cycle-time (0-1); the remainder is waiting. Under 0.15 reads siloed (the process lives in queues), 0.15-0.4 traditional, above 0.4 agile.'}, 'cycle_time_days': {'type': 'number', 'minimum': 0, 'description': 'Median wall-clock days per instance. Read against the function median, same bands as handoffs.'}, 'automation_level': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Share of the process already automated (0-1). Under 0.2 reads siloed, 0.2-0.5 traditional, above 0.5 agile.'}, 'claimed_readiness': {'enum': ['agile', 'traditional', 'siloed'], 'type': 'string', 'description': 'Optional. What the organisation says about itself. The measured result is compared against it and the gap returned as readiness_gap plus a gap_finding, because an organisation whose self-image runs ahead of its process data has just told you where the change work starts.'}}}
Output schema
{'type': 'object', 'required': ['bvf_version', 'readiness', 'readiness_basis', 'confidence', 'signals_used', 'signal_reads', 'guidance'], 'properties': {'audit': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'engine': {'type': 'string'}, 'bvf_version': {'type': 'string'}, 'inputs_used': {'type': 'object', 'description': 'The resolved inputs the result was computed on, including estimated pillar values.'}, 'rules_fired': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The rules that actually fired, in order: estimation, gates, classification, value arithmetic.'}, 'engine_version': {'type': 'string'}}, 'description': 'Reproducibility record: engine version, the rules that fired, and the resolved inputs. Deterministic, no timestamps. If the verdict is challenged months later, the same inputs on the same engine version reproduce it exactly.'}, 'guidance': {'type': 'string', 'description': 'How to use the result downstream, including what a gap between measured and self-reported readiness means.'}, 'readiness': {'enum': ['agile', 'traditional', 'siloed'], 'type': 'string', 'description': 'The readiness classification the measured signals support.'}, 'confidence': {'type': 'number', 'description': 'Confidence 0-100, set by signal coverage (2 signals ~45, 5 signals ~90) and discounted when signals disagree.'}, 'bvf_version': {'type': 'string', 'description': 'AI BVF protocol version used.'}, 'gap_finding': {'type': 'string', 'description': 'The claimed-versus-measured gap read as a change-readiness finding. Surface verbatim when present.'}, 'disagreement': {'type': 'string', 'description': 'Present when signals point in opposing directions: readiness is uneven across the process, read the per-signal detail.'}, 'signal_reads': {'type': 'array', 'items': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'leans': {'enum': ['agile', 'traditional', 'siloed'], 'type': 'string'}, 'value': {'type': 'number'}, 'signal': {'type': 'string'}}}, 'description': 'Per-signal read: the value, which readiness it leans toward, and why in plain language. Show these to the user.'}, 'signals_used': {'type': 'number', 'description': 'How many of the five signals were provided.'}, 'readiness_gap': {'type': 'number', 'description': 'Ordinal distance claimed-to-measured. Positive: the organisation claims better than it measures.'}, 'readiness_basis': {'enum': ['measured'], 'type': 'string', 'description': 'Always measured: this came from process data, not self-report.'}, 'claimed_readiness': {'enum': ['agile', 'traditional', 'siloed'], 'type': 'string', 'description': 'Echo of the claim, when supplied.'}}}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['bvf_version', 'industries', 'functions', 'ai_tiers', 'readiness'], 'properties': {'ai_tiers': {'type': 'array', 'items': {'type': 'string'}, 'description': 'All accepted ai_tier values (gen1/gen2/gen3).'}, 'functions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'All accepted business-function values.'}, 'readiness': {'type': 'array', 'items': {'type': 'string'}, 'description': 'All accepted organisational-readiness values.'}, 'industries': {'type': 'array', 'items': {'type': 'string'}, 'description': 'All accepted industry values.'}, 'bvf_version': {'type': 'string', 'description': 'AI BVF protocol version these enums belong to.'}}}
Input schema
{'type': 'object', 'properties': {'ai_tier': {'type': 'string', 'description': 'Everyday AI language, e.g. RPA, GenAI copilot, autonomous agents. Resolved to gen1/gen2/gen3.'}, 'function': {'type': 'string', 'description': 'Everyday function language, e.g. customer service, procurement, legal, people. Resolved to cx, supply, risk, hr and so on.'}, 'industry': {'type': 'string', 'description': 'Everyday industry language, e.g. banking, ecommerce, pharma. Resolved to the canonical enum.'}, 'readiness': {'type': 'string', 'description': 'Everyday culture language, e.g. bureaucratic, cross-functional, hierarchical. Resolved to agile/traditional/siloed.'}}}
Output schema
{'type': 'object', 'required': ['bvf_version', 'guidance'], 'properties': {'ai_tier': {'type': 'object'}, 'function': {'type': 'object'}, 'guidance': {'type': 'string'}, 'industry': {'type': 'object', 'description': 'input, resolved and matched_on; or resolved null with suggestions when no confident match.'}, 'readiness': {'type': 'object'}, 'bvf_version': {'type': 'string'}}}
Input schema
{'type': 'object', 'required': ['industry', 'revenue_eur', 'function', 'ai_tier', 'readiness'], 'properties': {'scores': {'type': 'object', 'properties': {'governance_risk': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional; when omitted, estimated from tier and regulated context (gen1 30 / gen2 42 / gen3 55, +10 in a regulated function, +8 in a regulated industry — agentic AI in regulated finance estimates at 73 and forces a Stop until governance evidence exists). This pillar is INVERTED: higher means MORE risk. ≥ 70 forces a Stop on its own; must be ≤ 40 for Accelerate.'}, 'financial_return': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional; when omitted, estimated from the disclosed AI BVF planning range for the function (40–52, never enough to clear 60 unmodelled, never low enough to force a Stop). Strength of the modelled return (0–100, higher is better). A value ≤ 20 forces a Stop on its own; ≥ 60 is one of the four conditions required for Accelerate.'}, 'change_enablement': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional; when omitted, estimated from readiness (agile 55, traditional 45, siloed 32 — always below the 60 floor, because an unevidenced change capability is unproven). Sponsor in place, owner named, change budget funded (0–100, higher is better). Must be ≥ 60 for an Accelerate verdict.'}, 'strategic_alignment': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional; estimated at 50 (unproven) when omitted, since alignment to a board KPI cannot be read from context. How clearly this moves a board-level KPI (0–100, higher is better). Must be ≥ 60 — together with financial_return ≥ 60, change_enablement ≥ 60 and governance_risk ≤ 40 — for an Accelerate verdict.'}}, 'description': 'OPTIONAL, and each pillar inside it is optional. The four AI BVF pillars, each an honest 0–100 self-assessment, combining deterministically into the verdict: governance_risk ≥ 70 OR financial_return ≤ 20 returns Stop; strategic_alignment, financial_return and change_enablement all ≥ 60 with governance_risk ≤ 40 returns Accelerate; everything else returns Fix. Pass ONLY the pillars the user has real evidence for — do NOT invent numbers for the rest. Missing pillars are estimated deterministically by the engine from disclosed AI BVF planning assumptions, the response reports which via pillar_basis and scores_used, decision confidence is haircut by how much was estimated, and a fully-estimated pass can never return Accelerate (it returns Fix pending confirmation). So call immediately with whatever the user gave you, then ask for evidence on the estimated pillars and re-call to firm the verdict up.'}, 'ai_tier': {'enum': ['gen1', 'gen2', 'gen3'], 'type': 'string', 'description': 'Ambition of the AI being deployed: gen1 = automation/RPA, gen2 = GenAI, gen3 = agentic. Interacts with readiness — a more ambitious tier running on lower readiness widens the pace-layer gap, which discounts the modelled EUR value even when the four pillar scores are strong.'}, 'function': {'enum': ['finance', 'hr', 'sales', 'supply', 'cx', 'risk', 'it', 'rd'], 'type': 'string', 'description': 'Business function where the AI will operate, as one of the accepted enum values — selects which benchmark value drivers and rate ranges apply. Call list_taxonomy for the exact strings if unsure.'}, 'industry': {'enum': ['universal', 'creative', 'education', 'energy', 'financial', 'healthcare', 'logistics', 'manufacturing', 'nonprofit', 'professional', 'public_sector', 'real_estate', 'retail', 'technology'], 'type': 'string', 'description': 'Your industry, as one of the accepted enum values — used to select the benchmark rate multiplier applied to the modelled EUR value. Call list_taxonomy for the exact strings if unsure.'}, 'readiness': {'enum': ['agile', 'traditional', 'siloed'], 'type': 'string', 'description': 'Organisational readiness, honest self-assessment: agile = cross-functional, fast decisions; traditional = functional hierarchy; siloed = rigid, hand-off heavy. Sets the value-capture rate and, paired with ai_tier, the pace-layer drag — lower readiness against a higher tier reduces the captured value. Self-report is gameable: when the user has real process numbers, call infer_readiness first and pass its measured classification here instead.'}, 'risk_type': {'enum': ['regulatory', 'reputational', 'operational'], 'type': 'string', 'description': 'Optional. The nature of a high governance-risk score: "regulatory" = statute applies (EU AI Act, GDPR Article 22, DORA), "reputational" = the risk is how failure looks and lands publicly, "operational" = the system failing quietly inside a process. Selects between a regulatory remediation sequence, visible trust guardrails, and a proportionate governance review. If you do not know, omit it: the engine infers (gen3 tier, or a regulated function/industry, infers regulatory) and marks the play provisional.'}, 'revenue_eur': {'type': 'number', 'minimum': 0, 'description': 'Approximate annual revenue in EUR (must be ≥ 0). Scales the whole output: the disclosed AI BVF planning rates are applied as fractions of this figure, so the modelled EUR value range grows with it. A rough order-of-magnitude estimate is fine.'}, 'resistance_type': {'enum': ['will', 'skill'], 'type': 'string', 'description': 'Optional. What sits behind a low change-enablement score: "will" = people do not want the change (power shifts, fear, no case for change), "skill" = people cannot yet do it (capability and capacity gap). Selects between a coalition-building play (Kotter 1-2 + ADKAR Awareness/Desire) and an owner-and-capability play (ADKAR Knowledge/Ability). If you do not know, omit it: the engine infers from readiness (agile infers skill, traditional/siloed infers will) and marks the play provisional. Ask the user "is the resistance about not wanting this, or not being able to do it yet?" and re-call to sharpen.'}, 'work_architecture': {'type': 'object', 'properties': {'measures_updated': {'type': 'boolean', 'description': 'True only when performance measures and incentives reflect the redesigned work, false when the old measures remain.'}, 'roles_redesigned': {'type': 'boolean', 'description': 'True only when affected roles, accountabilities and capability expectations have been rewritten, false when roles remain unchanged.'}, 'workflow_redesigned': {'type': 'boolean', 'description': 'True only when the end-to-end workflow has been redesigned around the AI and retained human judgement, false when the existing workflow remains.'}, 'decision_rights_defined': {'type': 'boolean', 'description': 'True only when decision, override and escalation rights have named human owners, false when authority remains unclear.'}}, 'description': 'Optional evidence that the work around the AI has been redesigned. Pass only what is known. Any explicit false value blocks Accelerate until the gap is closed; omitted checks remain visible as unknown.'}}, 'description': 'Inputs for a change plan after a Fix or Stop verdict. industry, revenue_eur, function, ai_tier and readiness must match the scoring call so the plan is built against the same case. scores and work_architecture may be copied from score_initiative; omitted pillars are estimated and make the plan provisional. resistance_type and risk_type are optional diagnostics that select the play, and omission triggers a named inference plus the next question to ask.'}
Output schema
{'type': 'object', 'required': ['bvf_version', 'current_classification', 'target_classification', 'feasible', 'recommendations', 'projected_decision_confidence', 'notes'], 'properties': {'audit': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'engine': {'type': 'string'}, 'bvf_version': {'type': 'string'}, 'inputs_used': {'type': 'object', 'description': 'The resolved inputs the result was computed on, including estimated pillar values.'}, 'rules_fired': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The rules that actually fired, in order: estimation, gates, classification, value arithmetic.'}, 'engine_version': {'type': 'string'}}, 'description': 'Reproducibility record: engine version, the rules that fired, and the resolved inputs. Deterministic, no timestamps. If the verdict is challenged months later, the same inputs on the same engine version reproduce it exactly.'}, 'notes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Caveats or context on the recommendation set.'}, 'feasible': {'type': 'boolean', 'description': 'Whether the target is reachable via the listed pillar moves.'}, 'feedback': {'type': 'object', 'required': ['question', 'url'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'question': {'type': 'string'}}, 'description': 'Optional three-question feedback route, present only for Fix/Stop verdicts. The page records the response anonymously only when the user chooses an answer; no assessment data is attached.'}, 'bvf_version': {'type': 'string', 'description': 'AI BVF protocol version used.'}, 'change_plan': {'type': 'object', 'properties': {'plays': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Play identifier, e.g. coalition-first, regulatory-remediation, value-rescope.'}, 'owner': {'type': 'string', 'description': 'The role that owns the play, to be filled with a named individual.'}, 'steps': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Sequenced actions, in order. Order matters: e.g. desire before change budget.'}, 'pillar': {'type': 'string', 'description': 'The pillar this play repairs, or pace_gap for the cross-cutting operating-model play.'}, 'source': {'type': 'string', 'description': 'The named method behind the play: Kotter, Prosci ADKAR, EU AI Act, benchmark sources.'}, 'org_move': {'type': 'object', 'description': 'The organisation-level move (method + action), typically a Kotter step.'}, 'diagnosis': {'type': 'string', 'description': 'What is actually blocking, in plain language.'}, 'person_move': {'type': 'object', 'description': 'The individual-level move (method + action), typically an ADKAR stage.'}, 'provisional': {'type': 'boolean', 'description': 'True when the play was inferred from readiness/tier/function rather than told via resistance_type or risk_type. When true, ask the diagnostic questions and re-call with the answer to sharpen the plan.'}, 'stop_condition': {'type': 'string', 'description': 'Present when the honest escalation from this play is Stop, and the condition that triggers it.'}, 'timeline_weeks': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Expected duration range in weeks, [low, high].'}, 'diagnostic_questions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Questions to put to the organisation to sharpen or challenge the play. Ask these before executing.'}}}, 'description': 'Named change plays, worst pillar first, each selected from the failing pillar AND the organisational context. Every play works two altitudes: the organisation (Kotter) and the person (Prosci ADKAR).'}, 'position': {'enum': ['near_go', 'contested', 'near_stop'], 'type': 'string', 'description': 'Where this Fix sits between Go and Stop. near_go = a funding decision waiting on evidence; near_stop = one adverse finding from Stop, run only the first play then re-score.'}, 'honest_stop': {'type': 'string', 'description': 'Present when the truthful call is Stop rather than Fix. Surface this verbatim; it is the most valuable sentence in the response when it appears.'}, 'rescore_gate': {'type': 'object', 'description': 'What must be true, and by when, for the re-score to arbitrate. Fix is a decision with a deadline, not a limbo state.'}, 'cost_of_waiting': {'type': 'string', 'description': 'The cost of delay framed as a decision rule: fix if the plays cost less than the waiting, stop if they cost more.'}, 'position_detail': {'type': 'string', 'description': 'One-paragraph read of the position, written for the organisation.'}, 'binding_constraint': {'type': 'string', 'description': 'The one thing standing between this initiative and a Go. Lead with this; a single named blocker gets acted on where a list of four gets skimmed.'}, 'cost_of_waiting_eur': {'type': 'object', 'description': 'Estimated organisational drag over the plan window, {low, high} in EUR, from the pace-layer model. The price of sitting in Fix.'}}, 'description': 'The change-leader layer: a specific, sequenced route from Fix or Stop toward Go, aimed at the organisation. Present for Fix/Stop, absent when the initiative is already Accelerate. Present this to the user as the plan, not as raw data.'}, 'recommendations': {'type': 'array', 'items': {'type': 'object', 'required': ['pillar', 'current', 'target', 'delta', 'action', 'rationale'], 'properties': {'delta': {'type': 'number', 'description': 'Points of improvement required (target − current).'}, 'action': {'type': 'string', 'description': 'Concrete action to close the gap.'}, 'pillar': {'enum': ['strategic_alignment', 'financial_return', 'change_enablement', 'governance_risk'], 'type': 'string'}, 'target': {'type': 'number', 'description': 'Pillar score needed to flip classification (0–100).'}, 'current': {'type': 'number', 'description': 'Current pillar score (0–100).'}, 'rationale': {'type': 'string', 'description': 'Why this action moves the pillar.'}}}, 'description': 'Per-pillar improvement actions.'}, 'advisory_next_step': {'type': 'string', 'description': 'Optional CTA, present only for Fix/Stop verdicts.'}, 'target_classification': {'enum': ['Accelerate', 'Fix', 'Stop'], 'type': 'string', 'description': 'Verdict the recommendations aim to reach.'}, 'current_classification': {'enum': ['Accelerate', 'Fix', 'Stop'], 'type': 'string', 'description': 'Verdict as the initiative stands today.'}, 'projected_decision_confidence': {'type': 'number', 'description': 'Confidence in the verdict if the recommendations land, 0-100.'}}}
Input schema
{'type': 'object', 'required': ['industry', 'revenue_eur', 'function', 'ai_tier', 'readiness'], 'properties': {'scores': {'type': 'object', 'properties': {'governance_risk': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional; when omitted, estimated from tier and regulated context (gen1 30 / gen2 42 / gen3 55, +10 in a regulated function, +8 in a regulated industry — agentic AI in regulated finance estimates at 73 and forces a Stop until governance evidence exists). This pillar is INVERTED: higher means MORE risk. ≥ 70 forces a Stop on its own; must be ≤ 40 for Accelerate.'}, 'financial_return': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional; when omitted, estimated from the disclosed AI BVF planning range for the function (40–52, never enough to clear 60 unmodelled, never low enough to force a Stop). Strength of the modelled return (0–100, higher is better). A value ≤ 20 forces a Stop on its own; ≥ 60 is one of the four conditions required for Accelerate.'}, 'change_enablement': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional; when omitted, estimated from readiness (agile 55, traditional 45, siloed 32 — always below the 60 floor, because an unevidenced change capability is unproven). Sponsor in place, owner named, change budget funded (0–100, higher is better). Must be ≥ 60 for an Accelerate verdict.'}, 'strategic_alignment': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Optional; estimated at 50 (unproven) when omitted, since alignment to a board KPI cannot be read from context. How clearly this moves a board-level KPI (0–100, higher is better). Must be ≥ 60 — together with financial_return ≥ 60, change_enablement ≥ 60 and governance_risk ≤ 40 — for an Accelerate verdict.'}}, 'description': 'OPTIONAL, and each pillar inside it is optional. The four AI BVF pillars, each an honest 0–100 self-assessment, combining deterministically into the verdict: governance_risk ≥ 70 OR financial_return ≤ 20 returns Stop; strategic_alignment, financial_return and change_enablement all ≥ 60 with governance_risk ≤ 40 returns Accelerate; everything else returns Fix. Pass ONLY the pillars the user has real evidence for — do NOT invent numbers for the rest. Missing pillars are estimated deterministically by the engine from disclosed AI BVF planning assumptions, the response reports which via pillar_basis and scores_used, decision confidence is haircut by how much was estimated, and a fully-estimated pass can never return Accelerate (it returns Fix pending confirmation). So call immediately with whatever the user gave you, then ask for evidence on the estimated pillars and re-call to firm the verdict up.'}, 'ai_tier': {'enum': ['gen1', 'gen2', 'gen3'], 'type': 'string', 'description': 'Ambition of the AI being deployed: gen1 = automation/RPA, gen2 = GenAI, gen3 = agentic. Interacts with readiness — a more ambitious tier running on lower readiness widens the pace-layer gap, which discounts the modelled EUR value even when the four pillar scores are strong.'}, 'function': {'enum': ['finance', 'hr', 'sales', 'supply', 'cx', 'risk', 'it', 'rd'], 'type': 'string', 'description': 'Business function where the AI will operate, as one of the accepted enum values — selects which benchmark value drivers and rate ranges apply. Call list_taxonomy for the exact strings if unsure.'}, 'industry': {'enum': ['universal', 'creative', 'education', 'energy', 'financial', 'healthcare', 'logistics', 'manufacturing', 'nonprofit', 'professional', 'public_sector', 'real_estate', 'retail', 'technology'], 'type': 'string', 'description': 'Your industry, as one of the accepted enum values — used to select the benchmark rate multiplier applied to the modelled EUR value. Call list_taxonomy for the exact strings if unsure.'}, 'readiness': {'enum': ['agile', 'traditional', 'siloed'], 'type': 'string', 'description': 'Organisational readiness, honest self-assessment: agile = cross-functional, fast decisions; traditional = functional hierarchy; siloed = rigid, hand-off heavy. Sets the value-capture rate and, paired with ai_tier, the pace-layer drag — lower readiness against a higher tier reduces the captured value. Self-report is gameable: when the user has real process numbers, call infer_readiness first and pass its measured classification here instead.'}, 'revenue_eur': {'type': 'number', 'minimum': 0, 'description': 'Approximate annual revenue in EUR (must be ≥ 0). Scales the whole output: the disclosed AI BVF planning rates are applied as fractions of this figure, so the modelled EUR value range grows with it. A rough order-of-magnitude estimate is fine.'}, 'work_architecture': {'type': 'object', 'properties': {'measures_updated': {'type': 'boolean', 'description': 'True only when performance measures and incentives reflect the redesigned work, false when the old measures remain.'}, 'roles_redesigned': {'type': 'boolean', 'description': 'True only when affected roles, accountabilities and capability expectations have been rewritten, false when roles remain unchanged.'}, 'workflow_redesigned': {'type': 'boolean', 'description': 'True only when the end-to-end workflow has been redesigned around the AI and retained human judgement, false when the existing workflow remains.'}, 'decision_rights_defined': {'type': 'boolean', 'description': 'True only when decision, override and escalation rights have named human owners, false when authority remains unclear.'}}, 'description': 'Optional evidence that the work around the AI has been redesigned. Pass only what is known. Any explicit false value blocks Accelerate until the gap is closed; omitted checks remain visible as unknown.'}, 'signal_completeness': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Optional 0–1. How grounded the four pillar scores are in real evidence versus estimated from context. Defaults to 1 (treated as measured). If the organisation lacks formal change-readiness or risk metadata, estimate the pillars from what you know AND set this lower to say so — decision confidence is reduced proportionally and a caveat is attached, instead of returning a falsely confident verdict on soft inputs.'}}}
Output schema
{'type': 'object', 'required': ['bvf_version', 'classification', 'reason', 'net_value_eur', 'gross_value_eur', 'decision_confidence', 'multipliers', 'drivers', 'benchmark_source', 'applied_modules', 'work_architecture'], 'properties': {'audit': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'engine': {'type': 'string'}, 'bvf_version': {'type': 'string'}, 'inputs_used': {'type': 'object', 'description': 'The resolved inputs the result was computed on, including estimated pillar values.'}, 'rules_fired': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The rules that actually fired, in order: estimation, gates, classification, value arithmetic.'}, 'engine_version': {'type': 'string'}}, 'description': 'Reproducibility record: engine version, the rules that fired, and the resolved inputs. Deterministic, no timestamps. If the verdict is challenged months later, the same inputs on the same engine version reproduce it exactly.'}, 'caveat': {'type': 'string', 'description': 'Present only when signal_completeness was low: warns the verdict rests on soft inputs and confidence was reduced.'}, 'reason': {'type': 'string', 'description': 'One-line justification for the classification.'}, 'drivers': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Named value drivers behind the estimate.'}, 'feedback': {'type': 'object', 'required': ['question', 'url'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'question': {'type': 'string'}}, 'description': 'Optional three-question feedback route, present only for Fix/Stop verdicts. The page records the response anonymously only when the user chooses an answer; no assessment data is attached.'}, 'bvf_version': {'type': 'string', 'description': 'AI BVF protocol version used.'}, 'multipliers': {'type': 'object', 'required': ['industry', 'tier', 'capture_low', 'capture_high'], 'properties': {'tier': {'type': 'number'}, 'industry': {'type': 'number'}, 'capture_low': {'type': 'number'}, 'capture_high': {'type': 'number'}}, 'description': 'Factors applied to the base rates.'}, 'scores_used': {'type': 'object', 'properties': {'governance_risk': {'type': 'number'}, 'financial_return': {'type': 'number'}, 'change_enablement': {'type': 'number'}, 'strategic_alignment': {'type': 'number'}}, 'description': 'The four pillar values the verdict was actually computed on, whether given by the caller or estimated by the engine. Show these to the user when any pillar was estimated.'}, 'sensitivity': {'type': 'object', 'properties': {'verdict_flips': {'type': 'array', 'items': {'type': 'string'}}, 'revenue_minus_20pct': {'type': 'object'}, 'readiness_one_notch_down': {'type': 'object', 'description': 'Null when readiness is already siloed.'}}, 'description': 'What moves this verdict, computed deterministically: the value if readiness were one notch worse, the value at revenue minus 20 percent, and the nearest single-pillar movements that flip the classification. Boards trust ranges with visible assumptions over point estimates; show this.'}, 'pillar_basis': {'type': 'object', 'properties': {'governance_risk': {'enum': ['given', 'estimated'], 'type': 'string'}, 'financial_return': {'enum': ['given', 'estimated'], 'type': 'string'}, 'change_enablement': {'enum': ['given', 'estimated'], 'type': 'string'}, 'strategic_alignment': {'enum': ['given', 'estimated'], 'type': 'string'}}, 'description': 'Per pillar: "given" (caller supplied it) or "estimated" (deterministic prior). When any pillar is estimated, tell the user which, and ask for evidence on those to firm up the verdict.'}, 'net_value_eur': {'type': 'object', 'required': ['low', 'high'], 'properties': {'low': {'type': 'number'}, 'high': {'type': 'number'}}, 'description': 'Modelled net value in EUR after capture rate, low/high.'}, 'classification': {'enum': ['Accelerate', 'Fix', 'Stop'], 'type': 'string', 'description': 'The verdict for this initiative.'}, 'applied_modules': {'type': 'array', 'items': {'type': 'string'}, 'description': 'BVF scoring modules that fired for this input.'}, 'gross_value_eur': {'type': 'object', 'required': ['low', 'high'], 'properties': {'low': {'type': 'number'}, 'high': {'type': 'number'}}, 'description': 'Modelled gross value in EUR before capture, low/high.'}, 'benchmark_source': {'type': 'string', 'description': 'Provenance and evidence status for the AI BVF planning rates applied.'}, 'work_architecture': {'type': 'object', 'required': ['status', 'blocks_accelerate', 'checks', 'gaps', 'unknowns', 'gate'], 'properties': {'gaps': {'type': 'array', 'items': {'type': 'string'}}, 'gate': {'type': 'string'}, 'checks': {'type': 'array', 'items': {'type': 'object'}}, 'status': {'enum': ['unknown', 'partial', 'gap', 'ready'], 'type': 'string'}, 'unknowns': {'type': 'array', 'items': {'type': 'string'}}, 'next_question': {'type': 'string'}, 'blocks_accelerate': {'type': 'boolean'}}, 'description': 'The work architecture gate across workflow, roles, human decision rights and performance measures. A stated gap or missing evidence blocks Accelerate.'}, 'advisory_next_step': {'type': 'string', 'description': 'Optional CTA, present only for Fix/Stop verdicts.'}, 'decision_confidence': {'type': 'number', 'description': 'Confidence in the verdict, 0-100.'}}}
Input schema
{'type': 'object', 'required': ['portfolio', 'readiness'], 'properties': {'portfolio': {'type': 'object', 'description': 'A portfolio document conforming to the AI BVF v1.0 schema: bvf_version, organization (name, industry, optional revenue_eur), and a non-empty initiatives array. Each initiative carries id, name, function, ai_tier, and a scores object whose four pillars are each either a bare number (0–100) or an object { value: 0–100 }; both shapes are accepted everywhere. Every initiative is run through the same rule as score_initiative — governance_risk ≥ 70 OR financial_return ≤ 20 → Stop; all of strategic_alignment/financial_return/change_enablement ≥ 60 with governance_risk ≤ 40 → Accelerate; else Fix — and the verdicts are aggregated into portfolio counts. organization.revenue_eur is required to model EUR value; initiatives that cannot be scored (missing revenue, unknown function/ai_tier) appear in skipped_initiatives rather than scored_initiatives. Validate first with validate_portfolio if the document may be malformed. Schema: https://www.aibvf.com/protocol.'}, 'readiness': {'enum': ['agile', 'traditional', 'siloed'], 'type': 'string', 'description': 'Organisational readiness applied to every initiative in the portfolio. Honest self-assessment: agile = cross-functional, fast decisions; traditional = functional hierarchy; siloed = rigid, hand-off heavy. The portfolio schema does not carry per-initiative readiness; this single value sets the capture rate for the whole portfolio and, paired with the ai_tier of each initiative, its pace-layer drag — lower readiness against a higher tier discounts the modelled EUR value.'}}}
Output schema
{'type': 'object', 'required': ['bvf_version', 'valid', 'organization', 'readiness', 'total', 'summary', 'aggregate_net_value_eur', 'mean_decision_confidence', 'scored_initiatives', 'skipped_initiatives'], 'properties': {'total': {'type': 'number', 'description': 'Total initiatives in the portfolio (scored + skipped).'}, 'valid': {'type': 'boolean', 'description': 'True when the portfolio passed schema validation. False means no initiatives were scored.'}, 'summary': {'type': 'object', 'required': ['accelerate', 'fix', 'stop', 'skipped'], 'properties': {'fix': {'type': 'number', 'description': 'Count of Fix verdicts.'}, 'stop': {'type': 'number', 'description': 'Count of Stop verdicts.'}, 'skipped': {'type': 'number', 'description': 'Count of initiatives skipped due to missing or invalid scoring inputs.'}, 'accelerate': {'type': 'number', 'description': 'Count of Accelerate verdicts.'}}}, 'feedback': {'type': 'object', 'required': ['question', 'url'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'question': {'type': 'string'}}, 'description': 'Optional three-question feedback route, present only when any initiative was Fix or Stop. The page records the response anonymously only when the user chooses an answer; no assessment data is attached.'}, 'readiness': {'enum': ['agile', 'traditional', 'siloed'], 'type': 'string', 'description': 'Readiness value applied across all initiatives.'}, 'bvf_version': {'type': 'string', 'description': 'AI BVF protocol version used.'}, 'organization': {'type': 'object', 'required': ['name', 'industry'], 'properties': {'name': {'type': 'string'}, 'industry': {'type': 'string'}}, 'description': 'Echo of the portfolio organisation fields applied to scoring.'}, 'validation_errors': {'type': 'array', 'items': {'type': 'object', 'required': ['path', 'msg'], 'properties': {'msg': {'type': 'string'}, 'path': {'type': 'string'}}}, 'description': 'Empty when valid; otherwise one entry per schema violation.'}, 'advisory_next_step': {'type': 'string', 'description': 'Optional CTA, present only when any initiative was Fix or Stop.'}, 'scored_initiatives': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'function', 'ai_tier', 'classification', 'reason', 'net_value_eur', 'decision_confidence', 'applied_modules'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'reason': {'type': 'string'}, 'ai_tier': {'type': 'string'}, 'function': {'type': 'string'}, 'net_value_eur': {'type': 'object', 'required': ['low', 'high'], 'properties': {'low': {'type': 'number'}, 'high': {'type': 'number'}}, 'description': 'Modelled net EUR value, low/high.'}, 'classification': {'enum': ['Accelerate', 'Fix', 'Stop'], 'type': 'string'}, 'applied_modules': {'type': 'array', 'items': {'type': 'string'}, 'description': 'BVF scoring modules that fired for this initiative.'}, 'decision_confidence': {'type': 'number', 'description': 'Confidence in the verdict (0–100).'}}}, 'description': 'Per-initiative scoring result.'}, 'skipped_initiatives': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'reason'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'reason': {'type': 'string', 'description': 'Why this initiative was skipped (e.g. missing revenue, unknown function).'}}}, 'description': 'Initiatives that could not be scored, with the reason. Empty when all initiatives scored.'}, 'aggregate_net_value_eur': {'type': 'object', 'required': ['low', 'high'], 'properties': {'low': {'type': 'number'}, 'high': {'type': 'number'}}, 'description': 'Sum of net EUR value across scored initiatives, low/high.'}, 'highest_risk_initiative': {'type': 'object', 'required': ['id', 'name', 'classification', 'reason'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'reason': {'type': 'string'}, 'classification': {'enum': ['Accelerate', 'Fix', 'Stop'], 'type': 'string'}}, 'description': 'Scored initiative most at risk: worst classification (Stop > Fix > Accelerate), tie-broken by lowest decision_confidence. Omitted when none were scored.'}, 'top_initiative_by_value': {'type': 'object', 'required': ['id', 'name', 'classification', 'net_value_eur'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'net_value_eur': {'type': 'object', 'required': ['low', 'high'], 'properties': {'low': {'type': 'number'}, 'high': {'type': 'number'}}, 'description': 'Net EUR value range for the top initiative.'}, 'classification': {'enum': ['Accelerate', 'Fix', 'Stop'], 'type': 'string'}}, 'description': 'Scored initiative with the highest mid-point net EUR value. Omitted when none were scored.'}, 'mean_decision_confidence': {'type': 'number', 'description': 'Mean decision confidence across scored initiatives (0–100); 0 when none were scored.'}}}
Input schema
{'type': 'object', 'required': ['readiness'], 'properties': {'portfolio': {'type': 'object', 'description': 'Alternative input: the same AI BVF v1.0 portfolio document score_portfolio accepts (organization + initiatives with nested {value} pillar scores). Pass either this OR the top-level organization + initiatives; nested score values are flattened automatically, and missing pillars are estimated honestly.'}, 'readiness': {'enum': ['agile', 'traditional', 'siloed'], 'type': 'string', 'description': 'Organisational readiness applied across the portfolio; sets capture rates and pacing. Measure it with infer_readiness when process numbers exist.'}, 'constraints': {'type': 'object', 'properties': {'horizon_days': {'type': 'number', 'minimum': 30, 'description': 'Planning horizon in days, split into three equal waves. Default 90.'}, 'max_parallel_per_function': {'type': 'number', 'minimum': 1, 'description': 'Max initiatives landing on one business function per wave. Default 2. Overflow defers to the next wave and is reported as a capacity conflict, because the constraint is itself a finding.'}}, 'description': 'Change-capacity constraints. The defaults encode the core principle: no function absorbs unlimited concurrent change.'}, 'initiatives': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'function', 'ai_tier', 'scores'], 'properties': {'id': {'type': 'string', 'description': 'Stable initiative identifier used in waves, conflicts and deferrals.'}, 'name': {'type': 'string', 'description': 'Initiative name shown in the sequenced plan.'}, 'scores': {'type': 'object', 'required': ['strategic_alignment', 'financial_return', 'change_enablement', 'governance_risk'], 'properties': {'governance_risk': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Governance-risk score from score_initiative, 0-100, where higher means more risk.'}, 'financial_return': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Financial-return score from score_initiative, 0-100.'}, 'change_enablement': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Change-enablement score from score_initiative, 0-100.'}, 'strategic_alignment': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Strategic-alignment score from score_initiative, 0-100.'}}, 'description': 'The four flat 0-100 pillar values used to classify and place the initiative. Pass the score_initiative scores_used values, not nested score objects.'}, 'ai_tier': {'enum': ['gen1', 'gen2', 'gen3'], 'type': 'string', 'description': 'AI ambition, gen1, gen2 or gen3. Higher tiers are treated as more complex when wave placement is decided.'}, 'function': {'enum': ['finance', 'hr', 'sales', 'supply', 'cx', 'risk', 'it', 'rd'], 'type': 'string', 'description': 'Business function absorbing the change. Capacity limits are enforced against this field.'}}}, 'minItems': 1, 'description': 'The portfolio to sequence. Each initiative carries flat 0-100 pillar numbers (not the nested value objects of the portfolio wire format).'}, 'organization': {'type': 'object', 'required': ['industry', 'revenue_eur'], 'properties': {'name': {'type': 'string', 'description': 'Optional organisation name.'}, 'industry': {'enum': ['universal', 'creative', 'education', 'energy', 'financial', 'healthcare', 'logistics', 'manufacturing', 'nonprofit', 'professional', 'public_sector', 'real_estate', 'retail', 'technology'], 'type': 'string', 'description': 'Industry for benchmark multipliers. Call map_to_taxonomy for everyday-language mapping.'}, 'revenue_eur': {'type': 'number', 'minimum': 0, 'description': 'Annual revenue in EUR; scales every modelled value.'}}, 'description': 'Organisation context used when initiatives are passed at the top level. Required with top-level initiatives and ignored when portfolio is supplied.'}}, 'description': 'Sequence one scored portfolio by passing either portfolio, or organization plus initiatives, never both. readiness is always required because it sets pacing. constraints are optional and default to two concurrent initiatives per function across a 90-day horizon.'}
Output schema
{'type': 'object', 'required': ['bvf_version', 'waves', 'capacity_conflicts', 'totals', 'sequencing_principles', 'audit'], 'properties': {'audit': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'engine': {'type': 'string'}, 'bvf_version': {'type': 'string'}, 'inputs_used': {'type': 'object', 'description': 'The resolved inputs the result was computed on, including estimated pillar values.'}, 'rules_fired': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The rules that actually fired, in order: estimation, gates, classification, value arithmetic.'}, 'engine_version': {'type': 'string'}}, 'description': 'Reproducibility record: engine version, the rules that fired, and the resolved inputs. Deterministic, no timestamps. If the verdict is challenged months later, the same inputs on the same engine version reproduce it exactly.'}, 'waves': {'type': 'array', 'items': {'type': 'object', 'properties': {'wave': {'type': 'number'}, 'theme': {'type': 'string'}, 'rationale': {'type': 'string'}, 'initiatives': {'type': 'array', 'items': {'type': 'object'}}, 'window_days': {'type': 'array', 'items': {'type': 'number'}}, 'gate_to_next': {'type': ['string', 'null'], 'description': 'What must be true before the next wave starts. Null on the final wave.'}}}, 'description': 'Three waves with named gates: Stops first (free the budget), quick Accelerates second (buy trust), complex Accelerates plus Fixes third (spend the trust). Present this to the user as the rollout plan.'}, 'totals': {'type': 'object', 'description': 'Counts: stopped, quick_wins, complex_or_fix, deferred.'}, 'skipped': {'type': 'array', 'items': {'type': 'object'}}, 'bvf_version': {'type': 'string'}, 'capacity_conflicts': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Where more initiatives land on one function than it can absorb per wave, with the deferral applied. Surface these: an overloaded function is how good portfolios fail.'}, 'sequencing_principles': {'type': 'array', 'items': {'type': 'string'}}, 'deferred_beyond_horizon': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Initiatives that did not fit the horizon under the capacity constraint; they need their own decision.'}, 'aggregate_accelerate_value_eur': {'type': 'object', 'description': 'Sum of modelled net EUR for the sequenced Accelerates, low and high.'}}}
Input schema
{'type': 'object', 'required': ['portfolio'], 'properties': {'portfolio': {'type': 'object', 'description': 'The portfolio document as a JSON object following the AI BVF v1.0 schema: a top-level object with bvf_version, organization, and a non-empty "initiatives" array, each initiative carrying the same fields score_initiative expects (industry, revenue_eur, function, ai_tier, readiness, and a scores object with the four 0–100 pillars, each either a bare number or an object { value, confidence? }; both shapes pass). Checked structurally only — required fields present, correct types, enum values valid, pillar numbers in range; the pillar values are NOT scored or judged here (use score_initiative or score_portfolio for that). On failure, errors[] names each failing JSON path and the rule it broke.'}}}
Output schema
{'type': 'object', 'required': ['bvf_version', 'valid', 'errors'], 'properties': {'valid': {'type': 'boolean', 'description': 'True when the portfolio conforms to the schema.'}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['path', 'msg'], 'properties': {'msg': {'type': 'string', 'description': 'The rule that was broken.'}, 'path': {'type': 'string', 'description': 'JSON path to the failing field.'}}}, 'description': 'Empty when valid; otherwise one entry per schema violation.'}, 'bvf_version': {'type': 'string', 'description': 'AI BVF protocol version validated against.'}}}
Recent tool changes
Similar MCP servers
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
Stratalize Finance
Provides financial, macroeconomic, banking, credit, commodities, M&A, ESG, labor, and regulatory benchmarks for analysis and plan…
Stratalize Healthcare
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Governance
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Oracle
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Intelligence
Provides vendor, market, SaaS, workforce, government contract, public company, regulatory, competitive, and AI-brand intelligence…
Stratalize Real Estate
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…