Skip to main content
Glama
sejalpatole

Simple-Tool-Server-Fastapi

by sejalpatole
README.md
# ๐Ÿš€ Simple Tool Server with FastAPI

A lightweight **FastAPI-based tool server** that exposes simple utility functions through REST API endpoints.

This project demonstrates how Python functions can be wrapped behind FastAPI endpoints and accessed through HTTP requests. It also provides a basic foundation for understanding how similar tools can later be exposed through **Model Context Protocol (MCP)**.

---

## ๐Ÿ“Œ Features

* โž• Add two numbers
* ๐Ÿ• Get the current date and time
* ๐Ÿ“ Count words in a given text
* โšก Fast API development using FastAPI
* โœ… Request validation using Pydantic
* ๐Ÿ“ฆ JSON-based API responses
* ๐Ÿ“– Automatic interactive API documentation
* ๐Ÿ”Œ Simple architecture that can be extended into an MCP-based tool server

---

## ๐Ÿ—๏ธ Project Structure

```text
simple-tool-server-fastapi/
โ”‚
โ”œโ”€โ”€ main.py              # FastAPI application and API endpoints
โ”œโ”€โ”€ model.py             # Pydantic request models
โ”œโ”€โ”€ tools.py             # Core utility functions
โ”œโ”€โ”€ requirements.txt     # Project dependencies
โ”œโ”€โ”€ .gitignore           # Files excluded from Git
โ””โ”€โ”€ README.md            # Project documentation
```

---

## ๐Ÿ”„ How It Works

The project follows a simple flow:

```text
Client
   โ†“
FastAPI Endpoint
   โ†“
Python Tool Function
   โ†“
JSON Response
```

For example:

```text
GET /add
   โ†“
add_numbers()
   โ†“
JSON response
```

The same concept can later be extended toward an MCP architecture:

```text
AI Assistant
     โ†“
MCP Client
     โ†“
MCP Server
     โ†“
Python Tools
```

---

## ๐Ÿ› ๏ธ Technologies Used

* **Python**
* **FastAPI**
* **Pydantic**
* **Uvicorn**
* **REST API**
* **JSON**
* **Model Context Protocol (MCP) concepts**

---

## โš™๏ธ Installation

### 1. Clone the repository

```bash
git clone https://github.com/sejalpatole/simple-tool-server-fastapi.git
```

### 2. Navigate to the project

```bash
cd simple-tool-server-fastapi
```

### 3. Create a virtual environment

```bash
python -m venv venv
```

### 4. Activate the virtual environment

#### Windows

```bash
venv\Scripts\activate
```

#### macOS / Linux

```bash
source venv/bin/activate
```

### 5. Install dependencies

```bash
pip install -r requirements.txt
```

---

## โ–ถ๏ธ Running the Application

Start the FastAPI server using Uvicorn:

```bash
uvicorn main:app --reload
```

The server will start at:

```text
http://127.0.0.1:8000
```

---

## ๐Ÿ“– API Documentation

FastAPI automatically provides interactive API documentation.

### Swagger UI

Open:

```text
http://127.0.0.1:8000/docs
```

### ReDoc

Open:

```text
http://127.0.0.1:8000/redoc
```

---

# ๐Ÿ”Œ API Endpoints

## 1. Home

### Endpoint

```http
GET /
```

Returns information about the available endpoints.

### Example Response

```json
{
  "message": "Welcome to the Simple Tool Server",
  "available_endpoints": [
    "/add",
    "/time",
    "/wordcount"
  ]
}
```

---

## 2. Add Two Numbers

### Endpoint

```http
GET /add
```

### Parameters

| Parameter | Type  | Description   |
| --------- | ----- | ------------- |
| `a`       | float | First number  |
| `b`       | float | Second number |

### Example

```text
http://127.0.0.1:8000/add?a=10&b=20
```

### Example Response

```json
{
  "operation": "Addition",
  "a": 10,
  "b": 20,
  "result": 30
}
```

---

## 3. Get Current Time

### Endpoint

```http
GET /time
```

### Example

```text
http://127.0.0.1:8000/time
```

### Example Response

```json
{
  "current_time": "2026-08-20 21:00:00"
}
```

---

## 4. Count Words

### Endpoint

```http
POST /wordcount
```

### Request Body

```json
{
  "text": "FastAPI is easy to use"
}
```

### Example Response

```json
{
  "text": "FastAPI is easy to use",
  "word_count": 5
}
```

---

# ๐Ÿงฉ Project Components

## `main.py`

Contains the FastAPI application and API routes.

It defines endpoints for:

* `/`
* `/add`
* `/time`
* `/wordcount`

---

## `tools.py`

Contains the core Python utility functions:

```python
add_numbers()
get_current_time()
word_count()
```

Keeping the tool logic separate from the API layer makes the project easier to maintain and extend.

---

## `model.py`

Contains the Pydantic model used to validate the `/wordcount` request.

```python
class WordCountRequest(BaseModel):
    text: str
```

This ensures that the API receives the expected request structure.

---

# ๐Ÿงช Testing

The APIs can be tested using:

* Swagger UI
* Postman
* Browser
* cURL
* Any REST API client

Swagger UI is available at:

```text
http://127.0.0.1:8000/docs
```

---

# ๐ŸŒฑ Future Improvements

Possible future extensions include:

* Add more utility tools
* Add authentication
* Add logging
* Add automated tests using Pytest
* Add Docker support
* Add MCP protocol support
* Expose the Python tools through an MCP server
* Add database-backed tools
* Deploy the server to a cloud platform

---

# ๐ŸŽฏ Learning Outcomes

Through this project, the following concepts are demonstrated:

* Building APIs with FastAPI
* Creating GET and POST endpoints
* Request validation with Pydantic
* Separating API logic from business logic
* Working with JSON requests and responses
* Running applications with Uvicorn
* Understanding the foundation of tool-based AI systems
* Understanding the relationship between APIs, tools, and MCP

---

## ๐Ÿ‘ฉโ€๐Ÿ’ป Author

**Sejal Patole**

---

## โญ Acknowledgement

This project was developed as a learning exercise to understand **FastAPI, REST APIs, Python utility tools, and the fundamentals of MCP-based tool architecture**.

If you found this project useful, consider giving the repository a โญ.