32 lines
1.3 KiB
TypeScript
32 lines
1.3 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js'
|
|
import { FIELDLENS_MCP_OAUTH_SCOPES, captureLimit, createFieldLensMcpServer } from './mcp.js'
|
|
|
|
describe('FieldLens MCP telemetry', () => {
|
|
it('exposes only a bounded read-only diagnostic tool', async () => {
|
|
const server = createFieldLensMcpServer()
|
|
const client = new Client({ name: 'fieldlens-test', version: '1.0.0' })
|
|
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair()
|
|
try {
|
|
await Promise.all([server.connect(serverTransport), client.connect(clientTransport)])
|
|
const { tools } = await client.listTools()
|
|
expect(tools.map((tool) => tool.name)).toEqual(['list_print_captures'])
|
|
expect(tools[0]?.annotations?.readOnlyHint).toBe(true)
|
|
expect(tools[0]?.inputSchema.properties?.limit).toBeDefined()
|
|
expect(tools[0]?._meta?.securitySchemes).toEqual([
|
|
{ type: 'oauth2', scopes: [...FIELDLENS_MCP_OAUTH_SCOPES] },
|
|
])
|
|
} finally {
|
|
await client.close()
|
|
await server.close()
|
|
}
|
|
})
|
|
|
|
it('clamps row count to a hard limit', () => {
|
|
expect(captureLimit(0)).toBe(1)
|
|
expect(captureLimit(500)).toBe(200)
|
|
expect(captureLimit(Number.NaN)).toBe(50)
|
|
})
|
|
})
|