Admin 85a9d0238c
Some checks failed
CI / verify (push) Has been cancelled
CI / print-rust (push) Has been cancelled
fix(mcp): use v1 security scheme compatibility metadata
2026-09-27 09:42:55 +00:00

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)
})
})