P

myaiserv

...
Created 2/3/2025byeagurin

Language:

Python

Stars:

9

Forks:

6

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](http://localhost:8000)

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

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

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

Last updated: 3/14/2025

Publisher info

eagurin's avatar

Евгений

3
followers
8
following
21
repos

More MCP servers built with Python

apollo-io-mcp-server

MCP server that exposes the Apollo.io API functionalities as tools

By Edward Choh
mcp-openvision

MCP Server using OpenRouter models to get descriptions for images

By Nazruden2
DeepView MCP

Enables IDEs like Cursor and Windsurf to analyze large codebases using Gemini's extensive context window.

By ai-1st