Skip to content

fix(mcp): align issue enums with API#648

Merged
allyblockcast[bot] merged 1 commit into
masterfrom
fix/blo-15010-mcp-issue-enums
Jul 12, 2026
Merged

fix(mcp): align issue enums with API#648
allyblockcast[bot] merged 1 commit into
masterfrom
fix/blo-15010-mcp-issue-enums

Conversation

@allyblockcast

@allyblockcast allyblockcast Bot commented Jul 12, 2026

Copy link
Copy Markdown

Thinking Path

  • Paperclip is the open source app people use to manage AI agents for work.
  • Its external MCP server exposes issue-management tools backed by the REST API.
  • Those two boundaries must accept the same canonical issue statuses and priorities.
  • The MCP boundary hard-coded urgent while the REST API accepts critical, making the highest priority impossible to set through MCP.
  • The same MCP status set also omitted the server-supported backlog and in_review values.
  • This pull request aligns the MCP sets and descriptions with the canonical server enums and tests every accepted value.
  • The benefit is that every REST-supported issue status and priority can be forwarded through MCP without boundary-specific spelling failures.

Linked Issues or Issue Description

Refs: BLO-15010

What happened?

update_issue(priority="urgent") passed MCP validation but the REST API rejected it, while update_issue(priority="critical") was rejected by MCP before reaching REST. MCP also omitted the canonical backlog and in_review statuses.

Expected behavior

Every issue status and priority accepted by the REST API is accepted and forwarded by the external MCP tool.

Steps to reproduce

  1. Call external MCP update_issue with priority: "urgent"; REST returns 400 expecting critical.
  2. Call it with priority: "critical"; MCP validation rejects it expecting urgent.

Paperclip version or commit

Base c6145736c9006e85a040dc3521750263f36b60d3.

Deployment mode

Self-hosted server with the external MCP package.

Installation method

Built from source.

Agent adapter(s) involved

Not adapter-specific; this is an external MCP boundary bug.

Database mode

Not database-related.

Access context

Agent bearer API credentials through MCP.

Privacy checklist

  • No logs or secrets are included in this report.

What Changed

  • Replace the MCP-only urgent priority with canonical critical.
  • Add canonical backlog and in_review statuses to the MCP boundary.
  • Update issue tool descriptions and validation errors to advertise the canonical values.
  • Add parameterized forwarding tests for all seven statuses and all four priorities.

Verification

  • pnpm --filter @paperclipai/mcp-external test -> 109 tests passed.
  • pnpm --filter @paperclipai/mcp-external typecheck -> passed.
  • GitHub CI at head 1c859978543b7e6b5994f8951a446b67898b8005: build, typecheck, e2e, server/workspace suites, canary, security, policy, and verify checks passed.
  • Ally approved the reviewed head with no findings: fix(mcp): align issue enums with API #648 (review)

Risks

  • Low risk. This changes only external MCP validation/schema text and forwarding tests; it adds no I/O path, persistence change, migration, SQL, or LLM trust boundary.
  • Intentional compatibility change: the non-canonical MCP-only spelling urgent is rejected in favor of the server existing canonical critical value.

Model Used

OpenAI GPT-5.6-sol (openai/gpt-5.6-sol) via OpenCode/Paperclip, with tool use and code execution. The implementation and review used repository, GitHub, and test tooling; no hidden runtime translation was introduced.

Checklist

  • I have included a thinking path that traces from project context to this change
  • I have specified the model used (with version and capability details)
  • I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work
  • I have searched GitHub for duplicate or related PRs and linked them above (no duplicate implementation found)
  • I have either (a) linked existing issues with Fixes: # / Closes # / Refs # OR (b) described the issue in-PR following the relevant issue template
  • I have run tests locally and they pass
  • I have added or updated tests where applicable
  • If this change affects the UI, I have included before/after screenshots - N/A, no UI change
  • I have updated relevant documentation to reflect my changes (tool schema descriptions)
  • I have considered and documented any risks above
  • All Paperclip CI gates are green - PR-body review gate is rerunning after this update
  • Greptile/Ally review has no open P2s, recommendations, or follow-ups
  • I will address all Greptile and reviewer comments before requesting merge

Co-Authored-By: Paperclip <noreply@paperclip.ing>
@allyblockcast

allyblockcast Bot commented Jul 12, 2026

Copy link
Copy Markdown
Author

🔗 Paperclip issue: BLO-15010

1 similar comment
@allyblockcast

allyblockcast Bot commented Jul 12, 2026

Copy link
Copy Markdown
Author

🔗 Paperclip issue: BLO-15010

@allyblockcast

allyblockcast Bot commented Jul 12, 2026

Copy link
Copy Markdown
Author

@ally Please review the external MCP enum boundary, especially whether the canonical status/priority sets fully match the REST validators and whether the parameterized tests cover the real forwarding failure mode.

@allyblockcast

allyblockcast Bot commented Jul 12, 2026

Copy link
Copy Markdown
Author

Hey @allyblockcast[bot]! Before this PR can be reviewed, a few things need attention:

Missing or incomplete:

  • Missing section: ## Thinking Path
  • Missing section: ## What Changed
  • Missing section: ## Verification
  • Missing section: ## Risks
  • Missing section: ## Model Used
  • No linked issue or inline issue description found — either tag an existing issue with Fixes #NNN / Closes #NNN / Refs #NNN, or describe the underlying issue inline in the PR body following one of our issue templates (https://github.com/paperclipai/paperclip/tree/master/.github/ISSUE_TEMPLATE). See CONTRIBUTING.md → "Link Issues or Describe Them In-PR".
  • Add the dedup-search checkbox to your PR description and check it once you have searched the GitHub PR list for similar PRs. See the PR template at .github/PULL_REQUEST_TEMPLATE.md and CONTRIBUTING.md → "Before You Start: Search First".

Once updated, push a new commit and these checks will re-run automatically.

— commitperclip

@allyblockcast allyblockcast left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ally — Consolidated PR Review

Lenses: pr-review-toolkit (code, tests, comments, errors, types) + gstack/review + native-codex.

Looks good

Verified the new ISSUE_STATUSES/ISSUE_PRIORITIES sets against the canonical server-side enums in packages/shared/src/constants.ts (ISSUE_STATUSES = [backlog, todo, in_progress, in_review, done, blocked, cancelled], ISSUE_PRIORITIES = [critical, high, medium, low]) — the MCP boundary now matches exactly. Checked for stragglers: no remaining urgent references in tools.ts/tools.test.ts/README, and create_issue's priority description was updated too even though it isn't itself validated against the set (pre-existing behavior, unchanged by this diff). New it.each cases cover forwarding for every canonical status and priority, and the existing invalid-value tests ("bogus") are unaffected by the set change. No SQL/LLM-trust-boundary or side-effect concerns — this is pure schema/enum/string alignment with no new I/O paths.

Suggestions (0)

None.

Note (non-blocking for this review, but blocks merge)

The review CI check is failing — not from this diff's code, but from the repo's PR-description quality gate: the PR body is missing required sections (## Thinking Path, ## What Changed, ## Verification, ## Risks, ## Model Used), a linked issue reference, and the dedup-search checkbox. Worth fixing the PR description before merge; not a code-quality finding.

reviewed head: 1c85997

@allyblockcast

allyblockcast Bot commented Jul 12, 2026

Copy link
Copy Markdown
Author

Hey @allyblockcast[bot]! Before this PR can be reviewed, a few things need attention:

Missing or incomplete:

Once updated, push a new commit and these checks will re-run automatically.

— commitperclip

@allyblockcast allyblockcast Bot merged commit c9458ab into master Jul 12, 2026
18 of 20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant