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

An MCP (Model Context Protocol) server for interacting with Quip documents. This server enables AI assistants like Amazon Q to read, search, and modify Quip documents through a standardized interface.

## Features

- **Document Operations**
  - Read document content
  - Search across documents
  - Create new documents
  - Append content to documents
  - Prepend content to documents
  - Replace document content

- **Integration Features**
  - MCP protocol support
  - Configurable logging
  - Environment-based configuration
  - Docker support

## Installation

### From Source
```bash
git clone <repository-url>
cd quip-mcp-server
pip install -e .
```

### Development Installation
```bash
pip install -e ".[dev]"
```

### Requirements
- Python 3.8 or higher
- Required packages (installed automatically):
  - strands-agents>=1.3.0
  - mcp>=1.12.3
  - python-dotenv>=1.0.0
  - requests>=2.25.0
  - uvicorn>=0.23.1
  - httpx>=0.24.0
  - starlette>=0.27.0

## Configuration

1. Copy the example environment file:
```bash
cp .env.example .env
```

2. Configure your environment variables in `.env`:
```ini
# Quip API credentials
QUIP_ACCESS_TOKEN=your_quip_access_token_here
QUIP_BASE_URL=https://platform.quip-amazon.com

# MCP server configuration
MCP_SERVER_PORT=8080
MCP_SERVER_HOST=localhost

# Logging configuration
LOG_LEVEL=INFO  # Options: DEBUG, INFO, WARNING, ERROR, CRITICAL
```

## Usage

### Starting the Server

1. Using the console script:
```bash
quip-mcp-server
```

2. Using Python module:
```bash
python -m quip_mcp_server
```

3. Using Docker:
```bash
docker-compose up
```

### Available Tools

The server provides the following MCP tools:

| Tool Name | Description | Parameters | Example Usage |
|-----------|-------------|------------|---------------|
| `read_document` | Read a document's content | `thread_id` | "Show me the content of the Quip document with thread ID 'ABC123'" |
| `search_documents` | Search for documents | `query`, `count` (optional) | "Find all Quip documents containing 'project planning'" or "Show me the 5 most recent documents about AWS" |
| `create_document` | Create a new document | `title`, `content` | "Create a new Quip document titled 'Meeting Notes' with content 'Agenda items for today:'" |
| `append_content` | Add content to end | `thread_id`, `content` | "Add 'Action items completed' to the end of document ABC123" |
| `prepend_content` | Add content to beginning | `thread_id`, `content` | "Insert 'DRAFT:' at the start of document ABC123" |
| `replace_content` | Replace document content | `thread_id`, `content` | "Replace the content of document ABC123 with 'Updated project timeline'" |
| `get_folder` | Get details of a specific folder | `folder_id` | "Show me the contents of the Quip folder with ID 'XYZ789'" |
| `get_folders` | Get a list of folders | `ids` (optional) | "List all my Quip folders" or "Show me details of folders ABC123, XYZ789" |

Example conversations with Amazon Q:

```
User: "Can you read my latest meeting notes from Quip?"
Q: Let me search for and read your meeting notes document.
[Uses search_documents followed by read_document]

User: "Create a new Quip document for today's sprint planning"
Q: I'll create a new document with a standard sprint planning template.
[Uses create_document with appropriate title and content]

User: "Add today's action items to my project notes"
Q: I'll append the action items to your project document.
[Uses append_content to add new items]
```

### Using with Amazon Q

1. Add the MCP server to Q CLI:
```bash
q mcp add quip http://localhost:8080
```

2. Use in conversations with Q:
```
@q Use quip___read_document to read the document with ID "ABC123"
@q Search Quip documents for "meeting notes" using quip___search_documents
```

## Development

### Project Structure
```
quip_mcp_server/
├── __init__.py          # Package initialization
├── __main__.py          # Entry point
├── logging_config.py    # Centralized logging configuration
├── quip.py              # Core Quip API client
├── quip_edit.py         # Document editing functionality
└── strands_agent.py     # MCP agent implementation

tests/
├── __init__.py          # Test package initialization
├── conftest.py          # Test fixtures and configuration
├── test_logging_config.py  # Tests for logging configuration
├── test_main.py         # Tests for main module
├── test_quip.py         # Tests for Quip client
├── test_quip_edit.py    # Tests for document editing
└── test_strands_agent.py  # Tests for MCP agent
```

### Running Tests
```bash
# Install development dependencies
pip install -e ".[dev]"

# Run tests with coverage
pytest

# Generate coverage reports
pytest --cov=quip_mcp_server --cov-report=html
```

The current test suite provides approximately 50% code coverage, focusing on the core functionality. The main module tests are currently skipped as they require more complex mocking.

### Docker Build
```bash
docker build -t quip-mcp-server .
```

## License

Apache 2.0