MyAIServ: AI-Powered FastAPI Server with MCP 🚀

by eagurin

8 stars
432 downloads
Not rated
GitHub

About

High-performance FastAPI server implementing Model Context Protocol (MCP) for seamless integration with Large Language Models (LLMs). Built with modern stack: FastAPI, Elasticsearch, Redis, Prometheus, and Grafana.

Details

Author
eagurin
GitHub stars
8
Downloads
432
Categories
Developer Tools

- High-performance API built on FastAPI with async operations
- Full MCP support for resources, tools, prompts, and sampling
- Prometheus/Grafana monitoring with metrics at /metrics
- Extensible via simple interfaces for new tools
- GraphQL API for flexible data queries
- WebSocket support for real-time interactions
- Semantic search integration with Elasticsearch
- Redis caching for improved performance

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name MyAIServ: AI-Powered FastAPI Server with MCP 🚀
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

Clone the repository, install Poetry, then run poetry install to set up dependencies. Start the server with poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload or via the just run command. The API is then accessible at http://localhost:8000, with Swagger UI at /docs, ReDoc at /redoc, and GraphQL Playground at /graphql.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "myaiserv: ai-powered fastapi server with mcp \ud83d\ude80": {
            "myaiserv": {
                "command": "python",
                "args": [
                    "-m",
                    "venv",
                    "venv"
                ]
            }
        }
    }
}

McpServers

{
    "myaiserv": {
        "command": "python",
        "args": [
            "-m",
            "venv",
            "venv"
        ]
    }
}

MCP Server - Model Context Protocol API

FastAPI
Python
Poetry
Prometheus
GraphQL

MCP Server - это реализация Model Context Protocol (MCP) на базе FastAPI, предоставляющая стандартизированный интерфейс для взаимодействия между LLM-моделями и приложениями.

Особенности

- 🚀 Высокопроизводительный API на базе FastAPI и асинхронных операций
- 🔄 Полная поддержка MCP с ресурсами, инструментами, промптами и сэмплированием
- 📊 Мониторинг и метрики через Prometheus и Grafana
- 🧩 Расширяемость через простые интерфейсы для добавления новых инструментов
- 📝 GraphQL API для гибкой работы с данными
- 💬 WebSocket поддержка для реал-тайм взаимодействия
- 🔍 Семантический поиск через интеграцию с Elasticsearch
- 🗃️ Кэширование через Redis для улучшения производительности
- 📦 Управление зависимостями через Poetry для надежного управления пакетами

Начало работы

Установка

1. Клонировать репозиторий:

   git clone https://github.com/yourusername/myaiserv.git
cd myaiserv

2. Установить Poetry (если еще не установлен):

   curl -sSL https://install.python-poetry.org | python3 -

3. Установить зависимости через Poetry:

   poetry install

Запуск сервера

poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

Или через утилиту just:

just run

После запуска API доступен по адресу: http://localhost:8000

Документация API

- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- GraphQL Playground: http://localhost:8000/graphql

Структура проекта

myaiserv/
├── app/
│   ├── core/             # Базовые компоненты MCP
│   │   ├── base_mcp.py   # Абстрактные классы MCP
│   │   └── base_sampling.py  # Базовые классы для сэмплирования
│   ├── models/           # Pydantic модели
│   │   ├── mcp.py        # Модели данных MCP
│   │   └── graphql.py    # GraphQL схема
│   ├── services/         # Бизнес-логика
│   │   └── mcp_service.py # Сервис MCP
│   ├── storage/          # Хранилище данных
│   ├── tools/            # Инструменты MCP
│   │   ├── example_tool.py   # Примеры инструментов
│   │   └── text_processor.py # Инструмент обработки текста
│   ├── utils/            # Утилиты
│   └── main.py           # Точка входа FastAPI
├── app/tests/            # Тесты
├── docs/                 # Документация
│   └── MCP_API.md        # Описание API
├── pyproject.toml        # Конфигурация Poetry и инструментов
└── .justfile             # Задачи для утилиты just

Доступные инструменты

File System Tool

Инструмент для работы с файловой системой, поддерживающий операции чтения, записи, удаления и листинга файлов.

curl -X POST "http://localhost:8000/tools/file_operations" \
     -H "Content-Type: application/json" \
     -d '{"operation": "list", "path": "."}'

Weather Tool

Инструмент для получения погодных данных по координатам.

curl -X POST "http://localhost:8000/tools/weather" \
     -H "Content-Type: application/json" \
     -d '{"latitude": 37.7749, "longitude": -122.4194}'

Text Analysis Tool

Инструмент для анализа текста, включая определение тональности и суммаризацию.

curl -X POST "http://localhost:8000/tools/text_analysis" \
     -H "Content-Type: application/json" \
     -d '{"text": "Example text for analysis", "analysis_type": "sentiment"}'

Text Processor Tool

Инструмент для обработки текста, включая форматирование, расчет статистики, извлечение сущностей.

curl -X POST "http://localhost:8000/tools/text_processor" \
     -H "Content-Type: application/json" \
     -d '{"operation": "statistics", "text": "Example text", "stat_options": ["chars", "words"]}'

Image Processing Tool

Инструмент для обработки изображений, поддерживающий изменение размера, обрезку и применение фильтров.

curl -X POST "http://localhost:8000/tools/image_processing" \
     -H "Content-Type: application/json" \
     -d '{"operation": "resize", "image_data": "base64...", "params": {"width": 800, "height": 600}}'

WebSocket API

Для подключения к WebSocket API:

const socket = new WebSocket("ws://localhost:8000/ws");

socket.onopen = () => {
socket.send(JSON.stringify({
type: "initialize",
id: "my-request-id"
}));
};

socket.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log("Received:", data);
};

GraphQL API

Примеры запросов через GraphQL:

# Получение списка всех инструментов
query {
  getTools {
    name
    description
  }
}

Выполнение инструмента

mutation { executeTool(input: { name: "text_processor", parameters: { operation: "statistics", text: "Example text for analysis" } }) { content { type text } is_error } }

Запуск тестов

Для запуска тестов используйте Poetry:

poetry run pytest

Или через утилиту just:

just test

Docker

Сборка и запуск через Docker Compose

docker compose up -d

Для запуска отдельных сервисов:

docker compose up -d web redis elasticsearch

Интеграция с LLM

MCP Server предоставляет стандартизированный интерфейс для интеграции с LLM-моделями различных поставщиков:

import httpx

async def query_mcp_with_llm(prompt: str):
async with httpx.AsyncClient() as client:
# Запрос к MCP для получения контекста и инструментов
tools_response = await client.get("http://localhost:8000/tools")
tools = tools_response.json()["tools"]

# Отправка запроса к LLM с включением MCP контекста
llm_response = await client.post(
"https://api.example-llm.com/v1/chat",
json={
"messages": [
{"role": "system", "content": "You have access to the following tools:"},
{"role": "user", "content": prompt}
],
"tools": tools,
"tool_choice": "auto"
}
)

return llm_response.json()

Метрики и мониторинг

MCP Server предоставляет метрики в формате Prometheus по эндпоинту /metrics. Метрики включают:

- Количество запросов к каждому инструменту
- Время выполнения запросов
- Ошибки и исключения

Разработка

Для форматирования кода и проверки линтерами:

just fmt
just lint

Лицензия

MIT License

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.