Source code for su2_mcp.fastmcp_server

"""FastMCP server factory for SU2 tooling."""

from __future__ import annotations

from importlib.metadata import PackageNotFoundError, version

from mcp.server.fastmcp import FastMCP

from . import tools

APP_NAME = "su2-mcp"
APP_INSTRUCTIONS = (
    "Expose SU2 session lifecycle, configuration, solver, and results "
    "management tools using FastMCP. Create a session first, then operate "
    "on its config, runs, and outputs."
)


def _server_version() -> str:
    """Return the package version, falling back to a development marker."""
    try:
        return version("su2-mcp")
    except PackageNotFoundError:
        return "0.0.0-dev"


[docs] def build_server() -> FastMCP: """Construct a FastMCP server with all SU2 tools registered.""" server = FastMCP( APP_NAME, instructions=f"{APP_INSTRUCTIONS} Version: {_server_version()}.", ) server.add_tool(tools.ping) server.add_tool(tools.create_su2_session) server.add_tool(tools.close_su2_session) server.add_tool(tools.get_session_info) server.add_tool(tools.get_config_text) server.add_tool(tools.parse_config) server.add_tool(tools.update_config_entries) server.add_tool(tools.set_mesh) server.add_tool(tools.generate_mesh_from_step) server.add_tool(tools.analyze_mesh) server.add_tool(tools.run_su2_solver) server.add_tool(tools.generate_deformed_mesh) server.add_tool(tools.get_su2_status) server.add_tool(tools.list_result_files) server.add_tool(tools.get_result_file_base64) server.add_tool(tools.read_history_csv) server.add_tool(tools.sample_surface_solution) return server
__all__ = ["APP_INSTRUCTIONS", "APP_NAME", "build_server"]