Skip to main content
Glama
AdamNone

Crypto Sentinel Agent

by AdamNone
README.md
# DLT, FastAPI, and FastMCP Integration

This project is a demonstration of how to integrate `dlt` (data load tool), `FastAPI`, and `FastMCP` to create a simple cryptocurrency market analysis agent.

## Project Overview

The project consists of three main components:

1.  **Data Pipeline:** A `dlt` pipeline that ingests cryptocurrency market data from the CoinGecko API and loads it into a local DuckDB database.
2.  **API Backend:** A `FastAPI` application that exposes the data from the DuckDB database through a REST API.
3.  **Agent:** A `FastMCP` agent that provides tools to interact with the API, refresh the data, and perform market analysis.

## How it Works

```
┌───────────────────┐      ┌──────────────────┐      ┌──────────────────┐
│   CoinGecko API   │ ◄─── │   dlt Pipeline   │ ───► │  DuckDB Database │
└───────────────────┘      └──────────────────┘      └──────────────────┘
                                                          ▲
                                                          │
                                                          │
┌───────────────────┐      ┌──────────────────┐      ┌────┴─────┐
│      User         │ ◄─── │  FastMCP Agent   │ ◄─── │  FastAPI  │
└───────────────────┘      └──────────────────┘      └──────────┘
```

## Components

### Data Pipeline (`dlt`)

The data pipeline is defined in `data_pipeline/ingest_coins.py`. It uses the `dlt` library to:

1.  Fetch the top 10 cryptocurrencies by market cap from the CoinGecko API.
2.  Load the data into a DuckDB database named `crypto_pipeline.duckdb`.
3.  The data is stored in a table named `top_coins` within the `market_data` schema.

### API Backend (`FastAPI`)

The API backend is defined in `backend.py`. It uses the `FastAPI` framework to create a simple API with the following endpoints:

-   `GET /`: Returns a status message.
-   `GET /coins`: Returns a list of cryptocurrencies from the database. It supports `min_price` and `limit` query parameters for filtering and pagination.

### Agent (`fastmcp`)

The agent is defined in `agent.py`. It uses the `FastMCP` framework to create an agent with the following tools:

-   `get_crypto_market_data`: Fetches cryptocurrency data from the FastAPI backend.
-   `refresh_data`: Triggers the `dlt` pipeline to refresh the data from the CoinGecko API.
-   `analyze_market`: Performs a simple market analysis on the data.

## How to Run

### 1. Install Dependencies

Install the required Python packages from `requirements.txt`:

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

### 2. Run the Data Pipeline

Run the data pipeline to populate the database:

```bash
python data_pipeline/ingest_coins.py
```

This will create a `crypto_pipeline.duckdb` file in the project root.

### 3. Run the API Backend

Start the FastAPI server:

```bash
python backend.py
```

The API will be available at `http://localhost:8000`.

### 4. Run the Agent

In a separate terminal, run the agent:

```bash
python agent.py
```

You can now interact with the agent in your terminal.

## Verifying the Data

You can manually verify the data in the database using the provided scripts:

-   `check_data.py`: Shows the top 5 coins by price.
-   `check_metadata.py`: Shows `dlt` metadata for the loaded data.

Run them like this:

```bash
python check_data.py
python check_metadata.py
```

## Adding the Agent to Gemini CLI

To add the `FastMCP` agent to the Gemini CLI, create a `settings.json` file inside your `.gemini` folder (if it doesn't already exist). Then, copy and paste the following configuration into your `settings.json` file:

```json
{
  "mcpServers": {
    "Crypto Sentinel Agent": {
      "command": "/Users/adpuz/Documents/Projects/dlt_fastapi_mcp/.venv/bin/python",
      "args": [
        "/Users/adpuz/Documents/Projects/dlt_fastapi_mcp/agent.py"
      ]
    }
  }
}
```

Make sure the `command` and `args` paths are correct for your environment. After saving the `settings.json` file, you can use the `@Crypto Sentinel Agent` in the Gemini CLI to interact with your agent, for example, by typing `@Crypto Sentinel Agent check the latest crypto market data`.