Working with MCP tools

MCP offers a way for servers to implement and expose tools to client. In Glamorous Toolkit, we forward these tools to the LLM integrations offered through chats and providers.

In this example, we will use the server from Working with MCP servers and add its tools to a chat.

First, we need to instantiate the process.

process := (GtExternalProcessBuilder new: 'npx')
		args: {'@modelcontextprotocol/server-filesystem'.
				'~'};
		pipeStdin;
		pipeStdout;
		pipeStderr;
		spawn
  

Then, we can connect to it with a client.

mcpClient := GtLMcpClient new
		transport: (GtLMcpStdioTransport new process: process)
  

Once we have a connection, we can then list or call tools programmatically

mcpClient listTools.

mcpClient callTool: 'list_allowed_directories' withArguments: {} asDictionary
  

or integrate them into our chat environent:

chat := GtLChat new.

mcpClient llmFunctionTools do: [ :aTool | chat addTool: aTool ].

chat sendMarkdown: 'List the directories you are allowed to access.'