49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import { MCP } from "@/mcp"
|
|
import { Effect, Layer, Schema } from "effect"
|
|
import { HttpApi, HttpApiBuilder, HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi"
|
|
|
|
export const McpPaths = {
|
|
status: "/mcp",
|
|
} as const
|
|
|
|
export const McpApi = HttpApi.make("mcp")
|
|
.add(
|
|
HttpApiGroup.make("mcp")
|
|
.add(
|
|
HttpApiEndpoint.get("status", McpPaths.status, {
|
|
success: Schema.Record(Schema.String, MCP.Status),
|
|
}).annotateMerge(
|
|
OpenApi.annotations({
|
|
identifier: "mcp.status",
|
|
summary: "Get MCP status",
|
|
description: "Get the status of all Model Context Protocol (MCP) servers.",
|
|
}),
|
|
),
|
|
)
|
|
.annotateMerge(
|
|
OpenApi.annotations({
|
|
title: "mcp",
|
|
description: "Experimental HttpApi MCP routes.",
|
|
}),
|
|
),
|
|
)
|
|
.annotateMerge(
|
|
OpenApi.annotations({
|
|
title: "opencode experimental HttpApi",
|
|
version: "0.0.1",
|
|
description: "Experimental HttpApi surface for selected instance routes.",
|
|
}),
|
|
)
|
|
|
|
export const mcpHandlers = Layer.unwrap(
|
|
Effect.gen(function* () {
|
|
const mcp = yield* MCP.Service
|
|
|
|
const status = Effect.fn("McpHttpApi.status")(function* () {
|
|
return yield* mcp.status()
|
|
})
|
|
|
|
return HttpApiBuilder.group(McpApi, "mcp", (handlers) => handlers.handle("status", status))
|
|
}),
|
|
).pipe(Layer.provide(MCP.defaultLayer))
|