Connectors · Work & projects
Teamwork MCP server for AI agents.
actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Teamwork and the rest of your systems. It gives your agent 737 Teamwork actions (379 reads, 263 writes and 95 that wait for a confirmation) and holds the Teamwork credential itself, so the agent never does. It paces Teamwork's limits and records every call.
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/mcpdo { action: "teamwork.account.get_account", intent: "check which Teamwork account is connected"}# Get Account Details · read · 1 upstream call- 737actionsin one signed file
- 379readlook, never change
- 263writecreate and update
- 95wait for a yesdestructive, confirmed first
Set up
Connect Teamwork in three steps.
- 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 - 02
Connect Teamwork.
Username and secret. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
api_tokenTeamwork API token (used as the Basic username; the password is ignored)site_hostWhere your Teamwork lives: your site host
account { op: "connections.requirements", service: "teamwork" } # free: exactly what to paste, and what is found for you - 03
Make the first call. Check before a write.
Ask in plain words; Claude picks the action. Before anything changes,
checkvalidates the call and prices it, for free.do { action: "teamwork.account.get_account" }# get account details · read · 1 upstream callcheck { action: "teamwork.tasks.create_tasks_by_id", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent
Teamwork at a glance
- Sign-in
- Username and secret. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.
- You provide
api_token- Setup fields
site_host- Limits we pace to
- 150 calls a minute, per connection
- API covered
- Teamwork.com API v3+v1, at your Teamwork instance's API base URL, which you enter when connecting
- Built from
- Teamwork's documentation, read 19 September 2026contento-assets.s3.eu-west-1.amazonaws.comcontento-assets.s3.eu-west-1.amazonaws.comcontento-assets.s3.eu-west-1.amazonaws.com
- Service file
- Version 1.0.0, signed (Ed25519)
- Cached reads
- 376 of 379 reads, for up to an hour; a write clears what it affects
- Ready-made plans
- 12 in the store
- Shared entities
- 10, so ask can line Teamwork up with your other systems
- Data
- Processed and stored in Sydney, Australia. No US region yet
Capabilities
What an AI agent can do in Teamwork.
737 actions in 92 areas. Every one carries its effect, so a key can allow the reads and hold the rest.
- 379readlook, never change
- 263writecreate and update
- 95destructivewait for a confirmation
Time tracking
4629 read · 14 write · 3 destructive
Get all time entries · Get time entries for a specific allocation · Retrieve all Time Entries for a Project · Get time entries for a specific project
Tasks
4324 read · 17 write · 2 destructive
Get all tasks. · Creates a personal task. · Create a Task on a Project · Quickly add multiple Tasks
Custom fields
3313 read · 12 write · 8 destructive
Company custom field values. · Get all custom fields · Get Custom Fields on projects · Project custom field values.
Teams
3125 read · 4 write · 2 destructive
Get a comment's teams · Get Teams for company id · Get a dataview's teams · Get a file's teams
Projects
3019 read · 9 write · 2 destructive
Returns a list of projects · Retrieve Projects assigned to a specific Company · Get a health summary for all projects · Create Project
Custom items
2810 read · 11 write · 7 destructive
Get a custom item field by id. · Create a new field. · Get custom items for a specific project · Edit an existing custom item field.
People
2620 read · 4 write · 2 destructive
Returns a list of people · Get all deleted People · Retrieve a Specific Person · Returns a person
Notebooks
229 read · 10 write · 3 destructive
Get the parent project for a specific notebook. · Create a Single Notebook · Create a new notebook. · List Notebooks in a Specific Category
84 more areas · 478 actions
- Reports 18
- Messages 16
- Portfolio boards 15
- Quotes 15
- Risks 15
- Companies 14
- Containers 14
- Milestones 14
- Workflows 14
- Skills 13
- Webhooks 13
- Boards 12
- People status 12
- Task lists 12
- Files 11
- Tags 11
- Calendar event 10
- Comments 10
- Exchange rate 10
- Invoices 10
- Reactions 10
- Activity 9
- Custom reports 9
- Job roles 9
- Message replies 9
- Calendar events 8
- Project updates 8
- Forms 7
- Task reminders 7
- Budgets 6
- Expenses 6
- Links 6
- Project categories 6
- Project roles 6
- Auto schedule 5
- Calendars 5
- Clock in clock out 5
- File categories 5
- Link categories 5
- Message categories 5
- Notebook categories 5
- Reporting views 5
- Analytic engine 4
- Project templates 4
- Budget report 3
- Categories 3
- Forms public 3
- Likes 3
- Permissions 3
- Data views 2
- Estimation 2
- Link items 2
- Price plans 2
- Project email addresses 2
- Quote export preferences 2
- Quote settings 2
- Summary 2
- Task comments 2
- Tasklists 2
- Time approvals 2
- Timelogs 2
- Timesheets 2
- Trashcan 2
- Workload 2
- Account 1
- Account details 1
- Custom item record comments 1
- Dashboards 1
- Features 1
- File comments 1
- File uploading 1
- File version comments 1
- Importers 1
- Milestone comments 1
- Notebook comments 1
- Person 1
- Project health 1
- Project owner 1
- Recurring preview 1
- Search 1
- Site owner 1
- Timezones 1
- Users 1
- Utilization 1
Top actions
The Teamwork API, shaped for agents.
The ids your agent types, what each does, and the one name it shares with other systems. 343 of Teamwork's 362 action names are shared with at least one other connector, so an agent learns them once.
| Action | What it does | Effect | Same name in |
|---|---|---|---|
teamwork.tasks.list_tasksGet all tasks. | Get all tasks. | read | work.task.list122 connectors |
teamwork.projects.list_projectsReturns a list of projects | Returns a list of projects | read | work.project.list109 connectors |
teamwork.time_tracking.list_timeGet all time entries | Get all time entries | read | work.time_entry.list59 connectors |
teamwork.people.list_peopleReturns a list of people | Returns a list of people | read | identity.user.list474 connectors |
teamwork.comments.list_commentsGet a list of comments | Get a list of comments | read | work.task_comment.list27 connectors |
teamwork.tasks.create_tasks_by_idCreate a Sub Task | Create a Sub Task | write | work.task.create127 connectors |
teamwork.tasks.create_me_personaltasksCreates a personal task. | Creates a personal task. | write | work.task.create127 connectors |
teamwork.tasks.create_projects_by_id_tasksCreate a Task on a Project | Create a Task on a Project | write | work.task.create127 connectors |
teamwork.project_health.list_projects_healthGet health scores for projects | Get health scores for projects | read | work.project.list109 connectors |
teamwork.calendar_event.list_calendareventsGet Events | Get Events | read | comm.event.list61 connectors |
teamwork.companies.list_companiesGet all companies. | Get all companies. | read | crm.company.list162 connectors |
teamwork.tasks.delete_tasks_by_idDelete a Task | Delete a Task | destructive | work.task.delete107 connectors |
Try it
Prompts to paste into Claude.
Each one names the Teamwork actions it will call, so you know what it reads and what it changes before you send it.
- Readread
Which Teamwork invoices are more than 30 days overdue? Group them by customer with the total owed.
calls
teamwork.invoices.list_invoices - Planread
Assemble the portfolio financial review pack in Teamwork.
calls
teamwork.summary.get_summaryteamwork.projects.get_projects_metrics_activeteamwork.projects.get_projects_metrics_invoicesteamwork.budget_report.get_reporting_precanned_budgetteamwork.analytic_engine.list_reporting_financial_trends+1 more - Planread
Build a health briefing for one project in Teamwork.
calls
teamwork.projects.get_projects_by_idteamwork.activity.list_projects_by_project_id_latestactivityteamwork.risks.list_risksteamwork.task_lists.list_projects_by_id_taskliststeamwork.time_tracking.list_projects_by_id_time_total+1 more - Writewrite
Create a Sub Task in Teamwork. Show me exactly what you will send before you save it.
calls
teamwork.tasks.create_tasks_by_id - Across systemsread
For each customer, how many invoices are in Teamwork and how many tickets in ConnectWise PSA?
calls
teamwork.invoices.list_invoicesconnectwise_manage.tickets.list
Across your systems
Teamwork, joined to the rest of your business.
One ask fetches from Teamwork and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.
For each customer, how many invoices are in Teamwork and how many tickets in ConnectWise PSA?
teamwork.invoices.list_invoices+connectwise_manage.tickets.list, oncrm.company· ConnectWise PSAFor each customer, how many invoices are in Teamwork and how many tickets in HubSpot CRM?
teamwork.invoices.list_invoices+hubspot_crm.tickets.list, oncrm.company· HubSpot CRM
identity.user 517crm.company 227work.project 116work.task 105finance.invoice 91content.file 54comm.event 47work.time_entry 40ask { intent: "for each customer, how many invoices are in Teamwork and how many tickets in ConnectWise PSA", steps: [ { action: "teamwork.invoices.list_invoices", as: "inv", input: {}, limit: 100, max_pages: 5 }, { action: "connectwise_manage.tickets.list", as: "tix", input: {}, limit: 100, max_pages: 5 }, { join: { left: "inv", right: "tix", on: "crm.company", group_by: "inv.company_name", select: ["inv.company_name", "count(inv.id) as invoices", "count(tix.id) as tickets"] } } ]}The plan store
Ready-made plans for Teamwork.
12 plans in the store. Install one and your agent runs it by name; the reply says which connections are still missing. A schedule can run a plan on a timetable. There are no triggers or webhooks, by design.
Pull the weekly time and utilisation picture
Use it when Someone asks how many hours the team logged and how utilisation looks over the recent period.
Assemble the portfolio financial review pack
Use it when Preparing the numbers for a monthly portfolio or finance review across all projects.
Build a health briefing for one project
Use it when Someone asks for the current state of a named Teamwork project before a status call.
Re-grade open risks and note them on their tasks
Use it when After a risk review meeting, the agreed new gradings need writing back into Teamwork.
Log time against a task and confirm the total
Use it when Someone wants to record worked hours against a specific Teamwork task.
Drop a batch of captured tasks into a project
Use it when A meeting or email has produced a list of action items that need to become Teamwork tasks.
Recover an item from the trash can
Use it when Something was deleted in Teamwork by mistake and needs restoring from the trash can.
A person decides
Restore this item from the Teamwork trash can, making it visible to everyone with access again.
Raise and complete an invoice for a project
Use it when A project's work is ready to bill and an invoice needs raising and closing off in Teamwork.
A person decides
Raise an invoice on this Teamwork project for the unbilled expenses shown and mark it complete.
Queue a custom report and wait for it
Use it when A saved Teamwork custom report needs running now and its output collected once generation finishes.
Stand up a new client project from a template
Use it when A new client engagement has been won and a Teamwork project needs to exist with people, rates and a kickoff milestone.
A person decides
Create a new Teamwork client project from template, apply the given billing rates and add the listed people.
Delete abandoned tasks after sign-off
Use it when A task list has accumulated abandoned tasks that a person has agreed should be removed entirely.
A person decides
Permanently delete the listed abandoned tasks from this Teamwork task list. This cannot be undone.
Delete webhooks that stopped delivering
Use it when Webhook endpoints have gone dead and the agreed stale ones need removing from Teamwork.
A person decides
Permanently delete the webhooks listed as stale. Any integration still pointing at them will stop receiving events.
account { op: "plans.install", slug: "teamwork-weekly-time-report" }
# then ask for it by name; a schedule can run it on a timetableGovernance for Teamwork
Destructive actions wait for a yes.
95 Teamwork actions are destructive. The first 10:
- Delete a Task
teamwork.tasks.delete_tasks_by_id - Delete an existing task.
teamwork.tasks.delete_tasks_by_task_id - Remove a Card
teamwork.boards.delete_boards_columns_cards_by_id - Delete Project
teamwork.projects.delete_projects_by_id - Delete an existing timelog.
teamwork.time_tracking.delete_time_by_timelog_id - Delete a Time-Entry
teamwork.time_tracking.delete_time_entries_by_id - Deleting a Comment
teamwork.comments.delete_comments_by_id - Delete User
teamwork.people.delete_people_by_id - Delete an existing person.
teamwork.people.delete_people_by_person_id - Delete Event
teamwork.calendar_event.delete_calendarevents_by_id
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.
Delete a Task?
intent: the user asked me to delete a Task
account { op: "keys.create", name: "teamwork-agent", allowed_actions: ["teamwork.*"], cap_calls: 2000, confirm_policy: "human_for_writes", approval_rules: [ { match: "teamwork.tasks.delete_tasks_by_id", approver: "[email protected]" }, { match: "teamwork.tasks.delete_tasks_by_task_id", approver: "[email protected]" }, { match: "teamwork.boards.delete_boards_columns_cards_by_id", approver: "[email protected]" } ]}Cost
What Teamwork costs on actionlake.
Every Teamwork action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Teamwork 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 737 Teamwork actions
- 737actions pageeach page of a long list is one call
- 376reads can be cacheda cache hit costs nothing
- 100,000calls a month, freepaid plans from US$49 a month for 250,000
Action index
Every Teamwork action.
737 actions by area: the id your agent calls, what it does, and its effect.
Time tracking46
teamwork.time_tracking.list_allocations_by_allocation_id_timeGet time entries for a specific allocationreadteamwork.time_tracking.list_projects_by_id_time_entriesRetrieve all Time Entries for a Projectread- and 44 more in this area
Tasks43
teamwork.tasks.create_me_personaltasksCreates a personal task.writeteamwork.tasks.create_projects_by_id_tasksCreate a Task on a Projectwrite- and 41 more in this area
Custom fields33
teamwork.custom_fields.list_companies_by_company_id_customfieldsCompany custom field values.readteamwork.custom_fields.list_customfieldsGet all custom fieldsread- and 31 more in this area
Teams31
teamwork.teams.list_comments_by_id_teamsGet a comment's teamsreadteamwork.teams.list_companies_by_id_teamsGet Teams for company idread- and 29 more in this area
Projects30
teamwork.projects.create_projectsCreate Projectwriteteamwork.projects.list_companies_by_id_projectsRetrieve Projects assigned to a specific Companyread- and 28 more in this area
Custom items28
teamwork.custom_items.create_customitems_by_custom_item_id_fieldsCreate a new field.writeteamwork.custom_items.list_customitems_by_custom_item_id_fields_by_idGet a custom item field by id.read- and 26 more in this area
People26
teamwork.people.get_people_by_idRetrieve a Specific Personreadteamwork.people.get_people_by_person_idReturns a personread- and 24 more in this area
Notebooks22
teamwork.notebooks.create_projects_by_id_notebooksCreate a Single Notebookwriteteamwork.notebooks.create_projects_by_project_id_notebooksCreate a new notebook.write- and 20 more in this area
Reports18
teamwork.reports.get_reporting_email_by_report_idGet the HTML email preview for a scheduled report.readteamwork.reports.get_reporting_oauth_google_statusGet the Google OAuth status for the current user.read- and 16 more in this area
Messages16
teamwork.messages.get_messages_by_message_id_projectGet the parent project for a specific message.readteamwork.messages.list_messagesGet all messages.read- and 14 more in this area
Portfolio boards15
teamwork.portfolio_boards.create_portfolio_boardsCreate a new Boardwriteteamwork.portfolio_boards.create_portfolio_boards_by_board_id_columnsAdd a column to the given Boardwrite- and 13 more in this area
Quotes15
teamwork.quotes.create_quotesCreate a new quote.writeteamwork.quotes.get_company_by_id_quotes_number_previewPreview the next auto-generated quote number.read- and 13 more in this area
Risks15
teamwork.risks.list_projects_by_id_risksRetrieve all Risks in a Projectreadteamwork.risks.list_projects_by_project_id_risksGet risks for a specific projectread- and 13 more in this area
Companies14
teamwork.companies.create_companiesCreate a company.writeteamwork.companies.get_companies_by_company_idGet a specific company.read- and 12 more in this area
Containers14
teamwork.containers.get_reporting_dashboards_details_tasksGet task chart details.readteamwork.containers.list_containersGet all containers.read- and 12 more in this area
Milestones14
teamwork.milestones.create_projects_by_id_milestonesCreate a Single Milestonewriteteamwork.milestones.get_milestones_by_milestone_id_projectGet the parent project for a specific milestone.read- and 12 more in this area
Workflows14
teamwork.workflows.create_projects_by_project_id_workflowsApplies a workflow to a projectwriteteamwork.workflows.list_projects_by_project_id_workflowsGet all workflows.read- and 12 more in this area
Skills13
teamwork.skills.create_skillsCreate a new skill.writeteamwork.skills.create_skills_by_id_peopleAssign a skill.write- and 11 more in this area
Webhooks13
teamwork.webhooks.create_projects_by_id_webhooksCreate a Webhook on a Projectwriteteamwork.webhooks.create_webhooksCreate a Webhookwrite- and 11 more in this area
Boards12
teamwork.boards.create_boards_columns_by_id_cardsAdd a card to a Columnwriteteamwork.boards.get_boards_columns_cards_by_idGet a Cardread- and 10 more in this area
People status12
teamwork.people_status.create_me_statusCreate my Statuswriteteamwork.people_status.create_people_by_id_statusCreate a User Statuswrite- and 10 more in this area
Task lists12
teamwork.task_lists.list_projects_by_id_tasklistsGet all Task Lists for a Projectreadteamwork.task_lists.list_projects_by_project_id_tasklistsGet tasklists in a projectread- and 10 more in this area
Files11
teamwork.files.get_files_by_file_id_projectGet the parent project for a specific file.readteamwork.files.get_files_by_idGet a Single Fileread- and 9 more in this area
Tags11
teamwork.tags.create_tagsCreate a single tagwriteteamwork.tags.list_by_resource_by_id_tagsList All Tags for a Resourceread- and 9 more in this area
Calendar event10
teamwork.calendar_event.create_calendareventsCreate an Eventwriteteamwork.calendar_event.create_calendars_events_task_from_eventCreate a task from a calendar event.write- and 8 more in this area
Comments10
teamwork.comments.create_by_resource_by_resource_id_commentsCreating a Commentwriteteamwork.comments.create_commentsCreate a commentwrite- and 8 more in this area
Exchange rate10
teamwork.exchange_rate.create_custom_exchange_ratesCreate a new custom exchange ratewriteteamwork.exchange_rate.get_custom_exchange_rates_by_idGet a custom exchange rateread- and 8 more in this area
Invoices10
teamwork.invoices.create_projects_by_id_invoicesCreate a New Invoice in a Projectwriteteamwork.invoices.get_invoices_by_invoice_idGet invoice Line Itemsread- and 8 more in this area
Reactions10
teamwork.reactions.get_messages_by_message_idGet Reactions to a Messagereadteamwork.reactions.get_projects_updates_by_update_id_reactionsGet Reactions to a Project Updateread- and 8 more in this area
Activity9
teamwork.activity.list_latest_activityLatest Activity across all Projectsreadteamwork.activity.list_latestactivityLatest activity (all projects)read- and 7 more in this area
Custom reports 9Job roles 9Message replies 9Calendar events 8Project updates 8Forms 7Task reminders 7Budgets 6Expenses 6Links 6Project categories 6Project roles 6Auto schedule 5Calendars 5Clock in clock out 5File categories 5Link categories 5Message categories 5Notebook categories 5Reporting views 5Analytic engine 4Project templates 4Budget report 3Categories 3Forms public 3Likes 3Permissions 3Data views 2Estimation 2Link items 2Price plans 2Project email addresses 2Quote export preferences 2Quote settings 2Summary 2Task comments 2Tasklists 2Time approvals 2Timelogs 2Timesheets 2Trashcan 2Workload 2Account 1Account details 1Custom item record comments 1Dashboards 1Features 1File comments 1File uploading 1File version comments 1Importers 1Milestone comments 1Notebook comments 1Person 1Project health 1Project owner 1Recurring preview 1Search 1Site owner 1Timezones 1Users 1Utilization 1
This index shows a sample of each area. All 737 actions, with their inputs and prices, are in the catalogue, which a free sandbox key can search.
Questions
The Teamwork MCP server, answered.
Is there a Teamwork MCP server for Claude?
Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 737 Teamwork actions across time tracking, tasks, custom fields and teams, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Teamwork.
What do I need to connect Teamwork?
Teamwork API token (used as the Basic username; the password is ignored). Plus your site host. The free call account { op: "connections.requirements", service: "teamwork" } lists exactly what to paste.
Can an AI agent delete or change things in Teamwork?
Only if its key allows it, and only with an explicit confirmation. 95 Teamwork actions are destructive, including delete a Task, delete an existing task. and remove a Card. 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 Teamwork API limit?
actionlake paces every call to the limits in the Teamwork service file: 150 calls a minute per connection. Repeated reads are answered from cache (376 Teamwork actions can be), which never reaches Teamwork.
What does a Teamwork action cost?
One upstream call, the only unit actionlake bills. A list that pages bills one call per page (737 Teamwork actions page). Cache hits, searches, dry runs and calls Teamwork 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 Teamwork API does it cover?
The Teamwork.com API v3+v1 at your Teamwork instance's API base URL, which you enter when connecting. It is built from Teamwork's documentation as read on 19 September 2026. 737 actions in 92 areas, each one in the signed service file (version 1.0.0).
Can I combine Teamwork with my other systems?
Yes. ask joins Teamwork to ConnectWise PSA or HubSpot CRM on the same customer and returns the answer rather than every row. Teamwork maps crm.company, which 227 other connectors also map.
Does actionlake keep my Teamwork data, and where?
actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, 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 Teamwork 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 Teamwork today.
Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.