Get information about connected servers.
(self)
| 1157 | # ================================================================ |
| 1158 | |
| 1159 | async def get_server_info(self) -> list[ServerInfo]: |
| 1160 | """Get information about connected servers.""" |
| 1161 | if not self.stream_manager: |
| 1162 | return [] |
| 1163 | |
| 1164 | try: |
| 1165 | servers = [] |
| 1166 | server_id = 0 |
| 1167 | |
| 1168 | http_servers = self._config_loader.http_servers |
| 1169 | sse_servers = self._config_loader.sse_servers |
| 1170 | stdio_servers = self._config_loader.stdio_servers |
| 1171 | all_servers = http_servers + sse_servers + stdio_servers |
| 1172 | |
| 1173 | # Get tool counts per server from StreamManager's tool_to_server_map |
| 1174 | # This is the authoritative source for tool→server mapping |
| 1175 | tool_counts: dict[str, int] = {} |
| 1176 | if hasattr(self.stream_manager, "tool_to_server_map"): |
| 1177 | for server_name in self.stream_manager.tool_to_server_map.values(): |
| 1178 | tool_counts[server_name] = tool_counts.get(server_name, 0) + 1 |
| 1179 | |
| 1180 | for server in all_servers: |
| 1181 | server_name = server.name |
| 1182 | |
| 1183 | # Determine transport type and get transport-specific fields |
| 1184 | from mcp_cli.config.server_models import ( |
| 1185 | HTTPServerConfig, |
| 1186 | STDIOServerConfig, |
| 1187 | ) |
| 1188 | |
| 1189 | command: str | None = None |
| 1190 | url: str | None = None |
| 1191 | args: list[str] = [] |
| 1192 | env: dict[str, str] = {} |
| 1193 | |
| 1194 | if server in http_servers: |
| 1195 | transport = TransportType.HTTP |
| 1196 | if isinstance(server, HTTPServerConfig): |
| 1197 | url = server.url |
| 1198 | elif server in sse_servers: |
| 1199 | transport = TransportType.SSE |
| 1200 | if isinstance(server, HTTPServerConfig): |
| 1201 | url = server.url |
| 1202 | else: |
| 1203 | transport = TransportType.STDIO |
| 1204 | if isinstance(server, STDIOServerConfig): |
| 1205 | command = server.command |
| 1206 | args = list(server.args) |
| 1207 | env = dict(server.env) |
| 1208 | |
| 1209 | servers.append( |
| 1210 | ServerInfo( |
| 1211 | id=server_id, |
| 1212 | name=server_name, |
| 1213 | status=ServerStatus.CONNECTED.value, |
| 1214 | tool_count=tool_counts.get(server_name, 0), |
| 1215 | namespace=server_name, |
| 1216 | enabled=not server.disabled, |