Skip to main content
Glama
README.md
# itglue-mcp-server

An unofficial [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server for the [ITGlue](https://www.itglue.com/) API. Enables AI assistants to manage ITGlue documents, document sections, and organizations.

> **Note**: This is an unofficial, community-maintained project and is not affiliated with or endorsed by Kaseya/ITGlue.

## Features

- **13 tools** covering documents, document sections, and organizations
- Full CRUD support for documents and document sections
- Publish documents directly from your AI assistant
- Organization lookup for finding org IDs
- Pagination, filtering, and sorting support
- Markdown and JSON response formats
- Regional API support (US, EU, Australia)
- Stdio and streaming HTTP transports
- Docker support for containerized deployment

## Quick Start

### Claude Desktop

1. Open Claude Desktop and go to **Settings > Developer > Edit Config**
2. Add the following to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "itglue": {
      "command": "npx",
      "args": ["-y", "itglue-mcp-server"],
      "env": {
        "ITGLUE_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

3. Save the file and **restart Claude Desktop**

Config file locations:
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

### Streaming HTTP

Start the server in HTTP mode:

```bash
ITGLUE_API_KEY=your-key npx itglue-mcp-server --transport http --port 3000
```

Then configure your MCP client:

```json
{
  "mcpServers": {
    "itglue": {
      "type": "streamable-http",
      "url": "http://localhost:3000/mcp"
    }
  }
}
```

### Other MCP Clients (Cursor, Windsurf, Claude Code, etc.)

Most MCP clients use the same stdio configuration format shown above.

### EU or Australia Regions

Add `--region eu` or `--region au` to the args:

```json
{
  "mcpServers": {
    "itglue": {
      "command": "npx",
      "args": ["-y", "itglue-mcp-server", "--region", "eu"],
      "env": {
        "ITGLUE_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

### Environment Variables

| Variable | Description | Required | Default |
|----------|-------------|----------|---------|
| `ITGLUE_API_KEY` | ITGlue API key | Yes | |
| `ITGLUE_BASE_URL` | Custom API base URL | No | `https://api.itglue.com` |
| `TRANSPORT` | Transport mode: `stdio` or `http` | No | `stdio` |
| `PORT` | HTTP server port | No | `3000` |

### CLI Options

```
--api-key <key>         ITGlue API key (overrides env var)
--base-url <url>        Custom API base URL (overrides env var)
--region <region>       API region: us, eu, or au (default: us)
--transport <mode>      Transport mode: stdio or http (default: stdio)
--port <port>           HTTP server port (default: 3000)
--help                  Show help
--version               Show version
```

## Tools

### Organizations

| Tool | Description |
|------|-------------|
| `itglue_list_organizations` | Search and list organizations with filtering and pagination |
| `itglue_get_organization` | Get detailed information about a specific organization |

### Documents

| Tool | Description |
|------|-------------|
| `itglue_list_documents` | List documents globally or within an organization |
| `itglue_get_document` | Get a document with all embedded sections |
| `itglue_create_document` | Create a new draft document |
| `itglue_update_document` | Update document metadata (name) |
| `itglue_publish_document` | Publish a draft document |
| `itglue_delete_documents` | Permanently delete one or more documents |

### Document Sections

| Tool | Description |
|------|-------------|
| `itglue_list_document_sections` | List all sections in a document |
| `itglue_get_document_section` | Get a specific section with full content |
| `itglue_create_document_section` | Add a section (Text, Heading, Gallery, Step) |
| `itglue_update_document_section` | Update section content, type, or position |
| `itglue_delete_document_section` | Permanently delete a section |

## API Key Setup

1. Log in to ITGlue as an Administrator
2. Go to **Account > Settings > API Keys**
3. Generate a new Custom API Key
4. Copy the key and set it as `ITGLUE_API_KEY`

> ITGlue automatically revokes API keys unused for 90+ days.

## Regions

| Region | Base URL |
|--------|----------|
| US (default) | `https://api.itglue.com` |
| EU | `https://api.eu.itglue.com` |
| Australia | `https://api.au.itglue.com` |

## Rate Limiting

The ITGlue API allows a maximum of 3,000 requests per 5-minute window. The server will return clear error messages if the rate limit is exceeded.

## Docker

### Build and run locally

```bash
docker build -t itglue-mcp-server .
docker run --rm -p 3000:3000 -e ITGLUE_API_KEY=your-key itglue-mcp-server
```

The Docker image runs in HTTP transport mode by default on port 3000.

### Pre-built image

```bash
docker pull ghcr.io/junto-platforms/itglue-mcp-server:latest
docker run --rm -p 3000:3000 -e ITGLUE_API_KEY=your-key ghcr.io/junto-platforms/itglue-mcp-server:latest
```

### Health check

```bash
curl http://localhost:3000/health
```

## Development

```bash
# Install dependencies
npm install

# Build
npm run build

# Run locally (stdio)
ITGLUE_API_KEY=your-key node dist/index.js

# Run locally (HTTP)
ITGLUE_API_KEY=your-key node dist/index.js --transport http

# Development with auto-reload
ITGLUE_API_KEY=your-key npm run dev

# Development with HTTP transport
ITGLUE_API_KEY=your-key npm run dev:http

# Run tests
npm test
```

## Sponsored by Junto

Secure client access, automated ticket resolution, and intelligent IT operations. Discover how Junto is transforming MSP service delivery at [juntoai.com](https://juntoai.com).

## License

MIT