AI Makerspace MCP Demo Server
This MCP (Model Context Protocol) server provides information retrieval and utility tools through AI agents via multiple API integrations:
Web Search - Search the web using the Tavily API
Roll Dice - Simulate dice rolls using standard notation (e.g., "2d6") with customizable roll counts
Number Fact - Get interesting mathematical or date-related facts using the NumbersAPI
Space Fact - Retrieve NASA's Astronomy Picture of the Day with title, date, description, and image URL
Animal Fact - Get fun facts about various animals (defaults to dog)
Science Term - Explain scientific terminology using Wikipedia summaries
The server runs in stdio transport mode and integrates with AI agents like LangGraph with GPT-4 for conversational interfaces.
Mentioned as a CLI tool requirement for Windows installation, allowing repository cloning and version control operations
Provides integration for building AI agent applications that can connect to and interact with MCP server tools through stdio transport
Enables creation of ReAct agents using GPT-4o model that can interact with MCP server tools for web search and other capabilities
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AI Makerspace MCP Demo Serversearch for recent developments in quantum computing"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.uvwinget 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.gitAfter that, you can follow from Step 2. below!
Installation
Clone the repository:
git clone <repository-url> cd <repository-directory>Configure environment variables: Copy the
.env.sampleto.envand add your Tavily API key:TAVILY_API_KEY=your_api_key_here🏗️ 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
Install dependencies:
uv syncSet up environment variables by adding your OpenAI API key to
.env:OPENAI_API_KEY=your_api_key_hereRun 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-4oDemonstrates tool usage with example queries
Available Tools
6 toolsanimal_factB
Get a fun fact about a given animal.
| Name | Required | Description | Default |
|---|---|---|---|
| animal | No | dog |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| notation | Yes | ||
| num_rolls | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
web_searchB
Search the web for information about the given query
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 action (search the web) but lacks details on traits like rate limits, authentication needs, result format, or pagination. This is a significant gap for a tool with potential complexity in web search behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core functionality without waste. It's appropriately sized for a simple tool, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (web search can involve varied results) and the presence of an output schema, the description is minimally adequate. It covers the basic action but lacks context on usage, behavioral traits, or parameter details, relying on the output schema for return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds minimal meaning beyond the input schema, which has 0% description coverage. It implies the 'query' parameter is for web searches but doesn't elaborate on syntax, best practices, or constraints. With one parameter and low schema coverage, the description provides basic context but doesn't fully compensate for the documentation gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Search the web for information about the given query,' which specifies the verb (search) and resource (web). It distinguishes from siblings like animal_fact or roll_dice by focusing on general web search rather than specific fact domains, though it doesn't explicitly differentiate from potential similar search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 science_term for domain-specific queries or general contexts where web search is preferred, leaving usage decisions ambiguous for the agent.
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.
6 tool updates
v1.0.0- Changed
animal_fact1 field changed- added
Input schema / titleAdded value: +"animal_factArguments"
- Changed
number_fact1 field changed- added
Input schema / titleAdded value: +"number_factArguments"
- Changed
roll_dice1 field changed- added
Input schema / titleAdded value: +"roll_diceArguments"
- Changed
science_term1 field changed- added
Input schema / titleAdded value: +"science_termArguments"
- Changed
space_fact1 field changed- added
Input schema / titleAdded value: +"space_factArguments"
- Changed
web_search1 field changed- added
Input schema / titleAdded value: +"web_searchArguments"
6 tool updates
- First observed
animal_fact - First observed
number_fact - First observed
roll_dice - First observed
science_term - First observed
space_fact - First observed
web_search
TDQS
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.
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.
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.
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
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
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
Scrape, crawl and search the web for AI agents via MCP.
Serper MCP — wraps the Serper Google Search API (serper.dev)
Related MCP Servers
- FlicenseCqualityDmaintenanceEnables 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-
- FlicenseNot gradedqualityDmaintenanceEnables 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.-
- FlicenseBqualityDmaintenanceEnables 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-
- FlicenseCqualityDmaintenanceEnables 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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