Skip to main content
Glama

Add work package comment

add_work_package_comment

Post a comment on a work package to reply in a ticket thread, record a decision, or leave a handover note. Returns the created journal entry for reuse.

Instructions

Post a comment on a work package.

Use this to reply in a ticket's thread, record a decision, or leave a handover note. Returns the created journal entry (activity id, author, markdown text, internal flag, timestamps) — the same shape list_work_package_comments returns, so the id can be reused.

Pitfalls. Every call creates a new comment; it is not idempotent, so do not retry blindly after a timeout — read the thread first. internal=true is refused on OpenProject below 16.0 because those versions accept the flag and publish the comment anyway; upgrade or post publicly, deliberately. notify=false suppresses notifications only, the comment is still visible to everyone who can see the work package.

Cross-references: read the thread with list_work_package_comments; change fields (status, assignee, dates) with update_work_package rather than describing the change in prose; attach a file with upload_attachment.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesWork package id to comment on. Get it from search_work_packages or list_work_packages.
notifyNoSend the usual watcher/assignee notifications. Set false for bulk or bookkeeping comments so inboxes stay quiet.
commentYesComment body in markdown. OpenProject renders it; @-mentions need the user's mention syntax, plain names do not notify anyone.
internalNoPost as an internal comment, visible only to project members with the internal-comments permission. Requires OpenProject >= 16; on older instances the call fails instead of posting publicly.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idNoActivity id. Pass it back as list_work_package_comments(activity_id=...) to read a truncated comment in full.
kindYes'comment' when the entry carries comment text, 'field_change' otherwise.
authorNoUser who wrote the entry.
commentNoComment body as markdown (raw); html is dropped. Cut to max_comment_chars when 'truncated' is true.
detailsNoField changes recorded with this entry; always a list, empty for a comment-only entry.
versionNoJournal version number of this entry within the work package.
internalNoTrue for internal (project-member-only) comments; OpenProject >= 16.
truncatedNoTrue when the comment was cut to max_comment_chars.
created_atNoISO 8601 UTC timestamp.
updated_atNoISO 8601 UTC timestamp of the last edit.
work_packageNoWork package the entry belongs to.
comment_lengthNoCharacter length of the untruncated comment; set only when truncated.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-idempotent behavior, but the description goes further by warning that every call creates a new comment and should not be blindly retried after a timeout. It also discloses the version-specific internal flag pitfall and clarifies that notify=false only suppresses notifications while the comment remains visible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections for main usage, pitfalls, and cross-references. Every sentence carries useful information; no filler or redundancy exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description still notes the return shape and id reuse potential. It covers non-idempotence, version constraints, notification behavior, and alternative tools, making it complete for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds value beyond the schema. It explains the non-idempotent nature of the call (relevant to retries), the subtle behavior of internal=true on older OpenProject versions, and the exact meaning of notify=false. This enriches the parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Post a comment on a work package.' It clearly distinguishes this tool from siblings by cross-referencing list_work_package_comments, update_work_package, and upload_attachment, and by contrasting it with edit_work_package_comment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use the tool: 'reply in a ticket's thread, record a decision, or leave a handover note.' It also provides direct alternatives: use update_work_package for field changes and upload_attachment for files, and read the thread with list_work_package_comments before retrying.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kar-thik/openproject-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server