MCP-сервер для управления памятью агента: README.md
This commit is contained in:
@@ -1,3 +1,179 @@
|
||||
# task-69f8e929-mcp-server-dlya-upravleni
|
||||
# MCP‑Server for Agent Memory Management
|
||||
|
||||
Решения домашних заданий
|
||||
A lightweight **Model Context Protocol (MCP)** server that exposes a REST API for storing, retrieving, and deleting memory chunks for autonomous agents.
|
||||
The server is built on **FastAPI** and uses **Qdrant** as a vector store for semantic search.
|
||||
A small CLI client (`client.py`) demonstrates how to interact with the server.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Features](#features)
|
||||
- [Architecture](#architecture)
|
||||
- [Prerequisites](#prerequisites)
|
||||
- [Installation](#installation)
|
||||
- [Running the Server](#running-the-server)
|
||||
- [Running the Client](#running-the-client)
|
||||
- [Example Usage](#example-usage)
|
||||
- [API Endpoints](#api-endpoints)
|
||||
- [License](#license)
|
||||
|
||||
---
|
||||
|
||||
## Features
|
||||
|
||||
| Feature | Description |
|
||||
|---------|-------------|
|
||||
| **Add memory** | Store a key‑value pair in the vector store. |
|
||||
| **Retrieve memory** | Query by key or semantic similarity. |
|
||||
| **Delete memory** | Remove a memory entry by key. |
|
||||
| **CORS enabled** | Works from any origin (useful for browser‑based agents). |
|
||||
| **Rich console output** | Pretty tables and logs for debugging. |
|
||||
| **FastAPI** | Modern, async, and fully typed. |
|
||||
| **Qdrant** | Fast, scalable vector search. |
|
||||
|
||||
---
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌───────────────────────┐
|
||||
│ Agent (client.py) │
|
||||
│ ├─ add_memory() │
|
||||
│ ├─ get_memory() │
|
||||
│ └─ delete_memory() │
|
||||
└────────────┬──────────┘
|
||||
│ HTTP
|
||||
▼
|
||||
┌───────────────────────┐
|
||||
│ MCP‑Server (server.py)│
|
||||
│ ├─ FastAPI endpoints │
|
||||
│ ├─ Qdrant vector store │
|
||||
│ └─ OpenAI embeddings │
|
||||
└───────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
| Component | Minimum Version | Notes |
|
||||
|-----------|-----------------|-------|
|
||||
| Python | 3.10+ | Use a virtual environment. |
|
||||
| Qdrant | 1.7+ | Run locally or use a hosted instance. |
|
||||
| OpenAI API key | N/A | Required for embeddings. Set `OPENAI_API_KEY` env var. |
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
# 1. Clone the repo
|
||||
git clone https://github.com/yourorg/agent-mcp.git
|
||||
cd agent-mcp
|
||||
|
||||
# 2. Create a virtual environment
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||||
|
||||
# 3. Install dependencies
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
`requirements.txt` contains:
|
||||
|
||||
```text
|
||||
fastapi
|
||||
uvicorn
|
||||
langchain
|
||||
qdrant-client
|
||||
openai
|
||||
rich
|
||||
requests
|
||||
```
|
||||
|
||||
> **Tip:** If you don't have a Qdrant instance, start a local Docker container:
|
||||
|
||||
```bash
|
||||
docker run -p 6333:6333 qdrant/qdrant
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Running the Server
|
||||
|
||||
```bash
|
||||
# Activate the virtual environment if not already
|
||||
source .venv/bin/activate
|
||||
|
||||
# Start the FastAPI server
|
||||
uvicorn server:app --host 0.0.0.0 --port 8000 --reload
|
||||
```
|
||||
|
||||
The server will be available at `http://localhost:8000`.
|
||||
CORS is enabled for all origins, so the client can run from any host.
|
||||
|
||||
---
|
||||
|
||||
## Running the Client
|
||||
|
||||
The client is a simple CLI wrapper around the MCP API.
|
||||
|
||||
```bash
|
||||
# Add a memory entry
|
||||
python client.py add --server http://localhost:8000 --key "greeting" --value "Hello, world!"
|
||||
|
||||
# Retrieve a memory entry
|
||||
python client.py get --server http://localhost:8000 --key "greeting"
|
||||
|
||||
# Delete a memory entry
|
||||
python client.py delete --server http://localhost:8000 --key "greeting"
|
||||
```
|
||||
|
||||
Run `python client.py --help` for full options.
|
||||
|
||||
---
|
||||
|
||||
## Example Usage
|
||||
|
||||
```bash
|
||||
# 1. Start the server (in one terminal)
|
||||
uvicorn server:app --host 0.0.0.0 --port 8000 --reload
|
||||
|
||||
# 2. In another terminal, add a memory
|
||||
python client.py add --server http://localhost:8000 --key "weather" --value "Sunny in San Francisco"
|
||||
|
||||
# 3. Retrieve it
|
||||
python client.py get --server http://localhost:8000 --key "weather"
|
||||
# Output:
|
||||
# ┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
# ┃ Key ┃ Value ┃
|
||||
# ┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
# │ weather │ Sunny in San Francisco │
|
||||
# └──────────┴──────────────────────────────────────┘
|
||||
|
||||
# 4. Delete it
|
||||
python client.py delete --server http://localhost:8000 --key "weather"
|
||||
# Output:
|
||||
# Memory with key 'weather' deleted successfully.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## API Endpoints
|
||||
|
||||
| Method | Path | Description | Request Body | Response |
|
||||
|--------|------|-------------|--------------|----------|
|
||||
| `POST` | `/memory/add` | Add a key‑value pair | `{"key": str, "value": str}` | `{"status": "ok", "id": str}` |
|
||||
| `GET` | `/memory/get` | Retrieve by key | Query param `key` | `{"key": str, "value": str}` |
|
||||
| `DELETE` | `/memory/delete` | Delete by key | Query param `key` | `{"status": "deleted"}` |
|
||||
|
||||
All responses are JSON. Errors return HTTP status codes with a JSON body containing `detail`.
|
||||
|
||||
---
|
||||
|
||||
## License
|
||||
|
||||
MIT © 2026 Your Name
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user