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 youfiscal_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 idgrain? month | quarter | half | year — month, quarter, half or yeardate? 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? stringfrom? stringto? stringlimit? 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.
visualattainment_dial | period_dial | payout_curve | period_bars | ytd_line | pay_mix | mbo_scorecard | period_table | team_attainment | team_tableperson? string — For person visuals. Defaults to youmanager? string — For team visuals. Defaults to everyone you can seefiscal_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.
scenariosarrayattainment_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.
datasetpayroll | payouts | mbo | deals | payments | results | people | plans | components | changes | access | activity | allformat? csv | xlsxfiscal_year? integer — Fiscal year, e.g. 2026. Defaults to the current one.date? string — payroll: any date in the payroll window. Defaults to last monthgrain? 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? stringcurrency? string — ISO code, e.g. USD, EUR, GBPfiscal_year_start_month? integertime_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? stringotenumberannual_quotanumberperiod? monthly | quarterly | semiannual | annualbase_pct? numberramp_pct? array — Ramp: % of quota per month from start. [] for no rampaccelerator? object — e.g. { above_pct: 100, rate: 1.5 }draw? objectmbo? 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 bandscap_pct? number | null — accelerator: max payout as % of target variable, e.g. 250. null removes the capmonthly_amount? number — draw: minimum variable pay per monthmonths? integer — draw: number of months from the start daterecoverable? boolean — draw: true = paid back from later earnings (default), false = guaranteeschedule_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 onlyshare_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/10annual_amount? number — mbo: a fixed annual MBO instead of share_pctmbo_period? string | null — mbo: how often objectives are measured and paid. Default: the plan pay periodobjectives? 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 createtype? accelerator | draw | ramp | clawback | mbo — Required when creatingname? stringattach_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 createname? stringperiod? monthly | quarterly | semiannual | annualbase_pct? number — Base share of OTE in %, e.g. 60 for a 60/40 splitote? number | null — Default OTE per year. null clearsannual_quota? number | null — Default annual quota. null clearscomponents? array — Replace the component list (names or ids)add_components? arrayremove_components? arrayeffective_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 addname? stringemail? string | nullrole? admin | manager | membertitle? string | nullmanager? string | null — Name, email or id of their manager. null clearsstart_date? string | nullend_date? string | null — Set when someone leaves; pay stops after itplan? string | null — Plan name or id. null removes them from their planote? number | null — Override the plan OTE. null goes back to the plan defaultbase? number | null — Override base pay. null goes back to the plan splitannual_quota? number | null — Override the plan quota. null goes back to the plan defaultmbo? number | null — Override their annual MBO (paid at 100% of objectives). null goes back to the MBO componentmbo_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.
dealsarrayallow_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.
dealstring — Deal id (from list_deals)person? stringname? stringamount? numberclose_date? stringclawback_date? string | nullnote? string | nullsplit? 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.
kindperson | plan | component | deal | payment | result | scenarioitemstring — 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".
paymentsarrayallow_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".
resultsarrayallow_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 seedate? 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 youdate? 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_idstring
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.
namestringcallsarraynote? 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? arrayfiscal_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.
scenariostring
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.
throughstring — 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? stringpeople? 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.
viewerstring — Who gets accessscopeperson | team | alltarget? 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? stringviewer? 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.