---
title: "OpenProject MCP server for AI agents - actionlake"
description: "Give Claude 298 OpenProject actions through one MCP server: work packages, meetings, queries. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/openproject
updated: 2026-10-23
---

Connectors · Work & projects

# OpenProject MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to OpenProject and the rest of your systems. It gives your agent 298 OpenProject actions (194 reads, 76 writes and 28 that wait for a confirmation) and holds the OpenProject credential itself, so the agent never does. It paces OpenProject's limits and records every call.

[Connect OpenProject free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

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: "openproject.work_packages.list_work_packages",
  intent: "check which OpenProject account is connected"
}
# List work packages · read · 1 upstream call
```

- 298 actions in one signed file
- 194 read look, never change
- 76 write create and update
- 28 wait for a yes destructive, confirmed first

Set up

## Connect OpenProject 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 OpenProject.
   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_key` OpenProject API token (My account > Access tokens > API > Generate)
   - `host` Where your OpenProject lives: your host
   ```
   account { op: "connections.requirements", service: "openproject" }
   # 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: "openproject.work_packages.list_work_packages" }
   # list work packages · read · 1 upstream call
   check { action: "openproject.work_packages.create_work_package", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

OpenProject 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_key`

**Setup fields**

`host`

**Limits we pace to**

10 calls a second, per connection

**API covered**

OpenProject API v3 (OpenAPI 3.1.2), at your OpenProject instance's API base URL, which you enter when connecting

**Built from**

OpenProject's documentation, read 23 October 2026[openproject.org](https://www.openproject.org/docs/api/v3/spec.yml) [openproject.org](https://www.openproject.org/docs/api/)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

167 of 194 reads, for up to 5 minutes; a write clears what it affects

**Shared entities**

5, so ask can line OpenProject up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in OpenProject.

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

- **194** read look, never change
- **76** write create and update
- **28** destructive wait for a confirmation

1. ### Work packages
   32
   22 read · 8 write · 2 destructive
   List work packages · Create Work Package · View Work Package · Update a Work Package
2. ### Meetings
   26
   14 read · 8 write · 4 destructive
   List all visible meetings · Create meeting · Get a meeting · Update meeting
3. ### Queries
   16
   11 read · 4 write · 1 destructive
   Available projects for query · Create query · List queries · Query Create Form
4. ### Projects
   15
   10 read · 4 write · 1 destructive
   List projects · Create project · View project · Update Project
5. ### File links
   13
   6 read · 5 write · 2 destructive
   Creates a storage. · Creation of a new folder · Creates an oauth client credentials object for a storage. · Gets a list of project storages
6. ### Recurring meetings
   13
   6 read · 4 write · 3 destructive
   Create recurring meeting · Instantiate an occurrence · List cancelled occurrences of a recurring meeting · List open occurrences of a recurring meeting
7. ### Versions
   11
   8 read · 2 write · 1 destructive
   Create version · List versions · Update Version · Get version
8. ### Work schedule
   11
   6 read · 4 write · 1 destructive
   Creates a non-working day (NOT IMPLEMENTED) · Lists days · Lists all non working days · Lists week days

**46 more areas · 161 actions**

- User working times **10**
- Memberships **9**
- Time entries **9**
- Users **9**
- Attachments **7**
- Notifications **7**
- Grids **6**
- Principals **6**
- Actions capabilities **5**
- Activities **5**
- Groups **5**
- News **5**
- Portfolios **5**
- Programs **5**
- Relations **5**
- Custom fields **4**
- Query filter instance schema **4**
- Types **4**
- Workspaces **4**
- Categories **3**
- Documents **3**
- Reminders **3**
- Sprints **3**
- Views **3**
- Budgets **2**
- Configuration **2**
- Custom actions **2**
- Help texts **2**
- Oauth **2**
- Priorities **2**
- Project phase definitions **2**
- Roles **2**
- Statuses **2**
- User preferences **2**
- Custom options **1**
- Posts **1**
- Project phases **1**
- Query columns **1**
- Query filters **1**
- Query operators **1**
- Query sort bys **1**
- Revisions **1**
- Root **1**
- Time entry activities **1**
- Values property **1**
- Wiki pages **1**

Top actions

## The OpenProject API, shaped for agents.

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

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `openproject.work_packages.list_work_packages` List work packages | List work packages. | read | `work.task.list` 122 connectors |
| `openproject.users.list_users` List Users | List Users. | read | `identity.user.list` 474 connectors |
| `openproject.projects.list_projects` List projects | List projects. | read | `work.project.list` 109 connectors |
| `openproject.groups.list_groups` List groups | List groups. | read | `identity.group.list` 262 connectors |
| `openproject.time_entries.list_time_entries` List time entries | List time entries. | read | `work.time_entry.list` 59 connectors |
| `openproject.work_packages.create_work_package` Create Work Package | Create Work Package. | write | `work.task.create` 127 connectors |
| `openproject.projects.create_project` Create project | Create project. | write | `work.project.create` 102 connectors |
| `openproject.users.create_user` Create User | Create User. | write | `identity.user.create` 262 connectors |
| `openproject.time_entries.create_time_entry` Create time entry | Create time entry. | write | `work.time_entry.create` 56 connectors |
| `openproject.groups.create_group` Create group | Create group. | write | `identity.group.create` 205 connectors |
| `openproject.work_packages.delete_work_package` Delete Work Package | Delete Work Package. | destructive | `work.task.delete` 107 connectors |
| `openproject.workspaces.list_workspace` List workspace | List workspace. | read | `work.workspace.list` 50 connectors |

Try it

## Prompts to paste into Claude.

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

1. Read read
   Which OpenProject tasks are overdue, and who owns each one?
   calls `openproject.work_packages.list_work_packages`
2. Write write
   Create Work Package in OpenProject. Show me exactly what you will send before you save it.
   calls `openproject.work_packages.create_work_package`

Governance for OpenProject

## Destructive actions wait for a yes.

28 OpenProject actions are destructive. These are all of them:

- Delete Work Package `openproject.work_packages.delete_work_package`
- Delete Project `openproject.projects.delete_project`
- Delete user `openproject.users.delete_user`
- Delete time entry `openproject.time_entries.delete_time_entry`
- Delete group `openproject.groups.delete_group`
- Delete version `openproject.versions.delete_version`
- Delete attachment `openproject.attachments.delete_attachment`
- Delete membership `openproject.memberships.delete_membership`
- Delete meeting `openproject.meetings.delete_meeting`
- Delete news `openproject.news.delete_news`
- Delete query `openproject.queries.delete_query`
- Delete Program `openproject.programs.delete_program`
- Delete a storage `openproject.file_links.delete_storage`
- Delete Relation `openproject.relations.delete_relation`
- Delete a reminder `openproject.reminders.delete_reminder`
- Removes a file link. `openproject.file_links.delete_file_link`
- Delete Portfolio `openproject.portfolios.delete_portfolio`
- Remove watcher `openproject.work_packages.remove_watcher`
- Delete a meeting outcome `openproject.meetings.delete_meeting_outcome`
- Delete a meeting section `openproject.meetings.delete_meeting_section`
- Delete placeholder user `openproject.principals.delete_placeholder_user`
- Delete a meeting agenda item `openproject.meetings.delete_meeting_agenda_item`
- Removes a non-working day (NOT IMPLEMENTED) `openproject.work_schedule.delete_non_working_day`
- Delete recurring meeting `openproject.recurring_meetings.delete_recurring_meeting`
- Delete a personal non-working time record `openproject.user_working_times.delete_user_non_working_time`
- Delete a working hours record `openproject.user_working_times.delete_user_working_hours_record`
- Cancel an occurrence `openproject.recurring_meetings.cancel_recurring_meeting_occurrence`
- End a meeting series `openproject.recurring_meetings.end_recurring_meeting`

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.

do openproject.work_packages.delete_work_package confirm_policy: **human**

Delete Work Package?

**intent:** the user asked me to delete Work Package

run suspended · waiting for a named person · key _openproject-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "openproject-agent",
  allowed_actions: ["openproject.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "openproject.work_packages.delete_work_package", approver: "lead@example.com" },
    { match: "openproject.projects.delete_project", approver: "lead@example.com" },
    { match: "openproject.users.delete_user", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to OpenProject only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What OpenProject costs on actionlake.

Every OpenProject action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call OpenProject 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.

- 1 upstream call per action all 298 OpenProject actions
- 298 actions page each page of a long list is one call
- 167 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every OpenProject action.

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

**Work packages 32**

- `openproject.work_packages.add_watcher` Add watcher write
- `openproject.work_packages.available_projects_for_work_package` Available projects for work package read
- `openproject.work_packages.available_watchers` Available watchers read
- `openproject.work_packages.comment_work_package` Comment work package write
- `openproject.work_packages.create_project_work_package` Create work package in project write
- `openproject.work_packages.create_work_package` Create Work Package write
- `openproject.work_packages.create_work_package_file_link` Creates file links. write
- `openproject.work_packages.create_work_package_reminder` Create a work package reminder write
- `openproject.work_packages.create_workspace_work_package` Create work package in workspace write
- `openproject.work_packages.delete_work_package` Delete Work Package destructive
- `openproject.work_packages.form_create_work_package` Form for creating a Work Package read
- `openproject.work_packages.form_create_work_package_in_project` Form for creating Work Packages in a Project read
- `openproject.work_packages.form_create_work_package_in_workspace` Form for creating Work Packages in a Workspace read
- `openproject.work_packages.form_edit_work_package` Form for editing a Work Package read
- `openproject.work_packages.get_project_work_package_collection` Get work packages of project read
- `openproject.work_packages.get_workspace_work_package_collection` Get work packages of workspace read
- `openproject.work_packages.list_available_relation_candidates` Available relation candidates read
- `openproject.work_packages.list_watchers` List watchers read
- `openproject.work_packages.list_work_package_activities` List work package activities read
- `openproject.work_packages.list_work_package_activities_emoji_reactions` List emoji reactions by work package activities read
- `openproject.work_packages.list_work_package_file_links` Gets all file links of a work package read
- `openproject.work_packages.list_work_package_reminders` List work package reminders read
- `openproject.work_packages.list_work_package_schemas` List Work Package Schemas read
- `openproject.work_packages.list_work_packages` List work packages read
- `openproject.work_packages.project_available_assignees` Project Available assignees read
- `openproject.work_packages.remove_watcher` Remove watcher destructive
- `openproject.work_packages.revisions` Revisions read
- `openproject.work_packages.update_work_package` Update a Work Package write
- `openproject.work_packages.view_work_package` View Work Package read
- `openproject.work_packages.view_work_package_schema` View Work Package Schema read
- `openproject.work_packages.work_package_available_assignees` Work Package Available assignees read
- `openproject.work_packages.workspace_available_assignees` Workspace Available assignees read

**Meetings 26**

- `openproject.meetings.create_meeting` Create meeting write
- `openproject.meetings.create_meeting_agenda_item` Create meeting agenda item write
- `openproject.meetings.create_meeting_outcome` Create meeting outcome write
- `openproject.meetings.create_meeting_section` Create meeting section write
- `openproject.meetings.delete_meeting` Delete meeting destructive
- `openproject.meetings.delete_meeting_agenda_item` Delete a meeting agenda item destructive
- `openproject.meetings.delete_meeting_outcome` Delete a meeting outcome destructive
- `openproject.meetings.delete_meeting_section` Delete a meeting section destructive
- `openproject.meetings.get_meeting` Get a meeting read
- `openproject.meetings.get_meeting_agenda_item` Get a meeting agenda item read
- `openproject.meetings.get_meeting_agenda_item_by_meeting` Get a meeting agenda item read
- `openproject.meetings.get_meeting_outcome` Get a meeting outcome read
- `openproject.meetings.get_meeting_outcome_by_agenda_item` Get a meeting outcome read
- `openproject.meetings.get_meeting_schema` Get meeting schema read
- `openproject.meetings.get_meeting_section` Get a meeting section read
- `openproject.meetings.get_meeting_section_by_meeting` Get a meeting section read
- `openproject.meetings.list_meeting_agenda_items` List meeting agenda items read
- `openproject.meetings.list_meeting_outcomes` List meeting outcomes read
- `openproject.meetings.list_meeting_sections` List meeting sections read
- `openproject.meetings.list_meetings` List all visible meetings read
- `openproject.meetings.meeting_create_form` Meeting create form read
- `openproject.meetings.meeting_update_form` Meeting update form read
- `openproject.meetings.update_meeting` Update meeting write
- `openproject.meetings.update_meeting_agenda_item` Update a meeting agenda item write
- `openproject.meetings.update_meeting_outcome` Update a meeting outcome write
- `openproject.meetings.update_meeting_section` Update a meeting section write

**Queries 16**

- `openproject.queries.available_projects_for_query` Available projects for query read
- `openproject.queries.create_query` Create query write
- `openproject.queries.delete_query` Delete query destructive
- `openproject.queries.edit_query` Edit Query write
- `openproject.queries.list_queries` List queries read
- `openproject.queries.query_create_form` Query Create Form read
- `openproject.queries.query_update_form` Query Update Form read
- `openproject.queries.star_query` Star query write
- `openproject.queries.unstar_query` Unstar query write
- `openproject.queries.view_default_query` View default query read
- `openproject.queries.view_default_query_for_project` View default query for project read
- `openproject.queries.view_default_query_for_workspace` View default query for workspace read
- `openproject.queries.view_query` View query read
- `openproject.queries.view_schema_for_global_queries` View schema for global queries read
- `openproject.queries.view_schema_for_project_queries` View schema for project queries read
- `openproject.queries.view_schema_for_workspace_queries` View schema for workspace queries read

**Projects 15**

- `openproject.projects.create_project` Create project write
- `openproject.projects.delete_project` Delete Project destructive
- `openproject.projects.favorite_project` Favorite Project write
- `openproject.projects.list_available_parent_project_candidates` List available parent project candidates read
- `openproject.projects.list_projects` List projects read
- `openproject.projects.list_projects_with_version` List projects having version read
- `openproject.projects.list_workspaces_with_version` List workspaces having version read
- `openproject.projects.project_copy_form` Project copy form read
- `openproject.projects.project_create_form` Project create form read
- `openproject.projects.project_update_form` Project update form read
- `openproject.projects.unfavorite_project` Unfavorite Project write
- `openproject.projects.update_project` Update Project write
- `openproject.projects.view_project` View project read
- `openproject.projects.view_project_schema` View project schema read
- `openproject.projects.view_project_status` View project status read

**File links 13**

- `openproject.file_links.create_storage` Creates a storage. write
- `openproject.file_links.create_storage_folder` Creation of a new folder write
- `openproject.file_links.create_storage_oauth_credentials` Creates an oauth client credentials object for a storage. write
- `openproject.file_links.delete_file_link` Removes a file link. destructive
- `openproject.file_links.delete_storage` Delete a storage destructive
- `openproject.file_links.get_project_storage` Gets a project storage read
- `openproject.file_links.get_storage` Get a storage read
- `openproject.file_links.get_storage_files` Gets files of a storage. read
- `openproject.file_links.list_project_storages` Gets a list of project storages read
- `openproject.file_links.list_storages` Get Storages read
- `openproject.file_links.prepare_storage_file_upload` Preparation of a direct upload of a file to the given storage. write
- `openproject.file_links.update_storage` Update a storage write
- `openproject.file_links.view_file_link` Gets a file link. read

**Recurring meetings 13**

- `openproject.recurring_meetings.cancel_recurring_meeting_occurrence` Cancel an occurrence destructive
- `openproject.recurring_meetings.complete_recurring_meeting_template` Complete the series template write
- `openproject.recurring_meetings.create_recurring_meeting` Create recurring meeting write
- `openproject.recurring_meetings.delete_recurring_meeting` Delete recurring meeting destructive
- `openproject.recurring_meetings.end_recurring_meeting` End a meeting series destructive
- `openproject.recurring_meetings.get_recurring_meeting` Get a recurring meeting read
- `openproject.recurring_meetings.init_recurring_meeting_occurrence` Instantiate an occurrence write
- `openproject.recurring_meetings.list_recurring_meeting_occurrences_cancelled` List cancelled occurrences of a recurring meeting read
- `openproject.recurring_meetings.list_recurring_meeting_occurrences_open` List open occurrences of a recurring meeting read
- `openproject.recurring_meetings.list_recurring_meeting_occurrences_past` List past occurrences of a recurring meeting read
- `openproject.recurring_meetings.list_recurring_meeting_occurrences_upcoming` List upcoming occurrences of a recurring meeting read
- `openproject.recurring_meetings.list_recurring_meetings` List all visible recurring meetings read
- `openproject.recurring_meetings.update_recurring_meeting` Update recurring meeting write

**Versions 11**

- `openproject.versions.available_projects_for_versions` Available projects for versions read
- `openproject.versions.create_version` Create version write
- `openproject.versions.delete_version` Delete version destructive
- `openproject.versions.get_version` Get version read
- `openproject.versions.list_versions` List versions read
- `openproject.versions.list_versions_available_in_a_project` List versions available in a project read
- `openproject.versions.list_versions_available_in_a_workspace` List versions available in a workspace read
- `openproject.versions.update_version` Update Version write
- `openproject.versions.version_create_form` Version create form read
- `openproject.versions.version_update_form` Version update form read
- `openproject.versions.view_version_schema` View version schema read

**Work schedule 11**

- `openproject.work_schedule.create_non_working_day` Creates a non-working day (NOT IMPLEMENTED) write
- `openproject.work_schedule.delete_non_working_day` Removes a non-working day (NOT IMPLEMENTED) destructive
- `openproject.work_schedule.list_days` Lists days read
- `openproject.work_schedule.list_non_working_days` Lists all non working days read
- `openproject.work_schedule.list_week_days` Lists week days read
- `openproject.work_schedule.update_non_working_day` Update a non-working day attributes (NOT IMPLEMENTED) write
- `openproject.work_schedule.update_week_day` Update a week day attributes (NOT IMPLEMENTED) write
- `openproject.work_schedule.update_week_days` Update week days (NOT IMPLEMENTED) write
- `openproject.work_schedule.view_day` View day read
- `openproject.work_schedule.view_non_working_day` View a non-working day read
- `openproject.work_schedule.view_week_day` View a week day read

**User working times 10**

- `openproject.user_working_times.create_user_non_working_time` Create a personal non-working day for a user write
- `openproject.user_working_times.create_user_working_hours` Create a working hours record for a user write
- `openproject.user_working_times.delete_user_non_working_time` Delete a personal non-working time record destructive
- `openproject.user_working_times.delete_user_working_hours_record` Delete a working hours record destructive
- `openproject.user_working_times.list_user_non_working_times` List personal non-working times for a user read
- `openproject.user_working_times.list_user_working_hours` List working hours for a user read
- `openproject.user_working_times.update_user_non_working_time` Update a personal non-working time record write
- `openproject.user_working_times.update_user_working_hours_record` Update a working hours record write
- `openproject.user_working_times.view_user_non_working_time` View a personal non-working time record read
- `openproject.user_working_times.view_user_working_hours_record` View a working hours record read

**Memberships 9**

- `openproject.memberships.create_membership` Create a membership write
- `openproject.memberships.delete_membership` Delete membership destructive
- `openproject.memberships.form_create_membership` Form create membership read
- `openproject.memberships.form_update_membership` Form update membership read
- `openproject.memberships.get_membership` Get a membership read
- `openproject.memberships.get_membership_schema` Schema membership read
- `openproject.memberships.get_memberships_available_projects` Available projects for memberships read
- `openproject.memberships.list_memberships` List memberships read
- `openproject.memberships.update_membership` Update membership write

**Time entries 9**

- `openproject.time_entries.available_projects_for_time_entries` Available projects for time entries read
- `openproject.time_entries.create_time_entry` Create time entry write
- `openproject.time_entries.delete_time_entry` Delete time entry destructive
- `openproject.time_entries.get_time_entry` Get time entry read
- `openproject.time_entries.list_time_entries` List time entries read
- `openproject.time_entries.time_entry_create_form` Time entry create form read
- `openproject.time_entries.time_entry_update_form` Time entry update form read
- `openproject.time_entries.update_time_entry` update time entry write
- `openproject.time_entries.view_time_entry_schema` View time entry schema read

**Users 9**

- `openproject.users.create_user` Create User write
- `openproject.users.delete_user` Delete user destructive
- `openproject.users.list_users` List Users read
- `openproject.users.lock_user` Lock user write
- `openproject.users.unlock_user` Unlock user write
- `openproject.users.update_user` Update user write
- `openproject.users.user_update_form` User update form read
- `openproject.users.view_user` View user read
- `openproject.users.view_user_schema` View user schema read

**Attachments 7**

- `openproject.attachments.complete_attachment_upload` Complete a direct attachment upload read
- `openproject.attachments.delete_attachment` Delete attachment destructive
- `openproject.attachments.list_attachments_by_meeting` List attachments by meeting read
- `openproject.attachments.list_attachments_by_post` List attachments by post read
- `openproject.attachments.list_attachments_by_wiki_page` List attachments by wiki page read
- `openproject.attachments.list_work_package_attachments` List attachments by work package read
- `openproject.attachments.view_attachment` View attachment read

**Notifications 7**

- `openproject.notifications.list_notifications` Get notification collection read
- `openproject.notifications.read_notification` Read notification write
- `openproject.notifications.read_notifications` Read all notifications write
- `openproject.notifications.unread_notification` Unread notification write
- `openproject.notifications.unread_notifications` Unread all notifications write
- `openproject.notifications.view_notification` Get the notification read
- `openproject.notifications.view_notification_detail` Get a notification detail read

**Grids 6**

- `openproject.grids.create_grid` Create a grid write
- `openproject.grids.get_grid` Get a grid read
- `openproject.grids.grid_create_form` Grid Create Form read
- `openproject.grids.grid_update_form` Grid Update Form read
- `openproject.grids.list_grids` List grids read
- `openproject.grids.update_grid` Update a grid write

**Principals 6**

- `openproject.principals.create_placeholder_user` Create placeholder user write
- `openproject.principals.delete_placeholder_user` Delete placeholder user destructive
- `openproject.principals.list_placeholder_users` List placehoder users read
- `openproject.principals.list_principals` List principals read
- `openproject.principals.update_placeholder_user` Update placeholder user write
- `openproject.principals.view_placeholder_user` View placeholder user read

**Actions capabilities 5**

- `openproject.actions_capabilities.list_actions` List actions read
- `openproject.actions_capabilities.list_capabilities` List capabilities read
- `openproject.actions_capabilities.view_action` View action read
- `openproject.actions_capabilities.view_capabilities` View capabilities read
- `openproject.actions_capabilities.view_global_context` View global context read

**Activities 5**

- `openproject.activities.get_activity` Get an activity read
- `openproject.activities.list_activity_attachments` List attachments by activity read
- `openproject.activities.list_activity_emoji_reactions` List emoji reactions by activity read
- `openproject.activities.toggle_activity_emoji_reaction` Toggle emoji reaction for an activity write
- `openproject.activities.update_activity` Update activity write

**Groups 5**

- `openproject.groups.create_group` Create group write
- `openproject.groups.delete_group` Delete group destructive
- `openproject.groups.get_group` Get group read
- `openproject.groups.list_groups` List groups read
- `openproject.groups.update_group` Update group write

**News 5**

- `openproject.news.create_news` Create News write
- `openproject.news.delete_news` Delete news destructive
- `openproject.news.list_news` List News read
- `openproject.news.update_news` Update news write
- `openproject.news.view_news` View news read

**Portfolios 5**

- `openproject.portfolios.delete_portfolio` Delete Portfolio destructive
- `openproject.portfolios.list_portfolios` List portfolios read
- `openproject.portfolios.portfolio_update_form` Portfolio update form read
- `openproject.portfolios.update_portfolio` Update Portfolio write
- `openproject.portfolios.view_portfolio` View portfolio read

**Programs 5**

- `openproject.programs.delete_program` Delete Program destructive
- `openproject.programs.list_programs` List programs read
- `openproject.programs.program_update_form` Program update form read
- `openproject.programs.update_program` Update Program write
- `openproject.programs.view_program` View program read

**Relations 5**

- `openproject.relations.create_relation` Create relation write
- `openproject.relations.delete_relation` Delete Relation destructive
- `openproject.relations.get_relation` Get Relation read
- `openproject.relations.list_relations` List Relations read
- `openproject.relations.update_relation` Update Relation write

**Custom fields 4**

- `openproject.custom_fields.get_custom_field` Get custom field read
- `openproject.custom_fields.get_custom_field_item` Get a custom field hierarchy item read
- `openproject.custom_fields.get_custom_field_item_branch` Get a custom field hierarchy item's branch read
- `openproject.custom_fields.get_custom_field_items` Get the custom field hierarchy items read

**Query filter instance schema 4**

- `openproject.query_filter_instance_schema.list_query_filter_instance_schemas` List Query Filter Instance Schemas read
- `openproject.query_filter_instance_schema.list_query_filter_instance_schemas_for_project` List Query Filter Instance Schemas for Project read
- `openproject.query_filter_instance_schema.list_query_filter_instance_schemas_for_workspace` List Query Filter Instance Schemas for Workspace read
- `openproject.query_filter_instance_schema.view_query_filter_instance_schema` View Query Filter Instance Schema read

**Types 4**

- `openproject.types.list_all_types` List all Types read
- `openproject.types.list_types_available_in_a_project` List types available in a project read
- `openproject.types.list_types_available_in_a_workspace` List types available in a workspace read
- `openproject.types.view_type` View Type read

**Workspaces 4**

- `openproject.workspaces.favorite_workspace` Favorite Workspace write
- `openproject.workspaces.list_workspace` List workspace read
- `openproject.workspaces.unfavorite_workspace` Unfavorite Workspace write
- `openproject.workspaces.view_workspace_schema` View workspace schema read

**Categories 3**

- `openproject.categories.list_categories_of_a_project` List categories of a project read
- `openproject.categories.list_categories_of_a_workspace` List categories of a workspace read
- `openproject.categories.view_category` View Category read

**Documents 3**

- `openproject.documents.list_documents` List Documents read
- `openproject.documents.update_document` Update document write
- `openproject.documents.view_document` View document read

**Reminders 3**

- `openproject.reminders.delete_reminder` Delete a reminder destructive
- `openproject.reminders.list_reminders` List all active reminders read
- `openproject.reminders.update_reminder` Update a reminder write

**Sprints 3**

- `openproject.sprints.get_sprint` Get sprint read
- `openproject.sprints.list_sprints` List sprints read
- `openproject.sprints.list_sprints_in_project` List sprints in project read

**Views 3**

- `openproject.views.create_views` Create view write
- `openproject.views.list_views` List views read
- `openproject.views.view_view` View view read

**Budgets 2**

- `openproject.budgets.view_budget` view Budget read
- `openproject.budgets.view_budgets_of_a_project` view Budgets of a Project read

**Configuration 2**

- `openproject.configuration.view_configuration` View configuration read
- `openproject.configuration.view_project_configuration` View project configuration read

**Custom actions 2**

- `openproject.custom_actions.execute_custom_action` Execute custom action write
- `openproject.custom_actions.get_custom_action` Get a custom action read

**Help texts 2**

- `openproject.help_texts.get_help_text` Get help text read
- `openproject.help_texts.list_help_texts` List help texts read

**Oauth 2**

- `openproject.oauth.get_oauth_application` Get the oauth application. read
- `openproject.oauth.get_oauth_client_credentials` Get the oauth client credentials object. read

**Priorities 2**

- `openproject.priorities.list_all_priorities` List all Priorities read
- `openproject.priorities.view_priority` View Priority read

**Project phase definitions 2**

- `openproject.project_phase_definitions.get_project_phase_definition` Get a project phase definition read
- `openproject.project_phase_definitions.list_project_phase_definitions` List project phase definitions read

**Roles 2**

- `openproject.roles.list_roles` List roles read
- `openproject.roles.view_role` View role read

**Statuses 2**

- `openproject.statuses.get_status` Get a work package status read
- `openproject.statuses.list_statuses` List the collection of all statuses read

**User preferences 2**

- `openproject.user_preferences.show_my_preferences` Show my preferences read
- `openproject.user_preferences.update_user_preferences` Update my preferences write

**Custom options 1**

- `openproject.custom_options.view_custom_option` View Custom Option read

**Posts 1**

- `openproject.posts.view_post` View Post read

**Project phases 1**

- `openproject.project_phases.get_project_phase` Get a project phase read

**Query columns 1**

- `openproject.query_columns.view_query_column` View Query Column read

**Query filters 1**

- `openproject.query_filters.view_query_filter` View Query Filter read

**Query operators 1**

- `openproject.query_operators.view_query_operator` View Query Operator read

**Query sort bys 1**

- `openproject.query_sort_bys.view_query_sort_by` View Query Sort By read

**Revisions 1**

- `openproject.revisions.view_revision` View revision read

**Root 1**

- `openproject.root.view_root` View root read

**Time entry activities 1**

- `openproject.time_entry_activities.get_time_entries_activity` View time entries activity read

**Values property 1**

- `openproject.values_property.view_values_schema` View Values schema read

**Wiki pages 1**

- `openproject.wiki_pages.view_wiki_page` View Wiki Page read

Questions

## The OpenProject MCP server, answered.

**Is there an OpenProject MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 298 OpenProject actions across work packages, meetings, queries and projects, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by OpenProject.

**What do I need to connect OpenProject?**

OpenProject API token (My account > Access tokens > API > Generate). Plus your host. The free call account { op: "connections.requirements", service: "openproject" } lists exactly what to paste.

**Can an AI agent delete or change things in OpenProject?**

Only if its key allows it, and only with an explicit confirmation. 28 OpenProject actions are destructive, including delete Work Package, delete Project and delete user. 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 OpenProject API limit?**

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

**What does an OpenProject action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (298 OpenProject actions page). Cache hits, searches, dry runs and calls OpenProject 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 OpenProject API does it cover?**

The OpenProject API v3 (OpenAPI 3.1.2) at your OpenProject instance's API base URL, which you enter when connecting. It is built from OpenProject's documentation as read on 23 October 2026. 298 actions in 54 areas, each one in the signed service file (version 1.0.0).

**Does actionlake keep my OpenProject 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 OpenProject 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.

## More connectors like OpenProject

Shares the most action names with

- [JetBrains YouTrack 35](https://actionlake.com/connectors/jetbrains-youtrack)
- [Plane 30](https://actionlake.com/connectors/plane)
- [Zoho Projects 28](https://actionlake.com/connectors/zoho-projects)
- [Adobe Workfront 26](https://actionlake.com/connectors/adobe-workfront)
- [Toggl Track 24](https://actionlake.com/connectors/toggl-track)
- [Clockify 21](https://actionlake.com/connectors/clockify)

Joins with, on shared entities

- [Odoo 5](https://actionlake.com/connectors/odoo)
- [Hubstaff 5](https://actionlake.com/connectors/hubstaff)
- [HaloPSA 4](https://actionlake.com/connectors/halopsa)
- [Zoho Books 4](https://actionlake.com/connectors/zoho-books)
- [Productive.io 4](https://actionlake.com/connectors/productive-io)
- [Freshservice 4](https://actionlake.com/connectors/freshservice)

Browse

- [All Work & projects connectors](https://actionlake.com/connectors/category/work-and-projects)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by OpenProject; the name is the vendor's own. Counts are from the OpenProject service file, version 1.0.0.

## Give your agent OpenProject today.

[Connect OpenProject free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

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

---

Source: https://actionlake.com/connectors/openproject
More: https://actionlake.com/llms.txt
