update_project
Modify project details like name, description, visibility, or status in OpenProject. Use this tool to edit existing projects by providing the project ID and lock version.
Instructions
Update an existing project.
Args:
project_id: Project identifier or ID
lock_version: Current lock version (get from project first)
name: New project name
description: New project description in markdown
public: Whether project is public
active: Whether project is active
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| lock_version | Yes | ||
| name | No | ||
| description | No | ||
| public | No | ||
| active | No |
Implementation Reference
- Core handler function that executes the update_project tool logic by constructing a payload and patching the project via OpenProjectClient.async def update_project( project_id: str, lock_version: int, name: str | None = None, description: str | None = None, public: bool | None = None, active: bool | None = None, ) -> dict[str, Any]: """Update an existing project. Args: project_id: Project identifier or ID lock_version: Current lock version (get from project first) name: New project name description: New project description in markdown public: Whether project is public active: Whether project is active Returns: Updated project object """ client = OpenProjectClient() try: payload: dict[str, Any] = { "lockVersion": lock_version, } if name is not None: payload["name"] = name if description is not None: payload["description"] = build_formattable(description) if public is not None: payload["public"] = public if active is not None: payload["active"] = active result = await client.patch(f"projects/{project_id}", data=payload) return result finally: await client.close()
- src/openproject_mcp/server.py:289-316 (registration)Registration of the update_project tool via @mcp.tool() decorator in the main server, which delegates to the core implementation in projects module.@mcp.tool() async def update_project( project_id: str, lock_version: int, name: str | None = None, description: str | None = None, public: bool | None = None, active: bool | None = None, ): """Update an existing project. Args: project_id: Project identifier or ID lock_version: Current lock version (get from project first) name: New project name description: New project description in markdown public: Whether project is public active: Whether project is active """ return await projects.update_project( project_id=project_id, lock_version=lock_version, name=name, description=description, public=public, active=active, )