Packages

Erlang Model Context Protocol (MCP) SDK

Current section

Files

Jump to
erlmcp examples simple_client.erl
Raw

examples/simple_client.erl

-module(simple_client).
-export([run/0, run_advanced/0]).
-include("erlmcp.hrl").
run() ->
TransportOpts = {stdio, []},
{ok, Client} = erlmcp_client:start_link(TransportOpts),
Capabilities = #mcp_client_capabilities{
roots = #mcp_capability{enabled = true},
sampling = #mcp_capability{enabled = false}
},
{ok, _InitResult} = erlmcp_client:initialize(Client, Capabilities),
{ok, Resources} = erlmcp_client:list_resources(Client),
io:format("Resources: ~p~n", [Resources]),
{ok, Tools} = erlmcp_client:list_tools(Client),
io:format("Tools: ~p~n", [Tools]),
erlmcp_client:stop(Client).
run_advanced() ->
TransportOpts = {stdio, []},
Options = #{strict_mode => false},
{ok, Client} = erlmcp_client:start_link(TransportOpts, Options),
Capabilities = #mcp_client_capabilities{
roots = #mcp_capability{enabled = true},
sampling = #mcp_capability{enabled = true},
experimental = #{<<"customFeature">> => #{<<"enabled">> => true}}
},
{ok, _InitResult} = erlmcp_client:initialize(Client, Capabilities, #{}),
NotificationHandler = fun(Method, Params) ->
io:format("Received notification: ~p with params: ~p~n", [Method, Params])
end,
ok = erlmcp_client:set_notification_handler(Client, <<"resources/updated">>, NotificationHandler),
SamplingHandler = fun(Method, Params) ->
io:format("Received sampling request: ~p with params: ~p~n", [Method, Params])
end,
ok = erlmcp_client:set_sampling_handler(Client, SamplingHandler),
ok = erlmcp_client:subscribe_to_resource(Client, <<"example://resource">>),
BatchResult = erlmcp_client:with_batch(Client, fun(BatchId) ->
{ok, _} = erlmcp_client:send_batch_request(Client, BatchId, <<"resources/list">>, #{}),
{ok, _} = erlmcp_client:send_batch_request(Client, BatchId, <<"tools/list">>, #{}),
{ok, _} = erlmcp_client:send_batch_request(Client, BatchId, <<"prompts/list">>, #{})
end),
io:format("Batch result: ~p~n", [BatchResult]),
{ok, ResourceTemplates} = erlmcp_client:list_resource_templates(Client),
io:format("Resource templates: ~p~n", [ResourceTemplates]),
{ok, PromptWithArgs} = erlmcp_client:get_prompt(Client, <<"example">>, #{<<"arg1">> => <<"value1">>}),
io:format("Prompt with arguments: ~p~n", [PromptWithArgs]),
ok = erlmcp_client:unsubscribe_from_resource(Client, <<"example://resource">>),
erlmcp_client:stop(Client).