Problem
The README documents a get_work_package tool (tool AndyEverything#12 in the catalog), but no such tool is
implemented. The server exposes search_work_packages for lookups; get_work_package exists only
as an internal OpenProjectClient method (used by update_work_package to fetch the lock version),
not as an @mcp.tool.
Surfaced during live baseline testing against the instance (issue #1): a client that tried to call
get_work_package had no such tool and fell back to search_work_packages.
Options (pick one)
- Implement it — add a thin
@mcp.tool async def get_work_package(work_package_id: int) in
src/tools/work_packages.py that wraps the existing client.get_work_package(...) and formats
with format_work_package_detail (the formatter already exists and is currently imported-but-
unused in that module). Matches the README and the natural "get one by id" expectation.
- Remove it from the docs — drop the
get_work_package entry from the README and point users
to search_work_packages (query by id).
Option 1 is likely the better fit (the formatter and client method already exist, so it's a small,
high-value addition), but either resolves the mismatch.
Scope
- Either
src/tools/work_packages.py (+ README catalog) for option 1, or README.md only for
option 2.
Out of scope
Acceptance criteria
- The README tool catalog and the actual registered toolset agree about
get_work_package.
- If implemented: the tool returns details for a valid id and a clean error for a missing one;
README updated; a small test added.
Type: small. Related: #1 (surfaced it), #4 (README fixups). Label: backlog.
Problem
The README documents a
get_work_packagetool (tool AndyEverything#12 in the catalog), but no such tool isimplemented. The server exposes
search_work_packagesfor lookups;get_work_packageexists onlyas an internal
OpenProjectClientmethod (used byupdate_work_packageto fetch the lock version),not as an
@mcp.tool.Surfaced during live baseline testing against the instance (issue #1): a client that tried to call
get_work_packagehad no such tool and fell back tosearch_work_packages.Options (pick one)
@mcp.tool async def get_work_package(work_package_id: int)insrc/tools/work_packages.pythat wraps the existingclient.get_work_package(...)and formatswith
format_work_package_detail(the formatter already exists and is currently imported-but-unused in that module). Matches the README and the natural "get one by id" expectation.
get_work_packageentry from the README and point usersto
search_work_packages(query by id).Option 1 is likely the better fit (the formatter and client method already exist, so it's a small,
high-value addition), but either resolves the mismatch.
Scope
src/tools/work_packages.py(+ README catalog) for option 1, orREADME.mdonly foroption 2.
Out of scope
Acceptance criteria
get_work_package.README updated; a small test added.
Type: small. Related: #1 (surfaced it), #4 (README fixups). Label: backlog.