Skip to content

feat: add customer tools#177

Open
akhil-vamshi-konam wants to merge 4 commits into
mainfrom
feat-customer-tools
Open

feat: add customer tools#177
akhil-vamshi-konam wants to merge 4 commits into
mainfrom
feat-customer-tools

Conversation

@akhil-vamshi-konam

@akhil-vamshi-konam akhil-vamshi-konam commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Description

Adds MCP tools for Plane's customers domain.

Tools

  • Customers — list, create, retrieve, update, delete
  • Properties — list, create, retrieve, update, delete (workspace-level custom fields)
  • Property values — get, set (a customer's values for those properties)
  • Requests — list, create, retrieve, update, delete
  • Work items — list, and link/unlink work items to a customer

Organized as a plane_mcp/tools/customers/ package.

Requires

plane-sdk==0.2.20.

Summary by CodeRabbit

  • New Features
    • Added a full suite of customer tools for managing customers (create, view, update, delete) and searching via query/pagination.
    • Added customer property tools, including creating/updating/deleting properties and managing property values.
    • Added customer request tools (list, create, view, update, delete).
    • Added customer work-item tools to list and link/unlink work items with request scoping support.
  • Documentation
    • Updated architecture documentation to reflect expanded tooling coverage.
  • Tests
    • Expanded tool availability checks to include all new customer-related tools.
  • Chores
    • Updated the Plane SDK dependency version.

@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@akhil-vamshi-konam, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 49 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: be035aa6-d055-4ee9-b92e-80e4b5764119

📥 Commits

Reviewing files that changed from the base of the PR and between fa293b5 and 7ae92c7.

📒 Files selected for processing (3)
  • plane_mcp/tools/customers/base.py
  • plane_mcp/tools/customers/property_values.py
  • plane_mcp/tools/customers/work_items.py
📝 Walkthrough

Walkthrough

Adds customer CRUD, property, property-value, request, and work-item MCP tools. The new customer package centralizes registration, updates the Plane SDK dependency, and expands integration coverage to verify all customer tools are available.

Changes

Customer tool surface

Layer / File(s) Summary
Customer CRUD and shared helpers
plane_mcp/tools/customers/_helpers.py, plane_mcp/tools/customers/base.py
Adds pagination/settings helpers and customer list, create, retrieve, update, and delete tools.
Customer properties and values
plane_mcp/tools/customers/properties.py, plane_mcp/tools/customers/property_values.py
Adds property CRUD plus custom property value retrieval and replacement tools.
Customer requests and work-item links
plane_mcp/tools/customers/requests.py, plane_mcp/tools/customers/work_items.py
Adds request CRUD and customer work-item listing, linking, and unlinking tools.
Registration, SDK, and availability coverage
plane_mcp/tools/customers/__init__.py, plane_mcp/tools/__init__.py, pyproject.toml, tests/test_integration.py, CLAUDE.md
Registers all customer tool groups, updates plane-sdk to 0.2.20, expands tool availability assertions, and updates documented tool counts.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant MCPClient
  participant CustomerTool
  participant PlaneSDK
  MCPClient->>CustomerTool: invoke customer operation
  CustomerTool->>PlaneSDK: call client.customers API
  PlaneSDK-->>CustomerTool: return response
  CustomerTool-->>MCPClient: return tool result
Loading

Possibly related PRs

Suggested reviewers: prashant-surya

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: adding new customer-related MCP tools.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat-customer-tools

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1

🧹 Nitpick comments (4)
plane_mcp/tools/customers/_helpers.py (1)

24-32: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Update the return type annotation to include None.

The build_settings function can return None, but its return type is currently annotated as PropertySettings. Update it to PropertySettings | None to accurately reflect the return values and avoid type-checking errors.

♻️ Proposed fix
-def build_settings(property_type: str, settings: dict | None) -> PropertySettings:
+def build_settings(property_type: str, settings: dict | None) -> PropertySettings | None:
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plane_mcp/tools/customers/_helpers.py` around lines 24 - 32, Update the
return type annotation of build_settings to PropertySettings | None, matching
its existing None return paths while preserving the current settings conversion
behavior.
plane_mcp/tools/customers/base.py (1)

177-188: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add a Returns section to the docstrings. As per coding guidelines, FastMCP tools should include docstrings with both Args and Returns sections. Adding a Returns section, even to indicate that the tool returns nothing, ensures consistency across the codebase.

  • plane_mcp/tools/customers/base.py#L177-L188: add Returns:\n None to the delete_customer docstring.
  • plane_mcp/tools/customers/requests.py#L133-L139: add Returns:\n None to the delete_customer_request docstring.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plane_mcp/tools/customers/base.py` around lines 177 - 188, Both customer
deletion tool docstrings lack the required Returns section. In
plane_mcp/tools/customers/base.py lines 177-188, update delete_customer to add a
Returns section documenting None; make the same change in
plane_mcp/tools/customers/requests.py lines 133-139 for delete_customer_request.

Source: Coding guidelines

plane_mcp/tools/customers/work_items.py (1)

73-80: 🩺 Stability & Availability | 🔵 Trivial | 💤 Low value

Consider handling partial failures during unlink.

If work_item_ids contains multiple IDs and an unlink network call fails partway through the loop, the remaining items will not be unlinked, and an exception will be raised. If the SDK does not provide a bulk unlink endpoint, consider whether partial failures should be caught and accumulated or if failing fast is the intended behavior.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plane_mcp/tools/customers/work_items.py` around lines 73 - 80, Review the
unlink loop in the work item handling branch and define explicit partial-failure
behavior for multiple work_item_ids. If continuing after failures is intended,
catch each unlink error, accumulate the failures, process all remaining IDs, and
report the aggregated result; otherwise preserve and document failing-fast
behavior by allowing the first exception to propagate.
plane_mcp/tools/customers/properties.py (1)

169-175: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add Returns section to the docstrings.

As per coding guidelines, FastMCP tools must include docstrings with both Args and Returns sections. The tools returning None are missing the Returns section.

  • plane_mcp/tools/customers/properties.py#L169-L175: Add Returns: None to delete_customer_property.
  • plane_mcp/tools/customers/property_values.py#L35-L55: Add Returns: None to set_customer_property_values.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plane_mcp/tools/customers/properties.py` around lines 169 - 175, Add a
Returns section documenting None to the docstrings of delete_customer_property
in plane_mcp/tools/customers/properties.py (lines 169-175) and
set_customer_property_values in plane_mcp/tools/customers/property_values.py
(lines 35-55), while preserving their existing Args documentation.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@plane_mcp/tools/customers/properties.py`:
- Around line 20-40: The list_customer_properties function currently returns the
full PaginatedCustomerPropertyResponse envelope. Update it to return only the
response’s results array, and revise its return annotation and docstring to
describe the list of customer properties rather than pagination metadata.

---

Nitpick comments:
In `@plane_mcp/tools/customers/_helpers.py`:
- Around line 24-32: Update the return type annotation of build_settings to
PropertySettings | None, matching its existing None return paths while
preserving the current settings conversion behavior.

In `@plane_mcp/tools/customers/base.py`:
- Around line 177-188: Both customer deletion tool docstrings lack the required
Returns section. In plane_mcp/tools/customers/base.py lines 177-188, update
delete_customer to add a Returns section documenting None; make the same change
in plane_mcp/tools/customers/requests.py lines 133-139 for
delete_customer_request.

In `@plane_mcp/tools/customers/properties.py`:
- Around line 169-175: Add a Returns section documenting None to the docstrings
of delete_customer_property in plane_mcp/tools/customers/properties.py (lines
169-175) and set_customer_property_values in
plane_mcp/tools/customers/property_values.py (lines 35-55), while preserving
their existing Args documentation.

In `@plane_mcp/tools/customers/work_items.py`:
- Around line 73-80: Review the unlink loop in the work item handling branch and
define explicit partial-failure behavior for multiple work_item_ids. If
continuing after failures is intended, catch each unlink error, accumulate the
failures, process all remaining IDs, and report the aggregated result; otherwise
preserve and document failing-fast behavior by allowing the first exception to
propagate.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9df8cd84-faba-4deb-9ac2-76f61afd8680

📥 Commits

Reviewing files that changed from the base of the PR and between b0fb136 and f256f83.

📒 Files selected for processing (11)
  • CLAUDE.md
  • plane_mcp/tools/__init__.py
  • plane_mcp/tools/customers/__init__.py
  • plane_mcp/tools/customers/_helpers.py
  • plane_mcp/tools/customers/base.py
  • plane_mcp/tools/customers/properties.py
  • plane_mcp/tools/customers/property_values.py
  • plane_mcp/tools/customers/requests.py
  • plane_mcp/tools/customers/work_items.py
  • pyproject.toml
  • tests/test_integration.py

Comment thread plane_mcp/tools/customers/properties.py
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