Skip to main content
Glama
README.md
# Legal MCP Server

A Model Context Protocol (MCP) compliant server for legal document analysis using Azure Blob Storage and Anthropic Claude API.

## Features

- **Document Management**: List and retrieve pre-loaded `.txt` documents from Azure Blob Storage
- **Prompt Library**: Manage curated prompts for legal document analysis
- **Streaming Analysis**: Execute document analysis with real-time progress updates via MCP progress notifications
- **MCP SSE Transport**: Full compliance with MCP specification using Server-Sent Events

## Prerequisites

- Node.js 18+ 
- Azure Storage Account with:
  - `documents-texts` container (for `.txt` documents)
  - `prompts` container (for prompt library JSON)
- Anthropic Claude API key with credits

## Setup

1. **Clone and install dependencies:**
   ```bash
   git clone <your-repo-url>
   cd Legal-MCP
   npm install
   ```

2. **Configure environment variables:**
   ```bash
   cp .env.example .env
   # Edit .env with your actual values
   ```

3. **Upload initial prompt library to Azure:**
   ```bash
   # Using Azure CLI (after setting up connection)
   az storage blob upload \
     --account-name legalmcpstore \
     --container-name prompts \
     --name "library.json" \
     --file ./prompts/library.json \
     --connection-string "$AZURE_STORAGE_CONNECTION_STRING"
   ```

4. **Upload documents to Azure:**
   ```bash
   # Upload `.txt` files to the documents-texts container
   az storage blob upload \
     --account-name legalmcpstore \
     --container-name documents-texts \
     --name "your-document.txt" \
     --file ./path/to/your-document.txt \
     --connection-string "$AZURE_STORAGE_CONNECTION_STRING"
   ```

## Running Locally

**Development mode (with auto-reload):**
```bash
npm run dev
```

**Production mode:**
```bash
npm run build
npm start
```

The server will start on `http://localhost:3000` (or the port specified in `PORT` env var).

## MCP Client Configuration

### Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):

```json
{
  "mcpServers": {
    "legal-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/Legal-MCP/dist/index.js"],
      "env": {
        "AZURE_STORAGE_CONNECTION_STRING": "...",
        "ANTHROPIC_API_KEY": "..."
      }
    }
  }
}
```

**Note**: For SSE transport, you'll need to configure the HTTP endpoint instead. See MCP documentation for SSE client setup.

### Testing with MCP Inspector

You can test the server using the MCP Inspector or any MCP-compatible client:

```bash
# Server should be running on http://localhost:3000/mcp
# Use an MCP client that supports SSE transport
```

## Available Tools

1. **list_documents**: Returns all available `.txt` documents
2. **list_prompts**: Lists available analysis prompts (with optional search)
3. **get_prompt**: Retrieves full prompt details by ID
4. **add_prompt**: Adds a new user-contributed prompt
5. **execute_analysis**: Executes document analysis with streaming progress updates

## Project Structure

```
legal-mcp/
├── src/
│   ├── index.ts              # MCP server entry point
│   ├── storage/
│   │   ├── azure-blob.ts     # Azure Blob Storage client
│   │   └── prompts.ts         # Prompt library management
│   ├── claude/
│   │   └── client.ts         # Claude API client with streaming
│   ├── tools/
│   │   ├── documents.ts      # Document listing tool
│   │   ├── prompts.ts         # Prompt management tools
│   │   └── execute.ts         # Analysis execution tool
│   └── types.ts              # Shared TypeScript types
├── prompts/
│   └── library.json          # Initial prompt library
└── package.json
```

## Deployment to Azure

See the deployment section in the original plan for Azure App Service deployment instructions.

## License

ISC