FastMCP MCP Server
# FastMCP MCP Server Project 🚀
A Model Context Protocol (MCP) server built with `FastMCP` that provides tools for web scraping and documentation searching.
## Features
- **`fetch_page`**: Fetches any web page and converts it to Markdown using the Jina Reader API.
- **`search_docs`**: A local search engine for the FastMCP documentation using `minsearch`.
- **`add`**: A simple utility tool to add two numbers.
## Prerequisites
- [uv](https://github.com/astral-sh/uv) installed on your system.
- Python 3.10 or higher.
## Installation
1. Clone the repository and navigate to the project directory.
2. The dependencies are managed by `uv`. You can install them by running:
```powershell
uv sync
```
## Usage
### Running the MCP Server
To start the server using the Standard I/O (stdio) transport:
```powershell
uv run main.py
```
### Testing with MCP Inspector
You can use the official MCP Inspector to test the tools in a web interface:
```powershell
npx @modelcontextprotocol/inspector uv run main.py
```
## Project Structure
- `main.py`: The core MCP server implementation.
- `search.py`: Development script for testing `minsearch` indexing.
- `test.py`: Validation script for the `fetch_page` tool.
- `count_data.py`: Example application using the `fetch_page` tool to count word occurrences.
- `fastmcp-main.zip`: Local cache of the FastMCP documentation.
TDQS
Scored across 3 tools
Each tool performs a unique, clearly defined function with no overlap between arithmetic, web fetching, and documentation search. An agent would have no difficulty selecting the appropriate tool.
Tool names are short, lowercase, and mostly follow a verb_noun pattern (fetch_page, search_docs). The lone exception is 'add', which is a bare verb, but it is still clear and consistent in style.
With only 3 tools, the server is on the lighter side, but the small set is still reasonable for a general-purpose utility server. Each tool earns its place, though the collection feels somewhat sparse.
The tools are unrelated to a single coherent domain, making it difficult to assess what complete coverage would look like. There are no obvious lifecycle operations (e.g., update or delete) and the set appears to be a collection of unconnected utilities, leaving significant gaps for any specific purpose.