Skip to content

Commit 9569ed3

Browse files
committed
mcp: server: add get latest telemetry tool
1 parent fe77800 commit 9569ed3

1 file changed

Lines changed: 18 additions & 0 deletions

File tree

src/enapter/mcp/server.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ def _register_tools(self, mcp: fastmcp.FastMCP) -> None:
4444
name="get_device",
4545
description="Get device by ID.",
4646
)
47+
mcp.tool(
48+
self._get_latest_telemetry,
49+
name="get_latest_telemetry",
50+
description="Get latest telemetry of multiple devices.",
51+
)
4752

4853
async def _list_sites(self) -> list:
4954
async with self._new_http_api_client() as client:
@@ -87,6 +92,19 @@ async def _get_device(
8792
)
8893
return device.to_dto()
8994

95+
async def _get_latest_telemetry(
96+
self, attributes_by_device: dict[str, list[str]]
97+
) -> dict[str, dict[str, str | int | float | None]]:
98+
async with self._new_http_api_client() as client:
99+
telemetry = await client.telemetry.latest(attributes_by_device)
100+
return {
101+
device: {
102+
attribute: datapoint.to_dto() if datapoint is not None else None # type: ignore
103+
for attribute, datapoint in attributes.items()
104+
}
105+
for device, attributes in telemetry.items()
106+
}
107+
90108
def _new_http_api_client(self) -> AsyncContextManager[http.api.Client]:
91109
# FIXME: Client instance gets created for each request.
92110
headers = fastmcp.server.dependencies.get_http_headers()

0 commit comments

Comments
 (0)