Skip to main content
Glama
julie-berlin

Tavily Web Search MCP Server

by julie-berlin
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/AIE7-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:

Built a client that connects with [ExchangeRate-API](https://www.exchangerate-api.com/docs/overview)

See code in this repository and screen capture of it working!

<img src="Screenshot 2025-08-06 at 9.29.51 AM.png" width="599" alt="screen capture of MCP use in Cursor" />

### 🏗️ 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:

See my [GitHub Homework Branch](https://github.com/julie-berlin/aie-cohort-7/tree/feat/homework/13_MCP/ACTIVITY_2.md) for implementation!

TDQS

C2.9/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct and non-overlapping purpose: get_exchange_rate handles currency conversion, roll_dice performs random dice rolls, and web_search conducts internet searches. There is no ambiguity in their functions, making it easy for an agent to select the correct tool for each task.

Naming Consistency3/5

The naming conventions are mixed and not fully consistent. get_exchange_rate and web_search follow a verb_noun pattern, but roll_dice uses a verb_noun format without an underscore. While all names are readable, the deviation in roll_dice breaks a consistent pattern, leading to a moderate score.

Tool Count2/5

With only 3 tools, the count feels too thin for a server labeled 'Tavily Web Search MCP Server', as it suggests a broader scope than just web search. The inclusion of unrelated tools like get_exchange_rate and roll_dice makes the set seem incomplete or mismatched, lacking focus on a cohesive domain.

Completeness2/5

There are significant gaps in the tool surface for the implied domain of web search. While web_search is present, there are no complementary tools for refining searches, handling results, or managing search history. The unrelated tools (exchange rates and dice) do not contribute to a coherent workflow, leaving the core functionality underdeveloped.

Maintenance

ActivityInactive
ResponsivenessNo issues