# Epic AA-49 - Extend MCP Server with write capabilities and improved response quality

Project: Stream Agents & Assistants
Status: closed
URL: https://community.openproject.org/work_packages/AA-49

## Detailed specification

### Motivation and background information

**As a:**

*   Project manager who wants to create and update work packages directly through AI assistants without switching to the OpenProject UI.
    
*   User who relies on custom fields to categorize and track work and expects these to be accessible through the MCP interface.
    

**I want:**

*   To create new work packages via MCP tools, specifying type, project, subject, description, assignee, and other standard attributes.
    
*   To update existing work packages via MCP tools, changing status, assignee, description, and other fields.
    
*   Custom fields to be included, named correctly and enriched with the helper text information in the MCP tool responses and to be settable when creating or updating work packages.
    
*   A cleaner, more maintainable MCP codebase with a registry pattern for tool/resource registration.
    
*   Leaner MCP responses that omit unnecessary HAL links and metadata, reducing token usage for LLM consumers.
    

**Problem:**

*   Users can query and search but cannot take action on the data they receive.
    
*   Custom fields, which are essential for most real-world OpenProject configurations, are without the right naming in MCP responses.
    
*   The current MCP implementation uses a monolithic approach for registering tools and resources, making it harder to extend and maintain.
    
*   MCP responses include many HAL links and data fields that are irrelevant for LLM consumption, wasting tokens and context window space.
    

**Pain:**

*   Users must switch between their AI assistant and the OpenProject UI to act on insights (e.g., &quot;create a task for this&quot; requires leaving the conversation).
    
*   Custom field data are note interpreted correctly in the LLM, leading to incomplete and false project insights.
    
*   Adding new tools or resources requires touching multiple parts of the codebase.
    
*   Large response payloads slow down LLM processing and may exceed context limits.

### Acceptance criteria

  - Provide a `create_work_package` MCP tool that accepts project, type, subject, description, and other standard attributes (assignee, status, priority, version) and creates a new work package in OpenProject.

  - Provide an `update_work_package` MCP tool that accepts a work package ID and a set of attributes to update (subject, description, status, assignee, priority, version, etc.).

  - Both create and update tools
    
      - must respect the authenticated user's permissions — if the user cannot perform the action in OpenProject, the MCP tool must return an appropriate error.
    
      - might need additional tools to allow the AI assistant to gather information what data values can be set on each work package attribute.

  - Custom fields are correctly named in work package and project MCP responses (both search results and resources).

  - Custom fields can be set when creating or updating work packages via MCP tools, provided the custom field is enabled for the target project and type.

  - Refactor the MCP tool and resource registration to use a registry pattern, so that new tools/resources can be added by registering them in a single place.

  - Remove unnecessary HAL `_links` and other metadata from MCP responses that are not useful for LLM consumption (e.g., action links like `logTime`, `move`, `copy`, `pdf`, `atom`, `convertBCF`, etc.).

### Out of scope

*   Creating or updating projects, versions, or other non-work-package entities.
    
*   Attachment handling: uploading or downloading files via MCP.
    
*   ~~Relation management: creating/updating relations between work packages.~~
    
*   ~~Hierarchy management: setting parent/child relationships via MCP may be included if trivial as part of create/update (to be clarified).~~
    
*   Prompt templates or prompt support.
    
*   Semantic search capabilities.
    
*   Dynamic tool discovery based on role permissions.

| Attribute | Value |
| --- | --- |
| Mockups |  |

## Planning

| Attribute | Value |
| --- | --- |
| Roadmap | 2026 Q3 |
| Date |  |
| List | RM AI |
| Target versions | 17.8.0 |
| Relevance | Optional — Nice-to-Have |

## Subitems

| ID | Type | Subject | Status | Assignee | Target versions | Project | Priority | Spent time |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| AA-44 | Feature | Remove html from formattable properties | closed |  | 17.8.0 | Stream Agents & Assistants | Medium |  |
| AA-45 | Feature | Prune links in MCP responses | closed | Ihor Khomenko | 17.8.0 | Stream Agents & Assistants | Medium |  |
| AA-67 | Feature | Remove structured output schema functionality | closed |  | 17.8.0 | Stream Agents & Assistants | Medium |  |
| AA-68 | Feature | Add pagination meta data to responses | closed |  | 17.8.0 | Stream Agents & Assistants | Medium |  |
| AA-72 | Feature | Add create_work_package MCP tool | closed |  | 17.8.0 | Stream Agents & Assistants | Medium |  |
| AA-73 | Feature | Add update_work_package MCP tool | closed |  | 17.8.0 | Stream Agents & Assistants | Medium |  |
| AA-74 | Feature | Add human readable names to custom fields | closed |  | 17.8.0 | Stream Agents & Assistants | Medium |  |
| AA-82 | Feature | Expose work package relations via MCP | closed |  | 17.8.0 | Stream Agents & Assistants | Medium |  |
| AA-93 | Feature | Expose custom hierarchy items via MCP | closed |  | 17.8.0 | Stream Agents & Assistants | Medium |  |
| AA-103 | Feature | Allow to interact with work package comments via MCP | closed |  | 17.8.0 | Stream Agents & Assistants | Medium |  |
| AA-111 | Feature | Allow to modify work package relations | closed |  | 17.8.0 | Stream Agents & Assistants | Medium |  |
| AA-112 | Feature | Adapt to new default tool description in a migration | closed |  | 17.8.0 | Stream Agents & Assistants | Medium |  |
| AA-50 | Open Point | Should we add dynamic client registration for this version? | decided |  |  | Stream Agents & Assistants | Medium |  |

## Bugs and other work packages

| ID | Type | Subject | Status | Assignee | Target versions | Module |
| --- | --- | --- | --- | --- | --- | --- |
| AA-75 | Code maintenance | Switch to registry pattern for tool registration | closed |  | 17.7.0 | Artificial Intelligence / MCP Server (MCP) |
| AA-118 | Bug | Input schema for create_work_package and update_work_package not specific enough | closed |  | 17.8.0 | Artificial Intelligence / MCP Server (MCP) |
| AA-50 | Open Point | Should we add dynamic client registration for this version? | decided |  |  |  |

## Details

| Attribute | Value |
| --- | --- |
| Module | Artificial Intelligence (AI) |
| Enterprise plan | Enterprise / Professional (PRO) |
| Labels |  |

## People

| Attribute | Value |
| --- | --- |
| Assignee |  |
| Accountable | Wieland Lindenthal |
| Product manager | Dominic Bräunlein |
| Designer |  |
| Developers | OP Dev Titan Team |
| Interest by | Home (224196000003952096) |

## Estimates and progress

| Attribute | Value |
| --- | --- |
| Work | 60d 0h · Σ 60d 0h |

## Description

Building on the successful first version of the MCP Server (see [<mention class="mention" data-id="62781" data-type="work_package" data-text="#62781">#62781</mention>](https://community.openproject.org/projects/stream-ai-2/work_packages/62781/activity)), this second iteration focuses on creating and updating work packages, adding custom field support, and performing code maintenance to improve the codebase quality and response efficiency.
