Current section
Files
Jump to
Current section
Files
src/mcp_toolkit.gleam
/// MCP Toolkit - Model Context Protocol helper library
///
/// This module re-exports the most commonly used server builder helpers so you
/// can construct an MCP implementation without digging through the internal
/// module layout. For protocol types (`Tool`, `Resource`, etc.) import
/// `mcp_toolkit/core/protocol` directly.
import gleam/dynamic/decode.{type Decoder}
import gleam/json
import gleam/option.{type Option}
import mcp_toolkit/core/protocol
import mcp_toolkit/core/server
import mcp_toolkit/core/transport
/// Server builder pipeline. Combine helpers such as `add_tool` and `build` to
/// produce an MCP server implementation.
pub type Builder =
server.Builder
/// Handle incoming MCP JSON-RPC messages once you've built a server.
pub type Server =
server.Server
/// Transport wrappers for stdio or optional Mist-based HTTP transports.
pub type Transport =
transport.Transport
pub type StdioTransport =
transport.StdioTransport
pub type WebSocketTransport =
transport.WebSocketTransport
pub type SSETransport =
transport.SSETransport
pub type TransportMessage =
transport.TransportMessage
pub type TransportEvent =
transport.TransportEvent
pub type TransportInterface =
transport.TransportInterface
/// Construct a new server builder with the given name and version.
pub fn new(name name: String, version version: String) -> Builder {
server.new(name, version)
}
pub fn description(builder: Builder, description: String) -> Builder {
server.description(builder, description)
}
pub fn instructions(builder: Builder, instructions: String) -> Builder {
server.instructions(builder, instructions)
}
pub fn add_resource(
builder: Builder,
resource: protocol.Resource,
handler: fn(protocol.ReadResourceRequest) ->
Result(protocol.ReadResourceResult, String),
) -> Builder {
server.add_resource(builder, resource, handler)
}
pub fn add_resource_template(
builder: Builder,
template: protocol.ResourceTemplate,
handler: fn(protocol.ReadResourceRequest) ->
Result(protocol.ReadResourceResult, String),
) -> Builder {
server.add_resource_template(builder, template, handler)
}
pub fn add_tool(
builder: Builder,
tool: protocol.Tool,
arguments_decoder: Decoder(arguments),
handler: fn(protocol.CallToolRequest(arguments)) ->
Result(protocol.CallToolResult, String),
) -> Builder {
server.add_tool(builder, tool, arguments_decoder, handler)
}
pub fn add_prompt(
builder: Builder,
prompt: protocol.Prompt,
handler: fn(protocol.GetPromptRequest) ->
Result(protocol.GetPromptResult, String),
) -> Builder {
server.add_prompt(builder, prompt, handler)
}
pub fn resource_capabilities(
builder: Builder,
subscribe: Bool,
list_changed: Bool,
) -> Builder {
server.resource_capabilities(builder, subscribe, list_changed)
}
pub fn prompt_capabilities(builder: Builder, list_changed: Bool) -> Builder {
server.prompt_capabilities(builder, list_changed)
}
pub fn tool_capabilities(builder: Builder, list_changed: Bool) -> Builder {
server.tool_capabilities(builder, list_changed)
}
pub fn enable_logging(builder: Builder) -> Builder {
server.enable_logging(builder)
}
pub fn page_limit(builder: Builder, page_limit: Int) -> Builder {
server.page_limit(builder, page_limit)
}
/// Finalise the builder into a server that is ready to receive messages.
pub fn build(builder: Builder) -> Server {
server.build(builder)
}
/// Decode and execute a JSON-RPC MCP message. Returns a response JSON payload
/// when needed.
pub fn handle_message(
server: Server,
message: String,
) -> Result(Option(json.Json), json.Json) {
server.handle_message(server, message)
}
/// Helper to create a transport implementation for the provided configuration.
pub fn create_transport(
transport_config: Transport,
) -> Result(TransportInterface, String) {
transport.create_transport(transport_config)
}