Hello all, thank you for coming, especially today that is such a cold and rainy day. My name is Aitor Pascual, I work here in Celonis in the engineering department, I'm a senior software engineer and I'm going to talk to you a bit about what I learned about MCP servers.
We all like MCP servers, right? We use it in our daily lives at work, maybe for unit testing, debug, bug fixing, or maybe for learning a new framework that is really helpful in that topic.
but not only for that but also in in your personal lives when you are looking for a restaurant around you or when you are having an argument with a very stubborn friend that you want to know who is who is right but they are really
powerful but they have a limitation and they have limitations because they are snapshots of knowledge in a specific moment of time after that moment they 1They know nothing about what happened yesterday or the Jira ticket you created this morning.
And that's where MCPs came into play. MCPs allows LLMs to access data on real time and access maybe private data that is not public so it's not used to train the model. and that way MCPs can answer sorry LLMs can answer different things and new things that didn't come before that couldn't before.
I don't know about you but anytime that a new technology appears without fancy names like LLMs or MCPs it seems like magic it's like okay this is totally game -changing this is only for experts and only a few people really understand and can work with this. But maybe if you go a bit deep you know that it's not that real magic, it's just
in this case MCP servers are just a protocol. The same as we are used to use REST APIs for communication between front -end and back -end, we can see MCP servers like a protocol, a standard for communication between LLMs and servers.
That way as long as the contract is met LLM and the LLM tool can do anything that the developer wants, as simple or as complex as the developer wants. Could be return fixed data or could return data from the database or maybe some external
API, it doesn't matter as long as the return has the proper context, the proper format, it's okay. And also it can be done in many different frameworks, in this case I did it with Node .js because I'm a front -end developer so I'm more comfortable with it, but you can do it with Python if you are a backend developer maybe, it's totally framework agnostic.
Okay and how it looks like let's let's take a look at some basic MCP server tools you can see here that I'm importing maybe I can I can do it bigger
right okay better yeah okay you can see that I am importing two elements from an SDK just MCP server and a standard input output server transport you can forget about this just these are just my tools defined in other files to make it
clearer but with these very few lines you are creating an MCP server just create a new instance of that object with that name version and the template plate of capabilities that you are adding after this.
You can add a tool to that MCP server and therefore to an LLM with just one line, this line.
This is the add -in -add -tool register with three fields, name, definition and implementation okay and how it looks like this is the tool name is
just a string it's okay implementation is just a function an async function because LLMs work asynchronously so it's it should be that way and the definition it has three fields title and description and input schema
1Description is the key here because this is the field that LLMs use to know if that tool is useful for the question that you type in the prompt or not.
If this description is very short or is not clear, it could make LLM to hallucinate or answer wrongly. So it should be short, but it should be clear as well.
And this is the most simple example, it's like the hello world for MCP servers, but
as I said before, it could be as complex as you want, here is an example of using an external API.
You can see that it's the same pattern, name, definition, title, and the implementation is obviously a bit longer, but this is just normal code, it's creating an object, using using it to fetch some info for our external API, and after that we return the same object that's in the other tool, type text, and we return the text.
This obviously could be a bit more complex, you can add extractors to make the LLM understand what are you returning and not pure strings, but it's as simple as that. But now we have two tools and we can use it.
For example, the same as the description is key for knowing which tool is useful, we can also describe the inputs. Because in this tool it doesn't matter if it's A or B, there are two numbers, we are aggregating them so it doesn't matter the order.
but here it matters but because latitude and longitude are really important to know which one and here we can describe every field to use it later okay we have
our MCP this is this doesn't need to be compiled or built or anything this is our MCP and we can use it in a very simple way as well.
We can add it at any many LLMs like cloud desktop, maybe Copilot or Grub.
In my case I try to use it inside Visual Studio Code which is the ID I use and for that being a
local MCP server I needed to download the continue extension which is a tool to use local LLMs and for that I download Ollama as well. Ollama is an application who allows downloading that LLMs into your local machine and that way you can use it.
So okay, this is the continue extension, this is the OLAM application and with that I added the MCP server with three lines to that LLM. It's just a name again, the command and the arguments like any other command in the terminal.
And you can see here in the continue extension panel that is being recognized is the server is here and you can see even the name of the tools the descriptions the arguments so it's really recognizing what I defined in
that previous lines and if I make a change let's say a very small change like instead of at at 2 okay and I save and I go here I need to refresh this file and when I refresh this config file, you can see that Atchu appears.
I did nothing, I didn't do any build or any compilation, it's like seconds and I have my MCP server updated in LLM.
And now I can ask answer for anything, in this case I have a previous conversation here, If you remember, my second tool was about weather API, so if I ask for weather in Turkey, you can see that it's finding a test server, which is the name of my MCP server, and GetWeather, which is the name of my tool, and it's finding that it's useful for what I asked for.
so it's calling it and it's answering and the same for the aggregation of numbers which is using the same pattern okay you can be thinking okay I thought that's okay but that's just really silly examples that's not useful for my daily
basis and probably you are right but how about making a tool that connects to to your personal Jira board and has access to any ticket that you created and can see the status, the assignment, the description or any field that you set.
In this case, let me make it a bit bigger, this is the same pattern that before, we have a tool with this case is more complex the implementation but I can swear you that 99 % of these lines are related with Jira API and not really with MCP
servers code so if I call Jira API you can see that I have a board you can see here. Let's say that our team has a task in progress, which is named Setup Jira Integration in MCP Server.
Its ID is SD2 and it's assigned to Alba López. So I asked for it in another conversation here and okay you can see that we have several tasks because I asked for all the tasks in the board but for example we can see here the SD2
setup Jira integration in progress by Alva López right so this is just an example there are many tools that you can integrate in your LLMs and you can develop your own as well.
For me the key takeaways of this speech is, this is something that is already happening, it's not something, it's new but everything goes fast especially in AI you know, so there
are many companies, big companies that has their own MCP servers already like like Github, Slack, Jira, Figma if you use it, so you can start using it and extending the use of your LLM in your daily basis.
And also you can create your own if you can find any MCP server that matches your needs.
Or you can use it remotely if you publish your MCP or use one that is created externally. internally via HTTP instead of the relative path that I added in the config file you can use HTTP and you can use local models as I said in Ollama but that's a piece of advice.
If you use local models you should keep in mind that LLMs burns your resources in your computer so it's important not to overkill and not to use the biggest LLM model because you are probably not going to need it you don't need chat gpt for running in your machine so you have to find the balance between what you need and what you what to download to avoid hallucinations in in the LLM.
It's noticeable if you have a really small LLM that tools don't really behave well.
You need to have a good model for your needs.