Skip to content

Commit 99f2fe3

Browse files
committed
Add MCP sse/stdio transport types
1 parent 93b54e4 commit 99f2fe3

File tree

9 files changed

+125
-3
lines changed

9 files changed

+125
-3
lines changed

common/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ add_library(${TARGET} STATIC
7979
${CMAKE_CURRENT_SOURCE_DIR}/toolcall/handler.hpp
8080
${CMAKE_CURRENT_SOURCE_DIR}/toolcall/mcp_messages.cpp
8181
${CMAKE_CURRENT_SOURCE_DIR}/toolcall/mcp_messages.hpp
82+
${CMAKE_CURRENT_SOURCE_DIR}/toolcall/mcp_transport.hpp
83+
${CMAKE_CURRENT_SOURCE_DIR}/toolcall/mcp_sse_transport.cpp
84+
${CMAKE_CURRENT_SOURCE_DIR}/toolcall/mcp_sse_transport.hpp
85+
${CMAKE_CURRENT_SOURCE_DIR}/toolcall/mcp_stdio_transport.cpp
86+
${CMAKE_CURRENT_SOURCE_DIR}/toolcall/mcp_stdio_transport.hpp
8287
)
8388

8489
if (BUILD_SHARED_LIBS)

common/toolcall/handler.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11

22
#include "handler.hpp"
3+
#include "mcp_sse_transport.hpp"
4+
#include "mcp_stdio_transport.hpp"
35

46
using json = toolcall::json;
57

@@ -97,16 +99,26 @@ toolcall::action toolcall::handler::last_action() const {
9799
return last_action_;
98100
}
99101

100-
toolcall::mcp_impl::mcp_impl(std::string /*server_uri*/, tool_choice_t tool_choice)
101-
: handler_impl(tool_choice)
102+
toolcall::mcp_impl::mcp_impl(std::string server_uri, tool_choice_t tool_choice)
103+
: handler_impl(tool_choice),
104+
transport_(new mcp_sse_transport(server_uri))
102105
{
103-
// TODO
106+
transport_->start();
107+
}
108+
109+
toolcall::mcp_impl::mcp_impl(std::vector<std::string> argv, tool_choice_t tool_choice)
110+
: handler_impl(tool_choice),
111+
transport_(new mcp_stdio_transport(argv))
112+
{
113+
transport_->start();
104114
}
105115

106116
json toolcall::mcp_impl::tool_list() {
117+
// Construct tools/list call and send to transport
107118
return json{};// TODO
108119
}
109120

110121
toolcall::action toolcall::mcp_impl::call(const json & /*request*/, json & /*response*/) {
122+
// Construct tool call and send to transport
111123
return toolcall::ACCEPT; // TODO
112124
}

common/toolcall/handler.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,16 @@ namespace toolcall
9393
json tools_;
9494
};
9595

96+
class mcp_transport;
9697
class mcp_impl : public handler_impl {
9798
public:
9899
mcp_impl(std::string server_uri, tool_choice_t tool_choice);
100+
mcp_impl(std::vector<std::string> argv, tool_choice_t tool_choice);
99101

100102
virtual json tool_list() override;
101103
virtual action call(const json & request, json & response) override;
104+
105+
private:
106+
std::unique_ptr<mcp_transport> transport_;
102107
};
103108
}

common/toolcall/mcp_messages.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <string>
22
#include <optional>
33
#include <vector>
4+
#include <variant>
45
#include "../json.hpp"
56

67
namespace mcp
@@ -212,4 +213,8 @@ namespace mcp
212213
tools_list tools_;
213214
std::string next_cursor_;
214215
};
216+
217+
using message_variant = std::variant<
218+
initialize_request, initialize_response, initialized_notification,
219+
tools_list_request, tools_list_response>;
215220
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
2+
#include "mcp_sse_transport.hpp"
3+
4+
toolcall::mcp_sse_transport::mcp_sse_transport(std::string server_uri)
5+
: server_uri_(std::move(server_uri))
6+
{
7+
}
8+
9+
void toolcall::mcp_sse_transport::start() {
10+
}
11+
12+
void toolcall::mcp_sse_transport::stop() {
13+
}
14+
15+
bool toolcall::mcp_sse_transport::send(const mcp::message_variant & /*request*/) {
16+
return false;
17+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#pragma once
2+
3+
#include "mcp_transport.hpp"
4+
5+
namespace toolcall
6+
{
7+
class mcp_sse_transport : public mcp_transport {
8+
public:
9+
mcp_sse_transport(std::string server_uri);
10+
11+
virtual void start() override;
12+
virtual void stop() override;
13+
virtual bool send(const mcp::message_variant & request) override;
14+
15+
private:
16+
std::string server_uri_;
17+
};
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
2+
#include "mcp_stdio_transport.hpp"
3+
4+
toolcall::mcp_stdio_transport::mcp_stdio_transport(std::vector<std::string> argv)
5+
: argv_(std::move(argv))
6+
{
7+
}
8+
9+
void toolcall::mcp_stdio_transport::start() {
10+
}
11+
12+
void toolcall::mcp_stdio_transport::stop() {
13+
}
14+
15+
bool toolcall::mcp_stdio_transport::send(const mcp::message_variant & /*request*/) {
16+
return false;
17+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#pragma once
2+
3+
#include "mcp_transport.hpp"
4+
5+
#include <string>
6+
#include <vector>
7+
8+
namespace toolcall
9+
{
10+
class mcp_stdio_transport : public mcp_transport {
11+
public:
12+
mcp_stdio_transport(std::vector<std::string> argv);
13+
14+
virtual void start() override;
15+
virtual void stop() override;
16+
virtual bool send(const mcp::message_variant & request) override;
17+
18+
private:
19+
std::vector<std::string> argv_;
20+
};
21+
}

common/toolcall/mcp_transport.hpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#pragma once
2+
3+
#include "mcp_messages.hpp"
4+
5+
namespace toolcall
6+
{
7+
class mcp_transport {
8+
public:
9+
using on_message_callback = std::function<void(const mcp::message_variant &)>;
10+
11+
virtual ~mcp_transport() = default;
12+
virtual void start() = 0;
13+
virtual void stop() = 0;
14+
virtual bool send(const mcp::message_variant & request) = 0;
15+
16+
void on_received(on_message_callback callback) { callback_ = std::move(callback); }
17+
const on_message_callback & on_received() const { return callback_; }
18+
19+
protected:
20+
on_message_callback callback_;
21+
};
22+
}

0 commit comments

Comments
 (0)