Skip to main content
Glama

sympy_mcp_calculus_operation

Perform calculus operations including differentiation, integration, limits, and series expansion on mathematical expressions using symbolic computation.

Instructions

Do calculus operations like diff, integrate, limit, series

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
operationYes
exprYes
symNo
nNo
lowerNo
upperNo
pointNo
directionNo+
series_nNo

Implementation Reference

  • Handler function implementing the core logic for the 'sympy_mcp_calculus_operation' tool, supporting diff, integrate, limit, and series operations using SymPy.
    def calculus_operation(
        operation: CalculusOperation,
        expr: str,
        sym: Optional[str] = None,
        # diff parameters
        n: int = 1,
        # integrate parameters
        lower: Optional[Union[int, float, str]] = None,
        upper: Optional[Union[int, float, str]] = None,
        # limit parameters
        point: Union[int, float, str] = 0,
        direction: Literal["+", "-"] = "+",
        # series parameters
        series_n: int = 6,
    ) -> str:
        """
        Unified interface for calculus operations.
    
        Args:
            operation: The calculus operation to perform. One of:
                - 'diff': Differentiate the expression
                - 'integrate': Integrate the expression
                - 'limit': Compute the limit of the expression
                - 'series': Compute the series expansion of the expression
            expr: The expression to process as a string
            sym: The symbol to differentiate/integrate with respect to, or the variable for limits/series
            n: Order of derivative for 'diff' or order of series expansion for 'series' (default: 1 for 'diff', 6 for 'series')
            lower: Lower limit for definite integral (only for 'integrate')
            upper: Upper limit for definite integral (only for 'integrate')
            point: The point to approach for 'limit' or about which to expand for 'series' (default: 0)
            direction: Direction to approach from for 'limit' ('+' or '-', default: '+')
    
        Returns:
            str: The result of the operation as a string
    
        Examples:
            >>> calculus_operation('diff', 'x**2 + 2*x + 1', 'x')
            '2*x + 2'
            >>> calculus_operation('integrate', '2*x + 2', 'x')
            'x**2 + 2*x'
            >>> calculus_operation('limit', 'sin(x)/x', 'x', point=0)
            '1'
            >>> calculus_operation('series', 'exp(x)', 'x', point=0, n=3)
            '1 + x + x**2/2 + O(x**3)'
        """
        # Convert string to SymPy expression
        expr_obj = sympify(expr)
    
        # Convert symbol string to Symbol if provided
        sym_obj = sympify(sym) if sym is not None else None
    
        if operation == "diff":
            # Handle differentiation
            if sym_obj is None:
                raise ValueError("Symbol must be provided for differentiation")
            return str(_diff(expr_obj, sym_obj, n))
    
        elif operation == "integrate":
            # Handle integration
            if sym_obj is None:
                raise ValueError("Symbol must be provided for integration")
    
            # Check for definite integral
            if lower is not None or upper is not None:
                # Definite integral
                lower_val = sympify(lower) if isinstance(lower, str) else lower
                upper_val = sympify(upper) if isinstance(upper, str) else upper
                return str(_integrate(expr_obj, (sym_obj, lower_val, upper_val)))
            else:
                # Indefinite integral
                return str(_integrate(expr_obj, sym_obj))
    
        elif operation == "limit":
            # Handle limits
            if sym_obj is None:
                raise ValueError("Symbol must be provided for limit")
    
            # Convert point to SymPy expression if it's a string
            point_val = sympify(point) if isinstance(point, str) else point
    
            return str(_limit(expr_obj, sym_obj, point_val, direction))
    
        elif operation == "series":
            # Handle series expansion
            if sym_obj is None:
                raise ValueError("Symbol must be provided for series expansion")
    
            # Convert point to SymPy expression if it's a string
            point_val = sympify(point) if isinstance(point, str) else point
    
            return str(_series(expr_obj, sym_obj, point_val, series_n).removeO())
    
        else:
            valid_ops = get_args(CalculusOperation)
            raise ValueError(f"Invalid operation. Must be one of: {valid_ops}")
  • Registration of the calculus_operation handler as the 'sympy_mcp_calculus_operation' tool in the FastMCP server.
    sympy_mcp.tool(
        calculus_operation,
        description="Do calculus operations like diff, integrate, limit, series",
    )
  • Type definitions used for input schema validation, including CalculusOperation literal types and parameter annotations in the handler.
    from typing import Optional, Literal, get_args, Union
    from sympy import (
        sympify,
        diff as _diff,
        integrate as _integrate,
        limit as _limit,
        series as _series,
    )
    
    # Define operation types for type hints
    CalculusOperation = Literal["diff", "integrate", "limit", "series"]

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/abhiphile/fermat-mcp'

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