88from pathlib import Path
99
1010from fastmcp import FastMCP
11+ from smithery .decorators import smithery
1112
1213from databeak ._version import __version__
1314
@@ -51,30 +52,15 @@ def _load_instructions() -> str:
5152# Initialize relaxed JSON schema validation before creating server
5253initialize_relaxed_validation ()
5354
54- # Initialize FastMCP server
55- mcp = FastMCP ("DataBeak" , instructions = _load_instructions (), version = __version__ )
56-
5755# All tools have been migrated to specialized servers
5856# No direct tool registration needed - using server composition pattern
5957
60- # Mount specialized servers
61- mcp .mount (system_server )
62- mcp .mount (io_server )
63- mcp .mount (row_operations_server )
64- mcp .mount (statistics_server )
65- mcp .mount (discovery_server )
66- mcp .mount (validation_server )
67- mcp .mount (transformation_server )
68- mcp .mount (column_server )
69- mcp .mount (column_text_server )
70-
7158
7259# ============================================================================
7360# PROMPTS
7461# ============================================================================
7562
7663
77- @mcp .prompt
7864def analyze_csv_prompt (session_id : str , analysis_type : str = "summary" ) -> str :
7965 """Generate a prompt to analyze CSV data."""
8066 return f"""Please analyze the CSV data in session { session_id } .
@@ -89,7 +75,6 @@ def analyze_csv_prompt(session_id: str, analysis_type: str = "summary") -> str:
8975"""
9076
9177
92- @mcp .prompt
9378def data_cleaning_prompt (session_id : str ) -> str :
9479 """Generate a prompt for data cleaning suggestions."""
9580 return f"""Review the data in session { session_id } and suggest cleaning operations.
@@ -108,6 +93,27 @@ def data_cleaning_prompt(session_id: str) -> str:
10893# ============================================================================
10994
11095
96+ @smithery .server ()
97+ def create_server () -> FastMCP :
98+ """Create and return the FastMCP server instance."""
99+ # Initialize FastMCP server
100+ mcp = FastMCP ("DataBeak" , instructions = _load_instructions (), version = __version__ )
101+ # Mount specialized servers
102+ mcp .mount (system_server )
103+ mcp .mount (io_server )
104+ mcp .mount (row_operations_server )
105+ mcp .mount (statistics_server )
106+ mcp .mount (discovery_server )
107+ mcp .mount (validation_server )
108+ mcp .mount (transformation_server )
109+ mcp .mount (column_server )
110+ mcp .mount (column_text_server )
111+
112+ mcp .prompt ()(analyze_csv_prompt )
113+ mcp .prompt ()(data_cleaning_prompt )
114+ return mcp
115+
116+
111117def main () -> None :
112118 """Start the DataBeak server."""
113119 parser = ArgumentParser (description = "DataBeak" )
@@ -152,7 +158,7 @@ def main() -> None:
152158 run_args ["port" ] = args .port
153159
154160 # Run the server
155- mcp .run (** run_args ) # type: ignore[arg-type]
161+ create_server () .run (** run_args )
156162
157163
158164if __name__ == "__main__" :
0 commit comments