1import { assert, describe, it } from "@effect/vitest"
2import * as McpProtocol from "effect/ai/McpProtocol"
3import * as Effect from "effect/Effect"
4import * as BaseProtocolTest from "./McpConformance/BaseProtocolTest.ts"
5import * as LifecycleTest from "./McpConformance/LifecycleTest.ts"
6import * as LoggingTest from "./McpConformance/LoggingTest.ts"
7import * as McpConformance from "./McpConformance/McpConformance.ts"
8import * as PromptsTest from "./McpConformance/PromptsTest.ts"
9import * as ResourcesTest from "./McpConformance/ResourcesTest.ts"
10import * as RootsTest from "./McpConformance/RootsTest.ts"
11import * as SamplingTest from "./McpConformance/SamplingTest.ts"
12import * as ToolsTest from "./McpConformance/ToolsTest.ts"
13import * as TransportsTest from "./McpConformance/TransportsTest.ts"
14import * as UtilitiesTest from "./McpConformance/UtilitiesTest.ts"
15
16const protocol = McpProtocol.v2024_11_05
17const testLayer = McpConformance.layer(protocol)
18
19LifecycleTest.suite(protocol, testLayer)
20BaseProtocolTest.suite(protocol, testLayer)
21BaseProtocolTest.statefulLegacySuite(protocol, testLayer)
22TransportsTest.suite(protocol, testLayer)
23UtilitiesTest.suite(protocol, testLayer)
24UtilitiesTest.statefulLegacySuite(protocol, testLayer)
25LoggingTest.suite(protocol, testLayer)
26ToolsTest.suite(protocol, testLayer)
27ToolsTest.statefulLegacySuite(protocol, testLayer)
28ResourcesTest.suite(protocol, testLayer)
29ResourcesTest.statefulLegacySuite(protocol, testLayer)
30PromptsTest.suite(protocol, testLayer)
31PromptsTest.statefulLegacySuite(protocol, testLayer)
32RootsTest.suite(protocol, testLayer)
33SamplingTest.suite(protocol, testLayer)
34
35it.layer(testLayer)(`Mcp Conformance (${protocol.protocolVersion})`, (it) => {
36 describe("Completion", () => {
37 describe("Capabilities", () => {
38 it.effect("MUST NOT advertise completions", () =>
39 Effect.gen(function*() {
40 const test = yield* McpConformance.McpConformance
41 const initialized = yield* test.initialize({ server: "features" })
42
43 assert.notProperty(initialized.message.result.capabilities, "completions")
44 }))
45 })
46 })
47})