Skip to main content
Glama

ZepAI Memory Layer MCP Server

README.md9.09 kB
# FastMCP 2.0 Server - ZepAI Memory Layer Auto-generated MCP server từ FastAPI backend sử dụng [FastMCP 2.0](https://github.com/jlowin/fastmcp) ## 🏗️ **Architecture** Server này sử dụng `FastMCP.from_fastapi()` để tự động convert tất cả endpoints từ FastAPI app (`memory_layer`) thành MCP tools và resources. **Key Components:** - **`server_http.py`** - Main MCP server file, auto-generates tools từ FastAPI endpoints - **`memory_layer/`** - FastAPI backend (required dependency, not included in this repo) - **`config.py`** - Configuration settings - **`test/`** - Test suite and examples ## 🚀 **Features** ### **Auto-generated MCP Tools:** All tools are **automatically generated** from FastAPI POST endpoints: **🔍 Search Tools:** - `search` - Semantic search với reranking strategies - `search_code` - Search code changes với metadata filters **📥 Ingest Tools:** - `ingest_text` - Ingest plain text vào knowledge graph - `ingest_message` - Ingest conversation messages - `ingest_json` - Ingest structured JSON data - `ingest_code` - Ingest code changes với LLM importance scoring - `ingest_code_context` - Ingest advanced code metadata với TTL - `ingest_conversation` - Ingest full conversation context **📊 Admin Tools (Read-only):** - Admin **POST** endpoints are **filtered out** for safety - Only **GET** endpoints are exposed as MCP Resources - Includes: stats, cache info, health checks ### **Auto-generated MCP Resources:** All GET endpoints with path parameters become Resource Templates: ## 📦 **Installation** ### **Prerequisites:** 1. **memory_layer** FastAPI backend phải running tại `http://localhost:8000` 2. Folder structure: ``` ZepAI/ ├── memory_layer/ # FastAPI backend (required) │ └── app/ │ └── main.py # Contains FastAPI app └── fastmcp_server/ # This repository ├── server_http.py ├── config.py └── requirements.txt ``` ### **Install Dependencies:** ```bash cd fastmcp_server pip install -r requirements.txt # Or with uv uv pip install -r requirements.txt ``` ## ⚙️ **Configuration** Create `.env` file (optional, có defaults): ```env # Memory Layer Backend URL MEMORY_LAYER_URL=http://localhost:8000 MEMORY_LAYER_TIMEOUT=30 # Default Settings DEFAULT_PROJECT_ID=default_project MAX_SEARCH_RESULTS=50 MAX_TEXT_LENGTH=100000 MAX_CONVERSATION_MESSAGES=100 ``` ## 🏃 **Running the Server** ### **1. Start memory_layer backend first:** ```bash cd ../memory_layer python -m uvicorn app.main:app --port 8000 ``` ### **2. Start MCP server:** ```bash cd ../fastmcp_server python server_http.py ``` Server will run on `http://localhost:8002` ## 📡 **Available Endpoints** Combined FastAPI + MCP routes: **MCP Endpoints (at /mcp):** - `GET /mcp/sse` - Server-Sent Events connection - `POST /mcp/messages` - MCP message endpoint - MCP Client connection: `http://localhost:8002/mcp` **Original FastAPI Routes:** - `GET /docs` - OpenAPI documentation - `GET /` - API root and health check - All original endpoints from memory_layer **Key MCP Paths:** - Tools list: Call via MCP client - Resources list: Call via MCP client - Test connection: `curl http://localhost:8002/mcp/sse` ## 🧪 **Testing** ### **Run Test Suite:** ```bash cd test python test_client.py ``` Test suite includes: - Basic functionality tests - Tool calling tests - Resource reading tests - Search and ingest workflows - Comprehensive scenario tests ### **Using FastMCP Client:** ```python from fastmcp import Client import asyncio async def test(): # Connect to server async with Client("http://localhost:8002/mcp") as client: # List tools tools = await client.list_tools() print(f"Available tools: {[t.name for t in tools]}") # List resources resources = await client.list_resources() print(f"Available resources: {[r.uri for r in resources]}") # Call a tool (auto-generated from FastAPI) result = await client.call_tool("ingest_text", { "text": "Test content", "project_id": "test_project" }) print(f"Result: {result.content[0].text}") if __name__ == "__main__": asyncio.run(test()) ``` ### **Using curl:** ```bash # Test SSE connection curl http://localhost:8002/mcp/sse # Access FastAPI docs curl http://localhost:8002/docs ``` ## 📊 **Comparison: FastMCP vs Custom Implementation** | Aspect | Custom MCP | FastMCP 2.0 (Auto-generated) | |--------|-----------|-------------| | **Lines of Code** | ~2,900 | ~180 (94% reduction) | | **Setup Time** | 5 weeks | 1 day | | **Tools Definition** | Manual (11 tools) | Auto-generated from FastAPI | | **Tools Registration** | Manual (254 lines) | Automatic via `from_fastapi()` | | **Validation** | Manual Pydantic | Inherits from FastAPI | | **Transport** | Custom HTTP+SSE | Built-in HTTP/SSE | | **Error Handling** | Manual | Automatic | | **Testing** | Custom client | FastMCP Client + test suite | | **Maintenance** | Update 2 places | Update FastAPI only | | **Deployment** | Complex | `python server_http.py` | ## 🔄 **How It Works** ### **Auto-conversion Process:** ```python # 1. Import FastAPI app from memory_layer from app.main import app as fastapi_app # 2. Filter routes (exclude admin POST endpoints) filtered_routes = [route for route in fastapi_app.routes if should_include_route(route)] # 3. Auto-convert to MCP server mcp = FastMCP.from_fastapi( app=filtered_app, name="ZepAI Memory Layer", route_maps=custom_route_maps # GET with params → Resources ) # 4. Combine MCP + original FastAPI routes combined_app = FastAPI( routes=[ *mcp_app.routes, # MCP at /mcp/* *fastapi_app.routes, # Original API ] ) ``` ### **Route Mapping Rules:** 1. **POST/PUT/DELETE** → MCP Tools (writable operations) 2. **GET with `{params}`** → MCP Resource Templates (dynamic data) 3. **GET without params** → MCP Resources (static data) 4. **Admin POST endpoints** → Filtered out (safety) ### **Benefits:** ✅ **Single source of truth** - Update FastAPI, MCP updates automatically ✅ **No code duplication** - Tools inherit FastAPI validation ✅ **Type safety** - Pydantic models from FastAPI = MCP schemas ✅ **Zero maintenance** - Add new FastAPI endpoint = new MCP tool automatically ✅ **Combined access** - Use via MCP client OR direct HTTP/OpenAPI ## 🎯 **Key Design Decisions** ### **1. Why Auto-generation?** - **DRY principle** - FastAPI already defines all endpoints, schemas, validation - **Zero maintenance** - No manual tool registration needed - **Type safety** - Inherits Pydantic validation from FastAPI ### **2. Why Filter Admin Endpoints?** - **Safety** - Prevent accidental cache clearing via MCP client - **Read-only monitoring** - Admin GET endpoints still exposed as resources - **Explicit control** - Destructive operations require direct API access ### **3. Why Combined Routes?** - **Flexibility** - Access via MCP client OR OpenAPI/Swagger - **Debugging** - Use `/docs` for quick endpoint testing - **Migration path** - Existing API clients continue working ### **4. File Structure:** ``` fastmcp_server/ ├── server_http.py # Main server (180 lines) ├── config.py # Configuration ├── memory_client.py # Legacy (not used anymore) ├── search_results_formatter.py # Result formatting utilities ├── requirements.txt # Dependencies ├── .env # Environment config (gitignored) └── test/ # Test suite ├── test_client.py # Basic tests ├── test_comprehensive_scenarios.py └── test_search_analysis.py ``` ## 📖 **Documentation** - [FastMCP Documentation](https://gofastmcp.com) - [MCP Protocol Specification](https://spec.modelcontextprotocol.io/) - [FastMCP GitHub](https://github.com/jlowin/fastmcp) ## 🎯 **Benefits of This Approach** ✅ **94% less code** - 180 lines vs 2,900 lines ✅ **Zero tool registration** - Auto-generated from FastAPI ✅ **Single source of truth** - Update FastAPI once ✅ **Type-safe** - Inherits Pydantic validation ✅ **Dual access** - MCP client OR OpenAPI/Swagger ✅ **Easy testing** - Built-in test utilities + `/docs` ✅ **Safe by default** - Admin operations filtered ✅ **Future-proof** - New FastAPI endpoints = new MCP tools automatically ## 🔗 **Links** - [FastMCP Documentation](https://gofastmcp.com) - [FastMCP GitHub](https://github.com/jlowin/fastmcp) - [MCP Protocol Specification](https://spec.modelcontextprotocol.io/) - [FastAPI Documentation](https://fastapi.tiangolo.com/) ## 📝 **License** Same as original project. --- **Note:** This server requires the `memory_layer` FastAPI backend to be running. The MCP server acts as a protocol adapter, exposing FastAPI endpoints as MCP tools and resources.

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NguyenTrinh3008/MTM-MCPserver'

If you have feedback or need assistance with the MCP directory API, please join our Discord server