Skip to content

[Panorays Axis MCP] Add Panorays Axis MCP integration - #46237

Open
gotenxds wants to merge 6 commits into
demisto:contrib/panorays_panorays-mcpfrom
panorays:panorays-mcp
Open

gotenxds wants to merge 6 commits into
demisto:contrib/panorays_panorays-mcpfrom
panorays:panorays-mcp

Conversation

@gotenxds

@gotenxds gotenxds commented Oct 13, 2026 •

Copy link
Copy Markdown

Add a new partner-supported pack that connects Cortex Agentic AI to the Panorays Axis MCP server (https://mcp.panoraysapp.com/mcp) via MCPApiModule.

  • Authentication: Bearer API token, or OAuth 2.0 Authorization Code with a client provisioned by Panorays support.
  • Commands: test-module, list-tools, call-tool, panorays-mcp-auth-test, panorays-mcp-generate-login-url

The Pull Request will be reviewed only after the contribution registration form is filled.

Status

  • [] In Progress
  • Ready
  • In Hold - (Reason for hold)

Description

Panorays MCP integration pack

relates: https://jira-dc.paloaltonetworks.com/browse/CIAC-18718

Video :
https://drive.google.com/file/d/1M_E2qOyvtOWHoTDHXGCdBd5E2lklcIWR/view

Add a new partner-supported pack that connects Cortex Agentic AI to the
Panorays Axis MCP server (https://mcp.panoraysapp.com/mcp) via MCPApiModule.

- Authentication: Bearer API token, or OAuth 2.0 Authorization Code with a
  client provisioned by Panorays support.
- Commands: test-module, list-tools, call-tool, panorays-mcp-auth-test,
  panorays-mcp-generate-login-url.
@content-bot content-bot added Contribution Thank you! Contributions are always welcome! External PR Partner Support Level Indicates that the contribution is for Partner supported pack labels Oct 13, 2026
@content-bot
content-bot changed the base branch from master to contrib/panorays_panorays-mcp October 13, 2026 14:56
@content-bot
content-bot requested a review from kamalq97 October 13, 2026 14:57
@content-bot

Copy link
Copy Markdown
Contributor

Thank you for your contribution. Your generosity and caring are unrivaled! Make sure to register your contribution by filling the Contribution Registration form, so our content wizard @kamalq97 will know the proposed changes are ready to be reviewed.
For your convenience, here is a link to the contributions SLAs document.

@content-bot

Copy link
Copy Markdown
Contributor

Hi @gotenxds, thanks for contributing to the XSOAR marketplace. To receive credit for your generous contribution please follow this link.

@content-bot

Copy link
Copy Markdown
Contributor

🤖 AI-Powered Code Review Available

Hi @kamalq97, you can leverage AI-powered code review to assist with this PR!

Available Commands:

  • @marketplace-ai-reviewer start review - Initiate a full AI code review
  • @marketplace-ai-reviewer re-review - Incremental review for new commits

@MosheEichler
MosheEichler self-requested a review October 14, 2026 07:25
@MosheEichler
MosheEichler removed the request for review from kamalq97 October 14, 2026 07:26
@MosheEichler MosheEichler added ready-for-instance-test In contribution PRs, this label will cause a trigger of a build with a modified pack from the PR. ready-for-ai-review The PR is ready for reviewing the PR with the AI Reviewer. labels Oct 14, 2026
@marketplace-ai-reviewer marketplace-ai-reviewer removed the ready-for-ai-review The PR is ready for reviewing the PR with the AI Reviewer. label Oct 14, 2026
@marketplace-ai-reviewer

Copy link
Copy Markdown
Contributor

🤖 Analysis started. Please wait for results...

@content-bot

Copy link
Copy Markdown
Contributor

For the Reviewer: Trigger build request has been accepted for this contribution PR.

@content-bot

Copy link
Copy Markdown
Contributor

For the Reviewer: Successfully created a pipeline in GitLab with url: https://gitlab.xdr.pan.local/xdr/cortex-content/content/-/pipelines/13779395

@content-bot content-bot removed the ready-for-instance-test In contribution PRs, this label will cause a trigger of a build with a modified pack from the PR. label Oct 14, 2026
@marketplace-ai-reviewer

Copy link
Copy Markdown
Contributor
🤖 AI Review Disclaimer

This review was generated by an AI-powered tool and may contain inaccuracies. Please be advised, and we extend our sincere apologies for any inconvenience this may cause.

@marketplace-ai-reviewer marketplace-ai-reviewer left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hi there! Thanks for contributing the PanoraysMCP integration. I've reviewed your submission and found a few areas that need minor adjustments before we can proceed.

In the Python code, please ensure Enum comparisons use .value and update the exception handling to catch Exception rather than BaseException. For the documentation, several YAML descriptions need to follow our standard phrasing (e.g., using active voice for commands and starting parameter descriptions with "The "), and the README should be regenerated using demisto-sdk generate-docs to include the missing command examples. Lastly, please provide a higher-quality integration image, fix the header hierarchy in the detailed description, and add the missing created field to your pack metadata.

Let me know if you have any questions while working on these updates!

Additionally, please address the following file-level notes:

  • Packs/PanoraysMCP/Integrations/PanoraysMCP/PanoraysMCP_description.md: Verify supportlevelheader in YAML
  • Packs/PanoraysMCP/Integrations/PanoraysMCP/PanoraysMCP_image.png: The integration image appears to be blurry and pixelated. Please provide a higher quality, clearer image for the integration logo to ensure it looks professional in the XSOAR UI. The recommended size is 120x50 pixels (or 240x100 for better scaling).

@MosheEichler please review and approve the results generated by the AI Reviewer by responding 👍 on this comment.


client = None
try:
auth_type = params.get("auth_type", "")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ensure the Python default value matches the YAML configuration.

else:
raise NotImplementedError(f"Command {command} is not implemented")

except BaseException as eg:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

  • Update exception handling to catch Exception and log the traceback.
  • Catch Exception instead of BaseException.

"""
if auth_type not in SUPPORTED_AUTH_TYPES:
raise ValueError(f"Unsupported authentication type: {auth_type}. Supported types: {', '.join(SUPPORTED_AUTH_TYPES)}.")
if auth_type == AuthMethods.BEARER and not token:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Use .value for Enum comparison to ensure consistency and prevent potential bugs.

raise ValueError(f"Unsupported authentication type: {auth_type}. Supported types: {', '.join(SUPPORTED_AUTH_TYPES)}.")
if auth_type == AuthMethods.BEARER and not token:
raise ValueError("API Token is required for Bearer authentication.")
if auth_type == AuthMethods.AUTHORIZATION_CODE and not all((client_id, client_secret)):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Use .value for Enum comparison.

demisto.debug(f"Command being called is {command}")

if command == "test-module":
if auth_type == AuthMethods.AUTHORIZATION_CODE:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Use .value for Enum comparison.

You can execute these commands from the CLI, as part of an automation, or in a playbook.
After you successfully execute a command, a DBot message appears in the War Room with the command details.

### panorays-mcp-auth-test

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This command block is missing the required #### Command example, #### Context Example, and #### Human Readable Output sections.

Please add a command example (e.g., !panorays-mcp-auth-test) to a command_examples.txt file and regenerate the README using the SDK to ensure all standard sections are included. For more information, see Run demisto-sdk generate-docs.

demisto-sdk generate-docs --insecure -e Packs/PanoraysMCP/Integrations/PanoraysMCP/command_examples.txt -i Packs/PanoraysMCP/Integrations/PanoraysMCP/PanoraysMCP.yml


There is no context output for this command.

### panorays-mcp-generate-login-url

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This command block is missing the required #### Command example, #### Context Example, and #### Human Readable Output sections.

Please add a command example (e.g., !panorays-mcp-generate-login-url) to a command_examples.txt file and regenerate the README using the SDK to ensure all standard sections are included. For more information, see Run demisto-sdk generate-docs.

demisto-sdk generate-docs --insecure -e Packs/PanoraysMCP/Integrations/PanoraysMCP/command_examples.txt -i Packs/PanoraysMCP/Integrations/PanoraysMCP/PanoraysMCP.yml

@@ -0,0 +1,24 @@
{

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The mandatory created field is missing from the pack metadata.

"TPRM",
"Supply Chain Security"
],
"marketplaces": [

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Verify if "marketplacev2" should be included in the marketplaces array.

Comment thread Packs/PanoraysMCP/README.md Resolved
@MosheEichler
MosheEichler requested review from omerKarkKatz and removed request for MosheEichler October 14, 2026 09:20
Co-authored-by: Marketplace AI reviewer <svc-mp-ai-reviewer@paloaltonetworks.com>
@CLAassistant

CLAassistant commented Oct 14, 2026 •

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@gotenxds

gotenxds commented Oct 14, 2026 •

Copy link
Copy Markdown
Author

@marketplace-ai-reviewer I'm addressing the wording, metadata and documentation comments in an upcoming commit. A few points I'd like to confirm with a reviewer before changing:

  1. BaseException vs Exception (PanoraysMCP.py) - The MCP integration contributor guide says to use BaseException in error handling to catch async exception groups, and GenericMCP / GitHubMCP / CloudflareMCP do the same. Should I still switch to Exception?

  2. Integration image "blurry" - PanoraysMCP_image.png is identical to the image already used by the existing Panorays pack (PanoraysFindingsAPI_image.png). Validation (IM111) requires exactly 120x50, so a 240x100 image would fail. Is a new image required here?

  3. "Avoid command invocations in description" - The OAuth setup requires running !panorays-mcp-generate-login-url and !panorays-mcp-auth-test, and the ServiceNowMCP / CloudflareMCP descriptions include the same steps. Is it OK to keep them?

  4. "Use correct Cortex branding" - This refers to "create an OAuth client for Cortex". What's the preferred product name here?

  5. README command examples - Both commands return only a human-readable message with no context output, and the ServiceNowMCP / CloudflareMCP READMEs don't include example sections. Generating them requires a configured tenant. Are they required for this pack?

Two notes on the remaining comments:

  • marketplacev2 - The pack is intentionally platform only, like the other MCP packs, because MCP integrations are only supported on the platform.
  • supportlevelheader - Not set in the YAML, so it inherits partner from pack_metadata.json.

- Add the created field to pack_metadata.json.
- Use active voice for the integration and command descriptions, and start parameter help texts with "The".
- Default auth_type to Bearer to match the YAML, and compare enums by value.
- Fix the header hierarchy in the description file and drop the product overview.
- Add a Prerequisites section to the integration README.
- Add CONTRIBUTORS.json.
@content-bot content-bot added Partner-Approved Contribution Form Filled Whether contribution form filled or not. Partner labels Oct 15, 2026
@mmhw

mmhw commented Nov 10, 2026

Copy link
Copy Markdown
Contributor

Hi @gotenxds ,
Thank you for your contribution!
Good work :)
Apologies for the long delay on our review.

Overall looks great, I have no comments.

Could you just provide a short demo showing that everything works as expected—specifically that after configuring the integration using each method, the tools are fetched and displayed properly in the Agentic Assistant Hub?

Feel free to share the video with me on Slack in DFIR.
Thanks!

@mmhw mmhw added the ready-for-instance-test In contribution PRs, this label will cause a trigger of a build with a modified pack from the PR. label Nov 10, 2026
@content-bot

Copy link
Copy Markdown
Contributor

For the Reviewer: Trigger build request has been accepted for this contribution PR.

@content-bot

Copy link
Copy Markdown
Contributor

For the Reviewer: Successfully created a pipeline in GitLab with url: https://gitlab.xdr.pan.local/xdr/cortex-content/content/-/pipelines/14587568

@content-bot content-bot removed the ready-for-instance-test In contribution PRs, this label will cause a trigger of a build with a modified pack from the PR. label Nov 10, 2026
- Set the integration category to Data Enrichment & Threat Intelligence.
- List all approved categories in pack_metadata.json, led by Data Enrichment & Threat Intelligence and Vulnerability Management.
- Add the TPCRM, Third Party Intelligence and Axis keywords.
Note that a Panorays Admin must enable the Panorays Axis MCP product before tools can be discovered.
Tell users to ask their Panorays Admin to enable Panorays Axis MCP before configuring the integration.
@gotenxds

Copy link
Copy Markdown
Author

Hi @mmhw , thanks for the response, sent on slack, also added it here in the Pr description

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Contribution Form Filled Whether contribution form filled or not. Contribution Thank you! Contributions are always welcome! External PR Partner Support Level Indicates that the contribution is for Partner supported pack Partner Partner-Approved

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants