Skip to main content
Glama
rach16

MCP Server for Session 13

by rach16
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**:
Create a `.env` file and add your API keys:
   ```
   TAVILY_API_KEY=your_tavily_api_key_here
   NEWS_API_KEY=your_news_api_key_here
   ```
   
   - Get your Tavily API key at: https://tavily.com/
   - Get your free NewsAPI key at: https://newsapi.org/register

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 several tools for different functionalities:

### Available Tools:

1. **`web_search(query: str)`** - Search the web for information about a given query using Tavily API
2. **`roll_dice(notation: str, num_rolls: int)`** - Roll dice with custom notation (e.g., "2d6", "1d20")
3. **`get_marketing_news(company: str, category: str, num_articles: int)`** - Get latest marketing and business news from companies like ZoomInfo, 6sense, HubSpot, etc.
4. **`get_company_news(company: str, num_articles: int)`** - Get specific news about a particular company

### Example Usage:

- `get_marketing_news()` - Get general marketing tech news
- `get_marketing_news(company="ZoomInfo")` - Get ZoomInfo-specific news
- `get_company_news(company="6sense")` - Get 6sense company news
- `roll_dice("2d6", 3)` - Roll 2 six-sided dice 3 times

## 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!

### 🏗️ Activity #2: 

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

**Files for Activity #2:**
- `langgraph_app.py` - LangGraph application with MCP integration

**To test Activity #2:**
```bash
uv run langgraph_app.py
```

TDQS

C2.4/5.0

Scored across 4 tools

Disambiguation2/5

get_company_news and get_marketing_news have significant overlap, both retrieving news about marketing tech companies, making it unclear which to use. The other tools (roll_dice, web_search) are unrelated, further complicating disambiguation.

Naming Consistency2/5

Two tools follow a 'get_X_news' pattern, but roll_dice and web_search break that pattern, using different verb styles. The naming is inconsistent across the set.

Tool Count2/5

With only 4 tools spanning news, dice rolling, and web search, the count feels arbitrary and too small for a coherent domain. The server appears to bundle unrelated utilities.

Completeness1/5

The coverage is severely incomplete for any clear purpose. If focused on marketing news, dice rolling and web search are extraneous; if general, many common operations are missing. The set lacks a coherent domain.

Maintenance

ActivityInactive
ResponsivenessNo issues