| --- |
| title: Intelligent Content Organizer MCP Agent |
| emoji: π» |
| colorFrom: blue |
| colorTo: green |
| sdk: gradio |
| sdk_version: 5.32.0 |
| app_file: app.py |
| pinned: false |
| license: mit |
| tags: |
| - mcp-server-track |
| - agent-demo-track |
| --- |
| |
| A powerful Model Context Protocol (MCP) server for intelligent content management with semantic search, summarization, and Q&A capabilities powered by **OpenAI, Mistral AI, and Anthropic Claude**. |
|
|
| ## [πΉ Read Article](https://huggingface.co/blog/Nihal2000/intelligent-content-organizer#empowering-your-data-building-an-intelligent-content-organizer-with-mistral-ai-and-the-model-context-protocol) |
|
|
| ## π― Features |
|
|
| ### π§ MCP Tools Available |
|
|
| - **π Document Ingestion**: Upload and process documents (PDF, TXT, DOCX, images with OCR) |
| - **π Semantic Search**: Find relevant content using natural language queries |
| - **π Summarization**: Generate summaries in different styles (concise, detailed, bullet points, executive) |
| - **π·οΈ Tag Generation**: Automatically generate relevant tags for content |
| - **β Q&A System**: Ask questions about your documents using RAG (Retrieval-Augmented Generation) |
| - **π Categorization**: Classify content into predefined or custom categories |
| - **π Batch Processing**: Process multiple documents at once |
| - **π Analytics**: Get insights and statistics about your content |
|
|
| ### π Powered By |
|
|
| - **π§ OpenAI GPT models** for powerful text generation and understanding |
| - **π₯ Mistral AI** for efficient text processing and analysis |
| - **π€ Anthropic Claude** for advanced reasoning (available as a specific choice or fallback) |
| - **π Sentence Transformers** for semantic embeddings |
| - **π FAISS** for fast similarity search |
| - **ποΈ Mistral OCR** for image text extraction |
| - **π¨ Gradio** for the user interface and MCP server functionality |
|
|
| ## LLM Strategy: The agent intelligently selects the best available LLM for most generative tasks when 'auto' model selection is used, prioritizing OpenAI, then Mistral, and finally Anthropic. Users can also specify a particular model family (e.g., 'gpt-', 'mistral-', 'claude-'). |
|
|
| ## π― Key Features Implemented |
|
|
| 1. **Full MCP Server**: Complete implementation with all tools exposed |
| 2. **Multi-Modal Processing**: PDF, TXT, DOCX, and image processing with OCR |
| 3. **Advanced Search**: Semantic search with FAISS, filtering, and multi-query support |
| 4. **AI-Powered Features**: Summarization, tagging, categorization, Q&A with RAG |
| 5. **Production Ready**: Error handling, logging, caching, rate limiting |
| 6. **Gradio UI**: Beautiful web interface for testing and direct use |
| 7. **OpenAi + Anthropic + Mistral**: LLM support with fallbacks |
|
|
| ## π₯ Demo Video |
|
|
| [πΉ Watch the demo video](https://youtu.be/uBYIj_ntFRk) |
|
|
| *The demo shows the MCP server in action, demonstrating document ingestion, semantic search, and Q&A capabilities, utilizing the configured LLM providers.* |
|
|
| ### Prerequisites |
|
|
| - Python 3.9+ |
| - API keys for OpenAI and Mistral AI. An Anthropic API key. |
|
|
| - **MCP Tools Reference** (Tool parameters like model allow specifying "auto" or a specific model family like "gpt-", "mistral-", "claude-") |
|
|
| - **ingest_document** |
| - Process and index a document for searching. |
| - **Parameters:** |
| - `file_path` (string): Path to the document file (e.g., an uploaded file path). |
| - `file_type` (string, optional): File type/extension (e.g., ".pdf", ".txt"). If not provided, it's inferred from file_path. |
| - **Returns:** |
| - `success` (boolean): Whether the operation succeeded. |
| - `document_id` (string): Unique identifier for the processed document. |
| - `chunks_created` (integer): Number of text chunks created. |
| - `message` (string): Human-readable result message. |
|
|
| - **semantic_search** |
| - Search through indexed content using natural language. |
| - **Parameters:** |
| - `query` (string): Search query. |
| - `top_k` (integer, optional): Number of results to return (default: 5). |
| - `filters` (object, optional): Search filters (e.g., {"document_id": "some_id"}). |
| - **Returns:** |
| - `success` (boolean): Whether the search succeeded. |
| - `results` (array of objects): Array of search results, each with content and score. |
| - `total_results` (integer): Number of results found. |
|
|
| - **summarize_content** |
| - Generate a summary of provided content. |
| - **Parameters:** |
| - `content` (string, optional): Text content to summarize. |
| - `document_id` (string, optional): ID of document to summarize. (Either content or document_id must be provided). |
| - `style` (string, optional): Summary style: "concise", "detailed", "bullet_points", "executive" (default: "concise"). |
| - `model` (string, optional): Specific LLM to use (e.g., "gpt-4o-mini", "mistral-large-latest", "auto"). Default: "auto". |
| - **Returns:** |
| - `success` (boolean): Whether summarization succeeded. |
| - `summary` (string): Generated summary. |
| - `original_length` (integer): Character length of original content. |
| - `summary_length` (integer): Character length of summary. |
|
|
| - **generate_tags** |
| - Generate relevant tags for content. |
| - **Parameters:** |
| - `content` (string, optional): Text content to tag. |
| - `document_id` (string, optional): ID of document to tag. (Either content or document_id must be provided). |
| - `max_tags` (integer, optional): Maximum number of tags (default: 5). |
| - `model` (string, optional): Specific LLM to use. Default: "auto". |
| - **Returns:** |
| - `success` (boolean): Whether tag generation succeeded. |
| - `tags` (array of strings): Array of generated tags. |
|
|
| - **answer_question** |
| - Answer questions using RAG over your indexed content. |
| - **Parameters:** |
| - `question` (string): Question to answer. |
| - `context_filter` (object, optional): Filters for context retrieval (e.g., {"document_id": "some_id"}). |
| - `model` (string, optional): Specific LLM to use. Default: "auto". |
| - **Returns:** |
| - `success` (boolean): Whether question answering succeeded. |
| - `answer` (string): Generated answer. |
| - `sources` (array of objects): Source document chunks used for context, each with document_id, chunk_id, and content. |
| - `confidence` (string, optional): Confidence level in the answer (LLM-dependent, might not always be present). |
|
|
| π Performance |
| Embedding Generation: ~100-500ms per document chunk |
| Search: <50ms for most queries |
| Summarization: 1-5s depending on content length |
| Memory Usage: ~200-500MB base + ~1MB per 1000 document chunks |
| Supported File Types: PDF, TXT, DOCX, PNG, JPG, JPEG |
|
|
|
|
|
|
|
|
|
|