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.
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: "openproject.work_packages.list_work_packages", intent: "check which OpenProject account is connected"}# List work packages · read · 1 upstream call- 298actionsin one signed file
- 194readlook, never change
- 76writecreate and update
- 28wait for a yesdestructive, confirmed first
Set up
Connect OpenProject 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 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_keyOpenProject API token (My account > Access tokens > API > Generate)hostWhere your OpenProject lives: your host
account { op: "connections.requirements", service: "openproject" } # 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: "openproject.work_packages.list_work_packages" }# list work packages · read · 1 upstream callcheck { 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 2026openproject.orgopenproject.org
- 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.
- 194readlook, never change
- 76writecreate and update
- 28destructivewait for a confirmation
Work packages
3222 read · 8 write · 2 destructive
List work packages · Create Work Package · View Work Package · Update a Work Package
Meetings
2614 read · 8 write · 4 destructive
List all visible meetings · Create meeting · Get a meeting · Update meeting
Queries
1611 read · 4 write · 1 destructive
Available projects for query · Create query · List queries · Query Create Form
Projects
1510 read · 4 write · 1 destructive
List projects · Create project · View project · Update Project
File links
136 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
Recurring meetings
136 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
Versions
118 read · 2 write · 1 destructive
Create version · List versions · Update Version · Get version
Work schedule
116 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_packagesList work packages | List work packages. | read | work.task.list122 connectors |
openproject.users.list_usersList Users | List Users. | read | identity.user.list474 connectors |
openproject.projects.list_projectsList projects | List projects. | read | work.project.list109 connectors |
openproject.groups.list_groupsList groups | List groups. | read | identity.group.list262 connectors |
openproject.time_entries.list_time_entriesList time entries | List time entries. | read | work.time_entry.list59 connectors |
openproject.work_packages.create_work_packageCreate Work Package | Create Work Package. | write | work.task.create127 connectors |
openproject.projects.create_projectCreate project | Create project. | write | work.project.create102 connectors |
openproject.users.create_userCreate User | Create User. | write | identity.user.create262 connectors |
openproject.time_entries.create_time_entryCreate time entry | Create time entry. | write | work.time_entry.create56 connectors |
openproject.groups.create_groupCreate group | Create group. | write | identity.group.create205 connectors |
openproject.work_packages.delete_work_packageDelete Work Package | Delete Work Package. | destructive | work.task.delete107 connectors |
openproject.workspaces.list_workspaceList workspace | List workspace. | read | work.workspace.list50 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.
- Readread
Which OpenProject tasks are overdue, and who owns each one?
calls
openproject.work_packages.list_work_packages - Writewrite
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.
Delete Work Package?
intent: the user asked me to delete Work Package
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: "[email protected]" }, { match: "openproject.projects.delete_project", approver: "[email protected]" }, { match: "openproject.users.delete_user", approver: "[email protected]" } ]}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.
- 1upstream call per actionall 298 OpenProject actions
- 298actions 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
Action index
Every OpenProject action.
298 actions by area: the id your agent calls, what it does, and its effect.
Work packages32
openproject.work_packages.add_watcherAdd watcherwriteopenproject.work_packages.available_projects_for_work_packageAvailable projects for work packagereadopenproject.work_packages.available_watchersAvailable watchersreadopenproject.work_packages.comment_work_packageComment work packagewriteopenproject.work_packages.create_project_work_packageCreate work package in projectwriteopenproject.work_packages.create_work_packageCreate Work Packagewriteopenproject.work_packages.create_work_package_file_linkCreates file links.writeopenproject.work_packages.create_work_package_reminderCreate a work package reminderwriteopenproject.work_packages.create_workspace_work_packageCreate work package in workspacewriteopenproject.work_packages.delete_work_packageDelete Work Packagedestructiveopenproject.work_packages.form_create_work_packageForm for creating a Work Packagereadopenproject.work_packages.form_create_work_package_in_projectForm for creating Work Packages in a Projectreadopenproject.work_packages.form_create_work_package_in_workspaceForm for creating Work Packages in a Workspacereadopenproject.work_packages.form_edit_work_packageForm for editing a Work Packagereadopenproject.work_packages.get_project_work_package_collectionGet work packages of projectreadopenproject.work_packages.get_workspace_work_package_collectionGet work packages of workspacereadopenproject.work_packages.list_available_relation_candidatesAvailable relation candidatesreadopenproject.work_packages.list_watchersList watchersreadopenproject.work_packages.list_work_package_activitiesList work package activitiesreadopenproject.work_packages.list_work_package_activities_emoji_reactionsList emoji reactions by work package activitiesreadopenproject.work_packages.list_work_package_file_linksGets all file links of a work packagereadopenproject.work_packages.list_work_package_remindersList work package remindersreadopenproject.work_packages.list_work_package_schemasList Work Package Schemasreadopenproject.work_packages.list_work_packagesList work packagesreadopenproject.work_packages.project_available_assigneesProject Available assigneesreadopenproject.work_packages.remove_watcherRemove watcherdestructiveopenproject.work_packages.revisionsRevisionsreadopenproject.work_packages.update_work_packageUpdate a Work Packagewriteopenproject.work_packages.view_work_packageView Work Packagereadopenproject.work_packages.view_work_package_schemaView Work Package Schemareadopenproject.work_packages.work_package_available_assigneesWork Package Available assigneesreadopenproject.work_packages.workspace_available_assigneesWorkspace Available assigneesread
Meetings26
openproject.meetings.create_meetingCreate meetingwriteopenproject.meetings.create_meeting_agenda_itemCreate meeting agenda itemwriteopenproject.meetings.create_meeting_outcomeCreate meeting outcomewriteopenproject.meetings.create_meeting_sectionCreate meeting sectionwriteopenproject.meetings.delete_meetingDelete meetingdestructiveopenproject.meetings.delete_meeting_agenda_itemDelete a meeting agenda itemdestructiveopenproject.meetings.delete_meeting_outcomeDelete a meeting outcomedestructiveopenproject.meetings.delete_meeting_sectionDelete a meeting sectiondestructiveopenproject.meetings.get_meetingGet a meetingreadopenproject.meetings.get_meeting_agenda_itemGet a meeting agenda itemreadopenproject.meetings.get_meeting_agenda_item_by_meetingGet a meeting agenda itemreadopenproject.meetings.get_meeting_outcomeGet a meeting outcomereadopenproject.meetings.get_meeting_outcome_by_agenda_itemGet a meeting outcomereadopenproject.meetings.get_meeting_schemaGet meeting schemareadopenproject.meetings.get_meeting_sectionGet a meeting sectionreadopenproject.meetings.get_meeting_section_by_meetingGet a meeting sectionreadopenproject.meetings.list_meeting_agenda_itemsList meeting agenda itemsreadopenproject.meetings.list_meeting_outcomesList meeting outcomesreadopenproject.meetings.list_meeting_sectionsList meeting sectionsreadopenproject.meetings.list_meetingsList all visible meetingsreadopenproject.meetings.meeting_create_formMeeting create formreadopenproject.meetings.meeting_update_formMeeting update formreadopenproject.meetings.update_meetingUpdate meetingwriteopenproject.meetings.update_meeting_agenda_itemUpdate a meeting agenda itemwriteopenproject.meetings.update_meeting_outcomeUpdate a meeting outcomewriteopenproject.meetings.update_meeting_sectionUpdate a meeting sectionwrite
Queries16
openproject.queries.available_projects_for_queryAvailable projects for queryreadopenproject.queries.create_queryCreate querywriteopenproject.queries.delete_queryDelete querydestructiveopenproject.queries.edit_queryEdit Querywriteopenproject.queries.list_queriesList queriesreadopenproject.queries.query_create_formQuery Create Formreadopenproject.queries.query_update_formQuery Update Formreadopenproject.queries.star_queryStar querywriteopenproject.queries.unstar_queryUnstar querywriteopenproject.queries.view_default_queryView default queryreadopenproject.queries.view_default_query_for_projectView default query for projectreadopenproject.queries.view_default_query_for_workspaceView default query for workspacereadopenproject.queries.view_queryView queryreadopenproject.queries.view_schema_for_global_queriesView schema for global queriesreadopenproject.queries.view_schema_for_project_queriesView schema for project queriesreadopenproject.queries.view_schema_for_workspace_queriesView schema for workspace queriesread
Projects15
openproject.projects.create_projectCreate projectwriteopenproject.projects.delete_projectDelete Projectdestructiveopenproject.projects.favorite_projectFavorite Projectwriteopenproject.projects.list_available_parent_project_candidatesList available parent project candidatesreadopenproject.projects.list_projectsList projectsreadopenproject.projects.list_projects_with_versionList projects having versionreadopenproject.projects.list_workspaces_with_versionList workspaces having versionreadopenproject.projects.project_copy_formProject copy formreadopenproject.projects.project_create_formProject create formreadopenproject.projects.project_update_formProject update formreadopenproject.projects.unfavorite_projectUnfavorite Projectwriteopenproject.projects.update_projectUpdate Projectwriteopenproject.projects.view_projectView projectreadopenproject.projects.view_project_schemaView project schemareadopenproject.projects.view_project_statusView project statusread
File links13
openproject.file_links.create_storageCreates a storage.writeopenproject.file_links.create_storage_folderCreation of a new folderwriteopenproject.file_links.create_storage_oauth_credentialsCreates an oauth client credentials object for a storage.writeopenproject.file_links.delete_file_linkRemoves a file link.destructiveopenproject.file_links.delete_storageDelete a storagedestructiveopenproject.file_links.get_project_storageGets a project storagereadopenproject.file_links.get_storageGet a storagereadopenproject.file_links.get_storage_filesGets files of a storage.readopenproject.file_links.list_project_storagesGets a list of project storagesreadopenproject.file_links.list_storagesGet Storagesreadopenproject.file_links.prepare_storage_file_uploadPreparation of a direct upload of a file to the given storage.writeopenproject.file_links.update_storageUpdate a storagewriteopenproject.file_links.view_file_linkGets a file link.read
Recurring meetings13
openproject.recurring_meetings.cancel_recurring_meeting_occurrenceCancel an occurrencedestructiveopenproject.recurring_meetings.complete_recurring_meeting_templateComplete the series templatewriteopenproject.recurring_meetings.create_recurring_meetingCreate recurring meetingwriteopenproject.recurring_meetings.delete_recurring_meetingDelete recurring meetingdestructiveopenproject.recurring_meetings.end_recurring_meetingEnd a meeting seriesdestructiveopenproject.recurring_meetings.get_recurring_meetingGet a recurring meetingreadopenproject.recurring_meetings.init_recurring_meeting_occurrenceInstantiate an occurrencewriteopenproject.recurring_meetings.list_recurring_meeting_occurrences_cancelledList cancelled occurrences of a recurring meetingreadopenproject.recurring_meetings.list_recurring_meeting_occurrences_openList open occurrences of a recurring meetingreadopenproject.recurring_meetings.list_recurring_meeting_occurrences_pastList past occurrences of a recurring meetingreadopenproject.recurring_meetings.list_recurring_meeting_occurrences_upcomingList upcoming occurrences of a recurring meetingreadopenproject.recurring_meetings.list_recurring_meetingsList all visible recurring meetingsreadopenproject.recurring_meetings.update_recurring_meetingUpdate recurring meetingwrite
Versions11
openproject.versions.available_projects_for_versionsAvailable projects for versionsreadopenproject.versions.create_versionCreate versionwriteopenproject.versions.delete_versionDelete versiondestructiveopenproject.versions.get_versionGet versionreadopenproject.versions.list_versionsList versionsreadopenproject.versions.list_versions_available_in_a_projectList versions available in a projectreadopenproject.versions.list_versions_available_in_a_workspaceList versions available in a workspacereadopenproject.versions.update_versionUpdate Versionwriteopenproject.versions.version_create_formVersion create formreadopenproject.versions.version_update_formVersion update formreadopenproject.versions.view_version_schemaView version schemaread
Work schedule11
openproject.work_schedule.create_non_working_dayCreates a non-working day (NOT IMPLEMENTED)writeopenproject.work_schedule.delete_non_working_dayRemoves a non-working day (NOT IMPLEMENTED)destructiveopenproject.work_schedule.list_daysLists daysreadopenproject.work_schedule.list_non_working_daysLists all non working daysreadopenproject.work_schedule.list_week_daysLists week daysreadopenproject.work_schedule.update_non_working_dayUpdate a non-working day attributes (NOT IMPLEMENTED)writeopenproject.work_schedule.update_week_dayUpdate a week day attributes (NOT IMPLEMENTED)writeopenproject.work_schedule.update_week_daysUpdate week days (NOT IMPLEMENTED)writeopenproject.work_schedule.view_dayView dayreadopenproject.work_schedule.view_non_working_dayView a non-working dayreadopenproject.work_schedule.view_week_dayView a week dayread
User working times10
openproject.user_working_times.create_user_non_working_timeCreate a personal non-working day for a userwriteopenproject.user_working_times.create_user_working_hoursCreate a working hours record for a userwriteopenproject.user_working_times.delete_user_non_working_timeDelete a personal non-working time recorddestructiveopenproject.user_working_times.delete_user_working_hours_recordDelete a working hours recorddestructiveopenproject.user_working_times.list_user_non_working_timesList personal non-working times for a userreadopenproject.user_working_times.list_user_working_hoursList working hours for a userreadopenproject.user_working_times.update_user_non_working_timeUpdate a personal non-working time recordwriteopenproject.user_working_times.update_user_working_hours_recordUpdate a working hours recordwriteopenproject.user_working_times.view_user_non_working_timeView a personal non-working time recordreadopenproject.user_working_times.view_user_working_hours_recordView a working hours recordread
Memberships9
openproject.memberships.create_membershipCreate a membershipwriteopenproject.memberships.delete_membershipDelete membershipdestructiveopenproject.memberships.form_create_membershipForm create membershipreadopenproject.memberships.form_update_membershipForm update membershipreadopenproject.memberships.get_membershipGet a membershipreadopenproject.memberships.get_membership_schemaSchema membershipreadopenproject.memberships.get_memberships_available_projectsAvailable projects for membershipsreadopenproject.memberships.list_membershipsList membershipsreadopenproject.memberships.update_membershipUpdate membershipwrite
Time entries9
openproject.time_entries.available_projects_for_time_entriesAvailable projects for time entriesreadopenproject.time_entries.create_time_entryCreate time entrywriteopenproject.time_entries.delete_time_entryDelete time entrydestructiveopenproject.time_entries.get_time_entryGet time entryreadopenproject.time_entries.list_time_entriesList time entriesreadopenproject.time_entries.time_entry_create_formTime entry create formreadopenproject.time_entries.time_entry_update_formTime entry update formreadopenproject.time_entries.update_time_entryupdate time entrywriteopenproject.time_entries.view_time_entry_schemaView time entry schemaread
Users9
openproject.users.create_userCreate Userwriteopenproject.users.delete_userDelete userdestructiveopenproject.users.list_usersList Usersreadopenproject.users.lock_userLock userwriteopenproject.users.unlock_userUnlock userwriteopenproject.users.update_userUpdate userwriteopenproject.users.user_update_formUser update formreadopenproject.users.view_userView userreadopenproject.users.view_user_schemaView user schemaread
Attachments7
openproject.attachments.complete_attachment_uploadComplete a direct attachment uploadreadopenproject.attachments.delete_attachmentDelete attachmentdestructiveopenproject.attachments.list_attachments_by_meetingList attachments by meetingreadopenproject.attachments.list_attachments_by_postList attachments by postreadopenproject.attachments.list_attachments_by_wiki_pageList attachments by wiki pagereadopenproject.attachments.list_work_package_attachmentsList attachments by work packagereadopenproject.attachments.view_attachmentView attachmentread
Notifications7
openproject.notifications.list_notificationsGet notification collectionreadopenproject.notifications.read_notificationRead notificationwriteopenproject.notifications.read_notificationsRead all notificationswriteopenproject.notifications.unread_notificationUnread notificationwriteopenproject.notifications.unread_notificationsUnread all notificationswriteopenproject.notifications.view_notificationGet the notificationreadopenproject.notifications.view_notification_detailGet a notification detailread
Grids6
openproject.grids.create_gridCreate a gridwriteopenproject.grids.get_gridGet a gridreadopenproject.grids.grid_create_formGrid Create Formreadopenproject.grids.grid_update_formGrid Update Formreadopenproject.grids.list_gridsList gridsreadopenproject.grids.update_gridUpdate a gridwrite
Principals6
openproject.principals.create_placeholder_userCreate placeholder userwriteopenproject.principals.delete_placeholder_userDelete placeholder userdestructiveopenproject.principals.list_placeholder_usersList placehoder usersreadopenproject.principals.list_principalsList principalsreadopenproject.principals.update_placeholder_userUpdate placeholder userwriteopenproject.principals.view_placeholder_userView placeholder userread
Actions capabilities5
openproject.actions_capabilities.list_actionsList actionsreadopenproject.actions_capabilities.list_capabilitiesList capabilitiesreadopenproject.actions_capabilities.view_actionView actionreadopenproject.actions_capabilities.view_capabilitiesView capabilitiesreadopenproject.actions_capabilities.view_global_contextView global contextread
Activities5
openproject.activities.get_activityGet an activityreadopenproject.activities.list_activity_attachmentsList attachments by activityreadopenproject.activities.list_activity_emoji_reactionsList emoji reactions by activityreadopenproject.activities.toggle_activity_emoji_reactionToggle emoji reaction for an activitywriteopenproject.activities.update_activityUpdate activitywrite
Groups5
openproject.groups.create_groupCreate groupwriteopenproject.groups.delete_groupDelete groupdestructiveopenproject.groups.get_groupGet groupreadopenproject.groups.list_groupsList groupsreadopenproject.groups.update_groupUpdate groupwrite
News5
openproject.news.create_newsCreate Newswriteopenproject.news.delete_newsDelete newsdestructiveopenproject.news.list_newsList Newsreadopenproject.news.update_newsUpdate newswriteopenproject.news.view_newsView newsread
Portfolios5
openproject.portfolios.delete_portfolioDelete Portfoliodestructiveopenproject.portfolios.list_portfoliosList portfoliosreadopenproject.portfolios.portfolio_update_formPortfolio update formreadopenproject.portfolios.update_portfolioUpdate Portfoliowriteopenproject.portfolios.view_portfolioView portfolioread
Programs5
openproject.programs.delete_programDelete Programdestructiveopenproject.programs.list_programsList programsreadopenproject.programs.program_update_formProgram update formreadopenproject.programs.update_programUpdate Programwriteopenproject.programs.view_programView programread
Relations5
openproject.relations.create_relationCreate relationwriteopenproject.relations.delete_relationDelete Relationdestructiveopenproject.relations.get_relationGet Relationreadopenproject.relations.list_relationsList Relationsreadopenproject.relations.update_relationUpdate Relationwrite
Custom fields4
openproject.custom_fields.get_custom_fieldGet custom fieldreadopenproject.custom_fields.get_custom_field_itemGet a custom field hierarchy itemreadopenproject.custom_fields.get_custom_field_item_branchGet a custom field hierarchy item's branchreadopenproject.custom_fields.get_custom_field_itemsGet the custom field hierarchy itemsread
Query filter instance schema4
openproject.query_filter_instance_schema.list_query_filter_instance_schemasList Query Filter Instance Schemasreadopenproject.query_filter_instance_schema.list_query_filter_instance_schemas_for_projectList Query Filter Instance Schemas for Projectreadopenproject.query_filter_instance_schema.list_query_filter_instance_schemas_for_workspaceList Query Filter Instance Schemas for Workspacereadopenproject.query_filter_instance_schema.view_query_filter_instance_schemaView Query Filter Instance Schemaread
Types4
openproject.types.list_all_typesList all Typesreadopenproject.types.list_types_available_in_a_projectList types available in a projectreadopenproject.types.list_types_available_in_a_workspaceList types available in a workspacereadopenproject.types.view_typeView Typeread
Workspaces4
openproject.workspaces.favorite_workspaceFavorite Workspacewriteopenproject.workspaces.list_workspaceList workspacereadopenproject.workspaces.unfavorite_workspaceUnfavorite Workspacewriteopenproject.workspaces.view_workspace_schemaView workspace schemaread
Categories3
openproject.categories.list_categories_of_a_projectList categories of a projectreadopenproject.categories.list_categories_of_a_workspaceList categories of a workspacereadopenproject.categories.view_categoryView Categoryread
Documents3
openproject.documents.list_documentsList Documentsreadopenproject.documents.update_documentUpdate documentwriteopenproject.documents.view_documentView documentread
Reminders3
openproject.reminders.delete_reminderDelete a reminderdestructiveopenproject.reminders.list_remindersList all active remindersreadopenproject.reminders.update_reminderUpdate a reminderwrite
Sprints3
openproject.sprints.get_sprintGet sprintreadopenproject.sprints.list_sprintsList sprintsreadopenproject.sprints.list_sprints_in_projectList sprints in projectread
Views3
openproject.views.create_viewsCreate viewwriteopenproject.views.list_viewsList viewsreadopenproject.views.view_viewView viewread
Budgets2
openproject.budgets.view_budgetview Budgetreadopenproject.budgets.view_budgets_of_a_projectview Budgets of a Projectread
Configuration2
openproject.configuration.view_configurationView configurationreadopenproject.configuration.view_project_configurationView project configurationread
Custom actions2
openproject.custom_actions.execute_custom_actionExecute custom actionwriteopenproject.custom_actions.get_custom_actionGet a custom actionread
Help texts2
openproject.help_texts.get_help_textGet help textreadopenproject.help_texts.list_help_textsList help textsread
Oauth2
openproject.oauth.get_oauth_applicationGet the oauth application.readopenproject.oauth.get_oauth_client_credentialsGet the oauth client credentials object.read
Priorities2
openproject.priorities.list_all_prioritiesList all Prioritiesreadopenproject.priorities.view_priorityView Priorityread
Project phase definitions2
openproject.project_phase_definitions.get_project_phase_definitionGet a project phase definitionreadopenproject.project_phase_definitions.list_project_phase_definitionsList project phase definitionsread
Roles2
openproject.roles.list_rolesList rolesreadopenproject.roles.view_roleView roleread
Statuses2
openproject.statuses.get_statusGet a work package statusreadopenproject.statuses.list_statusesList the collection of all statusesread
User preferences2
openproject.user_preferences.show_my_preferencesShow my preferencesreadopenproject.user_preferences.update_user_preferencesUpdate my preferenceswrite
Custom options1
openproject.custom_options.view_custom_optionView Custom Optionread
Posts1
openproject.posts.view_postView Postread
Project phases1
openproject.project_phases.get_project_phaseGet a project phaseread
Query columns1
openproject.query_columns.view_query_columnView Query Columnread
Query filters1
openproject.query_filters.view_query_filterView Query Filterread
Query operators1
openproject.query_operators.view_query_operatorView Query Operatorread
Query sort bys1
openproject.query_sort_bys.view_query_sort_byView Query Sort Byread
Revisions1
openproject.revisions.view_revisionView revisionread
Root1
openproject.root.view_rootView rootread
Time entry activities1
openproject.time_entry_activities.get_time_entries_activityView time entries activityread
Values property1
openproject.values_property.view_values_schemaView Values schemaread
Wiki pages1
openproject.wiki_pages.view_wiki_pageView Wiki Pageread
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.
Give your agent OpenProject today.
Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.