Skip to content

Connectors · MSP & PSA

Kantata MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Kantata and the rest of your systems. It gives your agent 420 Kantata actions (167 reads, 176 writes and 77 that wait for a confirmation) and holds the Kantata credential itself, so the agent never does. It paces Kantata's limits and records every call. Connecting Kantata needs your own Kantata OAuth app and one admin sign-in.

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

claude mcp add --transport http actionlake https://connect.actionlake.com/mcp
the first call
do {  action: "kantata.stories.list",  intent: "check which Kantata account is connected"}# Fetching a list of Stories · read · 1 upstream call
  • 420actionsin one signed file
  • 167readlook, never change
  • 176writecreate and update
  • 77wait for a yesdestructive, confirmed first

Set up

Connect Kantata in three steps.

  1. 01

    Add actionlake to Claude.

    Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.

    https://connect.actionlake.com/mcp
  2. 02

    Connect Kantata.

    OAuth 2.0, authorization code. You register your own OAuth app with Kantata, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on. actionlake stores what you paste write-only, sealed under your tenant's key.

    Before the first sign-in, Kantata needs an OAuth app of your own, registered in its developer portal. actionlake has no Kantata app to lend you.

    • access_tokenAccess token from one sign-in with your own OAuth app
    • refresh_tokenRefresh token from the same sign-in; the access token is renewed from it
    • client_idKantata OAuth application ID (Kantata OX > Settings > Integrations, or https://app.mavenlink.com/oauth/applications;…
    • client_secretKantata OAuth application secret
    account { op: "connections.requirements", service: "kantata" }
    # free: exactly what to paste, and what is found for you
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates the call and prices it, for free.

    do    { action: "kantata.stories.list" }# fetching a list of stories · read · 1 upstream callcheck { action: "kantata.stories.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

Kantata at a glance

Sign-in
OAuth 2.0, authorization code. You register your own OAuth app with Kantata, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on.
You provide
access_tokenrefresh_tokenclient_idclient_secret
Limits we pace to
300 calls a minute, per connection
API covered
Kantata OX API v1 (1.0.0; Swagger 2.0)api.mavenlink.com/api/v1
Built from
Kantata's documentation, read 23 October 2026app.mavenlink.comdeveloper.kantata.com
Service file
Version 1.0.0, signed (Ed25519)
Cached reads
167 of 167 reads, for up to 5 minutes; a write clears what it affects
Shared entities
7, so ask can line Kantata up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in Kantata.

420 actions in 104 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 167readlook, never change
  • 176writecreate and update
  • 77destructivewait for a confirmation
  1. Workspaces

    10

    2 read · 7 write · 1 destructive

    Fetching a list of Workspaces · Creating a new Workspace · Fetching a single Workspace · Updating an existing Workspace

  2. Invoices

    7

    3 read · 2 write · 2 destructive

    Fetching a list of Invoices · Creating a new Invoice · Fetching a single Invoice · Updating an existing Invoice

  3. Workspace resources

    7

    2 read · 4 write · 1 destructive

    Creating a new Workspace Resource · Fetching a list of Workspace Resources · Creating Allocations from Scheduled Hours for Resources · Fetching a single Workspace Resource

  4. Account invitations

    6

    2 read · 3 write · 1 destructive

    Creating a new Account Invitation · Fetching a list of Account Invitations · Fetching a single Account Invitation · Resend an account invitation

  5. Account memberships

    6

    2 read · 2 write · 2 destructive

    Fetching a list of Account Memberships · Make a user active · Fetching a single Account Membership · Updating an existing Account Membership

  6. Billing milestones

    6

    2 read · 3 write · 1 destructive

    Bulk creating one or many Billing Milestones (up to 100 records) · Creating one or many Billing Milestones · Fetching a list of Billing Milestones · Fetching a single Billing Milestone

  7. Custom field values

    6

    2 read · 2 write · 2 destructive

    Creating a new Custom Field Value · Fetching a list of Custom Field Values · Fetching a single Custom Field Value · Updating an existing Custom Field Value

  8. Expense report submissions

    6

    2 read · 4 write · 0 destructive

    Creating a new Expense Report Submission · Fetching a list of Expense Report Submissions · Approve an Expense Report Submission · Cancel an Expense Report Submission

96 more areas · 366 actions
  • Expenses 6
  • Insights report exports 6
  • Rate card set versions 6
  • Story allocation days 6
  • Task status sets 6
  • Time entries 6
  • Time off entries 6
  • Timesheet submissions 6
  • Workspace allocations 6
  • Workweek memberships 6
  • Assignments 5
  • Backup approver associations 5
  • Billable utilizations 5
  • Client invoice defaults 5
  • Cost rates 5
  • Custom field sets 5
  • Custom task statuses 5
  • Estimate scenario resources 5
  • Estimate scenarios 5
  • Estimates 5
  • Expense budgets 5
  • Exports 5
  • Holiday calendar memberships 5
  • Holiday calendars 5
  • Holidays 5
  • Insights access group memberships 5
  • Organization memberships 5
  • Organizations 5
  • Participations 5
  • Posts 5
  • Project accounting records 5
  • Project template assignments 5
  • Project template expense budgets 5
  • Project templates 5
  • Rate card roles 5
  • Rate card sets 5
  • Rate cards 5
  • Resource requests 5
  • Roles 5
  • Skill memberships 5
  • Skills 5
  • Status reports 5
  • Stories 5
  • Story tasks 5
  • Users 5
  • Workspace baselines 5
  • Workspace groups 5
  • Workspace resource skills 5
  • Workweeks 5
  • Access group memberships 4
  • Account locations 4
  • Attachments 4
  • Custom fields 4
  • Exchange tables 4
  • Expense categories 4
  • External payments 4
  • Holiday calendar associations 4
  • Story follows 4
  • Survey answers 4
  • Survey questions 4
  • Survey responses 4
  • Survey templates 4
  • Vendors 4
  • External references 3
  • Line item locks 3
  • Project snapshots 3
  • Project template additional tabs 3
  • Rate card table rows 3
  • Rate card versions 3
  • User group memberships 3
  • Workspace invoice preferences 3
  • Workspace status changes 3
  • Account rate cards activations 2
  • Exchange table rates 2
  • Story dependencies 2
  • Story state changes 2
  • Account colors 1
  • Account insights mappings 1
  • Currencies 1
  • Custom branding 1
  • Custom field choices 1
  • Estimate scenario resource allocations 1
  • Estimate scenario resource recommendations 1
  • Export datasets 1
  • Insights reports 1
  • Revenue recognition methods 1
  • Skill categories 1
  • Subscribed event types 1
  • Subscribed events 1
  • Timesheet approvals 1
  • Timesheet cancellations 1
  • Timesheet rejections 1
  • User capacity 1
  • User file associations 1
  • Workspace permissions 1
  • Workspace task status sets 1

Top actions

The Kantata API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 46 of Kantata's 46 action names are shared with at least one other connector, so an agent learns them once.

ActionWhat it doesEffectSame name in
kantata.stories.listFetching a list of StoriesFetching a list of Stories.readwork.task.list122 connectors
kantata.workspaces.listFetching a list of WorkspacesFetching a list of Workspaces.readwork.project.list109 connectors
kantata.time_entries.listFetching a list of Time EntriesFetching a list of Time Entries.readwork.time_entry.list59 connectors
kantata.users.listFetching visible usersFetching visible users.readidentity.user.list474 connectors
kantata.invoices.listFetching a list of InvoicesFetching a list of Invoices.readfinance.invoice.list101 connectors
kantata.stories.createCreating a new StoryCreating a new Story.writework.task.create127 connectors
kantata.workspaces.createCreating a new WorkspaceCreating a new Workspace.writework.project.create102 connectors
kantata.expenses.listFetching a list of ExpensesFetching a list of Expenses.readfinance.expense.list40 connectors
kantata.time_entries.createCreating a new Time EntryCreating a new Time Entry.writework.time_entry.create56 connectors
kantata.users.meFetch your own dataFetch your own data.readidentity.current_user.get307 connectors
kantata.stories.deleteDeleting an existing StoryDeleting an existing Story.destructivework.task.delete107 connectors
kantata.invoices.createCreating a new InvoiceCreating a new Invoice.writefinance.invoice.create74 connectors

Try it

Prompts to paste into Claude.

Each one names the Kantata actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

    Which Kantata invoices are more than 30 days overdue? Group them by customer with the total owed.

    callskantata.invoices.list

  2. Writewrite

    Creating a new Story in Kantata. Show me exactly what you will send before you save it.

    callskantata.stories.create

Governance for Kantata

Destructive actions wait for a yes.

77 Kantata actions are destructive. The first 10:

  • Deleting an existing Storykantata.stories.delete
  • Deleting an existing Workspacekantata.workspaces.delete
  • Deleting an existing Time Entrykantata.time_entries.delete
  • Deleting an existing Invoicekantata.invoices.delete
  • Deleting an existing Expensekantata.expenses.delete
  • Deleting an existing External Paymentkantata.external_payments.delete
  • Deleting an existing Project Templatekantata.project_templates.delete
  • Deleting an existing Custom Task Statuskantata.custom_task_statuses.delete
  • Deleting an existing Postkantata.posts.delete
  • Deleting an existing Rolekantata.roles.delete

A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

dokantata.stories.deleteconfirm_policy: human

Deleting an existing Story?

intent: the user asked me to deleting an existing Story

run suspended · waiting for a named person · key kantata-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
account {  op: "keys.create", name: "kantata-agent",  allowed_actions: ["kantata.*"], cap_calls: 2000,  confirm_policy: "human_for_writes",  approval_rules: [    { match: "kantata.stories.delete", approver: "[email protected]" },    { match: "kantata.workspaces.delete", approver: "[email protected]" },    { match: "kantata.time_entries.delete", approver: "[email protected]" }  ]}
Illustrative. Scoped to Kantata only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

What Kantata costs on actionlake.

Every Kantata action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Kantata refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

  • 1upstream call per actionall 420 Kantata actions
  • 420actions pageeach page of a long list is one call
  • 167reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every Kantata action.

420 actions by area: the id your agent calls, what it does, and its effect.

Workspaces10
  • kantata.workspaces.createCreating a new Workspacewrite
  • kantata.workspaces.getFetching a single Workspaceread
  • kantata.workspaces.listFetching a list of Workspacesread
  • kantata.workspaces.updateUpdating an existing Workspacewrite
  • kantata.workspaces.apply_templateApply a Project Template to an existing Workspacewrite
  • kantata.workspaces.deleteDeleting an existing Workspacedestructive
  • and 4 more in this area
Invoices7
  • kantata.invoices.createCreating a new Invoicewrite
  • kantata.invoices.getFetching a single Invoiceread
  • kantata.invoices.listFetching a list of Invoicesread
  • kantata.invoices.updateUpdating an existing Invoicewrite
  • kantata.invoices.cancelCancel an existing invoice.destructive
  • kantata.invoices.deleteDeleting an existing Invoicedestructive
  • and 1 more in this area
Workspace resources7
  • kantata.workspace_resources.bulk_match_allocations_to_scheduled_hoursCreating Allocations from Scheduled Hours for Resourceswrite
  • kantata.workspace_resources.createCreating a new Workspace Resourcewrite
  • kantata.workspace_resources.getFetching a single Workspace Resourceread
  • kantata.workspace_resources.listFetching a list of Workspace Resourcesread
  • kantata.workspace_resources.match_allocations_to_scheduled_hoursCreating Allocations from Scheduled Hours for Resourceswrite
  • kantata.workspace_resources.deleteDeleting an existing Workspace Resourcedestructive
  • and 1 more in this area
Account invitations6
  • kantata.account_invitations.createCreating a new Account Invitationwrite
  • kantata.account_invitations.getFetching a single Account Invitationread
  • kantata.account_invitations.listFetching a list of Account Invitationsread
  • kantata.account_invitations.resendResend an account invitationwrite
  • kantata.account_invitations.deleteDeleting an existing Account Invitationdestructive
  • kantata.account_invitations.updateUpdating an existing Account Invitationwrite
Account memberships6
  • kantata.account_memberships.enableMake a user activewrite
  • kantata.account_memberships.getFetching a single Account Membershipread
  • kantata.account_memberships.listFetching a list of Account Membershipsread
  • kantata.account_memberships.updateUpdating an existing Account Membershipwrite
  • kantata.account_memberships.deleteRemove a user from an accountdestructive
  • kantata.account_memberships.disableMake a user inactivedestructive
Billing milestones6
  • kantata.billing_milestones.bulk_createBulk creating one or many Billing Milestones (up to 100 records)write
  • kantata.billing_milestones.createCreating one or many Billing Milestoneswrite
  • kantata.billing_milestones.getFetching a single Billing Milestoneread
  • kantata.billing_milestones.listFetching a list of Billing Milestonesread
  • kantata.billing_milestones.deleteDeleting an existing Billing Milestonesdestructive
  • kantata.billing_milestones.updateUpdating an existing Billing Milestonewrite
Custom field values6
  • kantata.custom_field_values.createCreating a new Custom Field Valuewrite
  • kantata.custom_field_values.getFetching a single Custom Field Valueread
  • kantata.custom_field_values.listFetching a list of Custom Field Valuesread
  • kantata.custom_field_values.updateUpdating an existing Custom Field Valuewrite
  • kantata.custom_field_values.bulk_deleteDelete multiple custom field valuesdestructive
  • kantata.custom_field_values.deleteDeleting an existing Custom Field Valuedestructive
Expense report submissions6
  • kantata.expense_report_submissions.approveApprove an Expense Report Submissionwrite
  • kantata.expense_report_submissions.cancelCancel an Expense Report Submissionwrite
  • kantata.expense_report_submissions.createCreating a new Expense Report Submissionwrite
  • kantata.expense_report_submissions.listFetching a list of Expense Report Submissionsread
  • kantata.expense_report_submissions.getFetching a single Expense Report Submissionread
  • kantata.expense_report_submissions.rejectReject an Expense Report Submissionwrite
Expenses6
  • kantata.expenses.createCreating a new Expensewrite
  • kantata.expenses.getFetching a single Expenseread
  • kantata.expenses.listFetching a list of Expensesread
  • kantata.expenses.updateUpdating an existing Expensewrite
  • kantata.expenses.bulk_deleteDelete multiple expensesdestructive
  • kantata.expenses.deleteDeleting an existing Expensedestructive
Insights report exports6
  • kantata.insights_report_exports.createCreate a new Scheduled Report Exportwrite
  • kantata.insights_report_exports.getGet Scheduled Report Exportread
  • kantata.insights_report_exports.get_latest_resultGet Latest Exportread
  • kantata.insights_report_exports.listGet Scheduled Report Exportsread
  • kantata.insights_report_exports.deleteDelete an existing Scheduled Report Exportdestructive
  • kantata.insights_report_exports.updateUpdate a Scheduled Report Exportwrite
Rate card set versions6
  • kantata.rate_card_set_versions.createCreating a new Rate Card Set Versionwrite
  • kantata.rate_card_set_versions.getFetching a single Rate Card Set Versionread
  • kantata.rate_card_set_versions.listFetching a list of Rate Card Set Versionsread
  • kantata.rate_card_set_versions.publishPublish a Rate Card Set Versionwrite
  • kantata.rate_card_set_versions.deleteDeleting an existing Rate Card Set Versiondestructive
  • kantata.rate_card_set_versions.updateUpdating an existing Rate Card Set Versionwrite
Story allocation days6
  • kantata.story_allocation_days.createCreating a new Daily Scheduled Hours (Story Allocation Day)write
  • kantata.story_allocation_days.getFetching a single Daily Scheduled Hours (Story Allocation Day)read
  • kantata.story_allocation_days.listFetching a list of Daily Scheduled Hours (Story Allocation Days)read
  • kantata.story_allocation_days.updateUpdating an existing Daily Scheduled Hours (Story Allocation Day)write
  • kantata.story_allocation_days.bulk_deleteDelete multiple Daily Scheduled Hours (Story Allocation Days)destructive
  • kantata.story_allocation_days.deleteDeleting an existing Daily Scheduled Hours (Story Allocation Day)destructive
Task status sets6
  • kantata.task_status_sets.createCreating a new Task Status Setwrite
  • kantata.task_status_sets.getFetching a single Task Status Setread
  • kantata.task_status_sets.listFetching a list of Task Status Setsread
  • kantata.task_status_sets.updateUpdating an existing Task Status Setwrite
  • kantata.task_status_sets.deleteDeleting an existing Task Status Setdestructive
  • kantata.task_status_sets.update_account_defaultUpdate Account Default Task Status Setwrite
Time entries6
  • kantata.time_entries.createCreating a new Time Entrywrite
  • kantata.time_entries.getFetching a single Time Entryread
  • kantata.time_entries.listFetching a list of Time Entriesread
  • kantata.time_entries.updateUpdating an existing Time Entrywrite
  • kantata.time_entries.bulk_deleteDelete multiple time entriesdestructive
  • kantata.time_entries.deleteDeleting an existing Time Entrydestructive
Time off entries6
  • kantata.time_off_entries.bulk_createBulk creating one or many Time Off Entries (up to 100 records)write
  • kantata.time_off_entries.createCreating one or many Time Off Entrieswrite
  • kantata.time_off_entries.listFetching a list of Time Off Entriesread
  • kantata.time_off_entries.updateUpdating an existing Time Off Entrywrite
  • kantata.time_off_entries.bulk_deleteDelete multiple time off entriesdestructive
  • kantata.time_off_entries.deleteDeleting an existing Time Off Entrydestructive
Timesheet submissions6
  • kantata.timesheet_submissions.approveApprove a Single Timesheet Submissionwrite
  • kantata.timesheet_submissions.createCreate a Timesheet Submissionwrite
  • kantata.timesheet_submissions.getFetching a single Timesheet Submissionread
  • kantata.timesheet_submissions.listFetching a list of Timesheet Submissionsread
  • kantata.timesheet_submissions.cancelCancel a Single Timesheet Submissionwrite
  • kantata.timesheet_submissions.rejectReject a Single Timesheet Submissionwrite
Workspace allocations6
  • kantata.workspace_allocations.createCreating a new Workspace Allocationwrite
  • kantata.workspace_allocations.getFetching a single Workspace Allocationread
  • kantata.workspace_allocations.listFetching a list of Workspace Allocationsread
  • kantata.workspace_allocations.splitSplitting an Allocationwrite
  • kantata.workspace_allocations.deleteDeleting an existing Workspace Allocationdestructive
  • kantata.workspace_allocations.updateUpdating an existing Workspace Allocationwrite
Workweek memberships6
  • kantata.workweek_memberships.createCreating a new Workweek Membershipwrite
  • kantata.workweek_memberships.getFetching a single Workweek Membershipread
  • kantata.workweek_memberships.listFetching a list of Workweek Membershipsread
  • kantata.workweek_memberships.standardize_to_defaultSwitch to default workweekwrite
  • kantata.workweek_memberships.deleteDeleting an existing Workweek Membershipdestructive
  • kantata.workweek_memberships.updateUpdating an existing Workweek Membershipwrite
Assignments5
  • kantata.assignments.createCreating a new Assignmentwrite
  • kantata.assignments.getFetching a single Assignmentread
  • kantata.assignments.listFetching a list of Assignmentsread
  • kantata.assignments.updateUpdating an existing Assignmentwrite
  • kantata.assignments.deleteDeleting an existing Assignmentdestructive
Backup approver associations5
  • kantata.backup_approver_associations.createCreating a new Backup Approver Associationwrite
  • kantata.backup_approver_associations.getFetching a single Backup Approver Associationread
  • kantata.backup_approver_associations.listFetching a list of Backup Approver Associationsread
  • kantata.backup_approver_associations.updateUpdating an existing Backup Approver Associationwrite
  • kantata.backup_approver_associations.deleteDeleting an existing Backup Approver Associationdestructive
Billable utilizations5
  • kantata.billable_utilizations.createCreating a new Billable Utilizationwrite
  • kantata.billable_utilizations.getFetching a single Billable Utilizationread
  • kantata.billable_utilizations.listFetching a list of Billable Utilizationsread
  • kantata.billable_utilizations.updateUpdating an existing Billable Utilizationwrite
  • kantata.billable_utilizations.deleteDeleting an existing Billable Utilizationdestructive
Client invoice defaults5
  • kantata.client_invoice_defaults.createCreating Client Invoice Defaultswrite
  • kantata.client_invoice_defaults.getFetching Client Invoice Defaults by IDread
  • kantata.client_invoice_defaults.listFetching a list of Client Invoice Defaultsread
  • kantata.client_invoice_defaults.updateUpdating Client Invoice Defaults by IDwrite
  • kantata.client_invoice_defaults.deleteDeleting Client Invoice Defaults by IDdestructive
Cost rates5
  • kantata.cost_rates.bulk_createBulk creating one or many Cost Rates (up to 100 records)write
  • kantata.cost_rates.createCreating one or many Cost Rateswrite
  • kantata.cost_rates.listGet Cost Ratesread
  • kantata.cost_rates.updateUpdating an existing Cost Ratewrite
  • kantata.cost_rates.deleteDeleting an existing Cost Ratedestructive
Custom field sets5
  • kantata.custom_field_sets.createCreating a new Custom Field Setwrite
  • kantata.custom_field_sets.getFetching a single Custom Field Setread
  • kantata.custom_field_sets.listFetching a list of Custom Field Setsread
  • kantata.custom_field_sets.updateUpdating an existing Custom Field Setwrite
  • kantata.custom_field_sets.deleteDeleting an existing Custom Field Setdestructive
Custom task statuses5
  • kantata.custom_task_statuses.createCreating a new Custom Task Statuswrite
  • kantata.custom_task_statuses.getFetching a single Custom Task Statusread
  • kantata.custom_task_statuses.listFetching a list of Custom Task Statusesread
  • kantata.custom_task_statuses.updateUpdating an existing Custom Task Statuswrite
  • kantata.custom_task_statuses.deleteDeleting an existing Custom Task Statusdestructive
Estimate scenario resources5
  • kantata.estimate_scenario_resources.createCreating a new Estimate Scenario Resourcewrite
  • kantata.estimate_scenario_resources.getFetching a single Estimate Scenario Resourceread
  • kantata.estimate_scenario_resources.listFetching a list of Estimate Scenario Resourcesread
  • kantata.estimate_scenario_resources.updateUpdating an existing Estimate Scenario Resourcewrite
  • kantata.estimate_scenario_resources.deleteDeleting an existing Estimate Scenario Resourcedestructive
Estimate scenarios5
  • kantata.estimate_scenarios.createCreating a new Estimate Scenariowrite
  • kantata.estimate_scenarios.getFetching a single Estimate Scenarioread
  • kantata.estimate_scenarios.listFetching a list of Estimate Scenariosread
  • kantata.estimate_scenarios.updateUpdating an existing Estimate Scenariowrite
  • kantata.estimate_scenarios.deleteDeleting an existing Estimate Scenariodestructive
Estimates5
  • kantata.estimates.createCreating a new Estimatewrite
  • kantata.estimates.getFetching a single Estimateread
  • kantata.estimates.listFetching a list of Estimatesread
  • kantata.estimates.updateUpdating an existing Estimatewrite
  • kantata.estimates.deleteDeleting an existing Estimatedestructive
Expense budgets5
  • kantata.expense_budgets.createCreating a new Expense Budgetswrite
  • kantata.expense_budgets.getFetching a single Expense Budgetsread
  • kantata.expense_budgets.listFetching a list of Expense Budgetsread
  • kantata.expense_budgets.updateUpdating an existing Expense Budgetswrite
  • kantata.expense_budgets.deleteDeleting an existing Expense Budgetsdestructive
Exports5
  • kantata.exports.createGenerate a Data Exportwrite
  • kantata.exports.getGet a single Data Exportread
  • kantata.exports.get_download_urlDownload a Data Exportread
  • kantata.exports.listGet a list of Data Exportsread
  • kantata.exports.updateCancel a Data Exportwrite

Holiday calendar memberships 5Holiday calendars 5Holidays 5Insights access group memberships 5Organization memberships 5Organizations 5Participations 5Posts 5Project accounting records 5Project template assignments 5Project template expense budgets 5Project templates 5Rate card roles 5Rate card sets 5Rate cards 5Resource requests 5Roles 5Skill memberships 5Skills 5Status reports 5Stories 5Story tasks 5Users 5Workspace baselines 5Workspace groups 5Workspace resource skills 5Workweeks 5Access group memberships 4Account locations 4Attachments 4Custom fields 4Exchange tables 4Expense categories 4External payments 4Holiday calendar associations 4Story follows 4Survey answers 4Survey questions 4Survey responses 4Survey templates 4Vendors 4External references 3Line item locks 3Project snapshots 3Project template additional tabs 3Rate card table rows 3Rate card versions 3User group memberships 3Workspace invoice preferences 3Workspace status changes 3Account rate cards activations 2Exchange table rates 2Story dependencies 2Story state changes 2Account colors 1Account insights mappings 1Currencies 1Custom branding 1Custom field choices 1Estimate scenario resource allocations 1Estimate scenario resource recommendations 1Export datasets 1Insights reports 1Revenue recognition methods 1Skill categories 1Subscribed event types 1Subscribed events 1Timesheet approvals 1Timesheet cancellations 1Timesheet rejections 1User capacity 1User file associations 1Workspace permissions 1Workspace task status sets 1

This index shows a sample of each area. All 420 actions, with their inputs and prices, are in the catalogue, which a free sandbox key can search.

Questions

The Kantata MCP server, answered.

Is there a Kantata MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 420 Kantata actions across workspaces, invoices, workspace resources and account invitations, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Kantata.

What do I need to connect Kantata?

Your own Kantata OAuth app, registered with Kantata (its client id and client secret), and the access and refresh tokens from one admin sign-in. actionlake has no Kantata app of its own, so this is not a one-step consent. actionlake renews the access token as it expires. The free call account { op: "connections.requirements", service: "kantata" } lists exactly what to paste.

Can an AI agent delete or change things in Kantata?

Only if its key allows it, and only with an explicit confirmation. 77 Kantata actions are destructive, including deleting an existing Story, deleting an existing Workspace and deleting an existing Time Entry. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

Will an AI agent use up my Kantata API limit?

actionlake paces every call to the limits in the Kantata service file: 300 calls a minute per connection. Repeated reads are answered from cache (167 Kantata actions can be), which never reaches Kantata.

What does a Kantata action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (420 Kantata actions page). Cache hits, searches, dry runs and calls Kantata refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

Which Kantata API does it cover?

The Kantata OX API v1 (1.0.0; Swagger 2.0) at api.mavenlink.com/api/v1. It is built from Kantata's documentation as read on 23 October 2026. 420 actions in 104 areas, each one in the signed service file (version 1.0.0).

Does actionlake keep my Kantata data, and where?

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Kantata credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

Which AI clients can use it?

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

Give your agent Kantata today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.