After being introduced to the Model Context Protocol (MCP) at a recent conference, we were eager to experiment with MCP servers firsthand. In our project management workflow, we typically use a script to create new Trello boards and add members at the beginning of each sprint. To streamline this process, we decided to build an AI assistant that automates Trello board creation. This assistant uses an MCP server to invoke an API from a Python module.
Note: This post is designed to help you explore MCP in a few easy steps. To attain a deeper understanding of the concepts follow the hyperlinks throughout the post.
Overview
We designed a workflow that enables users to create Trello boards through natural, conversational interactions with an AI assistant. Our setup consists of four main components:
1. An AI Agent
We used goose, an open-source and extensible AI agent. Having recently discovered goose, we were eager to explore its capabilities, making it a natural choice for our project. One of its key features is tool calling, which allows agents to execute API calls.
2. A locally running model
To run Large Language Models (LLMs) locally, we chose Ollama, a platform that enables users to run LLMs on their own machines. This approach ensures efficient and private model execution without relying on external servers.
3. An MCP server
With an AI agent and a local LLM in place, we integrated an MCP server. It follows a client-server architecture, allowing host applications – such as AI tools, Integrated Development Environments (IDEs), and platforms—to interact with multiple servers seamlessly. These servers can securely access local files, databases, services, and external systems via APIs, providing LLMs with the necessary context to perform tasks effectively.
4. Trello API
The MCP server needs access to Trello API to create a new board. The Trello automation Python module houses a method – create_trello_board to create the board.
Note: For this project, the Trello automation Python module contains both the MCP server and Trello API components, though they are generally separate entities.
Implementation
Here’s how you can build an AI assistant that utilises an MCP server to call API to automate Trello board creation using natural language instructions:
a. Initial setup
1. Clone the project repo:
git clone https://github.com/shivahari/rook.git cd rook |
2. Install dependencies:
python3.10 -m venv <venv_name> # Create virtual environment source <venv_name>/bin/activate # Activate virtual environment pip install -r requirements.txt # Install requirements |
3. Setup env vars:
export TRELLO_KEY=your_api_key export TRELLO_TOKEN=your_api_token |
b. Downloading an Ollama model
Browse the Ollama model library and select a model that supports tooling. Through experimentation, I found that larger models tend to generate more natural and verbose outputs. For this example, I selected qwen2.5:3b.
To download the model, run:
ollama pull qwen2.5:3b |
c. Configure goose to use the downloaded model
Run the following command to configure Goose:
goose configure |
Now follow the steps in configure goose to use Ollama model to complete your configuration.
d. Start a goose session
To launch a goose session and connect it to your extension, use:
goose session --with-extension "python automate_trello.py" |
The --with-extension
flag instructs goose to load the automate_trello
module locally and use the MCP server defined in the module.
Note: You can refer to the External Extensions documentation for more details.
e. Create a new Trello board
Once the session is running, you can use natural language to create a Trello board:
starting session | provider: ollama model: qwen2.5:3b logging to /Users/ai/.config/goose/sessions/TTtanC97.jsonl Goose is running! Enter your instructions, or try asking what goose can do. ( O)> What can you do for me? I can assist with creating a Trello board or list resources from extensions. How may I assist you today? ( O)> Can you help creating a Trello board? Of course! Could you please provide me with the name for your Trello board? ( O)> Let's name it "MCP Board" ─── create_trello_board | i0se8run ────────────────────────── board_name: MCP Board Your Trello board named "MCP Board" has been successfully created. |
How it works
When the user provides a request in natural language, goose interprets the user’s request and prompts for relevant details such as the board name, the request is then executed, and a new Trello board is generated, finally the assistant provides the user with a confirmation message.
The following image illustrates the full workflow:
And just like that, you have an AI assistant that can create Trello boards in just a few steps. Building this example provided us with valuable insights into the capabilities of MCP servers. As we move forward, we plan to explore its functionalities even further.
Advanced ML testing from Qxf2
Qxf2 offers specialized QA for AI/ML models, helping startups validate their models with reliable testing strategies. Our hands-on approach to exploring new tools gives us a deeper understanding of data science and ML engineering workflows, enabling us to design tests that accurately reflect real-world usage. Whether you’re developing your first ML pipeline or scaling an existing one, Qxf2 provides the expertise you need to ensure quality and performance. Reach out to [email protected] to learn more.
My expertise lies in engineering high-quality software. I began my career as a manual tester at Cognizant Technology Solutions, where I worked on a healthcare project. However, due to personal reasons, I eventually left CTS and tried my hand at freelancing as a trainer. During this time, I mentored aspiring engineers on employability skills. As a hobby, I enjoyed exploring various applications and always sought out testing jobs that offered a good balance of exploratory, scripted, and automated testing.
In 2015, I joined Qxf2 and was introduced to Python, my first programming language. Over the years, I have also had the opportunity to learn other languages like JavaScript, Shell scripting (if it can be called a language at all), and more recently, Rust. Despite this exposure, Python remains my favorite language due to its simplicity and the extensive support it offers for libraries.
In my free time, I like to watch football (I support Arsenal Football Club), play football myself, and read books.