Replace sprint MCP tools with board equivalents + add delete_project #36

Merged
forgejo_admin merged 1 commit from 35-replace-sprint-tools-with-board-equivalents into main 2026-03-13 19:30:28 +00:00

Summary

Sprint tables were replaced with board tables in pal-e-docs (PR #147). This removes all 10 sprint tools and replaces them with 11 board tools that call the boards REST API directly via the SDK's low-level HTTP helpers (get_sdk().get/post/patch/delete), since the SDK does not yet have board methods. Also adds delete_project to projects.py.

Changes

  • Deleted src/pal_e_docs_mcp/tools/sprints.py — all 10 sprint tools removed (create_sprint, get_sprint, list_sprints, update_sprint, delete_sprint, add_sprint_item, move_sprint_item, remove_sprint_item, get_sprint_board, get_backlog, bulk_move_items)
  • Created src/pal_e_docs_mcp/tools/boards.py — 11 board tools using raw HTTP via SDK helpers: list_boards, create_board, get_board, update_board, delete_board, list_board_items, create_board_item, update_board_item, remove_board_item, bulk_move_board_items, get_backlog
  • Modified src/pal_e_docs_mcp/tools/projects.py — added delete_project tool (calls DELETE /projects/{slug})
  • Modified src/pal_e_docs_mcp/tools/__init__.py — replaced sprints import with boards
  • Modified tests/conftest.py — replaced sprints_mod patch with boards_mod + projects_mod patches
  • Modified tests/test_param_alignment.py — replaced sprint test classes with board equivalents + added TestDeleteProject

Test Plan

  • All 52 tests pass (pytest tests/ -v)
  • ruff check . and ruff format . clean
  • Board tools follow same patterns as existing tools (Annotated params, _error_response/_ok helpers)

Review Checklist

  • Sprint tools fully removed (no residual imports or references)
  • Board tools use SDK low-level HTTP helpers (no SDK board methods needed)
  • delete_project added to projects.py
  • Tests updated: sprint test classes replaced with board equivalents
  • ruff check + format clean
  • Closes #35
  • Depends on: pal-e-docs PR #147 (sprint-to-board migration)
## Summary Sprint tables were replaced with board tables in pal-e-docs (PR #147). This removes all 10 sprint tools and replaces them with 11 board tools that call the boards REST API directly via the SDK's low-level HTTP helpers (`get_sdk().get/post/patch/delete`), since the SDK does not yet have board methods. Also adds `delete_project` to `projects.py`. ## Changes - **Deleted `src/pal_e_docs_mcp/tools/sprints.py`** — all 10 sprint tools removed (create_sprint, get_sprint, list_sprints, update_sprint, delete_sprint, add_sprint_item, move_sprint_item, remove_sprint_item, get_sprint_board, get_backlog, bulk_move_items) - **Created `src/pal_e_docs_mcp/tools/boards.py`** — 11 board tools using raw HTTP via SDK helpers: list_boards, create_board, get_board, update_board, delete_board, list_board_items, create_board_item, update_board_item, remove_board_item, bulk_move_board_items, get_backlog - **Modified `src/pal_e_docs_mcp/tools/projects.py`** — added `delete_project` tool (calls `DELETE /projects/{slug}`) - **Modified `src/pal_e_docs_mcp/tools/__init__.py`** — replaced `sprints` import with `boards` - **Modified `tests/conftest.py`** — replaced sprints_mod patch with boards_mod + projects_mod patches - **Modified `tests/test_param_alignment.py`** — replaced sprint test classes with board equivalents + added TestDeleteProject ## Test Plan - All 52 tests pass (`pytest tests/ -v`) - `ruff check .` and `ruff format .` clean - Board tools follow same patterns as existing tools (Annotated params, _error_response/_ok helpers) ## Review Checklist - [x] Sprint tools fully removed (no residual imports or references) - [x] Board tools use SDK low-level HTTP helpers (no SDK board methods needed) - [x] delete_project added to projects.py - [x] Tests updated: sprint test classes replaced with board equivalents - [x] ruff check + format clean ## Related - Closes #35 - Depends on: pal-e-docs PR #147 (sprint-to-board migration)
Replace sprint MCP tools with board equivalents + add delete_project
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
cb50ad32c4
Sprint tables were replaced with board tables in pal-e-docs (PR #147).
This replaces all 10 sprint tools with 11 board tools that call the
boards REST API directly via the SDK's low-level HTTP helpers, since
the SDK does not yet have board methods. Also adds delete_project to
projects.py for cleaning up empty project shells.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Author
Owner

PR #36 Review

BLOCKERS

None.

NITS

  1. bulk_move_board_items dropped points from the description -- The old bulk_move_items documented optional 'points' (int) in each move object. The new bulk_move_board_items description only mentions 'id', 'column', 'position'. This is non-blocking because the code passes through whatever JSON the user provides (it just does json.loads(items) and sends it), but if the boards API supports points in bulk moves, the description should document it. Issue #34 already tracks verifying this.

  2. update_board_item still cannot clear points/labels to null -- Same limitation as the old sprint tools (Issue #33). Passing points=None or labels=None omits the field from the body rather than sending null. Not a regression, and Issue #33 already tracks it.

  3. No plan slug in Related section -- The PR body's Related section references Closes #35 and the upstream pal-e-docs PR #147, but does not reference a plan slug. This is a minor SOP gap. If this work falls under plan-pal-e-docs or another plan, it should be referenced.

SOP COMPLIANCE

  • Branch named after issue (35-replace-sprint-tools-with-board-equivalents)
  • PR body has: Summary, Changes, Test Plan, Related
  • Related section references plan slug (missing -- only references issue #35 and upstream PR #147)
  • Tests exist and are updated (sprint test classes replaced with board equivalents + TestDeleteProject added)
  • No secrets, .env files, or credentials committed
  • No unnecessary file changes -- all 6 files are in scope (boards.py new, sprints.py deleted, projects.py updated, init.py updated, conftest.py updated, test_param_alignment.py updated)
  • Closes #35 present in PR body
  • No residual sprint imports or references (only contextual mentions in docstrings/examples)

Code Quality Notes

  • All 11 board tools follow the established Annotated[..., Field(description=...)] pattern consistently.
  • API paths verified against expected boards REST API: GET/POST /boards, GET/PATCH/DELETE /boards/{slug}, GET/POST /boards/{slug}/items, PATCH/DELETE /boards/{slug}/items/{item_id}, PATCH /boards/{slug}/items/bulk, GET /boards/backlog/items.
  • Raw HTTP via get_sdk().get/post/patch/delete is the correct approach since the SDK does not yet have board methods. The SDK's _BaseClient exposes these methods (verified in client.py lines 110-157).
  • conftest.py correctly adds boards_mod and projects_mod patches (projects_mod is newly needed for delete_project which calls the low-level get_sdk().delete()).
  • Column values documented consistently: backlog, todo, next_up, in_progress, needs_approval, qa, done.
  • Item types documented consistently: plan, phase, issue, todo, repo, project.
  • Labels CSV splitting logic and empty-string handling are correct and tested.
  • sprints.py fully deleted with zero residual imports anywhere in source or tests.

VERDICT: APPROVED

## PR #36 Review ### BLOCKERS None. ### NITS 1. **`bulk_move_board_items` dropped `points` from the description** -- The old `bulk_move_items` documented optional `'points' (int)` in each move object. The new `bulk_move_board_items` description only mentions `'id', 'column', 'position'`. This is non-blocking because the code passes through whatever JSON the user provides (it just does `json.loads(items)` and sends it), but if the boards API supports `points` in bulk moves, the description should document it. Issue #34 already tracks verifying this. 2. **`update_board_item` still cannot clear points/labels to null** -- Same limitation as the old sprint tools (Issue #33). Passing `points=None` or `labels=None` omits the field from the body rather than sending `null`. Not a regression, and Issue #33 already tracks it. 3. **No plan slug in Related section** -- The PR body's Related section references `Closes #35` and the upstream pal-e-docs PR #147, but does not reference a plan slug. This is a minor SOP gap. If this work falls under `plan-pal-e-docs` or another plan, it should be referenced. ### SOP COMPLIANCE - [x] Branch named after issue (`35-replace-sprint-tools-with-board-equivalents`) - [x] PR body has: Summary, Changes, Test Plan, Related - [ ] Related section references plan slug (missing -- only references issue #35 and upstream PR #147) - [x] Tests exist and are updated (sprint test classes replaced with board equivalents + `TestDeleteProject` added) - [x] No secrets, `.env` files, or credentials committed - [x] No unnecessary file changes -- all 6 files are in scope (boards.py new, sprints.py deleted, projects.py updated, __init__.py updated, conftest.py updated, test_param_alignment.py updated) - [x] `Closes #35` present in PR body - [x] No residual sprint imports or references (only contextual mentions in docstrings/examples) ### Code Quality Notes - All 11 board tools follow the established `Annotated[..., Field(description=...)]` pattern consistently. - API paths verified against expected boards REST API: `GET/POST /boards`, `GET/PATCH/DELETE /boards/{slug}`, `GET/POST /boards/{slug}/items`, `PATCH/DELETE /boards/{slug}/items/{item_id}`, `PATCH /boards/{slug}/items/bulk`, `GET /boards/backlog/items`. - Raw HTTP via `get_sdk().get/post/patch/delete` is the correct approach since the SDK does not yet have board methods. The SDK's `_BaseClient` exposes these methods (verified in `client.py` lines 110-157). - `conftest.py` correctly adds `boards_mod` and `projects_mod` patches (projects_mod is newly needed for `delete_project` which calls the low-level `get_sdk().delete()`). - Column values documented consistently: `backlog, todo, next_up, in_progress, needs_approval, qa, done`. - Item types documented consistently: `plan, phase, issue, todo, repo, project`. - Labels CSV splitting logic and empty-string handling are correct and tested. - `sprints.py` fully deleted with zero residual imports anywhere in source or tests. ### VERDICT: APPROVED
forgejo_admin deleted branch 35-replace-sprint-tools-with-board-equivalents 2026-03-13 19:30:28 +00:00
Sign in to join this conversation.
No description provided.