04-enterprise-mcp-server
by srirdeevi
README.md
# enterprise-mcp-server — MCP Server with RAG, Employee, and Ticket Tools
## Overview
This project demonstrates how to build a custom **Model Context Protocol (MCP) server** that exposes reusable tools to AI applications.
Instead of an AI agent directly calling Python functions, MCP provides a standardized protocol that allows AI clients to discover and invoke external tools.
In this project, we build an MCP server that exposes four tool categories: calculator utilities, a RAG-powered document search tool (calling the RAG agent from project 02 over HTTP), an employee PTO lookup, and a ticket status lookup.
---
## What is MCP?
**Model Context Protocol (MCP)** is an open protocol that enables AI applications to securely connect with external tools, data sources, and services.
Traditional approach:
```
AI Agent
|
v
Direct Python Function Calls
```
enterprise-mcp-server:
```
MCP Client
|
|
Authentication
|
v
MCP Server
|
+--------------+--------------+
| | |
v v v
RAG Tool Database Tool API Tool
search_docs employee_db system_health
```
The MCP server acts as a bridge between AI systems and external capabilities.
---
## Architecture
The MCP server exposes enterprise capabilities as AI tools.
```
AI Client
|
|
v
MCP Protocol
|
v
Enterprise MCP Server
|
v
RAG API Service
|
v
Vector Database
|
v
Enterprise Documents
```
---
## Features
## Available MCP Tools
### calculator_add / calculator_multiply
Basic arithmetic tools.
### search_company_documents
Searches enterprise documents using the RAG pipeline from project 02, called over HTTP. Requires an `api_key` parameter, validated against `MCP_API_KEY`.
Example:
Input:
{
"question": "How many days can employees work remotely?",
"api_key": "your-mcp-api-key"
}
Output:
"Employees can work remotely up to three days per week."
### get_employee_leave
Looks up an employee's remaining PTO days from an in-memory store.
Input: `{"employee_name": "John"}`
Output: `"John has 12 PTO days remaining."`
### get_ticket_information
Looks up ticket status, assigned team, and priority from an in-memory store.
Input: `{"ticket_id": "INC-1001"}`
Output: `"INC-1001 status: In Progress. Assigned team: Platform Engineering. Priority: High."`
> **Note:** Authentication is currently only enforced on `search_company_documents`. The employee and ticket tools don't yet call `authenticate()` — see Future Enhancements.
---
## Project Structure
```
04-mcp-server/
├── server.py
├── auth.py
├── client.py
│
├── tools/
│ ├── calculator.py
│ ├── rag_search.py
│ ├── employee.py
│ └── ticket.py
│
├── database/
│ └── employees.py
│
├── tickets/
│ └── tickets.py
│
├── README.md
│
└── requirements.txt
```
---
## Technology Stack
- Python 3.11+
- Model Context Protocol (MCP)
- FastMCP
- Python functions exposed as AI tools
---
## Installation
### 1. Clone repository
```bash
git clone <repository-url>
```
Navigate:
```bash
cd 04-mcp-server
```
---
### 2. Create virtual environment
```bash
python -m venv venv
```
Activate:
Mac/Linux:
```bash
source venv/bin/activate
```
---
### 3. Install dependencies
```bash
pip install -r requirements.txt
```
---
## Running the MCP Server
Start the server:
```bash
python server.py
```
The MCP server will start and expose available tools.
---
## Example Tool Definition
Example MCP tool:
```python
@mcp.tool()
def calculator_add(a: float, b: float) -> float:
return a + b
```
The function becomes discoverable as an MCP tool.
---
## Learning Outcomes
Through this project, I learned:
- How MCP works as a communication layer for AI applications
- How to create custom MCP tools
- How to expose Python functions as AI capabilities
- How AI agents can discover and use external tools
- The difference between traditional function calls and protocol-based tool access
---
## Future Enhancements
Planned improvements:
- Extend authentication to `get_employee_leave` and `get_ticket_information` (currently only `search_company_documents` is protected)
- Replace in-memory employee/ticket data with real data sources
- Add automated tests for tool call handling and auth failures
- Deploy MCP server as a hosted service
- Connect MCP server as a callable tool set for the multi-agent workflow project
---
## Relationship to Previous Projects
This project builds on previous AI engineering concepts:
### Project 01 — Basic Tool Use
```
Agent
|
+-- Tools
```
### Project 02 — RAG Agent
```
Documents
|
v
Vector Database
|
v
Knowledge Retrieval
```
### Project 03 — Multi-Agent Workflow
```
Orchestrator
|
+-- Research Agent
+-- Writer Agent
```
### Project 04 — MCP Server
```
AI System
|
v
MCP Protocol
|
v
Reusable External Tools
```
---
## Technologies Used
python, uvicorn, fastmcp, pydantic, typing, mcp
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues