Skip to main content
Glama
lalrow

AI Makerspace MCP Demo Server

by lalrow
README.md
<p align = "center" draggable=”false” ><img src="https://github.com/AI-Maker-Space/LLM-Dev-101/assets/37101144/d1343317-fa2f-41e1-8af1-1dbb18399719" 
     width="200px"
     height="auto"/>
</p>

## <h1 align="center" id="heading">AI Makerspace: MCP Session Repo for Session 13</h1>

This project is a demonstration of the MCP (Model Context Protocol) server, which utilizes the Tavily API for web search capabilities. The server is designed to run in a standard input/output (stdio) transport mode.

## Project Overview

The MCP server is set up to handle web search queries using the Tavily API. It is built with the following key components:

- **TavilyClient**: A client for interacting with the Tavily API to perform web searches.

## Prerequisites

- Python 3.13 or higher
- A valid Tavily API key

## ⚠️NOTE FOR WINDOWS:⚠️

You'll need to install this on the *Windows* side of your OS. 

This will require getting two CLI tool for Powershell, which you can do as follows:

- `winget install astral-sh.uv`
- `winget install --id Git.Git -e --source winget`

After you have those CLI tools, please open Cursor *into Windows*.

Then, you can clone the repository using the following command in your Cursor terminal:

```bash
git clone https://AI-Maker-Space/AIE8-MCP-Session.git
```

After that, you can follow from Step 2. below!

## Installation

1. **Clone the repository**:
   ```bash
   git clone <repository-url>
   cd <repository-directory>
   ```

2. **Configure environment variables**:
Copy the `.env.sample` to `.env` and add your Tavily API key:
   ```
   TAVILY_API_KEY=your_api_key_here
   ```

3. 🏗️ **Add a new tool to your MCP Server** 🏗️

Create a new tool in the `server.py` file, that's it!

## Running the MCP Server

To start the MCP server, you will need to add the following to your MCP Profile in Cursor:

> NOTE: To get to your MCP config. you can use the Command Pallete (CMD/CTRL+SHIFT+P) and select "View: Open MCP Settings" and replace the contents with the JSON blob below.

```
{
    "mcpServers":  {
        "mcp-server": {
            "command" : "uv",
            "args" : ["--directory", "/PATH/TO/REPOSITORY", "run", "server.py"]
        }
    }
}
```

The server will start and listen for commands via standard input/output.

## Usage

The server provides a `web_search` tool that can be used to search the web for information about a given query. This is achieved by calling the `web_search` function with the desired query string.

## Activities: 

There are a few activities for this assignment!

### 🏗️ Activity #1: 

Choose an API that you enjoy using - and build an MCP server for it!  

✅ Answer:
Added few new Apis in server.py.  
Example:- like below    
@mcp.tool()  
def space_fact() -> str:


### 🏗️ Activity #2: 

Build a simple LangGraph application that interacts with your MCP Server.

You can find details [here](https://github.com/langchain-ai/langchain-mcp-adapters)!


✅ Answer:  
This project  includes a simple LangGraph client that connects to the MCP server and uses AI agents to interact with the tools.

### Setup

1. Install dependencies:
   ```bash
   uv sync
   ```

2. Set up environment variables by adding your OpenAI API key to `.env`:
   ```
   OPENAI_API_KEY=your_api_key_here
   ```

3. Run the LangGraph client:
   ```bash
   uv run langgraph_client.py
   ```

### How It Works

The LangGraph client:
- Connects to your MCP server via stdio transport
- Loads all available tools (e.g., `web_search`, `roll_dice`, `number_fact`)
- Creates a ReAct agent using `openai:gpt-4o`
- Demonstrates tool usage with example queries

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose targeting different domains: animal facts, number facts, dice rolling, science terms, space facts, and web search. There is no overlap in functionality, making tool selection straightforward for an agent.

Naming Consistency4/5

Most tools follow a consistent noun_verb or noun_noun pattern (e.g., animal_fact, number_fact, science_term, space_fact), but roll_dice and web_search deviate slightly with verb_noun structures. The naming is still highly readable and predictable overall.

Tool Count5/5

With 6 tools, the server is well-scoped for a demo or utility server, offering a diverse set of fun and informational functions without being overwhelming. Each tool earns its place by covering a unique aspect of trivia, randomness, or information retrieval.

Completeness3/5

The server covers a broad range of trivia and search domains, but there are minor gaps in consistency—for example, some tools fetch facts (animal, number, space) while others perform actions (roll dice, search web). However, as a demo server, it provides a coherent set for exploration without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues