The Qobra MCP server is enabled per company. A Qobra admin turns on AI
and the MCP agent in Settings > AI. If the MCP agent is in pilot
mode, only users in the pilot group can connect. Every tool is scoped to your
Qobra user’s permissions.
What these pages document
Each tool page describes a tool’s inputs and the shape of what it returns. These are MCP tools, not REST endpoints: you never call them over HTTP yourself — you connect an MCP client (Claude, ChatGPT, Gemini or Dust) to the server, and the model calls the tools for you. ThePOST /mcp/tools/<name>
shown on each page is only how we render a tool’s request and response schema.
Argument conventions
- Unknown arguments are ignored. The server drops any argument a tool does
not declare, without an error. A misspelled or renamed filter, such as
created_afterinstead ofafter, silently stops filtering. Use the exact names listed on each tool page. - Date bounds are
afterandbefore. Tools that filter by date, such aslist_importsandlist_sales_coach_discussions, take inclusiveafterandbeforebounds. Each accepts an absolute ISO-8601 date/time (2026-07-01) or a duration relative to now (-P7Dfor the last 7 days). - Periods are year-first. A period is written
YYYY(a year),YYYY-SX(a semester),YYYY-QX(a quarter) orYYYY-MM(a month). - A user is designated by
user_id. Pass the user’s id or exact email, never a name. Every other resource is designated by its id, taken from the tool that lists or returns it.searcharguments are for finding a resource, not for designating one. - An id outside your access reads like an unknown id. Qobra answers the same way for both, so find the resource again from the tool that lists it rather than retrying.
- Omit an optional argument instead of sending null. Where an argument
says
""clears it, an empty string empties the value. Null never clears anything. - Lists page with
limitandoffset. Most paginated tools take alimitfrom 1 to 250, defaulting to 50. A few cap it lower, and each tool page states its range. The server refuses a value outside that range. Omitoffsetfor the first page, then pass the returnednext_offsetto read the next one. A nullnext_offsetmeans you are on the last page. Tools withoutlimitreturn everything at once.
Available tools
Read tools are always exposed, scoped to the authenticated user’s company and role-based permissions. Write tools are also available to every company with the MCP enabled. See Write tools below.Reading a sandbox
Every tool reads your company’s live environment (its real compensation data) by default. If your company uses sandboxes and your role can read them, calllist_sandboxes to discover
them, then pass a sandbox’s id as the sandbox_id argument of a list tool
(list_plans, list_quotas, list_statements, list_statement_periods,
list_reports, list_dashboards) to read that sandbox instead. sandbox_id
only accepts a sandbox’s id — never a sandbox name, and never the live
environment’s own id (omit the argument to read the live environment).
Tools that take a resource id — such as get_plan, get_statement or
get_report — need no sandbox_id argument: the id itself names the
environment the resource lives in.
The write tools that create an environment-scoped resource (create_quota,
create_plan, create_report, create_dashboard) accept the same
sandbox_id argument to say which environment the new resource lands in. Omit
it to write to the live environment. create_compensation does not: which
environment it lands in is decided by the plan it hangs off.
recalculate_statements also accepts sandbox_id, to recalculate a sandbox’s
statements instead of the live ones.
Write tools
The MCP server also exposes a family ofcreate_* and update_* write
tools, plus archive_quota, split_record, answer_request,
recalculate_statements, approve_statements and trigger_import, so an MCP
client can change your Qobra workspace from a conversation. The write tools are
available to every company with the MCP enabled.
Every write tool is scoped to the caller’s role-based permissions in the same
way a read tool is. A user without write access on plans cannot call
create_plan, exactly as they cannot create a plan from the web app. Qobra
hides a write tool the caller’s role refuses at discovery, so the MCP client
never plans a write it cannot make. A write over a resource behind its own
feature, such as requests or the validation workflow, also needs that feature
switched on for the company, as in the web app.
ask_architect and
get_architect_turn are the
exception: they are reserved to demonstration companies, and also need the
Architect switched on for the company. Elsewhere, Qobra hides them at
discovery.
Every write is recorded in the audit trail, as the Qobra MCP agent, so a
change made by a model shows up in the trail alongside changes made from the
web app and by other integrations. The MCP audits writes to the live
environment only, mirroring the audit trail’s own behavior — a write into a
sandbox is not audited (the trail scopes to live).
trigger_import writes no audit event: the import it launches shows up in
list_imports instead.
The write surface today:
Each
create_* tool creates an empty resource — a plan with no
compensation, a quota with no target values, a data table field with no values
on any record unless it is given a default. Configuring the resource further
(loading values, attaching metrics) is done from the Qobra web app, with a few
exceptions: create_plan and create_group can attribute their members in the
same call, create_dashboard can add reports to the new dashboard and arrange
its tiles in the same call, update_dashboard renames a dashboard, adds
reports to it and arranges its tiles, update_plan declares a plan’s
membership in one call, update_quota_values sets a quota’s target values,
update_exchange_rates sets the rates of one exchange-rate range,
create_record adds one record to a data table with its values filled in,
update_record changes or archives an existing record, split_record
splits a record between users, create_request opens a request with its
statements, members and assignee, update_request changes, closes or
reopens a request, update_user_managers declares who a user reports to, and
update_user_attribute_values sets a user’s attribute values. The settings of
an existing resource are changed with its update_* tool (update_data_table,
update_data_table_field, update_group_dimension, update_quota,
update_user_attribute, update_user), and archive_quota archives or
restores a quota. trigger_import launches the import of a data table, a quota
or an integration from the system it syncs from. Removing a tile from a dashboard is still done from the Qobra
web app.
On statements, update_statements_status locks, unlocks, pays or unpays
statements and can request their validation, approve_statements approves the
validation stages awaiting you, update_statement_adjustments overrides computed
values, and update_statement_payments writes manual payments, the draw and
the carried balance. The write tools that change data a statement reads from
(records, quota values, exchange rates) do not recalculate statements: call
recalculate_statements afterwards on the users and periods the change
touches.
To build or change a compensation’s calculation from a conversation, use
ask_architect. It hands the work to
Qobra’s Architect agent, one turn per call, and saves the changes as the
compensation’s draft. Publishing the draft is done from the Qobra web app.
ask_architect is reserved to demonstration companies, and the Architect must
also be switched on for the company.
Connect an MCP client to Qobra
Prerequisites, the OAuth consent flow, and how to add the server to Claude,
ChatGPT, Gemini or Dust.