@@ -14,6 +14,7 @@ class MCPServerConfig:
1414 command : str
1515 args : List [str ]
1616 env : Dict [str , str ]
17+ server_name : Optional [str ] = None
1718 description : Optional [str ] = None
1819 tags : Optional [List [str ]] = None
1920 repo_url : Optional [str ] = None
@@ -28,7 +29,11 @@ def __init__(self, config_path: Optional[str]):
2829 @property
2930 def servers_params (self ) -> List [MCPServerConfig ]:
3031 """Return the list of server parameters."""
31- return list (self ._servers_params .values ())
32+ server_configs = []
33+ for server_name , server_params in self ._servers_params .items ():
34+ server_params .server_name = server_name
35+ server_configs .append (server_params )
36+ return server_configs
3237
3338 def _load_user_config (self ) -> Dict :
3439 """Load user configuration from JSON file."""
@@ -60,70 +65,51 @@ def _load_servers_params(self) -> Dict[str, MCPServerConfig]:
6065 predefined_servers_params = self ._load_predefined_servers_params ()
6166 servers = {}
6267
63- # If we have user configuration, process it normally
64- if config :
65- for mcp_name , server_config in config .items ():
66- package_name = server_config .get ("package_name" )
67-
68- # Check if command and args are configured in user config
69- if "command" in server_config and "args" in server_config :
70- # Use configuration directly from .mcphub.json
71- servers [mcp_name ] = MCPServerConfig (
72- package_name = package_name ,
73- command = server_config ["command" ],
74- args = server_config ["args" ],
75- env = server_config .get ("env" , {}),
76- description = server_config .get ("description" ),
77- tags = server_config .get ("tags" ),
78- repo_url = server_config .get ("repo_url" ),
79- setup_script = server_config .get ("setup_script" )
80- )
81- # Fallback to predefined configuration
82- elif package_name and predefined_servers_params .get ("mcpServers" , {}).get (package_name ):
83- cmd_info = predefined_servers_params ["mcpServers" ][package_name ]
84- servers [mcp_name ] = MCPServerConfig (
85- package_name = package_name ,
86- command = cmd_info .get ("command" ),
87- args = cmd_info .get ("args" , []),
88- env = server_config .get ("env" , {}),
89- description = cmd_info .get ("description" ),
90- tags = cmd_info .get ("tags" ),
91- repo_url = cmd_info .get ("repo_url" ),
92- setup_script = cmd_info .get ("setup_script" )
93- )
94- else :
95- raise ServerConfigNotFoundError (
96- f"Server '{ package_name } ' must either have command and args configured in .mcphub.json "
97- f"or be defined in mcphub_preconfigured_servers.json"
98- )
68+ for mcp_name , server_config in config .items ():
69+ package_name = server_config .get ("package_name" )
70+
71+ # Check if command and args are configured in user config
72+ if "command" in server_config and "args" in server_config :
73+ # Use configuration directly from .mcphub.json
74+ servers [mcp_name ] = MCPServerConfig (
75+ package_name = package_name ,
76+ command = server_config ["command" ],
77+ args = server_config ["args" ],
78+ env = server_config .get ("env" , {}),
79+ description = server_config .get ("description" ),
80+ tags = server_config .get ("tags" ),
81+ repo_url = server_config .get ("repo_url" ),
82+ setup_script = server_config .get ("setup_script" )
83+ )
84+ # Fallback to predefined configuration
85+ elif package_name and predefined_servers_params .get ("mcpServers" , {}).get (package_name ):
86+ cmd_info = predefined_servers_params ["mcpServers" ][package_name ]
87+ servers [mcp_name ] = MCPServerConfig (
88+ package_name = package_name ,
89+ command = cmd_info .get ("command" ),
90+ args = cmd_info .get ("args" , []),
91+ env = server_config .get ("env" , {}),
92+ description = cmd_info .get ("description" ),
93+ tags = cmd_info .get ("tags" ),
94+ repo_url = cmd_info .get ("repo_url" ),
95+ setup_script = cmd_info .get ("setup_script" )
96+ )
97+ else :
98+ raise ServerConfigNotFoundError (
99+ f"Server '{ package_name } ' must either have command and args configured in .mcphub.json "
100+ f"or be defined in mcphub_preconfigured_servers.json"
101+ )
99102
100103 return servers
101104
105+ def list_servers (self ) -> List [MCPServerConfig ]:
106+ return self .servers_params
107+
102108 def retrieve_server_params (self , server_name : str ) -> MCPServerConfig :
103109 # First check in the loaded servers
104110 if server_name in self ._servers_params :
105111 return self ._servers_params [server_name ]
106-
107- # If not found, check if it's a direct reference to a predefined server
108- predefined_servers = self ._load_predefined_servers_params ().get ("mcpServers" , {})
109- if server_name in predefined_servers :
110- # This is a predefined server being referenced directly by its name
111- cmd_info = predefined_servers [server_name ]
112- server_config = MCPServerConfig (
113- package_name = server_name ,
114- command = cmd_info .get ("command" ),
115- args = cmd_info .get ("args" , []),
116- env = cmd_info .get ("env" , {}),
117- description = cmd_info .get ("description" ),
118- tags = cmd_info .get ("tags" ),
119- repo_url = cmd_info .get ("repo_url" ),
120- setup_script = cmd_info .get ("setup_script" )
121- )
122- # Store it in loaded servers for future requests
123- self ._servers_params [server_name ] = server_config
124- return server_config
125-
126- return None
112+ raise ServerConfigNotFoundError (f"Server '{ server_name } ' not found" )
127113
128114 def convert_to_stdio_params (self , server_name : str ) -> StdioServerParameters :
129115 server_params = self .retrieve_server_params (server_name )
0 commit comments