Packages
Model Context Protocol (MCP) implementation in Elixir with Phoenix integration
Retired package: Release invalid - Accidental version. Use 0.3.0 instead.
Current section
Files
Jump to
Current section
Files
lib/backplane/mcp_protocol/server/handlers/tasks.ex
defmodule Backplane.McpProtocol.Server.Handlers.Tasks do
@moduledoc false
alias Backplane.McpProtocol.MCP.Error
alias Backplane.McpProtocol.Server.Frame
alias Backplane.McpProtocol.Server.Task
@type session_ctx :: %{
required(:task_store_adapter) => module(),
required(:task_store_name) => term(),
required(:session_id) => String.t()
}
@spec handle_get(map(), Frame.t(), session_ctx()) ::
{:reply, map(), Frame.t()} | {:error, Error.t(), Frame.t()}
def handle_get(%{"params" => %{"taskId" => task_id}}, frame, %{} = ctx) do
case ctx.task_store_adapter.get(ctx.task_store_name, ctx.session_id, task_id) do
{:ok, %Task{} = task} -> {:reply, Task.to_protocol(task), frame}
{:error, :not_found} -> {:error, task_not_found(task_id), frame}
end
end
@spec handle_list_unsupported(Frame.t()) :: {:error, Error.t(), Frame.t()}
def handle_list_unsupported(frame) do
{:error,
Error.protocol(:method_not_found, %{
message: "tasks/list is not supported in this server (no auth context binding)"
}), frame}
end
@spec task_not_found(String.t()) :: Error.t()
def task_not_found(task_id) do
Error.protocol(:invalid_params, %{message: "Failed to retrieve task: Task not found", taskId: task_id})
end
@spec task_expired(String.t()) :: Error.t()
def task_expired(task_id) do
Error.protocol(:invalid_params, %{message: "Failed to retrieve task: Task has expired", taskId: task_id})
end
end