calculate_beam_reactions
Calculate reaction forces at supports of a simply supported beam under point loads. Solves moment equilibrium to output left and right reactions, total load, and balance check.
Instructions
Calculate reaction forces for a simply supported beam.
Uses moment equilibrium about supports to find reaction forces.
Args:
beam_length: Beam length in meters
loads: Point loads in Newtons (downward positive) (or JSON string)
load_positions: Positions of loads from left end in meters (or JSON string)
Returns:
Dict containing:
- reaction_left: Reaction force at left support in Newtons
- reaction_right: Reaction force at right support in Newtons
- total_load: Total downward load in Newtons
- is_balanced: Whether reactions balance loads
Example - Beam with two loads:
result = await calculate_beam_reactions(
beam_length=10.0,
loads=[1000, 500],
load_positions=[3.0, 7.0]
)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| beam_length | Yes | ||
| loads | Yes | ||
| load_positions | Yes |
Implementation Reference
- MCP tool handler for calculate_beam_reactions - async function decorated with @tool. Parses JSON string inputs, creates a BeamReactionRequest, calls the core calculation function, and returns the response dict.
@tool # type: ignore[arg-type] async def calculate_beam_reactions( beam_length: float, loads: list[float] | str, load_positions: list[float] | str, ) -> dict: """Calculate reaction forces for a simply supported beam. Uses moment equilibrium about supports to find reaction forces. Args: beam_length: Beam length in meters loads: Point loads in Newtons (downward positive) (or JSON string) load_positions: Positions of loads from left end in meters (or JSON string) Returns: Dict containing: - reaction_left: Reaction force at left support in Newtons - reaction_right: Reaction force at right support in Newtons - total_load: Total downward load in Newtons - is_balanced: Whether reactions balance loads Example - Beam with two loads: result = await calculate_beam_reactions( beam_length=10.0, loads=[1000, 500], load_positions=[3.0, 7.0] ) """ from ..statics import BeamReactionRequest from ..statics import calculate_beam_reactions as calc_beam if isinstance(loads, str): loads = json.loads(loads) if isinstance(load_positions, str): load_positions = json.loads(load_positions) request = BeamReactionRequest( beam_length=beam_length, loads=loads, load_positions=load_positions, ) response = calc_beam(request) return response.model_dump()