Skip to main content
Glama
julie-berlin

Tavily Web Search MCP Server

by julie-berlin

AI Makerspace: MCP Session Repo for Session 13

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.

Related MCP server: Tavily Web Search MCP Server

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:

git clone https://AI-Maker-Space/AIE7-MCP-Session.git

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

Installation

  1. Clone the repository:

    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

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

🏗️ Activity #2:

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

You can find details here!

✅ Answer:

See my GitHub Homework Branch for implementation!

Available Tools

3 tools
get_exchange_rateB

Get the latest exchange rates from provided base currency code (ISO 4217) to all other supported currencies

ParametersJSON Schema
NameRequiredDescriptionDefault
currency_codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool fetches 'latest' rates but doesn't specify update frequency, rate limits, error handling, or authentication needs. For a data-fetching tool with zero annotation coverage, this leaves significant gaps in understanding its operational behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that efficiently conveys the core functionality without unnecessary details. It's front-loaded with the main action and includes key specifications (ISO 4217, all supported currencies), making it highly concise and effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (fetching financial data), no annotations, and an output schema present (which likely covers return values), the description is minimally adequate. It specifies the input format and output scope but lacks details on data freshness, error cases, or usage constraints, which could be important for reliable agent operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, with one parameter ('currency_code') undocumented in the schema. The description adds value by specifying the parameter must be in 'ISO 4217' format, which clarifies the expected input beyond the schema's generic string type. However, it doesn't detail supported codes or validation rules, leaving some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('latest exchange rates'), specifying the input (base currency code in ISO 4217 format) and output scope (to all other supported currencies). It doesn't explicitly distinguish from sibling tools like 'roll_dice' or 'web_search', but those are unrelated, so differentiation isn't critical here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, prerequisites, or limitations. While sibling tools are unrelated (e.g., 'roll_dice' for random number generation, 'web_search' for general queries), the description lacks explicit usage context, such as frequency constraints or data source reliability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

roll_diceC

Roll the dice with the given notation

ParametersJSON Schema
NameRequiredDescriptionDefault
notationYes
num_rollsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states the tool rolls dice but doesn't disclose behavioral traits like whether it's deterministic, random, or has any side effects. It mentions 'given notation' but doesn't explain what that entails. More context on how the tool behaves is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action. Every word earns its place, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (simple dice rolling), no annotations, and an output schema exists (which likely explains return values), the description is somewhat complete but lacks details. It covers the basic purpose but misses parameter explanations and behavioral context, making it adequate but with gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It mentions 'given notation' which hints at the 'notation' parameter, but doesn't explain what dice notation is (e.g., '2d6' for two six-sided dice). It doesn't address the 'num_rolls' parameter at all. The description adds minimal meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Roll the dice with the given notation' states the action (roll) and resource (dice), but is vague about what 'given notation' means. It doesn't distinguish from sibling tools (get_exchange_rate, web_search), which is fine as they're unrelated. The purpose is understandable but lacks specificity about dice notation formats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives is provided. The description doesn't mention any context, prerequisites, or exclusions. Since sibling tools are unrelated (currency exchange and web search), this isn't critical, but there's no usage advice at all.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

C2.9/5.0
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
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Enables web search capabilities through the Tavily API. Allows users to search the web for information using natural language queries via the MCP protocol.
    4
    1
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables web search capabilities through the Tavily API, allowing users to search the web for information using natural language queries. Demonstrates MCP server implementation with stdio transport mode for integration with LLM applications.
  • F
    license
    C
    quality
    D
    maintenance
    Enables web search capabilities through the Tavily API. Allows users to search the web for information using natural language queries through the MCP protocol.
    3
  • F
    license
    B
    quality
    D
    maintenance
    Enables web search capabilities through the Tavily API, allowing users to search the internet for information using natural language queries. Serves as a demonstration and educational project for building MCP servers with external API integrations.
    3

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/julie-berlin/pub-aie7-mcp-session'

If you have feedback or need assistance with the MCP directory API, please join our Discord server