Skip to content

Commit 84fff93

Browse files
committed
show-server-info
1 parent f4183bf commit 84fff93

File tree

2 files changed

+32
-24
lines changed

2 files changed

+32
-24
lines changed

src/mcp/server/fastmcp/server.py

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class Settings(BaseSettings, Generic[LifespanResultT]):
8585
# prompt settings
8686
warn_on_duplicate_prompts: bool = True
8787

88-
show_server_info: bool = True
88+
show_server_info: bool = False
8989

9090
dependencies: list[str] = Field(
9191
default_factory=list,
@@ -157,27 +157,29 @@ def run(self, transport: Literal["stdio", "sse"] = "stdio") -> None:
157157
if transport not in TRANSPORTS.__args__: # type: ignore
158158
raise ValueError(f"Unknown transport: {transport}")
159159

160-
async def run(): await self._run(transport)
161-
anyio.run(run)
160+
anyio.run(self._run, transport)
162161

163162
async def _run(self, transport: Literal["stdio", "sse"]):
164163
if self.settings.show_server_info:
165-
server_info = await self.get_server_info()
166-
logger.debug(f"Server name: {server_info.name}")
167-
logger.debug(f"Server: {server_info.host}:{server_info.port}")
168-
logger.debug(f"Instructions: {server_info.instructions}")
169-
for asset_type, asset_list in server_info.assets.items():
170-
if not asset_list:
171-
continue
172-
logger.debug(f"{asset_type}:")
173-
for asset in asset_list:
174-
logger.debug(f" - {asset.name} - {asset.description}")
175-
logger.debug("Server running...")
164+
await self._log_server_info()
176165
if transport == "stdio":
177166
await self.run_stdio_async()
178167
else: # transport == "sse"
179168
await self.run_sse_async()
180169

170+
async def _log_server_info(self):
171+
server_info = await self.get_server_info()
172+
logger.info(f"Server name: {server_info.name}")
173+
logger.info(f"Server: {server_info.host}:{server_info.port}")
174+
logger.info(f"Instructions: {server_info.instructions}")
175+
for asset_type, asset_list in server_info.assets.items():
176+
if not asset_list:
177+
continue
178+
logger.info(f"{asset_type}:")
179+
for asset in asset_list:
180+
logger.info(f" - {asset.name} - {asset.description}")
181+
logger.info("Server running...")
182+
181183
async def get_server_info(self) -> ServerInfo:
182184
"""
183185
Asynchronously retrieves and returns server information.

src/mcp/types.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
Literal,
77
TypeAlias,
88
TypeVar,
9+
TypedDict,
910
)
1011

1112
from pydantic import BaseModel, ConfigDict, Field, FileUrl, RootModel
@@ -1129,6 +1130,14 @@ class ServerResult(
11291130
):
11301131
pass
11311132

1133+
1134+
class ServerInfoAssets(TypedDict):
1135+
tools: list[Tool]
1136+
prompts: list[Prompt]
1137+
resources: list[Resource]
1138+
resource_templates: list[ResourceTemplate]
1139+
1140+
11321141
class ServerInfo(BaseModel):
11331142
name: str
11341143
host: str
@@ -1140,16 +1149,13 @@ class ServerInfo(BaseModel):
11401149
resource_templates: list[ResourceTemplate]
11411150

11421151
@property
1143-
def assets(self) -> dict[
1144-
str, list[Tool] | list[Prompt] | list[Resource] | list[ResourceTemplate]
1145-
]:
1146-
assets_dict = {
1147-
"tools": self.tools,
1148-
"prompts": self.prompts,
1149-
"resources": self.resources,
1150-
"resource_templates": self.resource_templates
1151-
}
1152-
return assets_dict
1152+
def assets(self) -> ServerInfoAssets:
1153+
return ServerInfoAssets(
1154+
tools=self.tools,
1155+
prompts=self.prompts,
1156+
resources=self.resources,
1157+
resource_templates=self.resource_templates,
1158+
)
11531159

11541160

11551161

0 commit comments

Comments
 (0)