Reckon

Reckon Documentation

Reckon is the commercial record your coding agent works from. It holds immutable client statements, scope with provenance, deterministic pricing, and the deal state machine — so an agent answering a client question has evidence, not inference.

Connect

Reckon is an MCP server. Add it to Claude Code or Cursor in one step. See setup instructions for configuration.

Free tier: the browser — build deals, capture statements, scope, price, approve, and share with your client. No card required.
Solo ($49/mo) or Team ($199/mo): unlocks the MCP tools below. Your coding agent calls Reckon to check scope, explain pricing, and detect change orders.

The deal room

When you invite your client, they get a link to a deal room where they see every scope item with their own words underneath, the approved price and how it was calculated, and milestone progress. They can ask for something — recorded as a statement, attributable to them, and it changes nothing until you review and price it.

How writes work

WRITE tools do not commit directly. They return a proposal that a human must explicitly approve before anything changes. An agent cannot alter the commercial record on its own — the record is defensible because a person authorised every change.

Error handling

No subscription

{ "reason": "SUBSCRIPTION_REQUIRED", "message": "Reckon's MCP tools require an active subscription..." }

Deal not found

Deal not found in this workspace.

Workspace scoping means a deal in another workspace is invisible, not forbidden.

Stale version

{ "reason": "VERSION_CONFLICT", "message": "Stale deal_version: you sent deal_version=2 but the current value is 5. Re-read the deal..." }

Example prompts

1Is this in scope?reckon_check_scope

Context

The developer is mid-build and the client emailed a new request. They ask their coding agent, which calls Reckon.

What the developer types

“The client just asked for a reporting dashboard. Is that in scope for the HVAC Customer Portal deal?”

What Reckon returns

{
  "scope_items": [
    { "label": "Online Scheduling Portal",
      "source_statement": { "content": "Customers should be able to schedule appointments online" } },
    { "label": "QuickBooks Integration",
      "source_statement": { "content": "We need to sync with QuickBooks so our billing stays accurate" } },
    { "label": "Mobile Dispatch Dashboard",
      "source_statement": { "content": "Our technicians need mobile dispatch so they get jobs in real time" } }
  ],
  "pricing": { "approved": true, "quoted_value": { "amount": 25140 } },
  "scope_locked": true
}

What the agent does with it

The agent compares 'reporting dashboard' against the three scope items and their source statements. None match. It tells the developer this is new scope, not covered, and suggests a change order.

2Explain the price to a client who pushed backreckon_explain_price

Context

A client questioned the price. The developer needs the hour chain to have a factual conversation.

What the developer types

“The client says $25,140 is too high. Explain how the number was calculated so I can walk them through it.”

What Reckon returns

{
  "pricing": {
    "base_hours": 192,
    "ai_hours": 105.6,
    "with_overhead": 135.2,
    "risk_multiplier": 1.15,
    "rate": { "amount": 200 },
    "quoted_value": { "amount": 25140 },
    "approved": true
  }
}

What the agent does with it

The agent writes a plain-language breakdown: 192 conventional hours reduced to 106 with modern tools, 135 with project management and communication overhead, 155 delivered hours including contingency, at $200/hr. Every number traces to a step the client can verify.

3Prepare a change orderreckon_prepare_change_order

Context

The request is confirmed as new scope. The developer asks the agent to prepare a formal change order.

What the developer types

“The client wants to add Stripe payment processing. Prepare a change order against the current approved scope.”

What Reckon returns

{
  "change_order_id": "co_a1b2c3",
  "status": "DRAFT",
  "requires_approval": true,
  "deal_version": 5,
  "scope_version": 3
}

What the agent does with it

A draft change order is created referencing the client's statement, the current pricing version, and the proposed scope addition. The developer reviews it, approves it (two-phase commit requires explicit human approval), and the client sees the updated scope and price in their deal room.

4What should I do next?reckon_get_next_action

Context

The developer wants to know why the deal is stuck and what action to take.

What the developer types

“What is blocking the Metro Construction deal from advancing?”

What Reckon returns

{
  "current_state": "QUALIFIED",
  "transitions": [
    { "to": "MEETING_1_READY", "permitted": true }
  ],
  "message": "Ready to advance to: MEETING_1_READY"
}

What the agent does with it

The agent sees the deal can advance. If it were blocked (e.g., by an unverified HIGH-impact assumption), the response would name the specific blocker and the developer would know exactly what to resolve.

5Capture what the client saidreckon_capture_evidence

Context

The developer records a client statement during a meeting. It becomes immutable evidence for future scope decisions.

What the developer types

“In today's meeting the client said: 'We need the system to handle multi-location scheduling, not just single-site.' Capture that as a direct statement.”

What Reckon returns

{
  "proposal_id": "prop_x1y2z3",
  "requires_approval": true,
  "deal_version": 3,
  "scope_version": 1
}

What the agent does with it

A two-phase proposal is created. The developer reviews the captured statement and approves it. The statement is then immutable — neither the developer nor the client can alter it after the fact.

All 16 tools

READreckon_get_deal_contextFull deal record with state and transitions
READreckon_get_client_contextClient-facing deal summary
READreckon_check_scopeScope items with source statements, pricing, permissions
READreckon_explain_priceFull hour chain: baseHours → aiHours → overhead → delivered → price
READreckon_prepare_meetingMeeting brief with scope, pricing, and obligations
READreckon_check_milestoneMilestone status from pricing structure
READreckon_get_next_actionWhat the state machine says to do next, with blockers
READreckon_query_obligationsOutstanding obligations by owner and status
WRITEreckon_capture_evidenceRecord a client statement (two-phase)
WRITEreckon_update_dealUpdate deal fields (two-phase, cosmetic only)
WRITEreckon_prepare_responseDraft an objection response from deal context
WRITEreckon_prepare_change_orderCreate a change order against current scope (two-phase)
WRITEreckon_generate_artifactGenerate a proposal record (two-phase)
WRITEreckon_record_outcomeRecord deal outcome — free, no charge
WRITEreckon_apply_change_orderApply an approved change order — writes scope items
WRITEreckon_transition_dealAdvance deal state with server-derived exit criteria (two-phase)