Skip to main content
Glama
lalrow

AI Makerspace MCP Demo Server

by lalrow

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/AIE8-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: 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!

✅ 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:

    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:

    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

Available Tools

6 tools
animal_factB

Get a fun fact about a given animal.

ParametersJSON Schema
NameRequiredDescriptionDefault
animalNodog

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?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves a 'fun fact', implying a read-only operation, but doesn't address potential traits like rate limits, error handling, or data sources. This leaves significant gaps in understanding how the tool behaves beyond its basic function.

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 that directly states the tool's function without unnecessary words. It is front-loaded with the core purpose, making it easy to parse and understand quickly, which is ideal for conciseness.

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 (one optional parameter) and the presence of an output schema (which handles return values), the description is adequate but incomplete. It covers the basic purpose but lacks details on usage guidelines, behavioral traits, and parameter specifics, making it minimally viable but with clear gaps in context.

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?

The input schema has 0% description coverage, but the description adds minimal value by implying the 'animal' parameter is used to specify the subject. However, it doesn't clarify acceptable animal names, formats, or constraints, so it only partially compensates for the schema's lack of documentation, aligning with the baseline for moderate coverage gaps.

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 ('fun fact about a given animal'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'science_term' or 'space_fact', which might also provide facts but about different domains, so it doesn't reach the highest score.

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. It doesn't mention sibling tools like 'number_fact' or 'web_search', nor does it specify contexts where animal facts are preferred over other types of information, leaving the agent to infer usage based on the tool name alone.

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

number_factC

Get an interesting fact about a number or date using NumbersAPI.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 states the tool retrieves facts but doesn't describe traits like rate limits, error handling, response format, or whether it's read-only. For a tool with zero annotation coverage, this leaves significant gaps in understanding its 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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, with zero waste, making it easy to parse quickly.

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 (1 parameter) and the presence of an output schema, the description is minimally adequate. However, with no annotations and incomplete parameter semantics, it lacks details on usage, behavior, and input specifics. The output schema may cover return values, but the description doesn't provide enough context for effective tool selection and invocation.

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?

The input schema has 1 parameter with 0% description coverage, and the tool description adds no information about the 'query' parameter. It doesn't explain what the query should contain (e.g., format for numbers or dates), examples, or constraints. With low schema coverage, the description fails to compensate, leaving the parameter undocumented.

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: 'Get an interesting fact about a number or date using NumbersAPI.' It specifies the action ('Get'), resource ('interesting fact'), and scope ('number or date'), though it doesn't explicitly differentiate from siblings like 'animal_fact' or 'science_term' beyond the domain. This is clear but lacks sibling differentiation.

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. It doesn't mention siblings like 'animal_fact' or 'web_search', nor does it specify contexts or exclusions for number/date facts. Usage is implied by the purpose but not explicitly stated.

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.9/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 basic action but lacks behavioral details such as how results are returned (e.g., sum, individual rolls), error handling for invalid notation, or any rate limits. This leaves significant gaps for a tool with parameters.

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 zero waste. It's front-loaded with the core action and resource, making it easy to parse quickly.

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 2 parameters with 0% schema coverage and no annotations, the description is incomplete—it doesn't explain parameter usage or behavioral traits. However, an output schema exists, so return values needn't be described, partially mitigating the gap. This is minimally adequate but with clear deficiencies.

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 'notation' but doesn't explain what dice notation entails (e.g., '2d6+1'), and 'num_rolls' is not addressed at all. This fails to add meaningful semantics beyond the bare parameter names.

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 action ('Roll') and the resource ('dice'), specifying it operates with 'given notation'. It distinguishes from sibling tools that provide facts or web searches, though it doesn't explicitly differentiate from potential dice-rolling alternatives (none exist in the sibling list).

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 is provided on when to use this tool versus alternatives. The description implies usage for dice rolling but doesn't specify contexts (e.g., games, simulations) or exclusions, and sibling tools are unrelated, so no comparative advice is given.

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

science_termB

Explain a science term using Wikipedia summaries.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYes

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?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool 'explains' using 'Wikipedia summaries,' implying a read-only, informational operation, but doesn't detail aspects like rate limits, authentication needs, error handling, or response format. The description is minimal and lacks rich behavioral context beyond the basic action.

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 zero waste: 'Explain a science term using Wikipedia summaries.' It's front-loaded with the core purpose and appropriately sized for the tool's simplicity, making it easy to parse quickly.

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 (one parameter) and the presence of an output schema, the description is somewhat complete but has gaps. It covers the basic action and source, but without annotations or parameter details, it lacks behavioral and usage context. The output schema mitigates the need to explain return values, but overall completeness is minimal.

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?

The description adds no parameter-specific information beyond what the input schema provides. Schema description coverage is 0%, and the description doesn't explain the 'term' parameter's semantics (e.g., format, examples, or constraints). However, with only one parameter, the baseline is 4, but the description fails to compensate for the lack of schema details, resulting in a score of 3.

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: 'Explain a science term using Wikipedia summaries.' It specifies the verb ('explain'), resource ('science term'), and method ('using Wikipedia summaries'). However, it doesn't explicitly differentiate from sibling tools like 'animal_fact' or 'space_fact' beyond the domain focus, which prevents a perfect score.

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. It doesn't mention sibling tools (e.g., 'web_search' for broader queries or 'animal_fact' for biology terms) or specify contexts where it's preferred or inappropriate. Usage is implied by the domain ('science term'), but no explicit when/when-not instructions are given.

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

space_factA

Get NASA's Astronomy Picture of the Day (APOD) with its title, date, description, and image URL.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the tool's function and output format, but does not mention behavioral traits such as rate limits, authentication needs, or potential errors. It adds basic context but lacks depth for a tool with no annotation coverage.

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 that front-loads the key action ('Get NASA's Astronomy Picture of the Day') and lists the returned fields. Every word contributes to understanding the tool's function, with zero waste or redundancy.

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

Completeness4/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 (0 parameters, no annotations, but has an output schema), the description is complete enough for basic use. It specifies what the tool does and what data it returns, which aligns with the presence of an output schema. However, it could benefit from more behavioral context, such as noting it's a read-only API call or potential limitations.

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

Parameters4/5

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

The tool has 0 parameters, and the input schema has 100% description coverage (though empty). The description does not need to compensate for any parameter gaps, as there are none. It appropriately focuses on the tool's purpose and output without unnecessary parameter details.

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

Purpose5/5

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

The description clearly states the specific action ('Get NASA's Astronomy Picture of the Day') and resource (APOD), including the exact data returned (title, date, description, image URL). It effectively distinguishes this tool from sibling tools like 'animal_fact' or 'science_term' by specifying its unique domain and content.

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

Usage Guidelines3/5

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

The description implies usage context by specifying what the tool retrieves (APOD with specific fields), but it does not explicitly state when to use this tool versus alternatives like 'science_term' or 'web_search'. No exclusions or prerequisites are mentioned, leaving usage guidance at an implied level.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv1.0.0
    • Changedanimal_fact1 field changed
      • addedInput schema / title
        Added value: +"animal_factArguments"
    • Changednumber_fact1 field changed
      • addedInput schema / title
        Added value: +"number_factArguments"
    • Changedroll_dice1 field changed
      • addedInput schema / title
        Added value: +"roll_diceArguments"
    • Changedscience_term1 field changed
      • addedInput schema / title
        Added value: +"science_termArguments"
    • Changedspace_fact1 field changed
      • addedInput schema / title
        Added value: +"space_factArguments"
    • Changedweb_search1 field changed
      • addedInput schema / title
        Added value: +"web_searchArguments"
  2. 6 tool updates
    • First observedanimal_fact
    • First observednumber_fact
    • First observedroll_dice
    • First observedscience_term
    • First observedspace_fact
    • First observedweb_search

TDQS

A3.5/5.0
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
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
    C
    quality
    D
    maintenance
    Enables web search capabilities through the Tavily API, allowing users to search the internet for information using natural language queries. Demonstrates MCP server implementation with external API integration.
    3
    -
  • 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
    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
    -
  • F
    license
    C
    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 (Model Context Protocol) server implementation with stdio transport mode.
    4
    -

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/lalrow/AIE8-MCP-Session'

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