Skip to main content
Glama
Jij-Inc

Jij MCP Server

Official
by Jij-Inc

jm_check

Validate code compliance with JijModeling rules to ensure proper implementation and identify potential issues.

Instructions

Check the code for JijModeling rules.

Args:
    code (str): The code to check.

Returns:
    dict: The result of the check.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
codeYes

Implementation Reference

  • Registration of the 'jm_check' MCP tool. Thin handler that invokes the core checker function from jm_checker.
    @mcp.tool()
    def jm_check(code: str) -> dict:
        """
        Check the code for JijModeling rules.
    
        Args:
            code (str): The code to check.
    
        Returns:
            dict: The result of the check.
        """
        return jijmodeling_check(code)
  • Core handler logic for jm_check: detects 'for' loops (forbidden in JijModeling), executes code in PythonREPL to catch errors, returns diagnostic dict.
    def jijmodeling_check(code_string: str) -> dict:
        """
        Pythonコード文字列をJijModelingのルールに従ってチェックする関数
    
        Args:
            code_string (str): 解析対象のPythonコード文字列
    
        Returns:
            dict: チェック結果を含む辞書
        """
        # for文の検出
        for_loop_detected = detect_for_loop(code_string)
        if for_loop_detected:
            return {
                "for_loop_detected": True,
                "message": _jm_for_statement_check,
            }
    
        # PythonREPLを使用してコードを実行し、エラーをキャッチ
        result = PythonREPL.run(code_string)
    
        if result["status"] == "error":
            return {
                "for_loop_detected": False,
                "message": _jm_for_statement_check,
                "error": result["error"],
            }
    
        return {
            "for_loop_detected": False,
            "message": "No for loop detected and no errors found.",
        }
  • Helper function to detect 'for' loops using AST parsing (primary) or regex (fallback).
    def detect_for_loop(code_string):
        """
        Pythonコード文字列からfor文の存在を検出する関数
    
        Args:
            code_string (str): 解析対象のPythonコード文字列
    
        Returns:
            bool: for文が存在する場合はTrue、存在しない場合はFalse
        """
        # 方法1: ASTを使用した解析(構文的に正しいコードの場合)
        try:
            tree = ast.parse(code_string)
            for node in ast.walk(tree):
                if isinstance(node, ast.For):
                    return True
        except SyntaxError:
            # 構文エラーがある場合は正規表現による検出に進む
            pass
    
        # 方法2: 正規表現を使用した解析(ASTが適用できない場合のバックアップ)
        # for文の正規表現パターン: 'for'の後にスペースまたはタブ、その後に変数名、'in'が続く形式
        pattern = r"\bfor\s+[a-zA-Z_][a-zA-Z0-9_]*\s+in\b"
    
        if re.search(pattern, code_string):
            return True
    
        return False
  • Helper string containing guidance and examples on avoiding Python 'for' loops in JijModeling using jm.Element and jm.sum.
    _jm_for_statement_check = """In JijModeling, you cannot use Python loops directly. Instead, you should use the Element objects.
    
    # How to write summation in JijModeling without Python loops.
    
    The wrong code:
    ```python
    objective = 0
    for l in range(n_l):
        for t in range(n_t):
            for p in range(n_p):
                for q in range(n_p):
                    if p != q:
                        objective += ChangeCost[p, q] * Switch[p, q, l, t]
    ```
    
    The correct code:
    ```
    l = jm.Element("l", belongs_to=range(0, n_l))
    t = jm.Element("t", belongs_to=range(0, n_t))
    p = jm.Element("p", belongs_to=range(0, n_p))
    q = jm.Element("q", belongs_to=range(0, n_p))
    objective = jm.sum([l, t, p, (q, p != q)], ChangeCost[p, q] * Switch[p, q, l, t])
    ```
    
    # How to write forall in JijModeling without Python loops.
    
    The wrong code:
    ```python
    for l in range(n_l):
        for t in range(n_t):
            problem += jm.Constraint(
                "SingleProductPerLine",
                jm.sum([X[p, l, t] for p in range(n_p)]) <= 1,
                forall=[]
            )
    ```
    
    The correct code:
    ```python
    l = jm.Element("l", belongs_to=range(0, n_l))
    t = jm.Element("t", belongs_to=range(0, n_t))
    p = jm.Element("p", belongs_to=range(0, n_p))
    problem += jm.Constraint(
        "SingleProductPerLine",
        jm.sum(p, X[p, l, t]) <= 1,
        forall=[l, t]
    )
    ```
    """
  • Input schema: code (str). Output: dict with keys like 'for_loop_detected', 'message', optional 'error'.
    def jm_check(code: str) -> dict:
        """
        Check the code for JijModeling rules.
    
        Args:
            code (str): The code to check.
    
        Returns:
            dict: The result of the check.
        """
        return jijmodeling_check(code)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jij-Inc/Jij-MCP-Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server