Integration · Projects & tasks
Connect Claude & ChatGPT to Projectworks
Ask your AI to log time against a task, show your timesheet for the week, or list a client's invoices in Projectworks. It can read clients, projects, modules, tasks, time entries, invoices, expense claims and leave, and create clients, billing contacts, tasks, time entries and leave requests. Timesheets and project questions get answered from the chat.
Free plan, no credit card. Takes about a minute.
Try asking
“Log 90 minutes on the Design review task for today: client workshop prep.”
The AI finds your user and the task, then creates a time entry with the date, minutes and comment.
“What does my timesheet look like this week, and can you submit it?”
It reads your weekly timesheet with its submission state, then submits it for approval once you confirm.
“Which invoices have we sent to Nordic Foods this year?”
It finds the client and lists its invoices in that date range, with status and totals.
What your AI can do
Time and timesheets
Log, change and delete time entries, read weekly timesheets and submit them for approval.
Clients and projects
Read and create clients and billing contacts, read projects and modules, and create tasks.
Invoices, expenses and leave
Read invoices and expense claims, list leave and create leave requests.
“Show me the billable expense claims on the Website rebuild project.”
It lists expense claims for the project filtered to billable ones.
“Book annual leave for Sara on 14 and 15 October.”
It looks up the leave types and statuses, then creates a leave request with one day per date.
“Create a new client, Acme ApS, in the Copenhagen office with Peter as account manager.”
It finds the office and Peter's user ID, then creates the client.
121 tools for Projectworks
These tools are switched on when you connect. You can switch any of them off, or require your approval before it runs.
create_billing_contactChanges dataAdd a billing contact to a client (`client_id`) with name, email, phone and address.create_clientChanges dataCreate a client with `client_name`, `office_id` (see list_offices) and `account_manager_id` (a user ID), plus optional address, currency and finance details.create_expense_claimChanges dataCreate a new expense claim. Required: user id, project id, module id, expense claim type id, is reimbursable or is processed. API summary: Create expense claim.create_leave_requestChanges dataCreate a leave request for `user_id` with a `status_id` (see list_leave_statuses) and `days`, each with a date, hours and leave type ID (see list_leave_types).create_moduleChanges dataCreate a new module. Required: project id or module name. Search modules first to avoid duplicates. API summary: Create Module.create_projectChanges dataCreate a new project. Required: project name, office id, client id, project type id, project status id or currency id. Search projects first to avoid duplicates. API summary: Create Project.create_setChanges dataCreate a new set. Required: entity id, entity type id or field id. API summary: Set custom field data.create_taskChanges dataCreate a task in a module (`module_id`) with `task_name`, and optional start and end dates, fee, rate and billable settings.create_time_entryChanges dataLog time: pass `user_id`, `task_id`, `date` and `minutes`, with an optional `comment`.create_timesheet_unsubmitChanges dataCreate a new unsubmit for a timesheet. API summary: Unsubmits the timesheet for the user.create_userChanges dataCreate a new user. Required: email, first name or last name. Search users first to avoid duplicates. API summary: Create User.create_user_or_update_taskChanges dataCreate a new user. Search users first to avoid duplicates. API summary: Create or update a Task.delete_contactDeletesPermanently delete a contact by contact id. Destructive action; may require approval. API summary: Delete Billing Contact.delete_customerDeletesPermanently delete a customer by customer id. Destructive action; may require approval. API summary: Delete Client.delete_expense_claimDeletesPermanently delete a expense claim by expense claim id. Destructive action; may require approval. API summary: Delete expense claim.delete_leafDeletesPermanently delete a leaf by leave id. Destructive action; may require approval. API summary: Delete leave.delete_moduleDeletesPermanently delete a module by module id. Destructive action; may require approval. API summary: Delete Module.delete_placeholder_taskDeletesPermanently delete a task by task id 2. Destructive action; may require approval. API summary: Delete Placeholder Task.delete_projectDeletesPermanently delete a project by project id. Destructive action; may require approval. API summary: Delete Project.delete_taskDeletesPermanently delete a task by task id. Destructive action; may require approval. API summary: Delete Task.delete_task_userDeletesPermanently delete a user by user id. Destructive action; may require approval. API summary: Delete User Task.delete_time_entryMoves moneyDelete one time entry by `id`. This cannot be undone.delete_userDeletesPermanently delete a user by user id. Destructive action; may require approval. API summary: Delete User.delete_user_journal_entriesMoves moneyPermanently delete a journal entry by user id. Financial or irreversible action; may require approval. API summary: Delete User Posting.delete_usersMoves moneyPermanently delete a user by user id. Financial or irreversible action; may require approval. API summary: Delete User's UserRoles.get_billing_contactsSearch contacts by billing contact id, client id, email, name, external reference or modified since date. Use this to find existing contacts before creating a new contact. Results are paginated. API summary: Get Billing Contacts.get_clientGet one client by `customer_id`, with address, finance details and account manager.get_client_ratecardsList customers for a customer. API summary: Get Client RateCards.get_custom_field_typesList projects. API summary: Get Custom Field Types.get_expense_claimGet one expense claim by `expense_claim_id`.get_expense_claim_typesList projects. API summary: Get expense claim types.get_file_contentGet one file content by expense claim file id. API summary: Get expense claim file content by ExpenseClaimFileID.get_invoiceGet one invoice by `invoice_id`, with its lines and totals.get_leafGet one leaf by leave id. API summary: Get leave by ID.get_moduleGet one module by module id. API summary: Get Module.get_officeGet one office by office id. API summary: Get Office.get_placeholder_taskGet one task for a task by task id 2. API summary: Get Placeholder Task.get_projectGet one project by `project_id`, with its client, managers, dates, status and budget settings.get_project_statusesList projects. API summary: Get Project Statuses.get_project_taskselfservicemodesList projects. API summary: Get Project TaskSelfServiceModes.get_project_typesList projects. API summary: Get Project Types.get_project_userGet one user for a project by user id. API summary: Get a user that is assigned to a project and their rate.get_reportGet one report by report id.get_resourceGet one resource by resource id. API summary: Get Resource by ID.get_taskGet one task by `task_id`, with dates, fee, status and billing settings.get_task_feetypesList tasks. API summary: Get Task FeeTypes.get_task_typesList projects. API summary: Get Task Types.get_task_userGet one user for a task by user id. API summary: Get User Task.get_userGet one user by `user_id`.get_user_s_userrolesList users for a user. API summary: Get User's UserRoles.get_user_userGet one user. API summary: Get User.get_user_usersGet one user. API summary: Get Users.get_weekly_timesheetGet a user's timesheet for the week starting `start_date` (`user_id` required), including its submission state.list_allocation_typesList allocation types. API summary: Get Allocation Types.list_billing_contactsList billing contacts, optionally filtered by `client_id`, name or email.list_budget_frequenciesList budget frequencies. API summary: Get Module BudgetFrequencies.list_budget_typesList budget types. API summary: Get Module BudgetTypes.list_categoriesList categories. Results are paginated. API summary: Get accounting system tracking categories from the database.list_clientsList clients, optionally filtered by `name`, office or external reference. Use this to find a client's ID.list_contactsList contacts. Optional filters: contact name, contact email, company name or suppliers only. Results are paginated. API summary: Get accounting system contacts from the database.list_custom_fieldsList custom fields. Optional filters: field id, field type id, entity type id, entity sub type id or label. Results are paginated. API summary: Get Custom Fields.list_customersList customers. API summary: Get Client FinancePaymentTermTypes.list_entity_sub_typesList entity sub types. API summary: Get Custom Field Entity Sub Types.list_entity_typesList entity types. API summary: Get Custom Field Entity Types.list_expense_claimsList expense claims, filtered by user, project, client, date range, status or whether billable or reimbursable.list_forecastsList forecasts. Optional filters: modified since date, project id, module id, start date or end date. Results are paginated. API summary: Get Forecasts.list_formatsList formats. API summary: Get list of Report Formats.list_gl_codesList gl codes. Optional filters: code, description or is active. API summary: Get GLCodes.list_invoicesList invoices, filtered by `client_id`, `project_id`, status, invoice number or date range.list_leaveList leave requests, filtered by `user_id`, status, leave type or date range.list_leave_statusesList the possible leave request statuses and their IDs.list_leave_typesList the leave types (for example annual or sick leave) and their IDs.list_modulesList project modules (phases or stages), optionally filtered by `project_id` or `name`.list_officesList offices, optionally filtered by `name`.list_project_usersList users for a project. API summary: Get a list of the users assigned to a project and their rates.list_projectsList projects, optionally filtered by `name`, `client_id`, `user_id`, project number or external reference.list_projects_2List projects. API summary: Get Client Types.list_resourcesList resources. Optional filters: after resource id, modified since date, project id, module id, resource type id or user id. Results are paginated. API summary: Get Resources.list_tasksList tasks, optionally filtered by `project_id`, `module_id`, `user_id` or `name`. Use this to find the task ID to log time against.list_tasks_2List tasks. API summary: Get Module FeeTypes.list_time_entriesList time entries, filtered by `user_id`, `task_id`, `date` or modified date.list_user_journal_entriesList journal entries for a user. API summary: Get Postings.list_user_timesheetsList timesheets for a user. Optional filters: start date. API summary: Get a list of timesheet statuses, for a user.list_usersList users, optionally filtered by `name` or `email`. Use this to find a person's user ID.list_users_2List users. Optional filters: role code. API summary: Get User Roles.search_addressesSearch addresses by location id, name or is active. Use this to find existing addresses before creating a new address. API summary: Get Locations.search_agreement_typesSearch agreement types by name. Use this to find existing agreement types before creating a new agreement type. API summary: Get AgreementTypes.search_cost_rate_cardsSearch cost rate cards by name, description or is active. Use this to find existing cost rate cards before creating a new cost rate card. API summary: Get CostRateCards.search_countriesSearch countries by country id, code or name. Use this to find existing countries before creating a new country. API summary: Get Countries.search_currenciesSearch currencies by currency id, code, name or is active. Use this to find existing currencies before creating a new currency. API summary: Get Currencies.search_customer_contactsSearch contacts for a customer by billing contact id, client id 2, email, name, external reference or modified since date. Use this to find existing contacts before creating a new contact. Results are paginated. API summary: Get Client Billing Contacts.search_holiday_calendarsSearch holiday calendars by name. Use this to find existing holiday calendars before creating a new holiday calendar. API summary: Get HolidayCalendars.search_positionsSearch positions by position id, name or is active. Use this to find existing positions before creating a new position. API summary: Get Positions.search_ranksSearch ranks by rank id, name or is active. Use this to find existing ranks before creating a new rank. API summary: Get Ranks.search_reportsSearch reports by report id, published, name, external reference or modified since date. Use this to find existing reports before creating a new report. Results are paginated. API summary: Get list of Reports.search_revenue_rate_cardsSearch revenue rate cards by name, description or is active. Use this to find existing revenue rate cards before creating a new revenue rate card. API summary: Get RevenueRateCards.search_tax_typesSearch tax types by name or is active. Use this to find existing tax types before creating a new tax type. API summary: Get Tax Types.search_teamsSearch teams by team id, name or is active. Use this to find existing teams before creating a new team. API summary: Get Teams.set_forecastChanges dataCreate a new set. Required: module id, date or amount. API summary: Set Forecast.set_resourceChanges dataCreate a new set. Required: project id, date, resource type id, user id or is penciled. API summary: Set Resource.submit_timesheetVisible to othersSubmit a user's timesheet for the week starting `start_date` for approval (`user_id` required).update_customerChanges dataUpdate an existing customer identified by customer id. Only the fields you pass are changed. API summary: Update Client.update_customer_fieldsVisible to othersUpdate an existing field identified by client id. Has effects visible outside this system. API summary: Create or update Custom Fields data.update_expense_claimChanges dataUpdate an existing expense claim identified by expense claim id. API summary: Update expense claim.update_leafChanges dataUpdate an existing leaf identified by leave id. API summary: Update leave.update_moduleChanges dataUpdate an existing module identified by module id. Only the fields you pass are changed. API summary: Update Module.update_module_fieldsVisible to othersUpdate an existing field identified by module id. Has effects visible outside this system. API summary: Create or update Custom Fields data.update_projectChanges dataUpdate an existing project identified by project id. Only the fields you pass are changed. API summary: Update Project.update_project_fieldsVisible to othersUpdate an existing field identified by project id. Has effects visible outside this system. API summary: Create or update Custom Fields data.update_project_usersVisible to othersUpdate an existing user identified by project id. Has effects visible outside this system. API summary: Updates a user's rate on a project.update_taskChanges dataUpdate an existing task identified by task id. Only the fields you pass are changed. API summary: Update Task.update_task_fieldsVisible to othersUpdate an existing field identified by task id. Has effects visible outside this system. API summary: Create or update Custom Fields data.update_task_userChanges dataUpdate an existing user identified by user id. Only the fields you pass are changed. API summary: Update User Task.update_task_usersVisible to othersUpdate an existing user identified by task id. Has effects visible outside this system. API summary: Create/Replace User Task.update_tasksVisible to othersUpdate an existing task identified by task id. Has effects visible outside this system. API summary: Create/Replace Placeholder Task.update_time_entryVisible to othersChange a time entry by `id`: pass the `minutes` and any other fields to change (date, task, comment).update_userChanges dataUpdate an existing user identified by user id. Only the fields you pass are changed. API summary: Update User.update_user_fieldsVisible to othersUpdate an existing field identified by user id. Has effects visible outside this system. API summary: Create or update Custom Fields data.update_user_journal_entriesVisible to othersUpdate an existing journal entry identified by user id. Has effects visible outside this system. API summary: Create Posting.update_user_s_userrolesMoves moneyUpdate an existing user identified by user id. Financial or irreversible action; may require approval. API summary: Update User's UserRoles.update_usersVisible to othersUpdate an existing user identified by user id. Has effects visible outside this system. API summary: Update User Leave Balances.
Set up in three steps
- 1
Pick the app
Create a free HeyMyApps account and choose Projectworks from the app list.
- 2
Paste your key
Paste two values: a consumer key and a consumer secret. In Projectworks go to Settings > Integrations > API accounts, click + to add an API account, then click Add to create a key. Copy the consumer key and consumer secret. The secret is shown only once. Your normal Projectworks login does not work for the API.
- 3
Add the link to your AI
You get a personal MCP link. Add it to Claude, ChatGPT or Cursor:
- Click your name, then Settings › Connectors › Add custom connector.
- Paste your link as the Remote MCP server URL.
- Switch it on from the + menu in a chat.
Questions
What can the AI do in Projectworks?
The AI can read clients, billing contacts, offices, projects, modules, tasks, users, time entries, weekly timesheets, invoices, expense claims and leave. It can create clients, billing contacts, tasks, time entries and leave requests, change time entries and submit timesheets. It can also delete a time entry if you switch that tool on.
Does the AI see my Projectworks credentials?
No. Your consumer key and secret are encrypted at rest and never shown to the AI. After you save them, they are not shown again, not even to you. The AI only sees the results of the tools it calls.
Can I control what the AI is allowed to do?
Yes. You choose which tools are switched on, so you can start read-only. Deleting a time entry cannot be undone, and submitting a timesheet sends it for approval, so those tools can require your approval before they run. Every tool call is logged.
Does it work with ChatGPT?
Yes. In ChatGPT go to Settings › Apps & Connectors › Advanced and turn on Developer mode, then add your HeyMyApps link. Developer mode needs a paid ChatGPT plan: Plus, Pro, Business or Enterprise. The same link also works in Claude (Settings › Connectors › Add custom connector), Cursor and other MCP clients.
What does it cost?
HeyMyApps has a free plan with no credit card required. Paid plans bill per completed task. You also need your own Projectworks account.
Can I use my normal Projectworks login?
No. The Projectworks API does not accept your normal login. You create an API account under Settings > Integrations > API accounts and use its consumer key and consumer secret. Copy the secret right away, because Projectworks shows it only once.
Let your AI work in Projectworks today.
Start free. Your key stays encrypted, and you decide what the AI may do.
Connect Projectworks freeHeyMyApps is not affiliated with Projectworks. Product names are trademarks of their owners.






