Skip to content

feat: Add SOAR MCP Case Management Tools - #234

Open
jshlbrd wants to merge 1 commit into
google:mainfrom
jshlbrd:soar-case-management-tools
Open

feat: Add SOAR MCP Case Management Tools#234
jshlbrd wants to merge 1 commit into
google:mainfrom
jshlbrd:soar-case-management-tools

Conversation

@jshlbrd

@jshlbrd jshlbrd commented Feb 15, 2026

Copy link
Copy Markdown

Summary

  • Add five new case management tools to the SOAR MCP server: close_case, assign_case, change_case_stage, add_case_tag, remove_case_tag
  • Add corresponding endpoint constants, documentation, and tool mapping entries

@jshlbrd
jshlbrd requested a review from a team February 15, 2026 22:37
Add five new case management tools to the SOAR MCP server:
- close_case: Close a case with root cause, reason, and comment
- assign_case: Assign a user to a case
- change_case_stage: Update the workflow stage of a case
- add_case_tag: Add a tag to a case
- remove_case_tag: Remove a tag from a case
@jshlbrd
jshlbrd force-pushed the soar-case-management-tools branch from 5fbf162 to ed18a7a Compare February 15, 2026 22:44

@dandye dandye left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thank you for adding these case management tools to the SOAR MCP server. This is a very valuable addition to the repository.

Before we can merge this PR, please address the following feedback items:

  1. Add explicit = None defaults to optional parameter signatures:
    In create_case (lines 30-61) and close_case (lines 142-148), optional parameters declare Field(default=None, ...) inside Annotated, but omit = None on the parameter declaration itself.

    Please add = None to the parameter signatures so standard Python inspection recognizes them as optional defaults:

    # In create_case:
    priority: Annotated[Optional[str], Field(default=None, description="...")] = None,
    description: Annotated[Optional[str], Field(default=None, description="...")] = None,
    environment: Annotated[Optional[str], Field(default=None, description="...")] = None,
    
    # In close_case:
    tags: Annotated[Optional[str], Field(default=None, description="...")] = None,
  2. Add json_schema_extra enum constraint for reason in close_case:
    The docstring specifies that reason must be one of Malicious, NotMalicious, Maintenance, Inconclusive. To ensure LLM callers adhere to valid enum literals without hallucinating arbitrary strings, please add the enum schema constraint (similar to priority in create_case / change_case_priority):

    reason: Annotated[
        str,
        Field(
            ...,
            description="The close reason category for the case.",
            json_schema_extra={
                "enum": [
                    "Malicious",
                    "NotMalicious",
                    "Maintenance",
                    "Inconclusive",
                ]
            },
        ),
    ],
  3. Add unit tests:
    Please add unit tests covering the new tools in tests/ verifying that each tool function constructs the correct request payload and invokes the intended endpoint on http_client.

Once these updates are in place, we will be happy to merge this PR.

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.

2 participants