CompSlate

Agent tools (MCP)

Connect at https://compslate.com/mcp. Read tools are open to everyone for what they can see; change tools are for admins. Every change is logged.

get_started read

Start here. Shows the workspace, your role, plans, people and seats, and what to do next. Call it before anything else in a conversation.

docs read

How CompSlate works: definitions, formulas, periods, changes, visuals, access, exports, pricing. Topics: overview, testing, components, periods, changes, visuals, access, exports, pricing.

  • topic? overview | testing | components | periods | changes | visuals | access | exports | pricing — Leave empty for the overview

list_people read

Everyone you can see, with role, manager, start date, plan and OTE/quota.

list_plans read

All comp plans and the reusable component library (accelerators, draws, ramps, clawbacks, MBOs) with who is on each plan, as of today, plus scheduled changes.

get_comp_card read

One person's comp card: plan terms, current period attainment and pace, YTD, full-year projection, every period's quota, bookings and pay (paid periods marked), and recent changes. Defaults to you. Cards are always live: there is nothing to publish. A person sees their own card once they have an email and sign in (save_person with send_invite).

  • person? string — Name, email or id. Defaults to you
  • fiscal_year? integer — Fiscal year, e.g. 2026. Defaults to the current one.

get_team_view read

Results for a month, quarter, half or year: a manager's team (all levels down) or everyone you can see. Shows each person's quota, bookings, attainment and pay in that window, plus YTD. Defaults to the current period on the grain most people are paid on.

  • manager? string — Manager name, email or id
  • grain? month | quarter | half | year — month, quarter, half or year
  • date? string — Any date inside the window, e.g. 2026-07-01 for Q3. Defaults to today

list_deals read

Deals (bookings) that count toward quota, optionally for one person and a date range.

  • person? string
  • from? string
  • to? string
  • limit? integer

render_visual read

Render a comp card or team visual as SVG. Visuals: attainment_dial (person), period_dial (person), payout_curve (person), period_bars (person), ytd_line (person), pay_mix (person), mbo_scorecard (person), period_table (person), team_attainment (team), team_table (team). Show the SVG to the user (e.g. as an artifact or image) and share the link.

  • visual attainment_dial | period_dial | payout_curve | period_bars | ytd_line | pay_mix | mbo_scorecard | period_table | team_attainment | team_table
  • person? string — For person visuals. Defaults to you
  • manager? string — For team visuals. Defaults to everyone you can see
  • fiscal_year? integer — Fiscal year, e.g. 2026. Defaults to the current one.

simulate_plan read

Price plan designs in isolation (no people, nothing saved): up to 5 options across attainment levels. To see what options would do to your actual team, use save_scenario and compare_scenarios instead.

  • scenarios array
  • attainment_pct? array — Attainment levels to price, in %

export_data read

Get a download link (valid 15 minutes) for a CSV or Excel export. Datasets: payroll, payouts, mbo, deals, payments, results, people, plans, components, changes, access, activity, or "all" (Excel, one sheet per dataset). payroll = what to pay for the periods that ended in a month (last month by default): base, commission, MBO, SPIFs/bonuses, corrections, total per person, ready for a payroll run. mbo = every MBO period's scorecard; results = recorded MBO results. payouts = one row per person per period for the year. Only includes what you can see.

  • dataset payroll | payouts | mbo | deals | payments | results | people | plans | components | changes | access | activity | all
  • format? csv | xlsx
  • fiscal_year? integer — Fiscal year, e.g. 2026. Defaults to the current one.
  • date? string — payroll: any date in the payroll window. Defaults to last month
  • grain? month | quarter | half | year — payroll window: month (default), quarter, half or year

get_activity_log read

Who changed what and when, including pay changes with their effective dates (admins only). Export it with export_data dataset "activity".

  • limit? integer

list_access read

Who has been given extra visibility beyond their own card and their reports (admins only).

update_workspace admin · changes data

Rename the workspace, set the currency, or set the fiscal year start month (moves every period, so it is previewed).

  • name? string
  • currency? string — ISO code, e.g. USD, EUR, GBP
  • fiscal_year_start_month? integer
  • time_zone? string — IANA time zone, e.g. America/New_York. Decides when a day, and so a period, starts

quick_start_plan admin · changes data

Create a ready-to-use plan in one step: 60/40 split and a 3-month ramp (25/50/75% of quota) by default, quarterly. Optionally add an accelerator, a draw and an MBO (a share of OTE paid on objectives like meetings booked), and assign people (from effective_from, if they are already paid on another plan).

  • name? string
  • ote number
  • annual_quota number
  • period? monthly | quarterly | semiannual | annual
  • base_pct? number
  • ramp_pct? array — Ramp: % of quota per month from start. [] for no ramp
  • accelerator? object — e.g. { above_pct: 100, rate: 1.5 }
  • draw? object
  • mbo? object — An MBO on objectives, e.g. { share_pct: 10, objectives: [{ name: "Meetings booked", target: 20 }] }
  • assign_to? array — People to put on the plan (names, emails or ids)
  • effective_from? string — Date the change takes effect (YYYY-MM-DD), past or future. Ask the admin; required when the change affects someone already paid on these terms. Periods marked paid never change.

save_component admin · changes data

Create a reusable component, or change one (give `component`). Types: accelerator (tiers, cap_pct), draw (monthly_amount, months, recoverable, includes_mbo), ramp (schedule_pct), clawback (window_days, rate_pct), mbo (share_pct or annual_amount, mbo_period, objectives). An MBO pays a share of OTE on objectives (meetings booked, units sold, a company target) and comes out of variable pay, so a 60/40 plan with a 10% MBO is 60/30/10. A change applies to every plan using it from effective_from. Optionally attach it to plans.

  • tiers? array — accelerator: rate bands
  • cap_pct? number | null — accelerator: max payout as % of target variable, e.g. 250. null removes the cap
  • monthly_amount? number — draw: minimum variable pay per month
  • months? integer — draw: number of months from the start date
  • recoverable? boolean — draw: true = paid back from later earnings (default), false = guarantee
  • schedule_pct? array — ramp: % of quota for each month from the start date, e.g. [25, 50, 75]
  • window_days? integer — clawback: days after close in which a lost deal is clawed back (default 90)
  • rate_pct? number — clawback: % of the commission taken back (default 100)
  • includes_mbo? boolean — draw: count MBO pay toward the minimum too. Default false: a draw covers commission only
  • share_pct? number — mbo: share of OTE paid on objectives, e.g. 10. Comes out of variable pay: 60/40 with a 10% MBO is 60/30/10
  • annual_amount? number — mbo: a fixed annual MBO instead of share_pct
  • mbo_period? string | null — mbo: how often objectives are measured and paid. Default: the plan pay period
  • objectives? array — mbo: the objectives (replaces the list; one that keeps its name keeps its results)
  • component? string — Existing component to change (name or id). Leave empty to create
  • type? accelerator | draw | ramp | clawback | mbo — Required when creating
  • name? string
  • attach_to_plans? array — Plans to add it to (from effective_from)
  • effective_from? string — Date the change takes effect (YYYY-MM-DD), past or future. Ask the admin; required when the change affects someone already paid on these terms. Periods marked paid never change.

save_plan admin · changes data

Create a comp plan, or change one (give `plan`) from effective_from. A plan sets the payout period, the base/variable split and default OTE and quota, and holds components (one of each type).

  • plan? string — Existing plan to change (name or id). Leave empty to create
  • name? string
  • period? monthly | quarterly | semiannual | annual
  • base_pct? number — Base share of OTE in %, e.g. 60 for a 60/40 split
  • ote? number | null — Default OTE per year. null clears
  • annual_quota? number | null — Default annual quota. null clears
  • components? array — Replace the component list (names or ids)
  • add_components? array
  • remove_components? array
  • effective_from? string — Date the change takes effect (YYYY-MM-DD), past or future. Ask the admin; required when the change affects someone already paid on these terms. Periods marked paid never change.

save_person admin · changes data

Add someone to the workspace, or change them (give `person`). Set role (admin, manager, member), manager, start/end dates, plan, and per-person OTE, base, quota, MBO amount or MBO target overrides. Plan and pay changes for someone already paid need effective_from. People with an email can sign in to see their card. Every person is a seat.

  • person? string — Existing person to change (name, email or id). Leave empty to add
  • name? string
  • email? string | null
  • role? admin | manager | member
  • title? string | null
  • manager? string | null — Name, email or id of their manager. null clears
  • start_date? string | null
  • end_date? string | null — Set when someone leaves; pay stops after it
  • plan? string | null — Plan name or id. null removes them from their plan
  • ote? number | null — Override the plan OTE. null goes back to the plan default
  • base? number | null — Override base pay. null goes back to the plan split
  • annual_quota? number | null — Override the plan quota. null goes back to the plan default
  • mbo? number | null — Override their annual MBO (paid at 100% of objectives). null goes back to the MBO component
  • mbo_targets? array — Personal MBO targets, e.g. [{ objective: "Meetings booked", target: 25 }]
  • effective_from? string — Date the change takes effect (YYYY-MM-DD), past or future. Ask the admin; required when the change affects someone already paid on these terms. Periods marked paid never change.
  • send_invite? boolean — Email them a sign-in link

record_deals admin · changes data

Record closed deals (bookings) that count toward quota. Up to 500 at once, so you can paste a list or a CSV export from your CRM. Prefer one entry per deal: clawbacks apply to individual deals. Period totals work for attainment and pay; if you record totals, tell the user clawbacks will not be possible on them. Deals in periods already marked paid are settled as a correction in the next open period.

  • deals array
  • allow_duplicates? boolean — Record deals even if an identical one was recorded in the last 15 minutes (normally treated as a retry and skipped)

update_deal admin · changes data

Change a deal, move it to someone else, or mark it lost with clawback_date (the clawback component decides what is taken back). clawback_date null undoes a clawback.

  • deal string — Deal id (from list_deals)
  • person? string
  • name? string
  • amount? number
  • close_date? string
  • clawback_date? string | null
  • note? string | null
  • split? array | null — Share the credit between people; null gives it all back to the owner

delete_item admin · changes data

Permanently delete a person (and their deals), a plan (people on it lose their plan), a component (removed from plans; an MBO takes its results with it), a deal, a payment, an MBO result, or a saved scenario. For someone who left, set end_date with save_person instead. For a plan change from a date, use save_plan with effective_from.

  • kind person | plan | component | deal | payment | result | scenario
  • item string — Name or id (deal, payment and result: id)

record_payments admin · changes data

Record one-off payments outside the plan: SPIFs, bonuses, or a manual correction. Each is paid in the period containing its date and shows on the card and in exports. Negative amounts take money back. Remove one with delete_item kind "payment".

  • payments array
  • allow_duplicates? boolean — Record even if an identical payment was recorded in the last 15 minutes

record_results admin · changes data

Record results against MBO objectives: meetings booked, units sold, a company revenue figure, a milestone done. Each counts in the MBO period containing its date. Counts and amounts add up within a period (record each week, or one total); for percent and yes/no objectives the latest reading counts (1 = done). Company objectives take no person. Objectives counted from deals need nothing here. Results in periods already paid are settled as a correction in the next open period. Remove one with delete_item kind "result".

  • results array
  • allow_duplicates? boolean — Record even if an identical result was recorded in the last 15 minutes (normally treated as a retry and skipped)

get_mbo_scorecard read

MBO results for one person or everyone you can see, for the MBO period containing `date` (the current one by default): each objective's target, result, achievement and payout, plus the recorded results behind it with their ids.

  • person? string — Name, email or id. Defaults to everyone you can see
  • date? string — Any date in the MBO period. Defaults to today

get_statement read

A person's payout statement for one pay period: quota, bookings, attainment, how variable pay was worked out, clawbacks, draws, corrections, SPIFs and bonuses, base and total, with the deals behind it. Also returns a link to a printable version (save as PDF) to share with the rep or finance.

  • person? string — Defaults to you
  • date? string — Any date in the period. Defaults to the last period that ended

apply_change admin · changes data

Save a change that was previewed (the preview gives a change_id). Only call this after the admin has seen the preview and said yes. Afterwards, ask whether the affected people should get a short email (notify_people); never send it without a yes.

  • change_id string

save_scenario admin · changes data

Save a named what-if: a list of changes (tool calls) to try on your real team without touching anything. Allowed tools: quick_start_plan, save_component, save_plan, save_person, record_deals, update_deal, record_payments, record_results, delete_item, update_workspace. Give each change its effective_from. Example calls: [{ tool: "save_plan", args: { plan: "AE", base_pct: 50, effective_from: "2026-10-01" } }]. Compare with compare_scenarios; apply with apply_scenario.

  • name string
  • calls array
  • note? string

compare_scenarios read

Compare saved scenarios against today on your real team: each person’s projected full-year pay under each option and the total cost difference. The rest of the year is priced at each person’s year-to-date pace (100% for people with no results yet), or at attainment_pct if you give one, which is how to see what accelerators cost at, say, 130%. Leave scenarios empty to compare all saved ones, in the order they were saved.

  • scenarios? array
  • fiscal_year? integer — Fiscal year, e.g. 2026. Defaults to the current one.
  • attainment_pct? number — Price the rest of the year at this attainment for everyone, e.g. 130

apply_scenario admin · changes data

Turn a saved scenario into a previewed change. Returns the impact and a change_id; nothing is saved until apply_change.

  • scenario string

mark_paid admin · changes data

Lock every period that ended on or before `through` as paid, for everyone. Locked periods never change; later corrections (late deals, backdated plan changes) are paid in the next open period. A date earlier than the current paid-through date reopens periods after it.

  • through string — Last day covered by payroll, e.g. 2026-09-30

notify_people admin · changes data

Email people a short, generic note that their compensation plan was updated, with a link to their card. Only call this when the admin has explicitly said yes to emailing these people. Each person gets at most one such email a day. Give change_id to notify everyone a change affected, or list people.

  • change_id? string
  • people? array

share_access admin · changes data

Let someone see more than their own card and their reports: one person's card, a manager's whole team, or everyone.

  • viewer string — Who gets access
  • scope person | team | all
  • target? string — The person (scope person) or the manager (scope team)

revoke_access admin · changes data

Remove a share. Give the grant id from list_access, or the viewer (removes all their shares).

  • grant_id? string
  • viewer? string

upgrade_billing admin · changes data

Get a secure link to upgrade to Team or manage billing. Free: 3 seats. Team: $30/month for 10 seats. Enterprise: more than 10, talk to us (support@compslate.com). A seat is someone who signs in; people added for planning are free. Team starts with a 14-day free trial.