Current section
Files
Jump to
Current section
Files
src/mcp_toolkit@transport@rpc.erl
-module(mcp_toolkit@transport@rpc).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/mcp_toolkit/transport/rpc.gleam").
-export([process_http_rpc/3, handle_http_rpc/3]).
-file("src/mcp_toolkit/transport/rpc.gleam", 30).
-spec process_http_rpc(
gleam@http@request:request(mist@internal@http:connection()),
mcp_toolkit@core@server:server(),
integer()
) -> gleam@http@response:response(mist:response_data()).
process_http_rpc(Req, Server, Max_body_bytes) ->
case mist:read_body(Req, Max_body_bytes) of
{ok, Read_req} ->
Body = begin
_pipe = gleam@bit_array:to_string(erlang:element(4, Read_req)),
gleam@result:unwrap(_pipe, <<""/utf8>>)
end,
case mcp_toolkit:handle_message(Server, Body) of
{ok, {some, Json}} ->
mcp_toolkit@transport@util:json_response(
200,
gleam@json:to_string(Json)
);
{error, Json} ->
mcp_toolkit@transport@util:json_response(
200,
gleam@json:to_string(Json)
);
{ok, none} ->
_pipe@1 = gleam@http@response:new(204),
gleam@http@response:set_body(
_pipe@1,
{bytes, gleam@bytes_tree:new()}
)
end;
{error, _} ->
mcp_toolkit@transport@util:json_response(
400,
begin
_pipe@2 = gleam@json:object(
[{<<"error"/utf8>>,
gleam@json:string(<<"invalid body"/utf8>>)}]
),
gleam@json:to_string(_pipe@2)
end
)
end.
-file("src/mcp_toolkit/transport/rpc.gleam", 14).
-spec handle_http_rpc(
gleam@http@request:request(mist@internal@http:connection()),
mcp_toolkit@core@server:server(),
integer()
) -> gleam@http@response:response(mist:response_data()).
handle_http_rpc(Req, Server, Max_body_bytes) ->
Allowed = [<<"POST"/utf8>>, <<"OPTIONS"/utf8>>],
case erlang:element(2, Req) of
post ->
process_http_rpc(Req, Server, Max_body_bytes);
options ->
_pipe = gleam@http@response:new(204),
_pipe@1 = gleam@http@response:set_header(
_pipe,
<<"Allow"/utf8>>,
mcp_toolkit@transport@util:string_join(Allowed)
),
gleam@http@response:set_body(
_pipe@1,
{bytes, gleam@bytes_tree:new()}
);
_ ->
mcp_toolkit@transport@util:method_not_allowed(Allowed)
end.