Connection check
verified live · 20h ago
decision-intelligence
Multi-expert decision intelligence with transparent synthesis and auditable workflows.
Tools
150
GitHub stars
—
Installs / wk
—
Licence
—
Transport
streamable-http
Last checked
20h ago
Tools & capabilities
150 toolsRead from the running server on 20h ago.
account_export
read-only
modelsrows_per_model
Export this account's own data across every table the account owns, as the same JSON envelope the REST route returns. The set of tables served is derived from the same ownership re… Export this account's own data across every table the account owns, as the same JSON envelope the REST route returns. The set of tables served is derived from the same ownership reflection that decides what an account deletion removes, so a table the account can destroy is a table it can also read. Credentials never appear: columns held encrypted at rest are withheld unless recorded as the account's own content, and password hashes, reset and verification tokens, and API key hashes are withheld by name. Some tables are deliberately excluded -- see docs/ACCOUNT_DATA_EXPORT.md, and note that the coverage block on every response lists exactly which models are served and which are excluded with their reasons. Artifacts are described by their metadata rows rather than inlined. Bounded rather than streamed: each model reports truncated and the envelope reports complete, so narrow to one model and raise rows_per_model rather than re-reading everything. This is a data export, not an erasure request and not a claim of regulatory compliance. Requires authentication and the account:export scope.
add_invoice_line_item
quantityinvoice_id*unit_price*description*
Add a billable line item to a draft or sent invoice; totals are recomputed automatically. Blocked once paid/void. invoice_id is required. Add a billable line item to a draft or sent invoice; totals are recomputed automatically. Blocked once paid/void. invoice_id is required.
add_outreach_lead
email*notesdomaincompanysegmentcontact_name
+1
Add a single lead to the authenticated user's outreach book. Returns the new lead id. Provenance is stamped source="agent" server-side. Does not send any email. Requires authentica… Add a single lead to the authenticated user's outreach book. Returns the new lead id. Provenance is stamped source="agent" server-side. Does not send any email. Requires authentication.
advance_workflow
can modify data
notesaction*session_id*
Advance a workflow past a human checkpoint — approve or reject the paused step so the pipeline continues. Use the session id from run_workflow / get_workflow_session. Requires auth… Advance a workflow past a human checkpoint — approve or reject the paused step so the pipeline continues. Use the session id from run_workflow / get_workflow_session. Requires authentication.
approve_consulting_deliverable
deliverable_id*expected_version*expected_content_hash*
Approve one submitted internal deliverable and record approver evidence. Requires consulting:approve and never publishes or sends it. Approve one submitted internal deliverable and record approver evidence. Requires consulting:approve and never publishes or sends it.
approve_consulting_document_revision
document_id*expected_version*expected_content_hash*
Approve and lock one exact proposal/SOW revision. Requires the separate consulting:approve scope and never publishes or shares it. Approve and lock one exact proposal/SOW revision. Requires the separate consulting:approve scope and never publishes or shares it.
approve_content_asset
notesasset_id*
Approve a submitted owned revision and attest to its exact content hash. Requires marketing:approve, separate from draft authority. Approve a submitted owned revision and attest to its exact content hash. Requires marketing:approve, separate from draft authority.
archive_saved_view
view_id*
Retire one of YOUR OWN saved views without destroying it: it drops out of the default listing and execute_saved_view refuses it, but its definition is kept and restore_saved_view b… Retire one of YOUR OWN saved views without destroying it: it drops out of the default listing and execute_saved_view refuses it, but its definition is kept and restore_saved_view brings it back unchanged. Prefer this over delete_saved_view. Idempotent -- archiving twice keeps the original archive time. Archiving is your own working state and does not hide the view from a team it is shared with. Requires authentication and the tickets:write scope.
ask_legal
read-only
contextdomainsqualityquestion*jurisdictionmax_sections
+4
Request fixed legacy Themis source/citation records and attach a proposed Laws & Regulations agent/source/synthesis plan whose routes are planned_not_run. Check the law uses fixed… Request fixed legacy Themis source/citation records and attach a proposed Laws & Regulations agent/source/synthesis plan whose routes are planned_not_run. Check the law uses fixed legacy provider-record retrieval, but returned records do not prove exact citation identity, relevance, authority, or corpus coverage. Generated research requires authentication, exact THEMIS_NEUTRAL_SCHEMA_VERSION=themis_neutral_research/v1, the operator gate, a verified authenticated corpus manifest, and an atomic spend reservation. The manifest verifier is not available yet, so generated mode remains disabled. Provider assertions/gaps are enum codes linked to evidence whose quote-fidelity state is provider-reported and rendered with fixed server text; any legacy verdict or answer prose is withheld. Returns legal_evidence_graph/v1. Automated research only, not legal advice. Requires legal:run.
assign_leads_to_campaign
lead_ids*campaign_id*
Assign one or more of the user's existing leads to one of the user's campaigns (both must be owned by the caller). Returns how many were assigned. Idempotent. Requires authenticati… Assign one or more of the user's existing leads to one of the user's campaigns (both must be owned by the caller). Returns how many were assigned. Idempotent. Requires authentication.
audit_export
read-only
limitsinceuntilactionafter_id
Export this workspace's own agent-action audit trail as structured events, oldest first, for loading into a SIEM. Each event carries what triggered the action, which identity autho… Export this workspace's own agent-action audit trail as structured events, oldest first, for loading into a SIEM. Each event carries what triggered the action, which identity authorized it, which resource was touched, the outcome, and the error state. Metadata only -- no prompt text, document content, tool arguments, or model output is ever returned. Filter by date range and event action; page forward with the cursor each response returns. Covers a documented subset of platform activity rather than every action: see docs/WORKSPACE_AUDIT_EXPORT.md, and note that the coverage block on every response lists exactly which actions are exportable and which are not. Requires authentication and the audit:read scope.
campaign_pipeline_stats
read-only
campaign_id*
Pipeline-stage breakdown for one outreach campaign — total / sent / active / won / lost, reply rate, and per-stage lead counts. Requires authentication. Pipeline-stage breakdown for one outreach campaign — total / sent / active / won / lost, reply rate, and per-stage lead counts. Requires authentication.
complete_sales_task
doneactivity_id*
Mark one of the caller's sales tasks/activities done (or reopen it with done=false). Stamps or clears the completion time; activity_id is required. Mark one of the caller's sales tasks/activities done (or reopen it with done=false). Stamps or clears the completion time; activity_id is required.
convert_deal_to_invoice
notesdeal_id*due_datetax_rateclient_nameclient_email
+1
Create a draft invoice from one of the caller's deals: one line item for the deal's amount, client_name defaulted from the deal's company/title. deal_id is required. Create a draft invoice from one of the caller's deals: one line item for the deal's amount, client_name defaulted from the deal's company/title. deal_id is required.
convert_lead_to_deal
notesstagetitleamountcompanylead_id*
+3
Convert an owned outreach lead into a deal and advance the lead into the deal stage of the funnel (never downgrading an already-closed lead). Optional deal fields mirror create_dea… Convert an owned outreach lead into a deal and advance the lead into the deal stage of the funnel (never downgrading an already-closed lead). Optional deal fields mirror create_deal; lead_id is required.
create_accounting_run
namecontextdocuments*marginal_rate
Analyze supported textual accounting records with the pinned deterministic Writeoff engine and create a private, encrypted audit run owned by the caller. Accepted filenames end in… Analyze supported textual accounting records with the pinned deterministic Writeoff engine and create a private, encrypted audit run owned by the caller. Accepted filenames end in .txt, .md, .text, .eml, .csv, .ofx, .qfx, or .qif. Returns estimates for review only: it does not file taxes, move money, or send data to an external accounting service. Send prepared rows, not raw document text. Pasting the output of a PDF-to-text converter does not fail loudly. Read verbatim as .txt, .text or .md, the whole paste collapses to exactly ONE entry, and that entry's figure can be a real number from the page that is not a charge at all: a statement with no footer total books its running BALANCE as spend. Stripping the page headers and the balance column does not change that; a genuinely empty paste raises instead. Convert each document into canonical CSV first: a Date,Description,Amount header, then one row per economic event. The Description column carrying the merchant name alone is the cleanest form, and prose is not merely untidy -- it CHANGES the answer. The matcher runs over the whole description against a vocabulary that holds ordinary words as well as vendor names: paper, printer, ink, notebook, legal, consulting, subscription, hosting and domain each classify alone with no vendor present, and contact lens or reading glasses classify as a MEDICAL deduction. A memo line saying what was bought can therefore create a deduction the vendor name alone would not. Send the merchant, not a description of the purchase. Not every phrase matches -- weekly grocery run, haircut and banana all stay unclassified -- but plain English is not inert. Classification is separately gated by context_text, but that gate is PARTIAL, not an off switch. Leaving it empty suppresses only the rules that need a business to exist: business, meals, vehicle and home-office. The personal rules stay live whatever you send -- a bare contact lens still classifies with context_text empty, under the category name fsa_hsa rather than anything called medical, and donation and tuition classify the same way. An empty context is NOT a way to stop deductions being proposed. The business gate is a bare substring test, not a reading of what you wrote: it opens on a keyword anywhere in the text, so I do not own a business and This is a personal return, not a business each switch the business rules ON rather than off. Negation is not detected. Suppress those rules with an EMPTY context, never with a denial. Booking is independent of all of it -- a row books its amount whether or not it classifies, and classification decides only whether the row becomes a deduction candidate. State the direction of every row. A .csv is routed as a statement, so each row has to say whether money went out or came in. Send exactly Date,Description,Amount,Type -- the amount column named Amount, and a Type of Purchase for money out or Refund for money in. Separate the fields with COMMAS. The delimiter is sniffed from the header row, and a semicolon additionally switches the amount parser to the European convention where the comma is the decimal point and the dot is a thousands separator. In a semicolon-delimited file an ordinary -20.00 is therefore read as 2000.00 and -1234.56 as 123456.00 -- silently, with no error, a hundred times the real figure. Tab and pipe keep the dot decimal. Send only these four columns, each once. Order among the four does not matter -- all 24 arrangements of Date,Description,Amount,Type measured identical -- but each once is load-bearing, because a repeated header resolves to the LAST copy. A second Amount REPLACES the figure, so it can under-book as easily as over-book; a second Type can make a file of refunds BOOK as spend just as easily as it can drop the whole file, and on three rows written Type=Refund,Purchase the last copy wins and all three book; and a second Date silently rewrites every date while the row count and the total stay exactly right. A literal Amount now protects the figures from same-direction ancillary debit- or credit-looking columns. A literal Amount beats one or more same-direction ancillary columns in either order, whether those cells are populated or blank. Those ancillary values are not silently substituted. Opposite-direction ancillary columns together form a complete pair and fail closed beside Amount. Schema arbitration happens before row direction; Type cannot rescue an ambiguous schema. After arbitration selects one money representation, row direction uses a recognized Type first. Only when Type is absent or unrecognized does a trailing CR or DR marker decide. Only when both are absent does the selected money heading or sign decide. Thus Purchase and Refund outrank a conflicting marker on an otherwise unambiguous schema; notably, Payment is unrecognized and preserves the fallback. Conflicting money representations fail closed instead of being chosen by header order. Distinct equal-ranked amount aliases, multiple equally ranked same-direction money headers without a literal Amount, an amount alias beside a separate debit/credit representation, a literal Amount beside a complete pair, and a third amount candidate beside a pair each produce a named ambiguous-money error. A complete Debit/Credit pair remains supported, but a row with both pair cells nonzero fails closed. On a row with neither recognized Type nor CR/DR marker, a negative debit is a reversal and remains credit, while a negative credit is never promoted to spend. Within one role vocabulary, exact matches still beat partial matches. Column roles remain isolated. Description prefers an ordinary non-role heading. If none exists, exactly one releasable semantic-directional heading such as Charge Description or Payment Memo may serve, but only when an independent money representation survives without it. Outside that semantic-directional exception, suppressed lower-tier money, date and type candidates remain reserved and cannot become Description merely because a stronger sibling won their original role. Structural composites such as Amount Details, Transaction Type Description and Debit Details, or multiple competing semantic candidates, cannot serve as Description; when only those remain, the file fails closed rather than poaching merchant text. Identical duplicate headers remain a separate hazard: DictReader uses the LAST copy. A second Amount REPLACES the figure, a second Type can make refunds book as spend or purchases drop, and a second Date silently rewrites every date. That residual duplicate-heading behavior is not an ACC-045 fix, so send the four canonical columns once each. Type is matched against a fixed vocabulary, not read as free text. purchase, debit, charge, withdrawal and dr mean money out; refund, credit, deposit, return and cr mean money in. All eight spelled-out words resolve in the plural as well, but the two abbreviations do not: drs and crs are unrecognised and fall through to the amount CELL, so a crs row written negative books as SPEND, not as money in. Anything else -- notably Payment, money in on a card but out on a checking account -- counts as unstated, and the direction then falls to the amount CELL rather than to the sign alone. Write the amount as a plain signed number, with nothing else in the cell. A trailing DR or CR and accounting parentheses are not decoration, and what they do depends on the column holding them and on the parser the CONTENT selected -- NOT on the file suffix. Two separate things happen to such a cell, and BOTH are confined to the statement path -- the fan-out described under Routing below. First, in every statement format and every column, the figure is given a sign: parentheses negate, DR negates, and CR does nothing at all. DR is a SIGN; CR is only a label. On the single-receipt path no marker is a sign at all: a total written 20.00 books 20.00, and that same total written 20.00 DR, (20.00) or 20.00 CR books 0.00 -- there the marker makes th
create_consulting_client
name*notesstatuscontact_nameexternal_reforganization
+1
Create an account-private consulting client. Create an account-private consulting client.
create_consulting_deliverable
key*title*due_datedescriptionmilestone_idengagement_id*
Create an internal draft deliverable on an owned engagement. Create an internal draft deliverable on an owned engagement.
create_consulting_document_revision
body*kind*title*engagement_id*expected_latest_revision
Create a revision-safe proposal or SOW draft on an owned engagement. Create a revision-safe proposal or SOW draft on an owned engagement.
create_consulting_engagement
title*statusclient_id*objectivestart_dateexternal_ref
+3
Create an engagement for an owned consulting client. Create an engagement for an owned consulting client.
create_content_asset
title*channelcontent*asset_typecampaign_id*scheduled_for
+1
Create a private draft content asset. There is no publish/send operation. Create a private draft content asset. There is no publish/send operation.
create_content_asset_revision
titlechannelcontentasset_id*asset_typescheduled_for
+1
Create a new owned draft revision from a frozen submitted/approved/rejected revision. Create a new owned draft revision from a frozen submitted/approved/rejected revision.
create_deal
notesstagetitleamountcompanylead_id
+4
Create a sales deal owned by the caller. Provide a title, or a lead_id to inherit the lead's company/name as the title. The deal appears live on the owner's Sales board. No deletes… Create a sales deal owned by the caller. Provide a title, or a lead_id to inherit the lead's company/name as the title. The deal appears live on the owner's Sales board. No deletes are exposed over MCP.
create_invoice
notesdeal_idcurrencydue_datetax_rateline_items
+3
Create a draft invoice owned by the caller for a client, optionally seeded with line items and linked to an existing deal. Totals (subtotal/tax/total) are computed from the line it… Create a draft invoice owned by the caller for a client, optionally seeded with line items and linked to an existing deal. Totals (subtotal/tax/total) are computed from the line items and tax_rate. The invoice starts in status 'draft' — call send_invoice to mark it sent.
create_marketing_audience
name*channelsdescriptionpain_points
Create an owner-private reusable audience definition. Create an owner-private reusable audience definition.
create_marketing_brand
name*voiceguidelinesvalue_proposition
Create an owner-private brand identity. Requires marketing:agent_write. Create an owner-private brand identity. Requires marketing:agent_write.
create_marketing_campaign
name*statusends_onbrand_idchannelsobjective
+2
Create an owner-private marketing campaign linked only to owned brand/audience ids. Create an owner-private marketing campaign linked only to owned brand/audience ids.
create_monitor
name*action*subject*threshold*comparator*action_config
+2
Save a standing watch that fires later, on its own: when a count you name crosses a line you set, do the thing you chose. Lets an agent bank a condition and stop polling for it. Th… Save a standing watch that fires later, on its own: when a count you name crosses a line you set, do the thing you chose. Lets an agent bank a condition and stop polling for it. The watch survives the conversation that created it. Note that start_workflow spends the account's credits unattended each time it fires, so the cooldown is the only thing bounding what it costs. Requires authentication, a Pro or Enterprise account, and the monitors:write scope.
create_outreach_campaign
name*statusdescriptiontarget_segmenttarget_audience
Create a new outreach campaign owned by the authenticated user. Returns the new campaign id. Reversible (campaigns can be edited/deleted in the dashboard). Requires authentication. Create a new outreach campaign owned by the authenticated user. Returns the new campaign id. Reversible (campaigns can be edited/deleted in the dashboard). Requires authentication.
create_outreach_pitch
name*tonepromptcategorybody_template*target_segment
+1
Create a reusable pitch template (subject + body templates, optional drafting prompt) owned by the user. Provenance is stamped source="agent" server-side. Returns the new pitch id.… Create a reusable pitch template (subject + body templates, optional drafting prompt) owned by the user. Provenance is stamped source="agent" server-side. Returns the new pitch id. Requires authentication.
create_portfolio_snapshot
label
Capture an immutable rollup of YOUR OWN ticket portfolio as it stands right now -- totals by status and priority, fixed at this moment and never recomputed. A snapshot is the durab… Capture an immutable rollup of YOUR OWN ticket portfolio as it stands right now -- totals by status and priority, fixed at this moment and never recomputed. A snapshot is the durable 'here is where we were' that a later diff_portfolio_snapshots measures movement against, so capture one before a review rather than after. Snapshots cannot be edited or deleted once taken. The snapshot records the credential that captured it, so one taken by an agent is attributable as such. Requires authentication and the tickets:write scope.
create_portfolio_snapshot_note
body*kindsnapshot_id*expected_content_hash
Record a decision or comment against one of YOUR OWN portfolio snapshots. Pass expected_content_hash -- the hash you saw when you read the snapshot -- and a mismatch is REFUSED rat… Record a decision or comment against one of YOUR OWN portfolio snapshots. Pass expected_content_hash -- the hash you saw when you read the snapshot -- and a mismatch is REFUSED rather than quietly filed against a different revision; that check is the point of this tool. Omitting it still records the note, it just does not assert which revision was on the screen. This writes down what was decided; it does not approve, reject or block anything, and nothing downstream gates on it. Requires authentication and the tickets:write scope.
create_saved_view
name*columns*filterssort_bygroup_bysort_dir
Save a named ticket filter, column, grouping and sort bundle so you can reopen it later or share it with a team. Saves the QUESTION, not an answer: the view is re-run against live… Save a named ticket filter, column, grouping and sort bundle so you can reopen it later or share it with a team. Saves the QUESTION, not an answer: the view is re-run against live tickets every time it is opened, so it never goes stale. The new view is private until you share it. Same endpoint the web app's save button uses. Requires authentication and the tickets:write scope.
create_workflow_template
name*tagssteps*domaindescription
Create a new custom workflow template the caller owns, so a multi-step pipeline can be built in conversation instead of by hand in the browser. Saves the same definition the web bu… Create a new custom workflow template the caller owns, so a multi-step pipeline can be built in conversation instead of by hand in the browser. Saves the same definition the web builder saves. The slug is derived from the name and is returned — use it with run_workflow. Steps run sequentially in the order given; depends_on is builder metadata only and does not change execution order. Requires authentication and the workflows:write scope.
decide_approval
notesdecision*approval_id*
Answer a waiting checkpoint by request id: approve, reject, or amend. 'amend' means send the step back to be redone with the change described in notes, so notes are required for it… Answer a waiting checkpoint by request id: approve, reject, or amend. 'amend' means send the step back to be redone with the change described in notes, so notes are required for it. Spends money: approve continues the run and amend re-runs the step, both billed. Fails with a clear error, rather than silently doing nothing, if the run is no longer waiting. Requires authentication and the workflows:approve scope.
delete_accounting_run
can modify data
run_id*
Permanently delete one private Accounting audit run owned by the caller. This is the only Accounting MCP deletion; it never files taxes, moves money, or contacts an external servic… Permanently delete one private Accounting audit run owned by the caller. This is the only Accounting MCP deletion; it never files taxes, moves money, or contacts an external service.
delete_monitor
monitor_id*
Delete one of your standing watches, so it stops firing. Does not touch anything it already started. Requires authentication and the monitors:write scope. Delete one of your standing watches, so it stops firing. Does not touch anything it already started. Requires authentication and the monitors:write scope.
delete_saved_view
view_id*
Permanently delete one of YOUR OWN saved views. UNRECOVERABLE -- there is no undo and the definition is not retained. archive_saved_view is the reversible retirement and is almost… Permanently delete one of YOUR OWN saved views. UNRECOVERABLE -- there is no undo and the definition is not retained. archive_saved_view is the reversible retirement and is almost always what is wanted instead; use this only for a view that should actually be gone. Deleting a shared view removes it for the team too. Requires authentication and the tickets:write scope.
delete_workflow_template
slug*expected_template_fingerprint
Delete a custom workflow template the caller owns. Built-in templates cannot be deleted. This removes the saved definition; runs already started from it are unaffected. Requires au… Delete a custom workflow template the caller owns. Built-in templates cannot be deleted. This removes the saved definition; runs already started from it are unaffected. Requires authentication and the workflows:write scope.
diff_portfolio_snapshots
read-only
againstsnapshot_id*
Compare two of your own portfolio snapshots and return the per-dimension movement between them. snapshot_id is always the 'to' side; against is the 'from' baseline, defaulting to y… Compare two of your own portfolio snapshots and return the per-dimension movement between them. snapshot_id is always the 'to' side; against is the 'from' baseline, defaulting to your newest snapshot strictly older than it -- the 'what changed since last time' read, which is reported as not found when this is your first snapshot. Comparing an older snapshot against a newer one is allowed and disclosed rather than silently confusing: the result says whether the pair is chronological and the elapsed days go negative. Both sides are immutable, so a diff is reproducible indefinitely. Requires authentication and the tickets:read scope.
draft_outreach_email
lead_id*email_bodysubject_line
Save a draft email subject and/or body onto one of the user's leads. This only stores the draft for human review — it does NOT send anything. A human sends from the dashboard. Requ… Save a draft email subject and/or body onto one of the user's leads. This only stores the draft for human review — it does NOT send anything. A human sends from the dashboard. Requires authentication.
estimate_cost
read-only
kind*runsmodelpanelworkflow
Estimate what a panel or saved workflow would cost before running it: returns a per-agent/per-step price breakdown, the total for the requested number of runs, your remaining quota… Estimate what a panel or saved workflow would cost before running it: returns a per-agent/per-step price breakdown, the total for the requested number of runs, your remaining quota and platform credit, an honest list of any models the platform could not price, and a go/no-go decision. Reserves nothing, charges nothing, starts nothing.
execute_saved_view
read-only
limitoffsetview_id*
Run a saved ticket view's stored filters against live tickets and return the matching tickets, the view that produced them, and group counts when the view groups. Results are alway… Run a saved ticket view's stored filters against live tickets and return the matching tickets, the view that produced them, and group counts when the view groups. Results are always YOUR tickets: a shared view shares the question, not the answers, so opening a teammate's view runs it against your own work and never reveals theirs. An archived view is refused rather than executed. Returns the same payload the web app receives. Requires authentication and the tickets:read scope.
get_accounting_run
read-only
run_id*include_input
Get one private Accounting run owned by the caller, including its deterministic estimates, disclaimer, engine revision, and audit timestamps. Source input stays omitted unless incl… Get one private Accounting run owned by the caller, including its deterministic estimates, disclaimer, engine revision, and audit timestamps. Source input stays omitted unless include_input=true is explicitly requested.
get_agent_detail
read-only
slug*
Full detail on one expert agent by slug (from list_agents): role, description, default model, domain, tags, and tools. Full detail on one expert agent by slug (from list_agents): role, description, default model, domain, tags, and tools.
get_api_key_info
read-only
Report the scopes, plan tier, expiry and remaining quota of the API key making this call, so an agent can check what it is allowed to do before attempting it rather than by being r… Report the scopes, plan tier, expiry and remaining quota of the API key making this call, so an agent can check what it is allowed to do before attempting it rather than by being refused. Requires API-key authentication.
get_consulting_engagement
read-only
engagement_id*
Get one owned engagement with its document revisions, milestones, and internal deliverables. Long document bodies are previewed. Get one owned engagement with its document revisions, milestones, and internal deliverables. Long document bodies are previewed.
get_content_asset
read-only
asset_id*
Get one owned content revision, including its review state and exact content hashes. Get one owned content revision, including its review state and exact content hashes.
get_content_calendar
read-only
endstart
List scheduled owned content between optional ISO-8601 boundaries. Scheduling is planning metadata, not publishing. List scheduled owned content between optional ISO-8601 boundaries. Scheduling is planning metadata, not publishing.
get_deal
read-only
deal_id*
Fetch one of the caller's deals by id with its full activity timeline (notes, calls, meetings, emails, tasks; newest first). Fetch one of the caller's deals by id with its full activity timeline (notes, calls, meetings, emails, tasks; newest first).
get_deal_health
read-only
Health scores for the caller's OPEN deals: each scored 0-100 on how likely it is to be slipping (healthy >= 70 / watch / at_risk), worst first, with plain-language reasons — days s… Health scores for the caller's OPEN deals: each scored 0-100 on how likely it is to be slipping (healthy >= 70 / watch / at_risk), worst first, with plain-language reasons — days since last logged contact, whether it is past its own expected close date, and how its age compares to the caller's average won-deal cycle. Includes per-band counts, an average score, and the reference cycle. Read-only and deterministic over the caller's own deals + activities; nothing is executed or sent. Pair with get_sales_recommendations to act on what is slipping. Requires authentication.
get_invoice
read-only
invoice_id*
Fetch one of the caller's invoices by id, including its line items. Fetch one of the caller's invoices by id, including its line items.
get_invoice_aging
read-only
Summarize the caller's unpaid invoices by how long they have been past due. This owner-scoped, read-only report is computed live; an invoice is overdue only when its status is sent… Summarize the caller's unpaid invoices by how long they have been past due. This owner-scoped, read-only report is computed live; an invoice is overdue only when its status is sent and its due_date is before today.
get_marketing_audience
read-only
audience_id*
Get one owned audience definition with pain points and channels. Get one owned audience definition with pain points and channels.
get_marketing_brand
read-only
brand_id*
Get one owned brand identity with its voice, value proposition, and guidelines. Get one owned brand identity with its voice, value proposition, and guidelines.
get_marketing_campaign
read-only
campaign_id*
Get one owned marketing campaign with its brand, audience, channels, and dates. Get one owned marketing campaign with its brand, audience, channels, and dates.
get_meta_council_platform_metrics
read-only
OPERATOR ONLY: cross-owner analytics for the META COUNCIL PLATFORM itself — every account added together, NOT the caller's workspace (use get_workspace_metrics for that). Requires… OPERATOR ONLY: cross-owner analytics for the META COUNCIL PLATFORM itself — every account added together, NOT the caller's workspace (use get_workspace_metrics for that). Requires both the platform:admin scope AND an ADMIN_EMAILS operator account; everyone else gets a permission error. Returns content-free aggregates only: account counts, 30-day active owners, session counts by status and token totals, ticket open/done, deal pipeline value, invoice outstanding and overdue totals, feedback backlog, per-pillar adoption, the busiest panel slugs, and a per-account activity table (email and counts). It never returns query text, answers, feedback bodies, deal or invoice detail, or any other text a user typed — the aggregate reports how much, never what about. Note that open + done need not equal the ticket total: cancelled tickets are neither.
get_portfolio_snapshot
read-only
snapshot_id*
Fetch one portfolio snapshot by id: its label, schema version, the exact stored rollup payload, its content hash, who recorded it and when. The payload is served from storage and i… Fetch one portfolio snapshot by id: its label, schema version, the exact stored rollup payload, its content hash, who recorded it and when. The payload is served from storage and is never recomputed from live tickets, so a snapshot read today reports what was true when it was taken. A snapshot you do not own is reported as not found rather than as forbidden. Requires authentication and the tickets:read scope.
get_sales_analytics
read-only
Sales pipeline analytics for the caller: probability-weighted forecast, per-stage $ rollup, win rate (won / decided, by count and by value), average sales-cycle days over won deals… Sales pipeline analytics for the caller: probability-weighted forecast, per-stage $ rollup, win rate (won / decided, by count and by value), average sales-cycle days over won deals, and open-deal aging with a stale count. Read-only; computed from the caller's own deals. Requires authentication.
get_sales_recommendations
read-only
The caller's prioritized next-best sales actions: interested leads to convert, open deals gone stale enough to need a follow-up, and overdue tasks — each with a rationale and the e… The caller's prioritized next-best sales actions: interested leads to convert, open deals gone stale enough to need a follow-up, and overdue tasks — each with a rationale and the exact governed tool to run next (convert_lead_to_deal / log_deal_activity / complete_sales_task) plus its arguments. Read-only; ranks the caller's own CRM data (overdue > convert > follow-up). Nothing is executed or sent — approve an item by calling the named write tool. Requires authentication.
get_saved_view
read-only
view_id*
Fetch one saved ticket view's definition by id: its name, filters, columns, grouping, sort and whether it is shared. This returns the view itself, not the tickets it selects -- use… Fetch one saved ticket view's definition by id: its name, filters, columns, grouping, sort and whether it is shared. This returns the view itself, not the tickets it selects -- use execute_saved_view to run it. A view you cannot read is reported as not found rather than as forbidden, so this cannot be used to discover that someone else's view exists. Requires authentication and the tickets:read scope.
get_session
read-only
session_id*
Get the full results of a previous Meta Council session, including all agent opinions and the synthesis. Get the full results of a previous Meta Council session, including all agent opinions and the synthesis.
get_settings
read-only
Get the authenticated user's Meta Council settings — preferred model, plan tier, which credentials are saved (not live-verified), and the registry-backed tools that require, option… Get the authenticated user's Meta Council settings — preferred model, plan tier, which credentials are saved (not live-verified), and the registry-backed tools that require, optionally use, or do not use account credentials. Names and booleans only, never secret values. Requires authentication.
get_site_analytics
read-only
days
OPERATOR ONLY: visitor traffic for the META COUNCIL PLATFORM's own website — every visitor added together, NOT the caller's workspace (use get_workspace_metrics for that) and NOT t… OPERATOR ONLY: visitor traffic for the META COUNCIL PLATFORM's own website — every visitor added together, NOT the caller's workspace (use get_workspace_metrics for that) and NOT the business rollup (use get_meta_council_platform_metrics for that). Requires both the platform:admin scope AND an ADMIN_EMAILS operator account; everyone else gets a permission error naming which of the two requirements failed. Covers a window of whole UTC days ending today, set by days. Returns total views, unique visitors, the authenticated/anonymous split, the busiest public paths, the busiest in-app sections, top referrers and a per-day series, plus the window it covers so the caller need not track what it asked for. Page paths and in-app sections are counted separately and are not comparable to one another. It never returns per-visitor rows, email addresses, IP hashes, user agents, session identifiers or query text — the rollup reports how many, never who.
get_ticket_burndown
read-only
daysroot_idtarget_date
Daily burndown series replayed from the append-only ticket ledger: per-day scope (existing, non-cancelled), remaining, done levels plus added/completed flows, with a summary. Optio… Daily burndown series replayed from the append-only ticket ledger: per-day scope (existing, non-cancelled), remaining, done levels plus added/completed flows, with a summary. Optionally scope to one epic's current subtree via root_id. Backfill (legacy_snapshot) rows seed state but never count as additions. days clamps to 7-180 (default 30). Optionally pass target_date to overlay a straight-line plan: an ideal series descending from the window-start remaining to zero on that date, for reading actual against plan.
get_ticket_projects
read-only
Projects overview of the caller's board: one entry per top-level epic with recursive descendant progress (done %, counts by status, blocked, points, sub-epics, last activity), plus… Projects overview of the caller's board: one entry per top-level epic with recursive descendant progress (done %, counts by status, blocked, points, sub-epics, last activity), plus a triage strip of unrouted work (backlog + unassigned root tickets). Read-only, recomputed live. Use this before planning a session to see initiative health at a glance; use ticket_list/ticket_get to drill into any id it returns.
get_visualization
read-only
artifact_id*include_svg
Fetch a chart artifact generated by a council session or LOCUS determination. Returns the machine-readable spec (the data behind the chart) plus the stable SVG URL, or the raw SVG… Fetch a chart artifact generated by a council session or LOCUS determination. Returns the machine-readable spec (the data behind the chart) plus the stable SVG URL, or the raw SVG itself with include_svg=true. Artifact ids appear in session results as 'visualizations' / 'visualization' reference blocks. Requires authentication and enforces the artifact owner's tenant boundary.
get_workflow_session
read-only
session_id*
Poll a previously started workflow run for its current step-by-step status and output (useful when run_workflow timed out or is awaiting a checkpoint). Requires authentication. Poll a previously started workflow run for its current step-by-step status and output (useful when run_workflow timed out or is awaiting a checkpoint). Requires authentication.
get_workspace_metrics
read-only
One cross-domain rollup of the caller's own workspace: council sessions (total, last 30 days, by status, tokens), feedback ratings, tickets (open/done), deals (count by stage, open… One cross-domain rollup of the caller's own workspace: council sessions (total, last 30 days, by status, tokens), feedback ratings, tickets (open/done), deals (count by stage, open pipeline value) and invoices (count by status, outstanding total, overdue count). Read-only, recomputed live, and scoped to the caller — it never aggregates across accounts. Use it for a single 'how is this workspace doing' answer instead of calling the per-domain analytics tools one by one; use those (get_sales_analytics, get_ticket_projects, list_invoices) to drill into whatever this surfaces. Counts of unrecognised stages or statuses are reported under 'unknown' rather than dropped, so each breakdown sums to its own total. Note that open + done need not equal the ticket total: cancelled tickets are neither. Invoice overdue status is computed at read time by comparing due dates against now, not stored on the record, so it is current as of this call and an invoice due today does not yet count as overdue.
initialize_consulting_milestones
milestonesengagement_id*
Idempotently initialize stable engagement milestones. Retries return the same ids and external refs. Idempotently initialize stable engagement milestones. Retries return the same ids and external refs.
list_accounting_runs
read-only
limitoffsetstatus
List only the caller's private Accounting-run audit metadata, newest first. Raw source text and analysis results are intentionally omitted. List only the caller's private Accounting-run audit metadata, newest first. Raw source text and analysis results are intentionally omitted.
list_agents
read-only
domain
List all available expert agents with their roles, domains, and specialties. List all available expert agents with their roles, domains, and specialties.
list_approvals
read-only
status
List workflow checkpoints waiting on you, soonest deadline first, with which step is paused and when it runs out. Defaults to the pending ones. Requires authentication and the work… List workflow checkpoints waiting on you, soonest deadline first, with which step is paused and when it runs out. Defaults to the pending ones. Requires authentication and the workflows:read scope.
list_campaign_replies
read-only
limitdirectioncampaign_id*
List sent / received emails for an outreach campaign, newest first — subject, body preview, and reply classification. Requires authentication. List sent / received emails for an outreach campaign, newest first — subject, body preview, and reply classification. Requires authentication.
list_campaign_triggers
read-only
campaign_id*
List automation triggers (auto-reply rules, status updates, notifications) configured for an outreach campaign. Requires authentication. List automation triggers (auto-reply rules, status updates, notifications) configured for an outreach campaign. Requires authentication.
list_consulting_clients
read-only
limitstatus
List consulting clients owned by the API-key account. List consulting clients owned by the API-key account.
list_consulting_engagements
read-only
limitstatusclient_id
List consulting engagements owned by the API-key account. List consulting engagements owned by the API-key account.
list_content_assets
read-only
limitcampaign_idapproval_stateinclude_archived
List owned content assets and immutable revisions; content is never published by this tool. List owned content assets and immutable revisions; content is never published by this tool.
list_deals
read-only
stagelead_id
List the caller's sales deals (newest first) together with a weighted pipeline forecast (open/weighted/won totals). Optionally filter by stage or lead_id. Deals are private to the… List the caller's sales deals (newest first) together with a weighted pipeline forecast (open/weighted/won totals). Optionally filter by stage or lead_id. Deals are private to the API-key owner.
list_integrations
read-only
List which outside services the authenticated user has connected — ticket boards, stored connector credentials (name, kind, whether configured, and when last verified) and the conn… List which outside services the authenticated user has connected — ticket boards, stored connector credentials (name, kind, whether configured, and when last verified) and the connectors available to call them. Returns configured / not configured facts, names and dates ONLY, and never returns a secret value. Read this before planning a workflow that reaches an external service, so a step is not written against a credential the user has not registered. Requires authentication.
list_invoices
read-only
status
List the caller's invoices (newest first), optionally filtered by status (draft/sent/paid/void). Each entry includes its computed overdue flag. List the caller's invoices (newest first), optionally filtered by status (draft/sent/paid/void). Each entry includes its computed overdue flag.
list_marketing_audiences
read-only
List reusable marketing audiences owned by the API-key account. List reusable marketing audiences owned by the API-key account.
list_marketing_brands
read-only
List brand identities owned by the API-key account. List brand identities owned by the API-key account.
list_marketing_campaigns
read-only
statusinclude_archived
List owned marketing campaigns. These are separate from Sales outreach campaigns. List owned marketing campaigns. These are separate from Sales outreach campaigns.
list_meta_council_feedback
read-only
limitstatuscategoryseverity
ADMIN ONLY: list platform-feedback reports — feedback about Meta Council itself, never a tenant's own business data — across all users for triage (requires an ADMIN_EMAILS account;… ADMIN ONLY: list platform-feedback reports — feedback about Meta Council itself, never a tenant's own business data — across all users for triage (requires an ADMIN_EMAILS account; everyone else gets a permission error). Filter by status, category, or severity.
list_monitors
read-only
List the standing watches you have saved, newest first, with what each one watches, what it does, and when it last fired. Requires authentication and the monitors:read scope. List the standing watches you have saved, newest first, with what each one watches, what it does, and when it last fired. Requires authentication and the monitors:read scope.
list_outreach_campaigns
read-only
List the authenticated user's outreach campaigns with live lead / sent / reply counts. Requires authentication. List the authenticated user's outreach campaigns with live lead / sent / reply counts. Requires authentication.
list_panels
read-only
List all available expert panels with their descriptions and agent counts. List all available expert panels with their descriptions and agent counts.
list_portfolio_snapshot_notes
read-only
limitsnapshot_id*
Read the decision and comment thread recorded against one of your portfolio snapshots, oldest first. Each note carries the snapshot content hash it was written against plus binding… Read the decision and comment thread recorded against one of your portfolio snapshots, oldest first. Each note carries the snapshot content hash it was written against plus binding_intact comparing that hash to the snapshot's hash now, so a note can be read as evidence of what was actually on the screen when it was written. Counts are over the notes actually returned, so a truncated page never reports a total it did not show. This reads the thread; it does not approve, reject or block anything. Requires authentication and the tickets:read scope.
list_portfolio_snapshots
read-only
limit
List your own portfolio snapshots, newest first: the immutable rollups of how your ticket portfolio stood at the moments you captured them. Each carries its label, schema version,… List your own portfolio snapshots, newest first: the immutable rollups of how your ticket portfolio stood at the moments you captured them. Each carries its label, schema version, stored payload, content hash, recording actor and creation time. Snapshots are owner-private and never span accounts. Returns the same payload the web app's snapshot list returns. Requires authentication and the tickets:read scope.
list_sales_tasks
read-only
List the caller's open sales tasks (activities of type 'task' not yet done), bucketed overdue / today / upcoming and ordered most-urgent-first with per-bucket counts. Close one wit… List the caller's open sales tasks (activities of type 'task' not yet done), bucketed overdue / today / upcoming and ordered most-urgent-first with per-bucket counts. Close one with complete_sales_task.
list_saved_views
read-only
limitscope
List saved ticket views you can open: the stored filter, column, grouping and sort combinations saved by you, plus any shared with a team you belong to. Shared views appear under t… List saved ticket views you can open: the stored filter, column, grouping and sort combinations saved by you, plus any shared with a team you belong to. Shared views appear under the active and all scopes and never once archived, because an owner's archive is their own working state. Returns the same payload the web app's saved-view list returns. Requires authentication and the tickets:read scope.
list_workflows
read-only
List available multi-step workflow pipelines (composable bundles that chain several steps, each able to run on its own model/provider). Returns each workflow's slug, description, p… List available multi-step workflow pipelines (composable bundles that chain several steps, each able to run on its own model/provider). Returns each workflow's slug, description, per-step model, and definition_sha — a fingerprint of that definition as loaded right now, comparable against the definition_sha reported by a run you start later.
locus_determine_from_scores
read-only
D4A_StressD4B_Supportagent_scoresD1_RiskOfHarmD6_EngagementD3_CoMorbidity
+2
Compute a LOCUS Level of Care from dimension ratings you already have. Deterministic — no LLM, instant: composite + Determination Grid + the inviolable override floors (e.g. Risk-o… Compute a LOCUS Level of Care from dimension ratings you already have. Deterministic — no LLM, instant: composite + Determination Grid + the inviolable override floors (e.g. Risk-of-Harm=4 → minimum Level 5), applied in code. Provide EITHER the seven flat D* ratings (1-5 each; Dimension IV splits into IV-A Stress / IV-B Support) OR a per-reviewer agent_scores map. Sending both is refused (422) rather than scored: agent_scores would win and your flat ratings would be discarded, override floors included. Requires authentication.
log_deal_activity
bodydonetypedeal_idlead_idsubject
+1
Log an activity on a deal (or lead) — a note/call/meeting/email, or a follow-up task with a due date. Pass deal_id and/or lead_id (each must be owned by the caller). type defaults… Log an activity on a deal (or lead) — a note/call/meeting/email, or a follow-up task with a due date. Pass deal_id and/or lead_id (each must be owned by the caller). type defaults to 'note'; for a task set type='task' and a due_date (YYYY-MM-DD). Tasks appear in list_sales_tasks.
mark_invoice_paid
invoice_id*
Mark a draft or sent invoice as paid (stamps paid_at). Cannot be applied to a void invoice. invoice_id is required. Mark a draft or sent invoice as paid (stamps paid_at). Cannot be applied to a void invoice. invoice_id is required.
mint_child_api_key
namescopes*expires_in_minutes
Mint a short-lived child API key for a delegated subtask. The child can never exceed the calling key: requested scopes must be a subset of what the caller holds, its expiry is capp… Mint a short-lived child API key for a delegated subtask. The child can never exceed the calling key: requested scopes must be a subset of what the caller holds, its expiry is capped by the caller's, and it may never itself mint keys (delegation is exactly one level deep). A caller whose own scopes were never recorded explicitly cannot delegate at all until it rotates first. The child key is returned exactly once in the response and cannot be retrieved again; revoking the parent immediately revokes the child. Requires the keys:mint scope.
outreach_analytics
read-only
Outreach summary for the user — total leads, sent, replied, and reply rate. Requires authentication. Outreach summary for the user — total leads, sent, replied, and reply rate. Requires authentication.
plan_workflow
read-only
workflow*parameters
Preview what a workflow WOULD do, without running it. Costs nothing and runs no models: returns the step execution order, each step's role/model/max_tokens and whether it pauses fo… Preview what a workflow WOULD do, without running it. Costs nothing and runs no models: returns the step execution order, each step's role/model/max_tokens and whether it pauses for a human checkpoint, the workflow's declared parameters (validated if you supply values), which required integrations your account already has credentials on file for, an upper-bound cost estimate, and definition_sha — a fingerprint of the definition this plan was built from, which tells you whether the definition changed between planning and running but never hands back the definition itself. Starts no session and records no usage. Use before run_workflow to check a pipeline fits before spending on it. Requires authentication.
preview_accounting_ticket_sync
read-only
run_id*
Preview, without writing, how one completed owned Accounting run's WRITEOff work plan would map to stable Meta Council tickets. Reports creates, updates, unchanged tickets, human-e… Preview, without writing, how one completed owned Accounting run's WRITEOff work plan would map to stable Meta Council tickets. Reports creates, updates, unchanged tickets, human-edited generated fields that will be preserved, and identity conflicts. Requires both accounting:read and tickets:read; tickets:write also satisfies the ticket-read grant. Preview before committing because tickets are not field-encrypted; work-plan text may reproduce source-derived snippets or parser details, and after commit tickets:read can read it without accounting:read. Check the item count before committing. Statement-derived runs currently plan one ticket per unclassified transaction line, so a several-hundred-row statement plans several hundred tickets. When the count is large, report it and confirm with the owner rather than committing a board-flooding sync.
recommend_panel
read-only
query*
Recommend the best expert panel for a query (semantic match with keyword fallback). Returns the top panel + confidence and the runner-up options — feed the result into run_council'… Recommend the best expert panel for a query (semantic match with keyword fallback). Returns the top panel + confidence and the runner-up options — feed the result into run_council's panel argument. Requires authentication because the query may be sent to the configured embedding provider.
reject_content_asset
notesasset_id*
Reject a submitted owned revision with optional reviewer notes. Requires marketing:approve. Reject a submitted owned revision with optional reviewer notes. Requires marketing:approve.
reopen_consulting_deliverable
deliverable_id*
Return an unapproved review deliverable to editable draft status. Return an unapproved review deliverable to editable draft status.
restore_saved_view
view_id*
Return one of YOUR OWN archived saved views to the working set with its definition intact. Idempotent -- restoring a view that is already active is a no-op rather than an error. Us… Return one of YOUR OWN archived saved views to the working set with its definition intact. Idempotent -- restoring a view that is already active is a no-op rather than an error. Use list_saved_views with scope=archived to find restorable views. Requires authentication and the tickets:write scope.
retry_workflow
from_stepsession_id*
Continue a stalled or finished workflow run from a chosen step. This starts a NEW run that reuses the outputs the original run already recorded and only executes — and only pays fo… Continue a stalled or finished workflow run from a chosen step. This starts a NEW run that reuses the outputs the original run already recorded and only executes — and only pays for — the steps from 'from_step' onward. The original run is left untouched and the new one records which run it continues. Omit 'from_step' to resume at the first step that has no recorded output. A step whose output was never recorded is re-run, never skipped. Requires authentication.
rotate_api_key
can modify data
expires_in_days
Replace the API key making this call with a fresh one carrying the same scopes. WARNING: this IRREVERSIBLY deactivates the current key the moment it succeeds — every other caller u… Replace the API key making this call with a fresh one carrying the same scopes. WARNING: this IRREVERSIBLY deactivates the current key the moment it succeeds — every other caller using that key stops working immediately, so do not call it on a shared credential. The new key is returned exactly once in the response and cannot be retrieved again. A delegated child key cannot rotate itself. Requires API-key authentication.
run_council
modelpanelquery*wait_seconds
Submit a question or decision to Meta Council. A panel of specialized AI agents will independently analyze it, then a synthesis step combines their opinions into a unified recommen… Submit a question or decision to Meta Council. A panel of specialized AI agents will independently analyze it, then a synthesis step combines their opinions into a unified recommendation with full transparency. Starts asynchronously by default; use get_session with the returned session id.
run_workflow
query*workflow*parameterswait_secondsidempotency_key
Start a multi-step workflow pipeline and return its session id immediately by default. Poll get_workflow_session for each step's model/provider and output. synthesis. Steps run on… Start a multi-step workflow pipeline and return its session id immediately by default. Poll get_workflow_session for each step's model/provider and output. synthesis. Steps run on YOUR configured provider keys, so a pipeline can chain models across providers. If a step is a human checkpoint, returns the session id to advance. Requires authentication.
score_locus_case
case*modelwait_seconds
Score an anonymized adult mental-health / addiction case against LOCUS. Convenes the LOCUS Assessment Panel (psychiatrist, addiction specialist, clinical social worker, utilization… Score an anonymized adult mental-health / addiction case against LOCUS. Convenes the LOCUS Assessment Panel (psychiatrist, addiction specialist, clinical social worker, utilization reviewer, peer specialist, safety officer); each reviewer independently rates all six LOCUS dimensions, then a DETERMINISTIC engine aggregates the ratings and applies the Determination Grid and the inviolable override floors IN CODE (safety floors like Risk-of-Harm=4 → Level 5 cannot be reasoned away). Returns the recommended Level of Care with a full audit trail. Adults only (CALOCUS/CASII covers child/adolescent); use ONLY anonymized cases. Starts asynchronously by default; poll get_session. Requires authentication.
search_outreach_leads
read-only
limitsearchstatuscampaign_id
Search the user's outreach leads — filter by a text query (company / contact / email), pipeline status, and/or campaign. Returns company, contact, status, pitch, and reply info. Re… Search the user's outreach leads — filter by a text query (company / contact / email), pipeline status, and/or campaign. Returns company, contact, status, pitch, and reply info. Requires authentication.
send_invoice
invoice_id*
Mark a draft invoice as sent (stamps issued_at). Re-sending an already-sent invoice is a harmless no-op. invoice_id is required. Mark a draft invoice as sent (stamps issued_at). Re-sending an already-sent invoice is a harmless no-op. invoice_id is required.
share_saved_view
team_id*view_id*
Share one of YOUR OWN saved views with a single team you belong to. Members may read, list and execute it; only you may revise, re-share or delete it. Executing a shared view runs… Share one of YOUR OWN saved views with a single team you belong to. Members may read, list and execute it; only you may revise, re-share or delete it. Executing a shared view runs it against the READER's own tickets, so this shares the question and never the answers. Re-sharing to a different team MOVES the view rather than adding a second grant -- a view is readable by at most one team. Note: team ids are not currently discoverable from this MCP surface, so supply one you already hold. Requires authentication and the tickets:write scope.
submit_consulting_deliverable
deliverable_id*
Submit an owned draft deliverable for internal review without publishing it. Submit an owned draft deliverable for internal review without publishing it.
submit_content_asset
asset_id*
Submit an owned draft for review, freezing that exact revision and content hash. Submit an owned draft for review, freezing that exact revision and content hash.
submit_meta_council_feedback
bodytitle*contextcategoryseverity
Report feedback about the META COUNCIL PLATFORM itself — a noticeable performance failure, a lacking/missing capability, a bug, or a UX/docs gap in Meta Council's tools, councils,… Report feedback about the META COUNCIL PLATFORM itself — a noticeable performance failure, a lacking/missing capability, a bug, or a UX/docs gap in Meta Council's tools, councils, workflows, or MCP surface. Platform feedback only: do NOT use this for anything about your own business, customers, deals, invoices, or other data Meta Council manages on your behalf — use the relevant business tool for that instead (e.g. create_deal, create_invoice). Use it the moment a tool result, council run, or workflow falls short. Stored per-user and visible only to platform admins — the response returns an id + acknowledgement and submissions cannot be read back. Include machine context (tool name, session id, model) in the context object.
sync_accounting_tickets
run_id*expected_plan_hash*
Commit a previously previewed completed Accounting run's WRITEOff work plan to stable owner-private Meta Council tickets. The expected_plan_hash from the preview is required, retri… Commit a previously previewed completed Accounting run's WRITEOff work plan to stable owner-private Meta Council tickets. The expected_plan_hash from the preview is required, retries are idempotent, stable references prevent duplicate tickets across reprocessed runs, and human edits to generated content fields are preserved. Status, assignee, hierarchy, and completion are not reset. Requires both accounting:read and tickets:write. This creates or updates only in-platform planning tickets; they are not field-encrypted and become readable through tickets:read without accounting:read. It never files, pays, sends, or publishes anything.
test_workflow_step
queryworkflow*parametersstep_index*
Run exactly ONE step of a workflow and return what it produced, so you can iterate on a single step's wording without running the steps before it. THIS SPENDS CREDITS EXACTLY LIKE… Run exactly ONE step of a workflow and return what it produced, so you can iterate on a single step's wording without running the steps before it. THIS SPENDS CREDITS EXACTLY LIKE A REAL STEP: the step runs on a real model through the same engine a full run uses and is billed identically -- it is not a simulation, a dry run, or a free preview. If you want to check a workflow's shape, parameters, models and cost estimate for free, use plan_workflow instead; that one runs nothing. Starts no session, so there is nothing to poll and nothing to advance. Requires authentication.
ticket_archive
actionticket_id*
Retire an owned ticket from the working set, or restore one. Archiving is a different axis from status: the ticket keeps whatever status it had, so a done ticket stays done and a b… Retire an owned ticket from the working set, or restore one. Archiving is a different axis from status: the ticket keeps whatever status it had, so a done ticket stays done and a blocked one comes back still blocked — never use status 'cancelled' to mean 'archived'. An archived ticket disappears from ticket_list, the stats, the buckets, the attention queue, and outbound JIRA/Linear sync, but keeps its id and URL so citations stay valid, and it refuses edits until restored. Cascades to the active subtree; restore brings back exactly what was archived alongside it. Nothing is destroyed — this is not a delete, and no delete tool is exposed.
ticket_batch_create
mode*tickets*parent_idpreview_tokenidempotency_key*
Preview or idempotently commit one atomic owner-private batch of structured tickets and nested subtickets. Preview is non-mutating and returns the normalized commit payload, exact… Preview or idempotently commit one atomic owner-private batch of structured tickets and nested subtickets. Preview is non-mutating and returns the normalized commit payload, exact preview_token, and deterministic predicted IDs as JSON. Commit requires that exact token: combine commit_payload with mode=commit, the caller-held idempotency_key, and preview_token. It returns the same IDs plus replay status. A caller-stable visible-ASCII idempotency_key is always required. MCP authorship is stamped by the server; callers cannot spoof it. Nested subtickets are bounded and validated by the ticket handler before any write. This never executes, sends, publishes, deletes, or mutates an external provider.
ticket_claim
forceassignee*ticket_id*
Claim a ticket to work on: sets assignee to your agent name and moves it to in_progress in one step (the move is audit-logged). Refuses if another agent already has it in progress… Claim a ticket to work on: sets assignee to your agent name and moves it to in_progress in one step (the move is audit-logged). Refuses if another agent already has it in progress unless force=true. Follow up with ticket_comment progress updates and finish via ticket_update status='done'.
ticket_comment
body*kindticket_id*
Add a comment to an owned ticket's activity trail. Use kind='progress' for work updates while a ticket is in progress. The authenticated API-key UUID is stamped as author; callers… Add a comment to an owned ticket's activity trail. Use kind='progress' for work updates while a ticket is in progress. The authenticated API-key UUID is stamped as author; callers cannot supply or spoof it. Open the comment in plain language before any technical detail — these are read during escalations by people who were not part of the work.
ticket_create
title*effortlabelsstatusassigneepriority
+9
Create a ticket on the caller's board — optionally as a subticket via parent_id. Recommend degree of difficulty with effort (trivial|small|medium|large|epic) and the kind of work w… Create a ticket on the caller's board — optionally as a subticket via parent_id. Recommend degree of difficulty with effort (trivial|small|medium|large|epic) and the kind of work with action_type (strategy|implementation|research|validation|testing|coordination). The authenticated API-key UUID is stamped by the server as creator provenance; callers cannot supply or spoof it. Session/workflow ids are opaque metadata links only. New epics cannot be created already done.
ticket_dependency_add
ticket_id*depends_on_ticket_id*
Record that an owned ticket cannot complete until another owned ticket is done. The edge is never erased: correct a mistake with ticket_dependency_remove, which marks the edge remo… Record that an owned ticket cannot complete until another owned ticket is done. The edge is never erased: correct a mistake with ticket_dependency_remove, which marks the edge removed and appends to a ledger rather than deleting anything. Re-adding the same prerequisite reinstates that original edge instead of creating a second one, so an edge removed and restored says so. An edge stops blocking when the prerequisite reaches done, and only then — archiving the prerequisite does not release it. Only epics are gated, so an edge on a task is recorded and reported but never blocks its completion. Rejections carry a stable code: dependency_self (422), dependency_duplicate, dependency_cycle, dependency_graph_too_large (409), ticket_not_found (404).
ticket_dependency_list
read-only
ticket_id*include_removed
List the prerequisites an owned ticket waits on. Read-only. Each edge reports satisfied, which is true only when the prerequisite is done, plus active/removed_at/removed_by_actor.… List the prerequisites an owned ticket waits on. Read-only. Each edge reports satisfied, which is true only when the prerequisite is done, plus active/removed_at/removed_by_actor. Removed edges are omitted unless include_removed is true; they never gate completion, and are readable as history.
ticket_dependency_remove
ticket_id*dependency_id*
Stop an owned ticket from waiting on a prerequisite. Removing the last unsatisfied edge can allow this ticket to close, so this is a gate-opening action. Nothing is deleted: the ed… Stop an owned ticket from waiting on a prerequisite. Removing the last unsatisfied edge can allow this ticket to close, so this is a gate-opening action. Nothing is deleted: the edge is retained, marked with who removed it and when, and the removal is appended to a ledger that survives everything after it. This is not a way to say the prerequisite work is finished — that remains a separate statement about that ticket. Removal is allowed even when either ticket is archived. Rejections carry a stable code: dependency_not_found (404), dependency_already_removed (409).
ticket_get
read-only
ticket_id*
Full detail for one owned ticket: description, acceptance criteria, subticket progress, and the recent activity/comment trail. ticket_id is required. Full detail for one owned ticket: description, acceptance criteria, subticket progress, and the recent activity/comment trail. ticket_id is required.
ticket_list
read-only
qlimitscopecursorstatusassignee
+6
Page through the caller's tickets on the Meta Council board. The opaque next_cursor is owner- and filter-bound; keep every filter unchanged on the next call. Immutable cursor order… Page through the caller's tickets on the Meta Council board. The opaque next_cursor is owner- and filter-bound; keep every filter unchanged on the next call. Immutable cursor ordering keeps a stable full-board traversal exact while returned tickets are edited or reordered. Filter by status, assignee, action_type, priority, parent_id (a ticket UUID, or 'none' for root tickets only), or free-text q over title/description. With recursive=true, parent_id must be an owned UUID and all descendants (not the anchor) are returned as one flat, cycle-safe traversal. Session/workflow links are opaque metadata filters, not access grants. Start here to find work, then use ticket_get for detail and ticket_claim to take a ticket.
ticket_plan
mode*planmodelprompt*contextsession_id
+4
Preview or idempotently commit an owner-private ticket tree generated from a planning prompt or supplied structured plan. Requires tickets:write. A preview without a supplied plan… Preview or idempotently commit an owner-private ticket tree generated from a planning prompt or supplied structured plan. Requires tickets:write. A preview without a supplied plan invokes the planner model and additionally requires councils:run; supplied-plan preview and commit are provider-free and need only tickets:write. Preview is non-mutating and returns the normalized commit payload, an exact preview_token, and deterministic predicted ticket IDs as JSON. To commit, combine that commit_payload with mode=commit, the caller-held idempotency_key, and that exact preview_token; the response returns the same IDs plus replay status. A caller-stable visible-ASCII idempotency_key is always required. This creates only in-platform planning tickets; it never runs them, sends, publishes, deletes, or changes an external provider.
ticket_scenario_create
name*requiredticket_id*then_steps*when_steps*given_steps*
+2
Author one Given/When/Then scenario on an owned ticket. This is the specification an epic must carry before it can be completed: record a passing run against it with ticket_validat… Author one Given/When/Then scenario on an owned ticket. This is the specification an epic must carry before it can be completed: record a passing run against it with ticket_validation_finalize, then transition the epic. The server owns revision 1 and returns current_version and current_definition_hash — pass those exact values to ticket_validation_finalize. Authoring a scenario is not evidence; it states what must be proven, not that it was.
ticket_scenario_list
read-only
ticket_id*include_archived
List an owned ticket's scenarios with their exact current revisions, including the current_version and current_definition_hash that ticket_validation_finalize requires. Read-only.… List an owned ticket's scenarios with their exact current revisions, including the current_version and current_definition_hash that ticket_validation_finalize requires. Read-only. Use it before recording a run to confirm which revision is current, and to see why an epic still reports required_scenario_missing.
ticket_scenario_revise
name*ticket_id*then_steps*when_steps*given_steps*scenario_id*
+1
Replace an owned scenario's content, compare-and-swapping on expected_version. Revisions are append-only: validation runs already recorded keep naming the exact version and hash th… Replace an owned scenario's content, compare-and-swapping on expected_version. Revisions are append-only: validation runs already recorded keep naming the exact version and hash they were proven against, so revising never rewrites past evidence — it does mean the epic needs a fresh passing run against the new version. A stale expected_version conflicts rather than overwriting a concurrent edit.
ticket_update
titleeffortlabelsstatusassigneepriority
+14
Update fields on an owned ticket — status moves (each one is auto-logged to the ticket's audit trail), reassignment, priority/effort/action_type recommendations, title/description… Update fields on an owned ticket — status moves (each one is auto-logged to the ticket's audit trail), reassignment, priority/effort/action_type recommendations, title/description edits, safe reparenting, opaque session/workflow links, effort points, order, and user-owned external refs. Clear flags are explicit so stdio clients never lose JSON nulls. System-owned provider, Accounting, plan, and batch refs are preserved and cannot be spoofed. The authenticated API-key UUID is stamped on the audit trail. Epic completion and terminal reopen fail closed on this generic tool until an explicit lifecycle operation supplies retry/version evidence.
ticket_validation_finalize
runner*summaryverdict*evidence*ticket_id*environment*
+5
Finalize one immutable validation run for an exact owned ticket scenario revision. Requires the opt-in tickets:validate scope. The server derives owner and actor only from the auth… Finalize one immutable validation run for an exact owned ticket scenario revision. Requires the opt-in tickets:validate scope. The server derives owner and actor only from the authenticated API key. Evidence payloads are bounded opaque JSON objects; locator-looking strings are recorded but never opened, resolved, redirected, or fetched. Exact retries by the same credential actor return the original receipt; a changed actor or changed content under the same key conflicts.
triage_meta_council_feedback
statusadmin_notesfeedback_id*
ADMIN ONLY: triage a platform-feedback report — set its status and/or admin notes (requires an ADMIN_EMAILS account; everyone else gets a permission error). Get the full feedback i… ADMIN ONLY: triage a platform-feedback report — set its status and/or admin notes (requires an ADMIN_EMAILS account; everyone else gets a permission error). Get the full feedback id from list_meta_council_feedback.
unshare_saved_view
view_id*
Make one of YOUR OWN shared saved views private again. Idempotent. Revocation is immediate: team membership is resolved on every read and never copied into a grant, so this takes e… Make one of YOUR OWN shared saved views private again. Idempotent. Revocation is immediate: team membership is resolved on every read and never copied into a grant, so this takes effect on each member's next request. Requires authentication and the tickets:write scope.
update_consulting_client
namenotesstatusclient_id*contact_nameorganization
+1
Update mutable fields on an owned consulting client. Update mutable fields on an owned consulting client.
update_consulting_deliverable
titledue_datedescriptionmilestone_iddeliverable_id*
Edit an internal draft deliverable; review/approval state is separate. Edit an internal draft deliverable; review/approval state is separate.
update_consulting_document_revision
bodytitledocument_id*
Edit an unapproved proposal/SOW revision; approved revisions are immutable. Edit an unapproved proposal/SOW revision; approved revisions are immutable.
update_consulting_engagement
titlestatusclient_idobjectivestart_dateengagement_id*
+3
Update mutable fields on an owned consulting engagement. Update mutable fields on an owned consulting engagement.
update_consulting_milestone
titlestatusdue_datedescriptionorder_indexmilestone_id*
+1
Update an owned consulting milestone while preserving its stable ref. Update an owned consulting milestone while preserving its stable ref.
update_content_asset
titlechannelcontentasset_id*asset_typescheduled_for
+1
Edit an owned draft. Submitted/approved/rejected revisions are immutable and must be revised. Edit an owned draft. Submitted/approved/rejected revisions are immutable and must be revised.
update_deal
notesstagetitleamountcompanydeal_id*
+3
Update one of the caller's deals — most commonly to ADVANCE its stage (e.g. discovery -> proposal). Moving to closed_won/closed_lost stamps the close date; reopening to an open sta… Update one of the caller's deals — most commonly to ADVANCE its stage (e.g. discovery -> proposal). Moving to closed_won/closed_lost stamps the close date; reopening to an open stage clears it. Only the fields you pass change; deal_id is required.
update_invoice
notescurrencydue_datetax_rateinvoice_id*client_name
+2
Update a draft or sent invoice's header fields (client, terms, due date, tax rate, notes). Only the fields you pass change. Blocked once paid/void — void and re-issue instead. invo… Update a draft or sent invoice's header fields (client, terms, due date, tax rate, notes). Only the fields you pass change. Blocked once paid/void — void and re-issue instead. invoice_id is required.
update_marketing_audience
namechannelsaudience_id*descriptionpain_points
Update fields on one owned audience definition. No delete is exposed over MCP. Update fields on one owned audience definition. No delete is exposed over MCP.
update_marketing_brand
namevoicebrand_id*guidelinesvalue_proposition
Update fields on one owned brand identity. No delete is exposed over MCP. Update fields on one owned brand identity. No delete is exposed over MCP.
update_marketing_campaign
namestatusends_onbrand_idchannelsobjective
+3
Update one owned marketing campaign. Campaign status never publishes content. Update one owned marketing campaign. Campaign status never publishes content.
update_outreach_lead_status
notesstatuslead_id*pitch_idresponse_textresponse_type
Advance a lead through the pipeline — set its status / pipeline stage and, optionally, a recorded reply, pitch, or notes. The core pipeline-drive action. Idempotent (setting the sa… Advance a lead through the pipeline — set its status / pipeline stage and, optionally, a recorded reply, pitch, or notes. The core pipeline-drive action. Idempotent (setting the same status twice is a no-op). Requires authentication.
update_saved_view
namecolumnsfilterssort_byview_id*group_by
+1
Revise one of YOUR OWN saved views in place, keeping its id and any existing team share. Only the fields you send change; the rest are left exactly as they were, so this is safe to… Revise one of YOUR OWN saved views in place, keeping its id and any existing team share. Only the fields you send change; the rest are left exactly as they were, so this is safe to call without re-reading the whole definition first. Sharing a view does not let its readers revise it -- only the owner may. Requires authentication and the tickets:write scope.
update_workflow_template
nameslug*tagsstepsdomaindescription
+1
Replace an existing custom workflow template's definition. This is a full replacement, not a patch: supply name and steps as you want them to end up, because anything omitted is no… Replace an existing custom workflow template's definition. This is a full replacement, not a patch: supply name and steps as you want them to end up, because anything omitted is not carried over. Built-in templates are read-only, and only the template's owner may change it. Steps run sequentially in the order given; depends_on is builder metadata only and does not change execution order. Requires authentication and the workflows:write scope.
void_invoice
invoice_id*