Add stdio MCP server for RollCalc
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
"""RollCalc's minimal stdio MCP server."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from rollcalc_mcp_tools import (
|
||||
analyze_transport_capacity_result,
|
||||
calculate_roll_diameter_result,
|
||||
get_article_result,
|
||||
)
|
||||
|
||||
|
||||
def create_server() -> Any:
|
||||
"""Create the stdio-only MCP server after the SDK is installed."""
|
||||
from mcp.server.fastmcp import FastMCP
|
||||
|
||||
server = FastMCP("RollCalc")
|
||||
|
||||
@server.tool()
|
||||
def get_article(
|
||||
article_number: str | None = None,
|
||||
article_name_hint: str | None = None,
|
||||
) -> dict[str, Any]:
|
||||
"""Resolve RollCalc article master data. article_number is text (including leading zeroes); optional article_name_hint preserves existing conflict and ambiguity checks."""
|
||||
return get_article_result(article_number, article_name_hint)
|
||||
|
||||
@server.tool()
|
||||
def calculate_roll_diameter(
|
||||
roll_length_m: float | None = None,
|
||||
core_diameter_mm: float | None = None,
|
||||
thickness_mm: float | None = None,
|
||||
thickness_stddev_mm: float | None = None,
|
||||
article_number: str | None = None,
|
||||
article_name_hint: str | None = None,
|
||||
core_type: str | None = None,
|
||||
width_m: float | None = None,
|
||||
area_weight_g_m2: float | None = None,
|
||||
include_roll_weight: bool = False,
|
||||
category: str | None = None,
|
||||
production_site: str | None = None,
|
||||
) -> dict[str, Any]:
|
||||
"""Calculate roll diameter. roll_length_m is the material length on one roll in m; core_diameter_mm, thickness_mm, and thickness_stddev_mm are mm; width_m is m; and area_weight_g_m2 is g/m². Resolve an article or provide applicable manual material inputs. Set include_roll_weight only to request the existing optional roll_weight_kg result."""
|
||||
return calculate_roll_diameter_result(
|
||||
article_number=article_number,
|
||||
article_name_hint=article_name_hint,
|
||||
roll_length_m=roll_length_m,
|
||||
width_m=width_m,
|
||||
thickness_mm=thickness_mm,
|
||||
thickness_stddev_mm=thickness_stddev_mm,
|
||||
area_weight_g_m2=area_weight_g_m2,
|
||||
core_diameter_mm=core_diameter_mm,
|
||||
core_type=core_type,
|
||||
category=category,
|
||||
production_site=production_site,
|
||||
include_roll_weight=include_roll_weight,
|
||||
)
|
||||
|
||||
@server.tool()
|
||||
def analyze_transport_capacity(
|
||||
roll_diameter_mm: float | None = None,
|
||||
core_diameter_mm: float | None = None,
|
||||
roll_width_m: float | None = None,
|
||||
roll_weight_kg: float | None = None,
|
||||
product_length_m: float | None = None,
|
||||
transport_preset: str | None = None,
|
||||
length_m: float | None = None,
|
||||
width_m: float | None = None,
|
||||
height_m: float | None = None,
|
||||
max_weight_kg: float | None = None,
|
||||
margin_side_m: float | None = None,
|
||||
margin_ceiling_m: float | None = None,
|
||||
) -> dict[str, Any]:
|
||||
"""Analyze transport capacity. roll_diameter_mm and core_diameter_mm are mm; roll_width_m and product_length_m are m; roll_weight_kg and max_weight_kg are kg. product_length_m is the material length represented by one roll and is used for reported m², not placement geometry. Use a shared transport_preset or supply all custom transport dimensions in m and max_weight_kg. roll_weight_kg is consumed exactly as supplied."""
|
||||
return analyze_transport_capacity_result(
|
||||
transport_preset=transport_preset,
|
||||
length_m=length_m,
|
||||
width_m=width_m,
|
||||
height_m=height_m,
|
||||
max_weight_kg=max_weight_kg,
|
||||
margin_side_m=margin_side_m,
|
||||
margin_ceiling_m=margin_ceiling_m,
|
||||
roll_diameter_mm=roll_diameter_mm,
|
||||
core_diameter_mm=core_diameter_mm,
|
||||
roll_width_m=roll_width_m,
|
||||
roll_weight_kg=roll_weight_kg,
|
||||
product_length_m=product_length_m,
|
||||
)
|
||||
|
||||
return server
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
create_server().run(transport="stdio")
|
||||
Reference in New Issue
Block a user