Skip to main content
Glama
andyc00ps

Lumar MCP Server

by andyc00ps
README.md
# Lumar MCP Server

An MCP (Model Context Protocol) server that wraps the [Lumar](https://www.lumar.io/) GraphQL API, built with [FastMCP](https://gofastmcp.com/).

This lets any MCP-compatible AI assistant (Claude, etc.) query your Lumar SEO crawl data conversationally — list projects, inspect crawls, pull URL-level metrics, generate reports, and download raw data.

## Tools

| Tool | Description |
|------|-------------|
| `list_accounts` | List all accessible Lumar accounts |
| `list_projects` | List projects within an account |
| `get_project` | Get project details and recent crawls |
| `list_crawls` | List crawls for a project |
| `get_crawl` | Get details for a specific crawl |
| `get_report_stats` | Get report statistics and first 100 URLs |
| `get_url_data` | Get URL-level SEO metrics with filtering and pagination |
| `create_report_download` | Trigger a downloadable report file |
| `get_report_download` | Check download status / get URL |
| `get_raw_data_exports` | Get Parquet download URLs for full crawl data |
| `run_query` | Execute any arbitrary GraphQL query |

## Setup

### 1. Get Lumar API credentials

In your Lumar account, create a User Key to get a **User Key ID** and **Secret**. See [Lumar API docs](https://api-docs.lumar.io/) for details.

### 2. Install

```bash
# With uv (recommended)
uv pip install -e .

# Or with pip
pip install -e .
```

### 3. Configure credentials

Set environment variables:

```bash
export LUMAR_USER_KEY_ID="your-key-id"
export LUMAR_SECRET="your-secret"
```

### 4. Run

```bash
# As a module
python -m lumar_mcp.server

# Or via the entry point
lumar-mcp
```

## Claude Desktop configuration

Add this to your Claude Desktop `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "lumar": {
      "command": "python",
      "args": ["-m", "lumar_mcp.server"],
      "env": {
        "LUMAR_USER_KEY_ID": "your-key-id",
        "LUMAR_SECRET": "your-secret"
      }
    }
  }
}
```

Or if using `uv`:

```json
{
  "mcpServers": {
    "lumar": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/lumar-mcp-server", "python", "-m", "lumar_mcp.server"],
      "env": {
        "LUMAR_USER_KEY_ID": "your-key-id",
        "LUMAR_SECRET": "your-secret"
      }
    }
  }
}
```

## Example usage

Once connected, you can ask Claude things like:

- "List my Lumar accounts and projects"
- "Show me the last 5 crawls for project X"
- "Get the broken pages report for crawl Y"
- "Find all URLs with HTTP 500 errors in the latest crawl"
- "Download the raw crawl data as Parquet"
- "Generate a report download for indexable pages"

## Common report template codes

These are some frequently used Lumar report template codes you can pass to `get_report_stats` and `get_url_data`:

- `indexable_pages` — Pages that can be indexed
- `non_indexable_pages` — Pages blocked from indexing
- `broken_pages` — Pages returning 4xx/5xx errors
- `https_pages` — HTTPS page analysis
- `orphaned_google_search_console_pages` — Pages in GSC but not found in crawl
- `duplicate_pages` — Pages with duplicate content
- `thin_pages` — Pages with low word count

## Project structure

```
lumar-mcp-server/
├── pyproject.toml          # Package config and dependencies
├── README.md
└── lumar_mcp/
    ├── __init__.py
    ├── client.py           # Lumar GraphQL client with auth
    ├── queries.py          # Pre-built GraphQL queries
    └── server.py           # FastMCP server with all tools
```

## Extending

To add new tools, edit `server.py` and add a new function decorated with `@mcp.tool`. Add the corresponding GraphQL query to `queries.py`. The `run_query` tool also allows executing arbitrary GraphQL queries for anything not covered by the built-in tools.

## References

- [Lumar API Documentation](https://api-docs.lumar.io/)
- [Lumar GraphQL API](https://www.lumar.io/api/)
- [FastMCP Documentation](https://gofastmcp.com/)
- [DeepCrawl API Examples (GitHub)](https://github.com/deepcrawl/api-docs-examples)