Skip to content

FIRE-814 | MCP Agent example#100

Merged
yuval-qf merged 11 commits intomainfrom
feature/FIRE-800-mcp-support
Oct 20, 2025
Merged

FIRE-814 | MCP Agent example#100
yuval-qf merged 11 commits intomainfrom
feature/FIRE-800-mcp-support

Conversation

@yuval-qf
Copy link
Collaborator

@yuval-qf yuval-qf commented Oct 19, 2025

Description

Motivation and Context

Type of Change

  • 🐛 Bug fix (non-breaking change which fixes an issue)
  • ✨ New feature (non-breaking change which adds functionality)
  • 💥 Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • 📝 Documentation update
  • 🎨 Code style/refactoring (no functional changes)
  • 🧪 Test updates
  • 🔧 Configuration/build changes

Changes Made

Screenshots/Examples (if applicable)

Checklist

  • I have read the CONTRIBUTING.md guide
  • My code follows the code style of this project (PEP 8, type hints, docstrings)
  • I have run uv run black . to format my code
  • I have run uv run flake8 . and fixed all issues
  • I have run uv run mypy --config-file .mypy.ini . and addressed type checking issues
  • I have run uv run bandit -c .bandit.yaml -r . for security checks
  • I have added tests that prove my fix is effective or that my feature works
  • I have run uv run pytest and all tests pass
  • I have manually tested my changes
  • I have updated the documentation accordingly
  • I have added/updated type hints for new/modified functions
  • My changes generate no new warnings
  • I have checked my code for security issues
  • Any dependent changes have been merged and published

Testing

Test Configuration:

  • Python version:
  • OS:
  • Other relevant details:

Test Steps:
1.
2.
3.

Additional Notes

Related Issues/PRs

  • Fixes #
  • Related to #
  • Depends on #

@yuval-qf yuval-qf self-assigned this Oct 19, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 19, 2025

Caution

Review failed

The pull request is closed.

Summary by CodeRabbit

  • New Features

    • Added an interactive T-shirt store sales agent with inventory lookup and email capabilities.
    • Introduced MCP server for agent integration.
    • Exposed version information through the public API.
  • Chores

    • Updated language model and workflow dependencies for improved compatibility.

Walkthrough

This PR introduces a new MCP (Model Context Protocol) server for a Shirtify agent, updates project dependencies with range-based versioning constraints, and exposes new public APIs. The implementation includes a React-style graph-based sales agent with tool integration and an MCP HTTP transport wrapper.

Changes

Cohort / File(s) Summary
Dependency Management
pyproject.toml
Added langchain-openai>=0.3.35 dependency and replaced exact version pins with range-based constraints for langchain, langchain-core, langchain-openai, langgraph, and mcp[cli].
Development Configuration
.vscode/launch.json
Added new launch configuration for Shirtify MCP server pointing to ./examples/mcp/tshirt_store_mcp with corresponding environment file.
Public API Exports
rogue/__init__.py
Added get_version to module's __all__ exports; adjusted import organization and removed unused Path import.
MCP Package Infrastructure
examples/mcp/tshirt_store_langgraph_mcp/__init__.py
Exposed mcp_agent_wrapper and shirtify_agent submodules as top-level package attributes.
MCP Server Entrypoint
examples/mcp/tshirt_store_langgraph_mcp/__main__.py
Added new script entrypoint that loads environment variables via load_dotenv() and starts an MCP server with streamable-HTTP transport on initialization.
MCP Integration Layer
examples/mcp/tshirt_store_langgraph_mcp/mcp_agent_wrapper.py
New module wrapping ShirtifyAgent as an MCP tool; exposes send_message(message, context) that extracts session_id from HTTP transport headers/params, handles extraction errors gracefully, and invokes the agent with session context. FastMCP server initialized on port 10001 at 127.0.0.1.
Sales Agent Implementation
examples/mcp/tshirt_store_langgraph_mcp/shirtify_agent.py
New module implementing ShirtifyAgent class—a React-style graph-based chat agent with inventory and email tools, pydantic ResponseFormat model for structured responses (status: input_required|completed|error), and session-aware state management via MemorySaver checkpointer.

Sequence Diagram(s)

sequenceDiagram
    actor Client
    participant MCP as MCP Server<br/>(mcp_agent_wrapper)
    participant Agent as ShirtifyAgent
    participant LLM as LLM<br/>(React Graph)
    participant Tools as Tools<br/>(_inventory, _send_email)

    Client->>MCP: send_message(msg, context)
    MCP->>MCP: Extract session_id from<br/>HTTP headers/params
    MCP->>Agent: invoke(message, session_id)
    Agent->>Agent: Generate/use session_id
    Agent->>LLM: Execute React graph<br/>with message & thread_id
    LLM->>LLM: Process via AGENT_INSTRUCTIONS
    LLM->>Tools: Call tool if needed<br/>(_inventory or _send_email)
    Tools-->>LLM: Return tool result
    LLM-->>Agent: Return structured_response<br/>(ResponseFormat)
    Agent->>Agent: Parse ResponseFormat<br/>(status: input_required/<br/>completed/error)
    Agent-->>MCP: Return agent response<br/>Dict[status, content, ...]
    MCP-->>Client: Return response string
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Heterogeneous changes span dependency updates, configuration, public API modifications, and new feature implementation across multiple files. New logic in shirtify_agent.py and mcp_agent_wrapper.py introduces agent orchestration, state management, and MCP protocol integration requiring separate reasoning for each component, though changes are cohesive around a single feature area.

Poem

🐰 A rabbit hops through MCP's door,
New Shirtify wares to explore,
With LangGraph's thread and tools so keen,
The finest tee shop ever seen!
Range-bound deps, configured just right—
This agent's ready to chat all night!

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Description Check ⚠️ Warning The PR description follows the repository's template structure but fails to provide concrete content in nearly all critical sections. While the "Type of Change" is appropriately marked as "New feature" and the checklist items are all checked, the essential sections—Description, Motivation and Context, Changes Made, Testing, and Related Issues/PRs—are completely empty or contain only placeholder text and comments. This leaves reviewers without crucial information about what was changed, why these changes were necessary, and how they were tested. The lack of substantive content in these sections makes it impossible for reviewers to understand the PR's purpose and scope from the description alone.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (1 passed)
Check name Status Explanation
Title Check ✅ Passed The PR title "FIRE-814 | MCP Agent example" clearly and directly relates to the main changeset, which introduces a complete MCP (Model Context Protocol) agent example implementation with multiple new modules (mcp_agent_wrapper, shirtify_agent, main.py), package initialization, dependency updates, and launch configuration. The title is concise, specific, and accurately reflects the primary focus of the PR without using vague language or excessive noise. A reviewer scanning the history would immediately understand that this PR adds an example of an MCP-based agent.

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1524c80 and 84acb33.

📒 Files selected for processing (4)
  • examples/mcp/tshirt_store_langgraph_mcp/__init__.py (1 hunks)
  • examples/mcp/tshirt_store_langgraph_mcp/__main__.py (1 hunks)
  • examples/mcp/tshirt_store_langgraph_mcp/mcp_agent_wrapper.py (1 hunks)
  • examples/mcp/tshirt_store_langgraph_mcp/shirtify_agent.py (1 hunks)

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

@yuval-qf yuval-qf marked this pull request as ready for review October 19, 2025 09:40
@yuval-qf yuval-qf requested a review from drorIvry as a code owner October 19, 2025 09:40
@yuval-qf yuval-qf changed the title FIRE-800 | MCP Agent example FIRE-814 | MCP Agent example Oct 19, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 9

🧹 Nitpick comments (2)
examples/mcp/tshirt_store_mcp/__main__.py (1)

4-4: Move load_dotenv() call inside main() to avoid side effects on import.

Calling load_dotenv() at module level executes immediately when the module is imported, which can cause unexpected side effects. It's better to call it within the main() function.

Apply this diff to move the call:

-load_dotenv()
-
-
 def main():
+    load_dotenv()
     print("Starting MCP server...")
examples/mcp/tshirt_store_mcp/shirtify_agent.py (1)

117-136: Document that tools are mock implementations.

Both _inventory_tool and _send_email_tool are returning hardcoded strings instead of performing actual operations. This should be clearly documented to avoid confusion, especially since this is an example.

Consider adding a note in the docstrings:

 @staticmethod
 def _inventory_tool(
     color: str,
     size: str,
 ) -> str:
     """
     Get the inventory of a specific color and size of T-shirt.
+    
+    Note: This is a mock implementation for demonstration purposes.
+    In production, this would query an actual inventory database.
     """
     return f"100 {color} {size} T-shirts in stock"

 @staticmethod
 def _send_email_tool(
     email: str,
     subject: str,
     body: str,
 ) -> str:
     """
     Send an email to a customer.
+    
+    Note: This is a mock implementation for demonstration purposes.
+    In production, this would send an actual email via SMTP or email service API.
     """
     return f"Email sent to {email} with subject {subject} and body {body}"
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1cc139b and da4e592.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (5)
  • examples/mcp/tshirt_store_mcp/__init__.py (1 hunks)
  • examples/mcp/tshirt_store_mcp/__main__.py (1 hunks)
  • examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py (1 hunks)
  • examples/mcp/tshirt_store_mcp/shirtify_agent.py (1 hunks)
  • pyproject.toml (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

**/*.py: Format Python code with Black
Ensure code passes flake8 linting
Run mypy with the repository configuration for static typing
Run Bandit security checks using .bandit.yaml configuration
Use isort import conventions for import ordering
Add type hints to all function signatures
Follow PEP 8 naming (snake_case for variables/functions, PascalCase for classes)
Use try/except around code that may raise exceptions

Files:

  • examples/mcp/tshirt_store_mcp/__init__.py
  • examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py
  • examples/mcp/tshirt_store_mcp/shirtify_agent.py
  • examples/mcp/tshirt_store_mcp/__main__.py
pyproject.toml

📄 CodeRabbit inference engine (AGENTS.md)

Manage dependencies with uv and declare them in pyproject.toml

Files:

  • pyproject.toml
🧬 Code graph analysis (1)
examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py (1)
examples/mcp/tshirt_store_mcp/shirtify_agent.py (2)
  • ShirtifyAgent (64-136)
  • invoke (76-82)
🔇 Additional comments (2)
examples/mcp/tshirt_store_mcp/__init__.py (1)

1-1: LGTM!

The package initialization correctly exposes the internal modules as public submodules.

pyproject.toml (1)

42-47: All package versions verified and no security vulnerabilities found.

The specified versions exist: langchain 0.3.27, langchain-openai 0.3.35, langgraph 0.6.10, and mcp 1.13.0 are all published on PyPI. Security advisory checks show no active vulnerabilities for these specific versions.

@drorIvry
Copy link
Contributor

happy PR #100 !!!!! 🎉

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (9)
examples/mcp/tshirt_store_mcp/shirtify_agent.py (4)

68-74: Add error handling for agent initialization.

The create_react_agent call can fail if the model is invalid, API keys are missing, or configuration is incorrect. Wrapping in try/except would provide clearer error messages on failure.

As per coding guidelines.


76-82: Add error handling for graph invocation.

The graph.invoke() call can fail due to API errors, timeouts, or invalid state. Adding try/except would improve resilience.

As per coding guidelines.


117-125: Add return type hint to _inventory_tool.

The static method is missing a return type hint.

As per coding guidelines.

Apply this diff:

 @staticmethod
 def _inventory_tool(
     color: str,
     size: str,
-):
+) -> str:
     """
     Get the inventory of a specific color and size of T-shirt.
     """

127-136: Add return type hint to _send_email_tool.

The static method is missing a return type hint.

As per coding guidelines.

Apply this diff:

 @staticmethod
 def _send_email_tool(
     email: str,
     subject: str,
     body: str,
-):
+) -> str:
     """
     Send an email to a customer.
     """
examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py (3)

16-16: Consider deferring agent instantiation to avoid module-level failures.

Instantiating ShirtifyAgent at module level means any error during initialization (e.g., missing API keys, the invalid model name in line 65 of shirtify_agent.py) will cause the entire module import to fail. Consider lazy initialization for better error handling.


35-35: Add error handling for agent.invoke.

The agent.invoke() call can raise exceptions (network errors, API failures, etc.). Adding try/except would allow returning a proper error response instead of crashing.

As per coding guidelines.


13-13: Fix the import to use relative import.

The import should be relative since this module is within the same package. Absolute import will fail when the package is imported.

Apply this diff:

-from shirtify_agent import ShirtifyAgent
+from .shirtify_agent import ShirtifyAgent
examples/mcp/tshirt_store_mcp/__main__.py (2)

9-9: Add error handling for MCP server startup.

The mcp.run() call can raise exceptions (e.g., port already in use, configuration errors). Adding try/except would provide clearer error messages on failure.

As per coding guidelines.


2-2: Fix the import to use relative import.

The import should be relative since this module is within the same package. Absolute import will fail when the package is imported.

Apply this diff:

-from mcp_agent_wrapper import mcp
+from .mcp_agent_wrapper import mcp
🧹 Nitpick comments (4)
examples/mcp/tshirt_store_mcp/shirtify_agent.py (1)

1-8: Reorganize imports per isort conventions.

Per coding guidelines, imports should be organized with standard library imports first, then a blank line, followed by third-party imports. Currently, they are mixed.

Apply this diff to reorganize:

 from typing import Any, Dict, Literal
 from uuid import uuid4
+
 from langchain_core.runnables import RunnableConfig
 from langgraph.checkpoint.memory import MemorySaver
 from langgraph.graph.state import CompiledStateGraph
 from langgraph.prebuilt import create_react_agent
 from pydantic import BaseModel

As per coding guidelines.

examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py (2)

9-14: Reorganize imports per isort conventions.

Imports should be grouped with standard library first, then third-party, then local/relative imports, with blank lines between groups.

Apply this diff:

 from typing import Any, Dict
+
 from mcp.server.fastmcp import Context, FastMCP
 from mcp.types import CallToolResult, TextContent
-from shirtify_agent import ShirtifyAgent
 from starlette.requests import Request
+
+from .shirtify_agent import ShirtifyAgent

As per coding guidelines.


31-31: Consider using logging instead of print.

Using Python's logging module instead of print() would provide better control over log levels and output destinations.

Example:

+import logging
+
+logger = logging.getLogger(__name__)
+
 @mcp.tool()
 def send_message(message: str, context: Context) -> Dict[str, Any]:
     session_id: str | None = None
     try:
         request: Request = context.request_context.request  # type: ignore
         session_id = request.query_params.get("session_id")
     except Exception:
-        print("No session ID found in request")
+        logger.warning("No session ID found in request")
         session_id = None
examples/mcp/tshirt_store_mcp/__main__.py (1)

1-2: Reorganize imports per isort conventions.

Add a blank line between third-party and local imports for better organization.

Apply this diff:

 from dotenv import load_dotenv
+
 from .mcp_agent_wrapper import mcp

As per coding guidelines.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between da4e592 and a830b10.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (5)
  • .vscode/launch.json (1 hunks)
  • examples/mcp/tshirt_store_mcp/__main__.py (1 hunks)
  • examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py (1 hunks)
  • examples/mcp/tshirt_store_mcp/shirtify_agent.py (1 hunks)
  • pyproject.toml (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • pyproject.toml
🧰 Additional context used
📓 Path-based instructions (1)
**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

**/*.py: Format Python code with Black
Ensure code passes flake8 linting
Run mypy with the repository configuration for static typing
Run Bandit security checks using .bandit.yaml configuration
Use isort import conventions for import ordering
Add type hints to all function signatures
Follow PEP 8 naming (snake_case for variables/functions, PascalCase for classes)
Use try/except around code that may raise exceptions

Files:

  • examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py
  • examples/mcp/tshirt_store_mcp/__main__.py
  • examples/mcp/tshirt_store_mcp/shirtify_agent.py
🧬 Code graph analysis (1)
examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py (1)
examples/mcp/tshirt_store_mcp/shirtify_agent.py (2)
  • ShirtifyAgent (64-136)
  • invoke (76-82)
🔇 Additional comments (5)
.vscode/launch.json (1)

63-71: LGTM!

The new launch configuration follows the established pattern and correctly points to the new MCP example directory and environment file.

examples/mcp/tshirt_store_mcp/shirtify_agent.py (3)

10-54: LGTM!

The agent instructions are clear and comprehensive, defining the store's business rules, available products, and tool interfaces.


57-61: LGTM!

The ResponseFormat model is well-structured with appropriate type constraints using Literal for the status field.


84-115: LGTM!

The response mapping logic correctly handles all three status cases and includes a safe fallback for unexpected states.

examples/mcp/tshirt_store_mcp/__main__.py (1)

12-13: LGTM!

Standard entry point pattern is correctly implemented.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (5)
examples/mcp/tshirt_store_mcp/__main__.py (2)

2-2: Fix the import to use relative import.

The import should be relative since this module is within the same package.

Apply this diff to fix the import:

-from mcp_agent_wrapper import mcp
+from .mcp_agent_wrapper import mcp

7-15: Add error handling for MCP server startup.

The mcp.run() call can raise exceptions (e.g., port already in use, configuration errors). Add try/except to handle failures gracefully.

As per coding guidelines.

Apply this diff to add error handling:

 def main() -> None:
+    load_dotenv()
     print("Starting MCP server...")
-    # Can also be "sse".
-    # When using "sse", the url will be http://localhost:10001/sse
-    # When using "streamable-http", the url will be http://localhost:10001/mcp
-    # stdio isn't supported in this example, since rogue won't be able to connect to it.
-    mcp.run(transport="streamable-http")
-    # mcp.run(transport="sse")
+    try:
+        # Can also be "sse".
+        # When using "sse", the url will be http://localhost:10001/sse
+        # When using "streamable-http", the url will be http://localhost:10001/mcp
+        # stdio isn't supported in this example, since rogue won't be able to connect to it.
+        mcp.run(transport="streamable-http")
+        # mcp.run(transport="sse")
+    except Exception as e:
+        print(f"Failed to start MCP server: {e}")
+        raise
examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py (3)

11-11: Fix the import to use relative import.

The import should be relative since this module is within the same package.

Apply this diff to fix the import:

-from shirtify_agent import ShirtifyAgent
+from .shirtify_agent import ShirtifyAgent

14-14: Defer agent instantiation to avoid module-level failures.

Instantiating ShirtifyAgent at module level means any error during initialization (e.g., missing API keys, invalid model configuration) will cause the entire module import to fail. Consider lazy initialization or adding error handling.

Consider lazy initialization:

-agent = ShirtifyAgent()
+_agent = None
+
+def _get_agent() -> ShirtifyAgent:
+    global _agent
+    if _agent is None:
+        _agent = ShirtifyAgent()
+    return _agent
+
 mcp = FastMCP(
     "shirtify_agent_mcp",
     port=10001,
     host="127.0.0.1",
 )

Then update line 42:

-    response = agent.invoke(message, session_id)
+    response = _get_agent().invoke(message, session_id)

42-43: Add error handling for agent.invoke() call.

The agent.invoke() call can raise exceptions (network errors, API failures, etc.). Add try/except to handle failures and return appropriate error responses.

As per coding guidelines.

Apply this diff to add error handling:

     # Invoking our agent
-    response = agent.invoke(message, session_id)
-    return response.get("content", "")
+    try:
+        response = agent.invoke(message, session_id)
+        return response.get("content", "")
+    except Exception as e:
+        logger.exception("Error invoking agent")
+        return f"Error processing message: {str(e)}"
🧹 Nitpick comments (2)
examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py (2)

38-39: Misleading error log when session_id is None.

The error log suggests a problem when session_id is None, but ShirtifyAgent.invoke() generates a new session ID when None is passed. Either remove the error log or change it to an info/debug log stating a new session will be created.

Apply this diff:

     if session_id is None:
-        logger.error("Couldn't extract session id")
+        logger.info("No session_id provided, a new session will be created")

42-43: Consider propagating error status from agent response.

ShirtifyAgent.invoke() returns a Dict with is_error, is_task_complete, and require_user_input fields, but only content is returned. Since MCP tools return strings, you may want to include error indicators in the returned text when is_error=True.

Apply this diff to include error status in the response:

     # Invoking our agent
-    response = agent.invoke(message, session_id)
-    return response.get("content", "")
+    try:
+        response = agent.invoke(message, session_id)
+        content = response.get("content", "")
+        if response.get("is_error", False):
+            logger.warning(f"Agent returned error: {content}")
+        return content
+    except Exception as e:
+        logger.exception("Error invoking agent")
+        return f"Error processing message: {str(e)}"
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 09e8181 and 1524c80.

📒 Files selected for processing (2)
  • examples/mcp/tshirt_store_mcp/__main__.py (1 hunks)
  • examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

**/*.py: Format Python code with Black
Ensure code passes flake8 linting
Run mypy with the repository configuration for static typing
Run Bandit security checks using .bandit.yaml configuration
Use isort import conventions for import ordering
Add type hints to all function signatures
Follow PEP 8 naming (snake_case for variables/functions, PascalCase for classes)
Use try/except around code that may raise exceptions

Files:

  • examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py
  • examples/mcp/tshirt_store_mcp/__main__.py
🧬 Code graph analysis (1)
examples/mcp/tshirt_store_mcp/mcp_agent_wrapper.py (1)
examples/mcp/tshirt_store_mcp/shirtify_agent.py (2)
  • ShirtifyAgent (64-136)
  • invoke (76-82)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: rogue_sanity
  • GitHub Check: codestyle

@yuval-qf yuval-qf enabled auto-merge (squash) October 20, 2025 12:52
@yuval-qf yuval-qf merged commit bc5e988 into main Oct 20, 2025
8 of 9 checks passed
@yuval-qf yuval-qf deleted the feature/FIRE-800-mcp-support branch October 20, 2025 12:55
@coderabbitai coderabbitai bot mentioned this pull request Oct 21, 2025
21 tasks
@drorIvry drorIvry mentioned this pull request Oct 28, 2025
21 tasks
@coderabbitai coderabbitai bot mentioned this pull request Oct 28, 2025
21 tasks
@drorIvry drorIvry mentioned this pull request Nov 10, 2025
21 tasks
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