Telemetry stream: GET /api/telemetry + MCP get_telemetry (#16)
CI / build + unit (push) Successful in 21s

This commit was merged in pull request #16.
This commit is contained in:
2026-09-24 23:56:11 +02:00
parent ba5e60daf0
commit 0571c7095e
11 changed files with 286 additions and 6 deletions
+22 -1
View File
@@ -8,6 +8,7 @@ import {
kamilNodeInfo,
nodeInfoFrame,
startBridge,
telemetryPacketFrame,
waitFor,
} from './fake-bridge.js';
import { createMeshMcpServer } from './mcp.controller.js';
@@ -64,7 +65,7 @@ async function connectMcp(svc: MeshService): Promise<{
}
describe('MCP server tools', () => {
it('lists all seven tools with descriptions and input schemas', async () => {
it('lists all eight tools with descriptions and input schemas', async () => {
const env = await connectedService();
try {
const mcp = await connectMcp(env.svc);
@@ -74,6 +75,7 @@ describe('MCP server tools', () => {
'device_info',
'get_messages',
'get_node',
'get_telemetry',
'list_channels',
'list_nodes',
'mesh_status',
@@ -263,6 +265,25 @@ describe('MCP server tools', () => {
),
) as { dir: string; to?: number }[];
expect(msgs[0]).toMatchObject({ dir: 'tx', to: BROADCAST_ADDR }); // newest first
env.sockets[0].write(
telemetryPacketFrame(KAMIL_NUM, {
case: 'deviceMetrics',
value: { batteryLevel: 87 },
}),
);
await waitFor(() => env.svc.telemetry().length === 1);
const tel = JSON.parse(
toolText(
await mcp.client.callTool({ name: 'get_telemetry', arguments: {} }),
),
) as { from: number; kind: string; data: object }[];
expect(tel).toHaveLength(1);
expect(tel[0]).toMatchObject({
from: KAMIL_NUM,
kind: 'deviceMetrics',
});
expect(tel[0].data).toEqual({ batteryLevel: 87 });
} finally {
await mcp.close();
}