1
00:00:00,140 --> 00:00:02,899
How do you give your AI assistant superpowers?

2
00:00:03,580 --> 00:00:07,419
We see people extending their AI systems with all kinds of capabilities,

3
00:00:07,960 --> 00:00:10,419
sending emails or adding something to your calendar.

4
00:00:10,960 --> 00:00:12,000
How do they do this?

5
00:00:12,160 --> 00:00:15,860
Well, one answer, it's MCP, the Model Context Protocol,

6
00:00:16,219 --> 00:00:17,420
which is the topic of today.

7
00:00:17,859 --> 00:00:18,660
Let's dive in.

8
00:00:26,000 --> 00:00:27,460
All right. Hi, everybody.

9
00:00:27,460 --> 00:00:30,440
Welcome to Technology Explorations here at Dataminded.

10
00:00:30,720 --> 00:00:33,980
In this series, we have a look at interesting or new technologies

11
00:00:33,980 --> 00:00:35,460
and give you a first look.

12
00:00:36,020 --> 00:00:39,340
Today, we'll be looking into Model Context Protocol or MCP.

13
00:00:39,579 --> 00:00:41,500
And for that, I have invited Pierre.

14
00:00:42,060 --> 00:00:42,660
Welcome, Pierre.

15
00:00:43,659 --> 00:00:44,600
Hello. Hi.

16
00:00:45,019 --> 00:00:49,140
So you explored MCP and today we're going to focus on the very basics of it,

17
00:00:49,340 --> 00:00:53,460
the concepts, a quick demo, and then building our own MCP server.

18
00:00:53,760 --> 00:00:54,540
Yes, exactly.

19
00:00:54,540 --> 00:00:56,740
It's really a one-on-one,

20
00:00:56,740 --> 00:01:00,420
how to get started, where to get started with MCPs.

21
00:01:01,140 --> 00:01:01,600
Okay, cool.

22
00:01:02,000 --> 00:01:03,000
I'd say let's dive in.

23
00:01:03,420 --> 00:01:08,859
I think the first thing to show is, well, what you can do.

24
00:01:09,420 --> 00:01:12,320
So today, we're mostly going to look at Claude Desktop

25
00:01:12,320 --> 00:01:16,840
and how it integrates with MCP servers.

26
00:01:17,680 --> 00:01:20,560
And here, I've got a Claude Desktop,

27
00:01:20,780 --> 00:01:25,659
which is enabled with a file system MCP server.

28
00:01:25,900 --> 00:01:26,659
Wonderful.

29
00:01:26,739 --> 00:01:32,619
And for example, LLM agents, they're not able to perform any actions on my desktop.

30
00:01:32,619 --> 00:01:38,319
But with this file server, I can ask it, for example,

31
00:01:38,579 --> 00:01:42,359
can you list files on my desktop?

32
00:01:45,500 --> 00:01:53,299
And then it will reach out to the MCP server and then it will list a load directories first.

33
00:01:55,799 --> 00:01:56,560
And after that, it will ask me to do a list of files.

34
00:01:56,560 --> 00:01:56,659
And then it will ask me to do a list of files.

35
00:01:56,659 --> 00:01:56,719
And then it will ask me to do a list of files.

36
00:01:56,719 --> 00:02:02,200
And after that, it will list all the files into this directory that it has access to.

37
00:02:02,980 --> 00:02:06,200
And we can see there will be two files, three files,

38
00:02:07,280 --> 00:02:12,580
Hello World, Whispers of Dawn, and just the .DS_Store typical Mac file.

39
00:02:13,919 --> 00:02:18,960
So in this case, the AI agent was able to query your file system

40
00:02:18,960 --> 00:02:21,560
using the tools you provided.

41
00:02:22,240 --> 00:02:22,979
Yep, exactly.

42
00:02:22,979 --> 00:02:23,979
And then we can also...

43
00:02:23,979 --> 00:02:25,979
And then we can also...

44
00:02:25,979 --> 00:02:30,620
Show, for example, what's inside the Hello World file.

45
00:02:33,419 --> 00:02:41,159
And then it will read the file and it will parse the contents from the file.

46
00:02:42,099 --> 00:02:42,579
Okay, nice.

47
00:02:42,919 --> 00:02:46,379
And this is all supplying information to the AI assistant?

48
00:02:46,739 --> 00:02:50,679
Is it also possible to extract or to let it do things?

49
00:02:50,679 --> 00:02:53,679
Because like writing files, this is reading information.

50
00:02:53,979 --> 00:02:56,879
What you just showed, can it also push information out?

51
00:02:57,699 --> 00:02:58,439
Yes, exactly.

52
00:02:59,319 --> 00:03:01,340
We can indeed write a file.

53
00:03:03,339 --> 00:03:08,239
So we can write, for example, a grocery list on my desktop

54
00:03:08,239 --> 00:03:13,899
mentioning that I need to buy onions.

55
00:03:15,539 --> 00:03:16,060
Onions.

56
00:03:16,060 --> 00:03:16,139
Onions.

57
00:03:18,659 --> 00:03:23,060
And then every time you can see the...

58
00:03:23,879 --> 00:03:23,939
This is...

59
00:03:23,939 --> 00:03:23,959
This is...

60
00:03:23,979 --> 00:03:25,259
This is the tool that it uses.

61
00:03:25,699 --> 00:03:29,560
And then it came up with a full grocery list, apparently.

62
00:03:30,659 --> 00:03:33,500
Not just onions, but I have a lot of stuff to buy now.

63
00:03:34,839 --> 00:03:40,259
And then indeed, we can see on my desktop in this that it has access to

64
00:03:40,259 --> 00:03:44,379
the grocery list file with onions and everything else.

65
00:03:44,859 --> 00:03:47,639
When you set up the client, so maybe I can show that as well.

66
00:03:48,659 --> 00:03:52,719
In Claude, how to set it up, you go to Settings,

67
00:03:53,979 --> 00:03:54,979
you go to Developer View,

68
00:03:54,979 --> 00:03:57,379
and then there's this Edit Config,

69
00:03:57,379 --> 00:04:02,739
which points to where the configuration resides.

70
00:04:04,120 --> 00:04:07,039
I actually have that open right here.

71
00:04:07,039 --> 00:04:08,319
So it's this file.

72
00:04:09,159 --> 00:04:12,739
And then the way I set it up, this MCP server that I'm using

73
00:04:12,739 --> 00:04:18,240
is the server file system, which is in the NPX package.

74
00:04:18,740 --> 00:04:23,879
And then this is where I specify where in my desktop,

75
00:04:23,879 --> 00:04:24,980
it has access to.

76
00:04:25,120 --> 00:04:29,819
So it only has access to the MCP demo folder.

77
00:04:30,819 --> 00:04:31,000
Okay.

78
00:04:31,139 --> 00:04:33,860
And so when Claude starts up, it will read this file.

79
00:04:34,019 --> 00:04:36,120
It will see I have an extension,

80
00:04:36,500 --> 00:04:40,180
and the extension is then loaded with a specific argument limiting your scope.

81
00:04:40,860 --> 00:04:42,620
Yes, that is 100% correct.

82
00:04:43,180 --> 00:04:45,500
Anyone can build an MCP server.

83
00:04:45,779 --> 00:04:47,379
It's actually fairly easy.

84
00:04:47,379 --> 00:04:53,839
It all resolves into some key concepts that we can have a look at.

85
00:04:53,839 --> 00:04:56,919
And then once you've got those nailed,

86
00:04:57,159 --> 00:05:00,259
you can get started and a couple lines of code,

87
00:05:00,299 --> 00:05:01,819
and you've got your MCP server ready.

88
00:05:02,739 --> 00:05:03,379
Okay.

89
00:05:03,599 --> 00:05:05,659
So let's dive into the MCP concept.

90
00:05:06,219 --> 00:05:07,120
Yeah, perfect.

91
00:05:07,399 --> 00:05:13,759
So into MCP, the architecture revolves around three main concepts,

92
00:05:14,219 --> 00:05:16,639
the host, the client, and the server.

93
00:05:17,279 --> 00:05:23,639
The host is the entity that will run your large language more.

94
00:05:23,839 --> 00:05:25,839
So the client is the model agent,

95
00:05:25,839 --> 00:05:31,779
and it's also responsible for creating and managing client to server connections.

96
00:05:33,599 --> 00:05:40,079
The client is going to be your bridge between your large language model agent

97
00:05:40,599 --> 00:05:41,500
and your server.

98
00:05:42,979 --> 00:05:48,500
Each connection between the client and the server is a one-to-one connection.

99
00:05:48,599 --> 00:05:52,000
It's a stateful connection, and it happens in three stages,

100
00:05:52,759 --> 00:05:53,759
with the first stage being the server,

101
00:05:53,839 --> 00:05:58,219
then you're having a protocol negotiation or an initialization phase,

102
00:05:58,759 --> 00:06:00,619
then you've got the operation phase,

103
00:06:00,799 --> 00:06:03,939
and then just the shutdown phase.

104
00:06:05,060 --> 00:06:07,299
And then the server, that's the interesting part.

105
00:06:07,399 --> 00:06:08,620
That's the MCP.

106
00:06:09,699 --> 00:06:14,219
That's what provides external capabilities to your agent.

107
00:06:14,719 --> 00:06:15,699
So in what we just saw,

108
00:06:15,779 --> 00:06:20,159
the external capabilities were listing files on my computer,

109
00:06:20,519 --> 00:06:22,179
writing files, reading files.

110
00:06:22,179 --> 00:06:23,319
Those are all things that,

111
00:06:23,439 --> 00:06:23,819
and then a little bit more,

112
00:06:23,879 --> 00:06:26,179
that the agent in itself is not able to do.

113
00:06:26,959 --> 00:06:29,719
But by connecting it to an MCP server,

114
00:06:30,139 --> 00:06:32,959
we add those capabilities.

115
00:06:34,159 --> 00:06:37,959
It exposes those capabilities as MCP primitives.

116
00:06:38,179 --> 00:06:40,239
And there's three types of primitives,

117
00:06:41,120 --> 00:06:43,239
resources, tools, and prompts.

118
00:06:43,319 --> 00:06:46,399
We'll get back to this just in a couple of slides.

119
00:06:47,959 --> 00:06:53,239
And the interesting part of MCP is that it's made to be completely independent

120
00:06:53,239 --> 00:06:53,719
of the client.

121
00:06:53,720 --> 00:06:55,500
It's not independent of the agent itself.

122
00:06:56,100 --> 00:06:58,960
So whether you're using an OpenAI agent,

123
00:06:59,180 --> 00:07:03,320
an Anthropic agent, or Gemini, or whatever agent,

124
00:07:03,660 --> 00:07:05,360
your MCP server does not change.

125
00:07:05,720 --> 00:07:08,080
It stays exactly the same every time.

126
00:07:09,660 --> 00:07:12,820
So as I mentioned, there's three main primitives

127
00:07:12,820 --> 00:07:16,040
that are exposed today.

128
00:07:16,260 --> 00:07:20,240
There's server primitives, so tools, resources, and prompts.

129
00:07:21,680 --> 00:07:23,500
Tools are, I would say,

130
00:07:23,720 --> 00:07:27,240
to the 90-95% of what an MCP server is.

131
00:07:28,500 --> 00:07:34,140
It's all of the actions that the LLM can take on your behalf.

132
00:07:34,600 --> 00:07:36,480
And it's controlled by the model.

133
00:07:36,660 --> 00:07:39,480
So I ask a question to my LLM agent,

134
00:07:39,680 --> 00:07:46,080
and the agent itself decides whether it's going to use a tool or not.

135
00:07:47,380 --> 00:07:48,860
Then you've got resources.

136
00:07:48,860 --> 00:07:52,860
Resources are informations that,

137
00:07:53,100 --> 00:07:53,700
well,

138
00:07:53,720 --> 00:07:57,740
we can provide to the LLM that it then reads.

139
00:07:58,600 --> 00:08:00,920
And it's just extra information,

140
00:08:01,180 --> 00:08:04,340
extra context for it to answer a specific question.

141
00:08:05,620 --> 00:08:08,700
And then prompts, they're just templates.

142
00:08:10,140 --> 00:08:15,200
They're just instructions that you can give to an LLM agent.

143
00:08:15,680 --> 00:08:19,760
And then it just uses them, basically.

144
00:08:20,760 --> 00:08:22,900
So that happens in three stages.

145
00:08:23,720 --> 00:08:25,420
First, you've got the initialization.

146
00:08:25,900 --> 00:08:29,440
That's where the client connects to the server.

147
00:08:29,620 --> 00:08:30,860
The server connects back.

148
00:08:31,240 --> 00:08:34,460
And both exchange their capabilities.

149
00:08:34,460 --> 00:08:38,960
And for now, mostly the server shows capabilities

150
00:08:38,960 --> 00:08:41,180
in the three primitives that I mentioned.

151
00:08:41,820 --> 00:08:45,139
It seems like there's some vision in the future

152
00:08:45,139 --> 00:08:48,040
for the client to expose capabilities as well.

153
00:08:48,840 --> 00:08:51,379
That's not completely ironed out yet.

154
00:08:51,540 --> 00:08:53,460
And then once those capabilities are,

155
00:08:53,720 --> 00:08:56,480
known from both the client and the server,

156
00:08:56,480 --> 00:08:58,980
we enter the operation phase,

157
00:08:58,980 --> 00:09:01,860
where the client can query the server

158
00:09:01,860 --> 00:09:05,100
for specific capabilities that it knows the server can do,

159
00:09:05,100 --> 00:09:06,820
because it knows it learned about them

160
00:09:06,820 --> 00:09:08,240
in the initialization phase.

161
00:09:09,120 --> 00:09:11,480
So in our example that we showed before,

162
00:09:11,480 --> 00:09:16,279
the server exposes a capability that is list files.

163
00:09:16,279 --> 00:09:21,279
And then when I ask my LLM in Claude

164
00:09:21,279 --> 00:09:23,100
to list the files in my desktop,

165
00:09:23,100 --> 00:09:26,040
it can then query the server

166
00:09:26,040 --> 00:09:30,139
to use that capability, that tool.

167
00:09:30,139 --> 00:09:32,639
And then it can list the files.

168
00:09:32,639 --> 00:09:36,700
And then the rest of the connection

169
00:09:36,700 --> 00:09:38,700
is just a disconnect or a shutdown.

170
00:09:38,700 --> 00:09:43,500
And so in this case, in the case of Claude,

171
00:09:43,500 --> 00:09:45,899
you have the host and client bundled together.

172
00:09:45,899 --> 00:09:47,500
If you would write that yourself,

173
00:09:47,500 --> 00:09:49,200
you have to write your own host

174
00:09:49,200 --> 00:09:51,300
and use like an MCP client to connect.

175
00:09:51,300 --> 00:09:52,899
In the case of Claude,

176
00:09:52,899 --> 00:09:55,100
it makes it about a bit more easy

177
00:09:55,100 --> 00:09:56,799
because you can just supply the server

178
00:09:56,799 --> 00:10:00,000
and they have the mechanism to connect those together.

179
00:10:00,000 --> 00:10:02,439
And when you connect that server then,

180
00:10:02,439 --> 00:10:04,319
it means it discovers the tools

181
00:10:04,319 --> 00:10:05,959
and the operations that you offer it,

182
00:10:05,959 --> 00:10:08,000
so it can use them when you prompt.

183
00:10:08,879 --> 00:10:10,480
Yeah, that's indeed.

184
00:10:11,399 --> 00:10:15,100
That's the benefit of using a managed solution

185
00:10:15,100 --> 00:10:17,139
like the Claude Desktop application.

186
00:10:17,139 --> 00:10:21,159
You don't actually have to implement the protocol.

187
00:10:21,159 --> 00:10:22,799
You don't have to implement the handling

188
00:10:22,799 --> 00:10:25,799
of the clients, the managing the connections.

189
00:10:25,799 --> 00:10:29,359
All of that is abstracted away.

190
00:10:29,359 --> 00:10:33,019
We just point in the config to where the server is,

191
00:10:33,019 --> 00:10:36,299
and then the exchange happens seamlessly.

192
00:10:36,299 --> 00:10:37,799
Okay.

193
00:10:37,799 --> 00:10:39,779
And so how does all of this magic happen?

194
00:10:39,779 --> 00:10:44,199
Well, basically it's code behind the scenes.

195
00:10:44,199 --> 00:10:49,199
So tools, they're defined as mcp.tool, resources,

196
00:10:50,500 --> 00:10:51,500
just mcp.resources.

197
00:10:52,799 --> 00:10:55,500
And prompt, mcp.prompt.

198
00:10:57,000 --> 00:11:01,699
And these form the basis of what the server can offer.

199
00:11:01,699 --> 00:11:03,799
That's about everything you need

200
00:11:03,799 --> 00:11:06,240
to get started building your own.

201
00:11:06,240 --> 00:11:11,240
I've created here a very simple mcp server.

202
00:11:13,439 --> 00:11:18,439
So the way it works in Python, it's fairly easy.

203
00:11:18,440 --> 00:11:23,440
There is an SDK to get started with mcp,

204
00:11:26,040 --> 00:11:29,880
which is the mcp SDK.

205
00:11:29,880 --> 00:11:33,800
And then you can just import fast mcp

206
00:11:33,800 --> 00:11:37,600
and create your server as easy as that.

207
00:11:38,680 --> 00:11:41,120
And then you can define your tools,

208
00:11:41,120 --> 00:11:44,800
your resources and prompts.

209
00:11:44,800 --> 00:11:46,680
So here I've got two tools.

210
00:11:46,680 --> 00:11:47,440
One is a mcp.tool.

211
00:11:47,440 --> 00:11:48,240
And the other is a mcp.tool.

212
00:11:48,240 --> 00:11:50,000
One to read a file.

213
00:11:51,500 --> 00:11:53,259
One to write a file.

214
00:11:54,759 --> 00:11:59,419
I've got one resource which is gonna fetch

215
00:11:59,419 --> 00:12:04,419
one of my inventories which is the item inventories.

216
00:12:06,019 --> 00:12:10,580
And then I've got one prompt which is to define

217
00:12:12,379 --> 00:12:14,360
what is an item that needs to be restocked.

218
00:12:14,360 --> 00:12:20,379
restocked. And so a prompt in this case is merely an example prompt or something like a shortcut.

219
00:12:21,560 --> 00:12:29,820
Exactly. It's really just a template. So you can see it as something that you would often ask to

220
00:12:29,820 --> 00:12:34,980
an LLM agent. And instead of typing it over and over and over again, you just define it into a

221
00:12:34,980 --> 00:12:39,840
prompt and then you can just drag and drop it. And then the resources and the tool. So a tool

222
00:12:39,840 --> 00:12:45,300
is meant more like an operation and the resources is basically a piece of information that you want

223
00:12:45,300 --> 00:12:57,879
to have available. Yes, exactly. So the tool is, in my view, usually more dynamic. The read file

224
00:12:57,879 --> 00:13:05,420
tool, for example, I'm not especially telling it which file to read. So it could read any file.

225
00:13:05,860 --> 00:13:09,139
Whereas if I'm looking at the

226
00:13:09,139 --> 00:13:16,899
get stock resource, well, technically it's doing the same thing, except that it always will ever

227
00:13:16,899 --> 00:13:27,539
read the items file. And so once you've got all of that, you can go back to this configuration.

228
00:13:28,600 --> 00:13:37,799
And now, instead of pointing it to the NPX server file system, I will point it to my demo server

229
00:13:37,799 --> 00:13:39,120
and hide it.

230
00:13:39,139 --> 00:13:50,240
How do we run it? We run it through uv. This is where my demo server is. And then the main file is

231
00:13:50,240 --> 00:13:51,419
this one basically.

232
00:13:51,419 --> 00:13:52,480
Yep.

233
00:13:52,480 --> 00:14:01,480
The protocol exchange, as we saw, it happens only one at the initialization phase.

234
00:14:01,480 --> 00:14:07,100
So what this means when you're using Claude Desktop is that right now, I can't see my

235
00:14:07,100 --> 00:14:12,779
demo server, I can't see my tools, I still will always see the file system.

236
00:14:12,779 --> 00:14:18,480
So to force reloading here, we're just going to kill the application and then start it

237
00:14:18,480 --> 00:14:20,560
again.

238
00:14:20,560 --> 00:14:25,420
And now it did the new initialization phase between client and server.

239
00:14:25,420 --> 00:14:31,000
So now I have my demo server with my two tools, read file and write file.

240
00:14:31,480 --> 00:14:39,300
And I also have my prompt here and my resource.

241
00:14:39,300 --> 00:14:45,139
So the tools appear in a separate menu than the resources and then the prompts.

242
00:14:45,139 --> 00:14:50,800
So I assume this is a different way of working when you need to use them.

243
00:14:50,800 --> 00:14:53,840
Yes, indeed.

244
00:14:53,840 --> 00:14:57,800
And I'm not exactly sure why that is.

245
00:14:57,800 --> 00:15:01,460
I think that's something called Anthropic.

246
00:15:01,460 --> 00:15:03,500
It's not really decided.

247
00:15:03,500 --> 00:15:10,360
But indeed, here the resources and the prompts, since you're adding them, they appear next

248
00:15:10,360 --> 00:15:15,519
to everything else that you can add, like upload a file, use a project.

249
00:15:15,519 --> 00:15:22,019
And then the tools, they appear next to all other capabilities like connecting to Gmail

250
00:15:22,019 --> 00:15:24,540
or a drive.

251
00:15:24,540 --> 00:15:31,280
So the tools I can just discuss with my model.

252
00:15:31,460 --> 00:15:40,360
And you can see that it's not just a simple file.

253
00:15:40,360 --> 00:15:45,759
It's a new file on my desktop.

254
00:15:45,759 --> 00:15:51,040
And then it does see write file and read file.

255
00:15:51,040 --> 00:15:52,040
Okay.

256
00:15:52,040 --> 00:15:55,500
It does say there, Claude can make mistakes.

257
00:15:55,500 --> 00:15:56,500
Indeed.

258
00:15:56,500 --> 00:15:59,500
But I think it's just expecting me to give it a content.

259
00:15:59,500 --> 00:16:00,500
I don't know.

260
00:16:00,500 --> 00:16:01,420
I don't know.

261
00:16:01,460 --> 00:16:02,460
Content.

262
00:16:02,460 --> 00:16:03,460
Content.

263
00:16:03,460 --> 00:16:04,460
World.

264
00:16:04,460 --> 00:16:05,460
And then it does it.

265
00:16:05,460 --> 00:16:06,460
Ah, yes.

266
00:16:06,460 --> 00:16:07,460
Now it asks you for permission.

267
00:16:07,460 --> 00:16:10,460
And it also shows you the exact arguments it will pass to your tool.

268
00:16:10,460 --> 00:16:11,460
Okay.

269
00:16:11,460 --> 00:16:27,780
The way I've configured it, it always asks me before using a tool.

270
00:16:27,780 --> 00:16:31,240
You can also configure it so that it just runs the tool seamlessly.

271
00:16:31,240 --> 00:16:38,240
And now if we look here, I have my hello world file.

272
00:16:38,240 --> 00:16:45,240
So it used the tool that we defined here, the write file tool to create this hello world

273
00:16:45,240 --> 00:16:46,240
file.

274
00:16:46,240 --> 00:16:48,240
So that's for tools.

275
00:16:48,240 --> 00:16:54,240
Now for prompts and resources, as I mentioned, you have to select them.

276
00:16:54,240 --> 00:16:59,240
So here I can get the resource.

277
00:16:59,240 --> 00:17:06,240
And then how many mouses do I have?

278
00:17:06,240 --> 00:17:09,240
This gives it the resource.

279
00:17:09,240 --> 00:17:14,240
And in my resource, I said I have two mouses.

280
00:17:14,240 --> 00:17:18,240
So then it reads the file from the resource and it exports it.

281
00:17:18,240 --> 00:17:20,240
Now I'm curious about the prompts.

282
00:17:20,240 --> 00:17:22,240
Unless you have something else on the resources still to show?

283
00:17:22,240 --> 00:17:24,240
No, no, no.

284
00:17:24,240 --> 00:17:27,240
What I can show is...

285
00:17:27,240 --> 00:17:31,240
Well, you can add both at the same time, right?

286
00:17:31,240 --> 00:17:34,240
So here I've got my resource, which is my stock.

287
00:17:34,240 --> 00:17:48,240
And then I've got a prompt, which explains to find the items to restock and the definition

288
00:17:48,240 --> 00:17:51,240
of what I call an item to restock.

289
00:17:51,240 --> 00:17:56,240
And then if I just pass both of these, I don't even have to say anything.

290
00:17:56,240 --> 00:17:57,240
Okay.

291
00:17:57,240 --> 00:17:59,240
It will combine the two.

292
00:17:59,240 --> 00:18:02,240
And then these are the items that I need to restock.

293
00:18:02,240 --> 00:18:04,240
Okay, nice.

294
00:18:04,240 --> 00:18:09,240
So it does know the difference between the two attachments there, even though it's not showing anything.

295
00:18:09,240 --> 00:18:13,240
It does know that one is a prompt and one is a file.

296
00:18:13,240 --> 00:18:23,240
Or is it merely because of the contents that it now just looks at everything as one big flat file and because of that identifies the prompt?

297
00:18:23,240 --> 00:18:26,240
I don't have a definite answer.

298
00:18:26,240 --> 00:18:28,240
I have my best guess.

299
00:18:28,240 --> 00:18:34,240
And my best guess is that it just dumps everything and then reads everything at once.

300
00:18:34,240 --> 00:18:37,240
It doesn't really make a difference between the two.

301
00:18:37,240 --> 00:18:38,240
Yeah.

302
00:18:38,240 --> 00:18:40,240
Okay, cool.

303
00:18:40,240 --> 00:18:47,240
It seems to me that what you showed me, the tools are very useful and can be very flexible.

304
00:18:47,240 --> 00:18:53,240
The resources and prompts, it feels like something that is still not very clear on how to use it.

305
00:18:53,240 --> 00:18:55,240
And also, as you said also in the beginning,

306
00:18:55,240 --> 00:18:59,240
it requires user action to be added into the context.

307
00:18:59,240 --> 00:19:01,240
So it's still a manual action.

308
00:19:01,240 --> 00:19:07,240
The biggest value to me, it seems, the tools which are selected by the agent and are also invoked by the agent.

309
00:19:07,240 --> 00:19:11,240
So it's a more hands-off way of adding information.

310
00:19:11,240 --> 00:19:14,240
Yes, I completely agree with that.

311
00:19:14,240 --> 00:19:21,240
I think currently tools make up 95% of the MCP specification.

312
00:19:21,240 --> 00:19:25,240
Everything that I would want an MCP server to do,

313
00:19:25,240 --> 00:19:27,240
I would do it through tools.

314
00:19:27,240 --> 00:19:28,240
Yeah.

315
00:19:28,240 --> 00:19:36,240
The only exception is maybe prompts sometimes could be useful to just reduce redundancy.

316
00:19:36,240 --> 00:19:41,240
If I know that I always make the same request to my LLM agent,

317
00:19:41,240 --> 00:19:44,240
then I can create a prompt and then it's just a simple drag and drop.

318
00:19:44,240 --> 00:19:45,240
And that's it.

319
00:19:45,240 --> 00:19:46,240
Right.

320
00:19:46,240 --> 00:19:51,240
Can we maybe add something to the code and then see what the developer flow would look like?

321
00:19:51,240 --> 00:19:52,240
We can.

322
00:19:52,240 --> 00:19:53,740
We can completely.

323
00:19:55,240 --> 00:20:03,240
It's as easy as just decorating a function with mcp.tool.

324
00:20:03,240 --> 00:20:08,240
That then creates a new tool.

325
00:20:08,240 --> 00:20:18,240
Then I'm going to add a function to list the files under a certain directory.

326
00:20:18,240 --> 00:20:23,240
And then from my understanding,

327
00:20:23,240 --> 00:20:24,240
I can add a new tool.

328
00:20:24,240 --> 00:20:35,240
Signature is quite important because this is also given to the LLM agent during protocol negotiation.

329
00:20:35,240 --> 00:20:40,240
So that it understands what the tool actually does.

330
00:20:40,240 --> 00:20:41,240
Ah yes.

331
00:20:41,240 --> 00:20:51,240
So the MCP framework translates whatever you do here to the protocol where it offers that tool to the MCP client

332
00:20:51,240 --> 00:20:52,240
with the right signature.

333
00:20:52,240 --> 00:20:56,240
And the right documentation in this case.

334
00:20:56,240 --> 00:20:57,240
Yes indeed.

335
00:20:57,240 --> 00:21:02,240
And then that helps the LLM agent understand what the tool actually does.

336
00:21:02,240 --> 00:21:03,240
Yeah.

337
00:21:03,240 --> 00:21:07,240
So it knows when to select it and also how to structure the arguments.

338
00:21:07,240 --> 00:21:12,240
So I imagine you can also add examples of arguments in this doc string.

339
00:21:12,240 --> 00:21:14,240
Yes, exactly.

340
00:21:14,240 --> 00:21:17,240
We could have it.

341
00:21:17,240 --> 00:21:21,240
So args.txt.

342
00:21:22,240 --> 00:21:33,240
For example, this shows an example of how to call the tool with this directory,

343
00:21:33,240 --> 00:21:37,240
which is where I've got all of my inventory here.

344
00:21:37,240 --> 00:21:41,240
And then I can just...

345
00:21:41,240 --> 00:21:43,240
And just like that, that's a new tool.

346
00:21:43,240 --> 00:21:45,240
And then I can just...

347
00:21:45,240 --> 00:21:47,240
And just like that, that's a new tool.

348
00:21:47,240 --> 00:21:49,240
And then I can just...

349
00:21:49,240 --> 00:21:50,240
And just like that, that's a new tool.

350
00:21:50,240 --> 00:21:51,240
And then I can just...

351
00:21:51,240 --> 00:21:53,240
And just like that, that's a new tool.

352
00:21:53,240 --> 00:22:04,240
Something that's quite cool to show is the developer view or what they call the inspector.

353
00:22:04,240 --> 00:22:19,240
The inspector is basically a graphical user interface where you can see all of my resources,

354
00:22:19,240 --> 00:22:20,240
all of my prompts,

355
00:22:20,240 --> 00:22:21,240
all of my files,

356
00:22:21,240 --> 00:22:23,240
all of my tools.

357
00:22:23,240 --> 00:22:26,240
And then you can try them.

358
00:22:26,240 --> 00:22:35,240
If I want, for example, to use the list file tool that I just created.

359
00:22:35,240 --> 00:22:36,240
Well, I can use it.

360
00:22:36,240 --> 00:22:41,240
This way you can quickly test your function without going through the agent

361
00:22:41,240 --> 00:22:43,240
or without going through Claude in this case,

362
00:22:43,240 --> 00:22:45,240
because you also don't know how reliable that is.

363
00:22:45,240 --> 00:22:50,240
And the development cycle is, I guess, also a bit annoying as you have to restart it all the time.

364
00:22:50,240 --> 00:22:55,240
In this case, you just trigger your functions with the right arguments.

365
00:22:55,240 --> 00:23:02,240
Another thing that I've seen is sometimes Claude will swallow the output.

366
00:23:02,240 --> 00:23:07,240
So if there's a simple, I don't know, indexation error in your tool,

367
00:23:07,240 --> 00:23:11,240
then you don't actually see the indexation error.

368
00:23:11,240 --> 00:23:14,240
Claude just tells you, hey, there's something wrong with the function

369
00:23:14,240 --> 00:23:18,240
and you don't really get a feedback.

370
00:23:18,240 --> 00:23:24,259
So this is a way to actually see the Python error as it would show up.

371
00:23:25,000 --> 00:23:26,940
Yeah, then it will pop up here, of course,

372
00:23:27,000 --> 00:23:28,759
and then you can actually debug your code.

373
00:23:29,539 --> 00:23:30,339
Yeah, exactly.

374
00:23:31,579 --> 00:23:32,960
And is there a limitation?

375
00:23:33,240 --> 00:23:34,819
Because you wrote this function.

376
00:23:34,819 --> 00:23:37,900
Is there a limitation on the arguments and the return type?

377
00:23:42,799 --> 00:23:46,180
Not that I've encountered.

378
00:23:46,180 --> 00:23:51,900
The only thing similar that I've encountered there

379
00:23:51,900 --> 00:23:58,320
is the inputs to a function

380
00:23:58,320 --> 00:24:03,360
where at one point I was trying to create a tool

381
00:24:03,360 --> 00:24:07,279
with a custom class as an input.

382
00:24:08,019 --> 00:24:12,180
And that was a bit tricky to get working

383
00:24:12,500 --> 00:24:16,060
because, well, Claude does not know

384
00:24:16,060 --> 00:24:16,160
how to do that.

385
00:24:16,180 --> 00:24:18,660
How to pass in that argument

386
00:24:18,660 --> 00:24:20,500
for the custom class that you've created.

387
00:24:22,420 --> 00:24:24,460
There might be a way to make it work.

388
00:24:24,560 --> 00:24:25,580
I couldn't.

389
00:24:26,400 --> 00:24:28,539
But yeah, that was maybe a limitation.

390
00:24:29,480 --> 00:24:31,380
There needs to be translation, of course,

391
00:24:31,539 --> 00:24:33,220
to the clause or data clause

392
00:24:33,220 --> 00:24:34,380
or whatever you're using there.

393
00:24:35,580 --> 00:24:36,220
Yeah, indeed.

394
00:24:36,519 --> 00:24:40,860
The simplest is just to pass in strings and lists

395
00:24:40,860 --> 00:24:43,640
and stuff that's like Python native.

396
00:24:43,640 --> 00:24:44,480
Primitive types, yeah.

397
00:24:45,580 --> 00:24:46,160
And also,

398
00:24:46,180 --> 00:24:47,060
the return type,

399
00:24:47,180 --> 00:24:49,299
is it always a list of strings that you use?

400
00:24:50,120 --> 00:24:51,080
So if you do calculations,

401
00:24:51,259 --> 00:24:53,180
I can imagine you would want your function

402
00:24:53,180 --> 00:24:56,180
to be a bit more strict and just return a float.

403
00:24:56,940 --> 00:24:57,980
Would that also work?

404
00:24:58,080 --> 00:24:59,240
Maybe we can test that out.

405
00:24:59,759 --> 00:25:06,019
Would you like to have a tool that returns a float?

406
00:25:06,680 --> 00:25:06,900
Yes.

407
00:25:07,220 --> 00:25:08,060
Naming is difficult,

408
00:25:08,259 --> 00:25:11,600
so that's maybe called return float.

409
00:25:12,519 --> 00:25:13,700
Okay, that's good.

410
00:25:15,400 --> 00:25:16,160
I'm wondering,

411
00:25:16,299 --> 00:25:17,380
if you use the decorator,

412
00:25:17,539 --> 00:25:19,080
if it will use the type hints

413
00:25:19,080 --> 00:25:22,100
in its contract with the MCP server.

414
00:25:22,519 --> 00:25:23,360
Because in the end,

415
00:25:23,720 --> 00:25:25,980
I guess the decorator makes sure

416
00:25:25,980 --> 00:25:29,980
that whatever your server provides as an API

417
00:25:29,980 --> 00:25:33,680
is generated automatically based on these functions

418
00:25:33,680 --> 00:25:35,140
and their signatures.

419
00:25:43,039 --> 00:25:45,000
Oh, no, you do see a return type.

420
00:25:45,100 --> 00:25:45,160
Ah.

421
00:25:45,299 --> 00:25:45,620
It's just,

422
00:25:45,619 --> 00:25:46,919
in a JSON format.

423
00:25:48,479 --> 00:25:51,139
So if you reload this with our float function,

424
00:25:51,239 --> 00:25:53,259
we should be able to see a return type of,

425
00:25:53,759 --> 00:25:55,059
I expect float,

426
00:25:55,159 --> 00:25:56,419
but not sure.

427
00:25:59,899 --> 00:26:02,939
It is a number.

428
00:26:03,259 --> 00:26:03,719
Ah, yes.

429
00:26:03,919 --> 00:26:05,439
Okay, because it's probably

430
00:26:05,439 --> 00:26:07,419
materialized as a JSON.

431
00:26:09,019 --> 00:26:09,719
Yeah, indeed.

432
00:26:09,879 --> 00:26:10,179
In JSON,

433
00:26:10,359 --> 00:26:12,379
so the JSON type would be number in this case.

434
00:26:13,299 --> 00:26:14,399
Yes, probably.

435
00:26:14,399 --> 00:26:14,479
Okay.

436
00:26:14,639 --> 00:26:14,799
The,

437
00:26:14,799 --> 00:26:18,639
the actual protocol is written on top of JSON RPC.

438
00:26:19,240 --> 00:26:19,539
So,

439
00:26:20,079 --> 00:26:20,259
indeed,

440
00:26:20,579 --> 00:26:22,099
I guess

441
00:26:22,099 --> 00:26:26,139
input types and return types are all materialized into JSON.

442
00:26:27,659 --> 00:26:28,960
And then this just returns

443
00:26:28,960 --> 00:26:30,539
my

444
00:26:30,539 --> 00:26:32,059
beautiful float.

445
00:26:32,419 --> 00:26:33,159
It works.

446
00:26:34,359 --> 00:26:36,399
So now our Claude

447
00:26:36,399 --> 00:26:39,839
application should be able to access our new tools.

448
00:26:40,819 --> 00:26:41,019
Indeed.

449
00:26:41,019 --> 00:26:41,559
Given a restart.

450
00:26:42,139 --> 00:26:43,379
Given a restart

451
00:26:43,379 --> 00:26:44,099
of always.

452
00:26:44,099 --> 00:26:44,619
Always.

453
00:26:44,799 --> 00:26:48,940
And a quick check is always to check here.

454
00:26:48,940 --> 00:26:50,079
And then you can see,

455
00:26:50,079 --> 00:26:50,980
indeed,

456
00:26:50,980 --> 00:26:52,419
it has return floats.

457
00:26:52,419 --> 00:26:54,119
It has list files.

458
00:26:54,119 --> 00:26:57,559
Provide a float number.

459
00:27:00,740 --> 00:27:01,740
This is a killer app.

460
00:27:01,740 --> 00:27:03,240
Yeah, indeed.

461
00:27:03,240 --> 00:27:04,940
I'm also very inspired.

462
00:27:04,940 --> 00:27:08,440
And then you can see,

463
00:27:08,440 --> 00:27:08,799
indeed,

464
00:27:08,799 --> 00:27:11,180
it's using the newly created tool.

465
00:27:11,180 --> 00:27:13,799
And it's,

466
00:27:13,799 --> 00:27:14,799
it's,

467
00:27:14,799 --> 00:27:15,879
it has returns.

468
00:27:15,879 --> 00:27:18,119
Very nice Pierre.

469
00:27:18,119 --> 00:27:18,419
Okay.

470
00:27:18,419 --> 00:27:21,319
Looks good.

471
00:27:21,319 --> 00:27:25,639
So we basically extended your MCP server with some custom new functions.

472
00:27:25,639 --> 00:27:28,720
And we explored the three different types.

473
00:27:28,720 --> 00:27:29,940
The tools,

474
00:27:29,940 --> 00:27:31,500
the resources and the prompts.

475
00:27:31,500 --> 00:27:34,419
And we got our Claude Desktop

476
00:27:34,419 --> 00:27:36,779
working with those tools.

477
00:27:36,779 --> 00:27:37,139
Yep.

478
00:27:37,139 --> 00:27:38,460
Indeed.

479
00:27:38,460 --> 00:27:40,919
What about changing your

480
00:27:40,919 --> 00:27:42,980
AI assistant you showed us Claude Desktop.

481
00:27:42,980 --> 00:27:44,220
What if I would use OpenAI.

482
00:27:44,220 --> 00:27:48,160
in AI, if I would use Gemini, are they using the same features?

483
00:27:49,079 --> 00:27:50,000
Have you looked into that?

484
00:27:51,039 --> 00:27:51,200
Right.

485
00:27:51,380 --> 00:27:58,660
So, well, the ultimate goal is indeed that you can use any AI agent.

486
00:27:59,480 --> 00:28:05,140
Now, the AI agent has to implement the MCP protocol.

487
00:28:05,759 --> 00:28:10,680
So it has to know about tools, it has to know about resources, it has to know about prompts.

488
00:28:10,680 --> 00:28:17,400
As far as I know today, the only one that we looked at was OpenAI.

489
00:28:18,259 --> 00:28:20,779
And OpenAI is limited to only tools.

490
00:28:20,940 --> 00:28:26,920
And I think only two types of tools, which is search and fetch, I believe.

491
00:28:28,279 --> 00:28:34,060
So in your MCP server, you can only have two tools, one called search, one called fetch, and that's it.

492
00:28:34,200 --> 00:28:38,140
But again, I believe with all the traction that there is around MCP,

493
00:28:38,400 --> 00:28:40,560
and this is a very fast-moving world,

494
00:28:40,680 --> 00:28:45,840
I believe this is something that we can expect to grow quite recently in the future.

495
00:28:46,680 --> 00:28:49,440
I thought this was a cool part.

496
00:28:49,660 --> 00:28:59,880
There is a lot of MCP server from community that you can connect to, try out.

497
00:29:00,460 --> 00:29:02,720
This is basically all the list.

498
00:29:04,500 --> 00:29:10,140
So you can host these locally on your machine and then give it to Claude

499
00:29:10,140 --> 00:29:10,259
and have all the tools that you need.

500
00:29:10,259 --> 00:29:10,279
And then you can also have all the tools that you need.

501
00:29:10,279 --> 00:29:10,299
And then you can have all the tools that you need.

502
00:29:10,299 --> 00:29:10,380
And then you can have all the tools that you need.

503
00:29:10,380 --> 00:29:10,660
And then you can have all the tools that you need.

504
00:29:10,660 --> 00:29:12,000
And then you can have all these MCP servers there.

505
00:29:12,220 --> 00:29:15,700
And then I can control my Spotify or whatever.

506
00:29:16,480 --> 00:29:18,400
Yes, exactly.

507
00:29:18,680 --> 00:29:19,060
Exactly.

508
00:29:19,400 --> 00:29:21,380
There is indeed one from Spotify.

509
00:29:22,060 --> 00:29:23,480
I've tested this one.

510
00:29:24,160 --> 00:29:25,279
It was quite funny.

511
00:29:25,519 --> 00:29:30,480
So I can just have a conversation with Claude and it's created a playlist.

512
00:29:31,360 --> 00:29:33,080
It's muted my Spotify.

513
00:29:33,600 --> 00:29:37,200
It paused it, played it, can do a bunch of stuff.

514
00:29:38,340 --> 00:29:38,620
Okay.

515
00:29:39,279 --> 00:29:40,640
Something I was wondering.

516
00:29:40,660 --> 00:29:45,519
I'm a heavy user of the voice mode of ChatGPT.

517
00:29:46,140 --> 00:29:47,400
Claude has one as well, I think.

518
00:29:48,080 --> 00:29:51,580
Are these MCP servers also available in that mode?

519
00:29:51,860 --> 00:29:55,440
Because I believe in OpenAI, they don't allow it in that setting.

520
00:29:56,120 --> 00:29:56,940
That's a very good question.

521
00:29:57,100 --> 00:29:59,080
I have never tried this.

522
00:29:59,279 --> 00:30:00,500
Because that's a bit of an annoying thing.

523
00:30:00,560 --> 00:30:02,600
I've experimented with the built-in connectors.

524
00:30:03,140 --> 00:30:05,759
Claude has these as well for Gmail or Google Calendar.

525
00:30:06,420 --> 00:30:07,840
OpenAI has offered them as well.

526
00:30:08,360 --> 00:30:10,220
But they're not available in voice mode.

527
00:30:10,220 --> 00:30:10,279
So I'm not sure.

528
00:30:10,279 --> 00:30:13,160
So when I'm driving, I cannot use them to check my calendar.

529
00:30:14,160 --> 00:30:15,799
It's a first world problem, I know.

530
00:30:16,139 --> 00:30:17,180
But it's still quite annoying.

531
00:30:18,799 --> 00:30:20,059
Yeah, I'm wondering.

532
00:30:21,819 --> 00:30:24,240
Okay, you need to get back to me on that, Pierre.

533
00:30:24,440 --> 00:30:26,240
I will get back to you, yes.

534
00:30:27,299 --> 00:30:29,720
I also see these default connectors.

535
00:30:30,139 --> 00:30:32,399
So they're also available, I guess.

536
00:30:32,539 --> 00:30:34,879
You can search or drive Gmail and Calendar.

537
00:30:34,879 --> 00:30:36,700
But they're only listed as search.

538
00:30:37,519 --> 00:30:40,180
So they're not offering actions yet.

539
00:30:40,279 --> 00:30:44,700
It's only pulling out information and feeding that to your LLM.

540
00:30:44,879 --> 00:30:47,440
It's not doing anything yet at this point.

541
00:30:48,359 --> 00:30:48,940
Yes, indeed.

542
00:30:49,180 --> 00:30:52,819
I'm not sure these are full, complete MCP servers.

543
00:30:53,099 --> 00:30:55,420
I think they're just still quite limited.

544
00:30:56,460 --> 00:31:01,660
What is your basic takeaway in terms of experience?

545
00:31:02,079 --> 00:31:03,220
Positive and negative?

546
00:31:07,519 --> 00:31:08,119
Positive?

547
00:31:08,500 --> 00:31:09,220
I think it's...

548
00:31:10,279 --> 00:31:11,299
I think it's pretty cool.

549
00:31:12,220 --> 00:31:18,059
And I do see some value in repetitive tasks.

550
00:31:18,220 --> 00:31:22,420
I think that's the main thing that I would use an MCP server for.

551
00:31:23,079 --> 00:31:25,379
For repetitive tasks, if you...

552
00:31:25,379 --> 00:31:26,240
I don't know.

553
00:31:26,720 --> 00:31:30,359
If you always go to the same URL to begin the day

554
00:31:30,359 --> 00:31:32,819
and you want to do that through a chat interface,

555
00:31:32,819 --> 00:31:35,379
then I think it can be quite useful.

556
00:31:37,799 --> 00:31:39,819
The less...

557
00:31:40,279 --> 00:31:44,599
The funny part is that it still feels pretty new

558
00:31:44,599 --> 00:31:47,119
and pretty rough around the edges.

559
00:31:47,460 --> 00:31:50,200
So we see that with the resources, the prompts,

560
00:31:50,960 --> 00:31:56,379
even the tools somehow feel a little bit limited

561
00:31:56,379 --> 00:31:59,079
in what they can do.

562
00:32:00,359 --> 00:32:04,359
So I'm really looking forward to how this can evolve

563
00:32:04,359 --> 00:32:09,740
and all of the extra capabilities that we can have from it.

564
00:32:10,279 --> 00:32:11,819
Okay, nice.

565
00:32:12,339 --> 00:32:16,420
So I'm going to try to summarize what we covered today.

566
00:32:16,839 --> 00:32:18,599
So if I understand correctly,

567
00:32:18,839 --> 00:32:21,799
we have looked into MCP, the Model Context Protocol.

568
00:32:22,359 --> 00:32:25,920
It does allow you to extend AI assistance like Claude,

569
00:32:26,059 --> 00:32:28,240
which we looked at with new functionality.

570
00:32:28,799 --> 00:32:32,899
That functionality can be prompts, resources, and tools.

571
00:32:33,539 --> 00:32:35,660
The real power comes from the tools.

572
00:32:36,319 --> 00:32:39,240
And there we have full flexibility in terms of code

573
00:32:39,240 --> 00:32:40,259
that we couldn't put behind.

574
00:32:40,259 --> 00:32:42,900
We explored that in a local setup.

575
00:32:43,440 --> 00:32:47,019
That can be lifted to a more production setup when we host that.

576
00:32:47,119 --> 00:32:49,359
We haven't looked into security or anything like that.

577
00:32:49,460 --> 00:32:52,220
That's a topic for a whole new session, I think.

578
00:32:53,059 --> 00:32:55,259
But you still feel it's still quite clunky.

579
00:32:55,420 --> 00:32:57,279
It's still not entirely stabilized.

580
00:32:57,460 --> 00:32:58,879
The concepts are still evolving.

581
00:32:59,579 --> 00:33:03,160
And then also many questions still around the development cycle

582
00:33:03,160 --> 00:33:04,220
and how it will evolve.

583
00:33:05,220 --> 00:33:07,279
Yes, I think that's a perfect summary.

584
00:33:07,920 --> 00:33:10,240
Maybe a good point is you have a code room,

585
00:33:10,240 --> 00:33:13,519
a repository created with some demo code for people to try out, right?

586
00:33:14,299 --> 00:33:14,940
Yes, indeed.

587
00:33:15,059 --> 00:33:17,039
It's a public repository.

588
00:33:17,440 --> 00:33:18,099
It's here.

589
00:33:18,680 --> 00:33:21,759
There's a quick kickstart.

590
00:33:22,440 --> 00:33:25,660
But as you've seen during the demo, it's very easy.

591
00:33:27,160 --> 00:33:29,759
This is how you set up the Claude Config.

592
00:33:30,500 --> 00:33:31,940
And then that's it.

593
00:33:32,180 --> 00:33:34,519
You can extend it with whatever you want.

594
00:33:34,519 --> 00:33:38,519
Any tool, any resource, any prompt, anything.

595
00:33:39,420 --> 00:33:40,039
Okay, cool.

596
00:33:40,240 --> 00:33:41,559
We'll add the link to the notes.

597
00:33:42,059 --> 00:33:43,380
And I think we can wrap it up here.

598
00:33:43,500 --> 00:33:43,720
Yes.

599
00:33:43,980 --> 00:33:45,660
Well, thank you for hosting.

600
00:33:46,460 --> 00:33:48,640
Thanks for giving us the first MCP 101.

601
00:33:49,180 --> 00:33:50,720
So it was quite insightful.

602
00:33:51,000 --> 00:33:53,819
Good view on the theory and how to bring it into practice.

603
00:33:53,819 --> 00:33:55,259
So thanks a lot, Pierre.

604
00:33:55,779 --> 00:33:57,319
So thanks, everybody, for watching.

605
00:33:57,480 --> 00:34:01,160
I hope we gave you a good overview of the first version of MCP.

606
00:34:01,720 --> 00:34:03,180
And I'll see you next time.

607
00:34:03,539 --> 00:34:03,940
Bye-bye.

608
00:34:04,620 --> 00:34:04,839
Bye.