pingera-mcp-server


Namepingera-mcp-server JSON
Version 0.1.8 PyPI version JSON
download
home_pageNone
SummaryModel Context Protocol (MCP) server for Pingera monitoring service integration
upload_time2025-10-09 21:17:08
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
license MIT License Copyright (c) 2024 Pingera Team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords api mcp monitoring pingera playwright security statuspage synthetic web monitoring
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Pingera MCP Server

A Model Context Protocol (MCP) server for the [Pingera monitoring service](https://pingera.ru?utm_source=mcp_readme), providing seamless integration between AI models and monitoring data.

## Features

- **Modular Architecture**: Separate Pingera API client library with clean abstractions
- **Flexible Operation Modes**: Run in read-only or read-write mode
- **MCP Tools**: Execute monitoring operations through tools (list_pages, get_page_details, test_connection)
- **Robust Error Handling**: Comprehensive error handling with custom exception hierarchy
- **Real-time Data**: Direct integration with Pingera API v1 for live monitoring data
- **Type Safety**: Pydantic models for data validation and serialization
- **Configurable**: Environment-based configuration management

## Quick Start

### Prerequisites
- Python 3.10+
- UV package manager
- Pingera API key - get one at [app.pingera.ru](https://app.pingera.ru)

### Installation and Setup

```bash
# Install dependencies
uv sync

# Set up your API key (required)
# Add PINGERA_API_KEY to your environment 

# Run the server
python -m pingera_mcp
```

The server will start in read-only mode by default and connect to the Pingera API.

## Claude Desktop Integration

To use this MCP server with Claude Desktop, you need to configure it in your Claude Desktop settings.

### Installation

First, install the package globally using UV:

```bash
uv tool install pingera-mcp-server
```

### Configuration

Open the Claude Desktop configuration file:

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

Add the following configuration:

```json
{
  "mcpServers": {
    "pingera": {
      "command": "uv",
      "args": [
        "run",
        "--with",
        "pingera-mcp-server",
        "--python",
        "3.10",
        "python",
        "-m",
        "pingera_mcp"
      ],
      "env": {
        "PINGERA_API_KEY": "your_api_key_here",
        "PINGERA_MODE": "read_only",
        "PINGERA_BASE_URL": "https://api.pingera.ru/v1",
        "PINGERA_TIMEOUT": "30",
        "PINGERA_MAX_RETRIES": "3",
        "PINGERA_DEBUG": "false",
        "PINGERA_SERVER_NAME": "Pingera MCP Server"
      }
    }
  }
}
```

### Required Environment Variables

- **`PINGERA_API_KEY`** - Your Pingera API key (required)

### Optional Environment Variables

- **`PINGERA_MODE`** - Operation mode: `read_only` (default) or `read_write`
- **`PINGERA_BASE_URL`** - API endpoint (default: `https://api.pingera.ru/v1`)
- **`PINGERA_TIMEOUT`** - Request timeout in seconds (default: `30`)
- **`PINGERA_MAX_RETRIES`** - Maximum retry attempts (default: `3`)
- **`PINGERA_DEBUG`** - Enable debug logging (default: `false`)
- **`PINGERA_SERVER_NAME`** - Server display name (default: `Pingera MCP Server`)

### Restart Claude Desktop

After updating the configuration file, restart Claude Desktop to load the new MCP server. You should now be able to access your Pingera monitoring data directly through Claude's interface.

### Verify Installation

Once configured, you can ask Claude to:
- "What are my status pages and their names?"
- "Show details of a page with id ..."
- "When was the last failed check for check ..."
- "Run a simple synthetic check for the website with URL https://"

## Configuration

Configure the server using environment variables:

```bash
# Required
PINGERA_API_KEY=your_api_key_here

# Optional
PINGERA_MODE=read_only                    # read_only or read_write
PINGERA_BASE_URL=https://api.pingera.ru/v1
PINGERA_TIMEOUT=30
PINGERA_MAX_RETRIES=3
PINGERA_DEBUG=false
PINGERA_SERVER_NAME=Pingera MCP Server
```

## MCP Tools

Available tools for AI agents:

### Pages Management
- **`list_pages`** - Get paginated list of monitored pages
  - Parameters: `page`, `per_page`, `status`
- **`get_page_details`** - Get detailed information about a specific page
  - Parameters: `page_id`

### Component Management
- **`list_component_groups`** - List all component groups for monitoring organization
- **`get_component_details`** - Get detailed information about a specific component
  - Parameters: `component_id`

### Monitoring Checks
- **`list_checks`** - List all monitoring checks (HTTP, TCP, ping, etc.)
  - Parameters: `page`, `page_size`, `status`, `check_type`
- **`get_check_details`** - Get detailed information about a specific check
  - Parameters: `check_id`

### Alert Rules
- **`list_alert_rules`** - List all alert rules and their trigger conditions

### Heartbeat Monitoring
- **`list_heartbeats`** - List all heartbeat monitors for cron jobs and scheduled tasks
  - Parameters: `page`, `page_size`, `status`

### Incident Management
- **`list_incidents`** - List all incidents and their current status
  - Parameters: `page`, `page_size`, `status`

### Connection Testing
- **`test_pingera_connection`** - Test API connectivity

### Write Operations
Available only in read-write mode (`PINGERA_MODE=read_write`):

#### Pages Management
- **`create_page`** - Create a new status page
  - Parameters: `name` (required), `subdomain`, `domain`, `url`, `language`
- **`update_page`** - Update existing status page configuration
  - Parameters: `page_id` (required), `name`, `subdomain`, `domain`, `url`, `language`, additional kwargs
- **`patch_page`** - Partially update specific page fields
  - Parameters: `page_id` (required), kwargs for specific fields
- **`delete_page`** - Permanently delete a status page
  - Parameters: `page_id` (required)

#### Component Management
- **`create_component`** - Create new component or component group
  - Parameters: `page_id` (required), `name` (required), `description`, `group`, `group_id`, `only_show_if_degraded`, `position`, `showcase`, `status`
- **`update_component`** - Update existing component configuration
  - Parameters: `page_id` (required), `component_id` (required), `name`, `description`, `group`, `group_id`, `only_show_if_degraded`, `position`, `showcase`, `status`, additional kwargs
- **`patch_component`** - Partially update specific component fields
  - Parameters: `page_id` (required), `component_id` (required), kwargs for specific fields
- **`delete_component`** - Delete a component permanently
  - Parameters: `page_id` (required), `component_id` (required)

#### Monitoring Checks
- **`create_check`** - Create new monitoring check
  - Parameters: `check_data` (dict with check configuration)
- **`update_check`** - Update existing monitoring check
  - Parameters: `check_id` (required), `check_data` (dict with updated configuration)
- **`delete_check`** - Delete monitoring check permanently
  - Parameters: `check_id` (required)
- **`pause_check`** - Temporarily pause monitoring check
  - Parameters: `check_id` (required)
- **`resume_check`** - Resume paused monitoring check
  - Parameters: `check_id` (required)

#### Alert Rules
- **`create_alert`** - Create new alert rule
  - Parameters: `alert_data` (dict with alert configuration)
- **`update_alert`** - Update existing alert rule
  - Parameters: `alert_id` (required), `alert_data` (dict with updated configuration)
- **`delete_alert`** - Delete alert rule permanently
  - Parameters: `alert_id` (required)

#### Heartbeat Management
- **`create_heartbeat`** - Create new heartbeat monitor
  - Parameters: `heartbeat_data` (dict with heartbeat configuration)
- **`update_heartbeat`** - Update existing heartbeat monitor
  - Parameters: `heartbeat_id` (required), `heartbeat_data` (dict with updated configuration)
- **`delete_heartbeat`** - Delete heartbeat monitor permanently
  - Parameters: `heartbeat_id` (required)
- **`send_heartbeat_ping`** - Manually send ping to heartbeat
  - Parameters: `heartbeat_id` (required)

#### Incident Management
- **`create_incident`** - Create new incident on status page
  - Parameters: `page_id` (required), `incident_data` (dict with incident details)
- **`update_incident`** - Update existing incident details
  - Parameters: `page_id` (required), `incident_id` (required), `incident_data` (dict with updated details)
- **`delete_incident`** - Delete incident permanently
  - Parameters: `page_id` (required), `incident_id` (required)
- **`add_incident_update`** - Add status update to incident
  - Parameters: `page_id` (required), `incident_id` (required), `update_data` (dict with update details)
- **`update_incident_update`** - Edit existing incident update
  - Parameters: `page_id` (required), `incident_id` (required), `update_id` (required), `update_data` (dict with updated content)
- **`delete_incident_update`** - Delete specific incident update
  - Parameters: `page_id` (required), `incident_id` (required), `update_id` (required)

## Operation Modes

### Read-Only Mode (Default)
- Access monitoring data
- View status pages and their configurations
- Test API connectivity
- No modification capabilities

### Read-Write Mode
- All read-only features
- Create, update and delete resources: status pages, checks, alerts, heartbeats
- Execute checks and get their results
- Manage incidents and notifications

Set `PINGERA_MODE=read_write` to enable write operations.

## Architecture

### Pingera API Client Library
Located in `pingera/`, this modular library provides:

- **PingeraClient**: Main API client with authentication and error handling
- **Models**: Pydantic data models for type-safe API responses
- **Exceptions**: Custom exception hierarchy for error handling

### MCP Server Implementation
- **FastMCP Framework**: Modern MCP server implementation
- **Resource Management**: Structured access to monitoring data
- **Tool Registration**: Executable operations for AI agents
- **Configuration**: Environment-based settings management

## Testing

### Running the Test Suite

Run all tests:
```bash
uv run pytest
```

Run tests with verbose output:
```bash
uv run pytest -v
```

Run specific test files:
```bash
uv run pytest tests/test_models.py
uv run pytest tests/test_config.py
uv run pytest tests/test_mcp_server.py
```

Run tests with coverage:
```bash
uv run pytest --cov=pingera --cov=config --cov=mcp_server
```

### Test Structure

The test suite includes:
- **Unit Tests**: Testing individual components (models, config, client)
- **Integration Tests**: Testing MCP server functionality 
- **Mock Tests**: Testing with simulated API responses

### Testing with MCP Inspector

The [MCP Inspector](https://github.com/modelcontextprotocol/inspector) is an official debugging tool that provides a web interface to test MCP servers interactively. It allows you to explore available resources, execute tools, and inspect the server's responses in real-time.

#### Setup Inspector

1. Create an `mcp.json` configuration file:

```json
{
  "mcpServers": {
    "pingera": {
      "command": "uv",
      "args": [
        "run",
        "--with",
        "pingera-mcp-server",
        "--python",
        "3.10",
        "python",
        "-m",
        "pingera_mcp"
      ],
      "env": {
        "PINGERA_API_KEY": "your_pingera_api_key",
        "PINGERA_MODE": "read_only",
        "PINGERA_BASE_URL": "https://api.pingera.ru/v1",
        "PINGERA_TIMEOUT": "30",
        "PINGERA_MAX_RETRIES": "3",
        "PINGERA_DEBUG": "false"
      }
    }
  }
}
```

2. Run the inspector:

```bash
npx @modelcontextprotocol/inspector --config mcp.json
```

3. Open your browser to the provided URL (typically `http://localhost:6274`)

#### Using Inspector

The inspector provides:
- **Resources Tab**: Browse available monitoring data resources
- **Tools Tab**: Execute MCP tools like `list_pages`, `get_page_details`, etc.
- **Logs Tab**: View detailed communication logs between the inspector and server
- **Interactive Testing**: Test tool parameters and see real-time responses

This is the recommended way to test your MCP server integration before deploying with Claude Desktop or other MCP clients.

### Manual Testing with `mcp_client.py`

`mcp_client.py` uses Gemini models and integrates with the MCP server to execute various tools. It is just an example and can be easly modified to use any other Large Language Model.

```bash
python mcp_client.py "Show me my status pages"
```

## Error Handling

The system includes comprehensive error handling:
- `PingeraError`: Base exception for all client errors
- `PingeraAPIError`: API response errors with status codes
- `PingeraAuthError`: Authentication failures
- `PingeraConnectionError`: Network connectivity issues
- `PingeraTimeoutError`: Request timeout handling

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pingera-mcp-server",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "Pingera Team <privet@pingera.ru>",
    "keywords": "api, mcp, monitoring, pingera, playwright, security, statuspage, synthetic, web monitoring",
    "author": null,
    "author_email": "Pingera Team <privet@pingera.ru>",
    "download_url": "https://files.pythonhosted.org/packages/14/d1/0e48493ff5e9c98afb81273e691f56df7cd6b8d5bbe4661cf9c6557d9671/pingera_mcp_server-0.1.8.tar.gz",
    "platform": null,
    "description": "# Pingera MCP Server\n\nA Model Context Protocol (MCP) server for the [Pingera monitoring service](https://pingera.ru?utm_source=mcp_readme), providing seamless integration between AI models and monitoring data.\n\n## Features\n\n- **Modular Architecture**: Separate Pingera API client library with clean abstractions\n- **Flexible Operation Modes**: Run in read-only or read-write mode\n- **MCP Tools**: Execute monitoring operations through tools (list_pages, get_page_details, test_connection)\n- **Robust Error Handling**: Comprehensive error handling with custom exception hierarchy\n- **Real-time Data**: Direct integration with Pingera API v1 for live monitoring data\n- **Type Safety**: Pydantic models for data validation and serialization\n- **Configurable**: Environment-based configuration management\n\n## Quick Start\n\n### Prerequisites\n- Python 3.10+\n- UV package manager\n- Pingera API key - get one at [app.pingera.ru](https://app.pingera.ru)\n\n### Installation and Setup\n\n```bash\n# Install dependencies\nuv sync\n\n# Set up your API key (required)\n# Add PINGERA_API_KEY to your environment \n\n# Run the server\npython -m pingera_mcp\n```\n\nThe server will start in read-only mode by default and connect to the Pingera API.\n\n## Claude Desktop Integration\n\nTo use this MCP server with Claude Desktop, you need to configure it in your Claude Desktop settings.\n\n### Installation\n\nFirst, install the package globally using UV:\n\n```bash\nuv tool install pingera-mcp-server\n```\n\n### Configuration\n\nOpen the Claude Desktop configuration file:\n\n- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows**: `%APPDATA%/Claude/claude_desktop_config.json`\n\nAdd the following configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"pingera\": {\n      \"command\": \"uv\",\n      \"args\": [\n        \"run\",\n        \"--with\",\n        \"pingera-mcp-server\",\n        \"--python\",\n        \"3.10\",\n        \"python\",\n        \"-m\",\n        \"pingera_mcp\"\n      ],\n      \"env\": {\n        \"PINGERA_API_KEY\": \"your_api_key_here\",\n        \"PINGERA_MODE\": \"read_only\",\n        \"PINGERA_BASE_URL\": \"https://api.pingera.ru/v1\",\n        \"PINGERA_TIMEOUT\": \"30\",\n        \"PINGERA_MAX_RETRIES\": \"3\",\n        \"PINGERA_DEBUG\": \"false\",\n        \"PINGERA_SERVER_NAME\": \"Pingera MCP Server\"\n      }\n    }\n  }\n}\n```\n\n### Required Environment Variables\n\n- **`PINGERA_API_KEY`** - Your Pingera API key (required)\n\n### Optional Environment Variables\n\n- **`PINGERA_MODE`** - Operation mode: `read_only` (default) or `read_write`\n- **`PINGERA_BASE_URL`** - API endpoint (default: `https://api.pingera.ru/v1`)\n- **`PINGERA_TIMEOUT`** - Request timeout in seconds (default: `30`)\n- **`PINGERA_MAX_RETRIES`** - Maximum retry attempts (default: `3`)\n- **`PINGERA_DEBUG`** - Enable debug logging (default: `false`)\n- **`PINGERA_SERVER_NAME`** - Server display name (default: `Pingera MCP Server`)\n\n### Restart Claude Desktop\n\nAfter updating the configuration file, restart Claude Desktop to load the new MCP server. You should now be able to access your Pingera monitoring data directly through Claude's interface.\n\n### Verify Installation\n\nOnce configured, you can ask Claude to:\n- \"What are my status pages and their names?\"\n- \"Show details of a page with id ...\"\n- \"When was the last failed check for check ...\"\n- \"Run a simple synthetic check for the website with URL https://\"\n\n## Configuration\n\nConfigure the server using environment variables:\n\n```bash\n# Required\nPINGERA_API_KEY=your_api_key_here\n\n# Optional\nPINGERA_MODE=read_only                    # read_only or read_write\nPINGERA_BASE_URL=https://api.pingera.ru/v1\nPINGERA_TIMEOUT=30\nPINGERA_MAX_RETRIES=3\nPINGERA_DEBUG=false\nPINGERA_SERVER_NAME=Pingera MCP Server\n```\n\n## MCP Tools\n\nAvailable tools for AI agents:\n\n### Pages Management\n- **`list_pages`** - Get paginated list of monitored pages\n  - Parameters: `page`, `per_page`, `status`\n- **`get_page_details`** - Get detailed information about a specific page\n  - Parameters: `page_id`\n\n### Component Management\n- **`list_component_groups`** - List all component groups for monitoring organization\n- **`get_component_details`** - Get detailed information about a specific component\n  - Parameters: `component_id`\n\n### Monitoring Checks\n- **`list_checks`** - List all monitoring checks (HTTP, TCP, ping, etc.)\n  - Parameters: `page`, `page_size`, `status`, `check_type`\n- **`get_check_details`** - Get detailed information about a specific check\n  - Parameters: `check_id`\n\n### Alert Rules\n- **`list_alert_rules`** - List all alert rules and their trigger conditions\n\n### Heartbeat Monitoring\n- **`list_heartbeats`** - List all heartbeat monitors for cron jobs and scheduled tasks\n  - Parameters: `page`, `page_size`, `status`\n\n### Incident Management\n- **`list_incidents`** - List all incidents and their current status\n  - Parameters: `page`, `page_size`, `status`\n\n### Connection Testing\n- **`test_pingera_connection`** - Test API connectivity\n\n### Write Operations\nAvailable only in read-write mode (`PINGERA_MODE=read_write`):\n\n#### Pages Management\n- **`create_page`** - Create a new status page\n  - Parameters: `name` (required), `subdomain`, `domain`, `url`, `language`\n- **`update_page`** - Update existing status page configuration\n  - Parameters: `page_id` (required), `name`, `subdomain`, `domain`, `url`, `language`, additional kwargs\n- **`patch_page`** - Partially update specific page fields\n  - Parameters: `page_id` (required), kwargs for specific fields\n- **`delete_page`** - Permanently delete a status page\n  - Parameters: `page_id` (required)\n\n#### Component Management\n- **`create_component`** - Create new component or component group\n  - Parameters: `page_id` (required), `name` (required), `description`, `group`, `group_id`, `only_show_if_degraded`, `position`, `showcase`, `status`\n- **`update_component`** - Update existing component configuration\n  - Parameters: `page_id` (required), `component_id` (required), `name`, `description`, `group`, `group_id`, `only_show_if_degraded`, `position`, `showcase`, `status`, additional kwargs\n- **`patch_component`** - Partially update specific component fields\n  - Parameters: `page_id` (required), `component_id` (required), kwargs for specific fields\n- **`delete_component`** - Delete a component permanently\n  - Parameters: `page_id` (required), `component_id` (required)\n\n#### Monitoring Checks\n- **`create_check`** - Create new monitoring check\n  - Parameters: `check_data` (dict with check configuration)\n- **`update_check`** - Update existing monitoring check\n  - Parameters: `check_id` (required), `check_data` (dict with updated configuration)\n- **`delete_check`** - Delete monitoring check permanently\n  - Parameters: `check_id` (required)\n- **`pause_check`** - Temporarily pause monitoring check\n  - Parameters: `check_id` (required)\n- **`resume_check`** - Resume paused monitoring check\n  - Parameters: `check_id` (required)\n\n#### Alert Rules\n- **`create_alert`** - Create new alert rule\n  - Parameters: `alert_data` (dict with alert configuration)\n- **`update_alert`** - Update existing alert rule\n  - Parameters: `alert_id` (required), `alert_data` (dict with updated configuration)\n- **`delete_alert`** - Delete alert rule permanently\n  - Parameters: `alert_id` (required)\n\n#### Heartbeat Management\n- **`create_heartbeat`** - Create new heartbeat monitor\n  - Parameters: `heartbeat_data` (dict with heartbeat configuration)\n- **`update_heartbeat`** - Update existing heartbeat monitor\n  - Parameters: `heartbeat_id` (required), `heartbeat_data` (dict with updated configuration)\n- **`delete_heartbeat`** - Delete heartbeat monitor permanently\n  - Parameters: `heartbeat_id` (required)\n- **`send_heartbeat_ping`** - Manually send ping to heartbeat\n  - Parameters: `heartbeat_id` (required)\n\n#### Incident Management\n- **`create_incident`** - Create new incident on status page\n  - Parameters: `page_id` (required), `incident_data` (dict with incident details)\n- **`update_incident`** - Update existing incident details\n  - Parameters: `page_id` (required), `incident_id` (required), `incident_data` (dict with updated details)\n- **`delete_incident`** - Delete incident permanently\n  - Parameters: `page_id` (required), `incident_id` (required)\n- **`add_incident_update`** - Add status update to incident\n  - Parameters: `page_id` (required), `incident_id` (required), `update_data` (dict with update details)\n- **`update_incident_update`** - Edit existing incident update\n  - Parameters: `page_id` (required), `incident_id` (required), `update_id` (required), `update_data` (dict with updated content)\n- **`delete_incident_update`** - Delete specific incident update\n  - Parameters: `page_id` (required), `incident_id` (required), `update_id` (required)\n\n## Operation Modes\n\n### Read-Only Mode (Default)\n- Access monitoring data\n- View status pages and their configurations\n- Test API connectivity\n- No modification capabilities\n\n### Read-Write Mode\n- All read-only features\n- Create, update and delete resources: status pages, checks, alerts, heartbeats\n- Execute checks and get their results\n- Manage incidents and notifications\n\nSet `PINGERA_MODE=read_write` to enable write operations.\n\n## Architecture\n\n### Pingera API Client Library\nLocated in `pingera/`, this modular library provides:\n\n- **PingeraClient**: Main API client with authentication and error handling\n- **Models**: Pydantic data models for type-safe API responses\n- **Exceptions**: Custom exception hierarchy for error handling\n\n### MCP Server Implementation\n- **FastMCP Framework**: Modern MCP server implementation\n- **Resource Management**: Structured access to monitoring data\n- **Tool Registration**: Executable operations for AI agents\n- **Configuration**: Environment-based settings management\n\n## Testing\n\n### Running the Test Suite\n\nRun all tests:\n```bash\nuv run pytest\n```\n\nRun tests with verbose output:\n```bash\nuv run pytest -v\n```\n\nRun specific test files:\n```bash\nuv run pytest tests/test_models.py\nuv run pytest tests/test_config.py\nuv run pytest tests/test_mcp_server.py\n```\n\nRun tests with coverage:\n```bash\nuv run pytest --cov=pingera --cov=config --cov=mcp_server\n```\n\n### Test Structure\n\nThe test suite includes:\n- **Unit Tests**: Testing individual components (models, config, client)\n- **Integration Tests**: Testing MCP server functionality \n- **Mock Tests**: Testing with simulated API responses\n\n### Testing with MCP Inspector\n\nThe [MCP Inspector](https://github.com/modelcontextprotocol/inspector) is an official debugging tool that provides a web interface to test MCP servers interactively. It allows you to explore available resources, execute tools, and inspect the server's responses in real-time.\n\n#### Setup Inspector\n\n1. Create an `mcp.json` configuration file:\n\n```json\n{\n  \"mcpServers\": {\n    \"pingera\": {\n      \"command\": \"uv\",\n      \"args\": [\n        \"run\",\n        \"--with\",\n        \"pingera-mcp-server\",\n        \"--python\",\n        \"3.10\",\n        \"python\",\n        \"-m\",\n        \"pingera_mcp\"\n      ],\n      \"env\": {\n        \"PINGERA_API_KEY\": \"your_pingera_api_key\",\n        \"PINGERA_MODE\": \"read_only\",\n        \"PINGERA_BASE_URL\": \"https://api.pingera.ru/v1\",\n        \"PINGERA_TIMEOUT\": \"30\",\n        \"PINGERA_MAX_RETRIES\": \"3\",\n        \"PINGERA_DEBUG\": \"false\"\n      }\n    }\n  }\n}\n```\n\n2. Run the inspector:\n\n```bash\nnpx @modelcontextprotocol/inspector --config mcp.json\n```\n\n3. Open your browser to the provided URL (typically `http://localhost:6274`)\n\n#### Using Inspector\n\nThe inspector provides:\n- **Resources Tab**: Browse available monitoring data resources\n- **Tools Tab**: Execute MCP tools like `list_pages`, `get_page_details`, etc.\n- **Logs Tab**: View detailed communication logs between the inspector and server\n- **Interactive Testing**: Test tool parameters and see real-time responses\n\nThis is the recommended way to test your MCP server integration before deploying with Claude Desktop or other MCP clients.\n\n### Manual Testing with `mcp_client.py`\n\n`mcp_client.py` uses Gemini models and integrates with the MCP server to execute various tools. It is just an example and can be easly modified to use any other Large Language Model.\n\n```bash\npython mcp_client.py \"Show me my status pages\"\n```\n\n## Error Handling\n\nThe system includes comprehensive error handling:\n- `PingeraError`: Base exception for all client errors\n- `PingeraAPIError`: API response errors with status codes\n- `PingeraAuthError`: Authentication failures\n- `PingeraConnectionError`: Network connectivity issues\n- `PingeraTimeoutError`: Request timeout handling\n",
    "bugtrack_url": null,
    "license": " MIT License  Copyright (c) 2024 Pingera Team  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
    "summary": "Model Context Protocol (MCP) server for Pingera monitoring service integration",
    "version": "0.1.8",
    "project_urls": {
        "Changelog": "https://github.com/pingera/pingera-mcp/blob/main/CHANGELOG.md",
        "Documentation": "https://github.com/pingera/pingera-mcp#readme",
        "Homepage": "https://pingera.ru",
        "Issues": "https://github.com/pingera/pingera-mcp/issues",
        "Repository": "https://github.com/pingera/pingera-mcp"
    },
    "split_keywords": [
        "api",
        " mcp",
        " monitoring",
        " pingera",
        " playwright",
        " security",
        " statuspage",
        " synthetic",
        " web monitoring"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d206a6cfdd91fa712bb8d1d228f8fe2317aa0c857ba4498a1d89791e824ba372",
                "md5": "ccd10b8e5917c378b37045e572f3504f",
                "sha256": "11a34ffb0918387c0610159d0036e0d62246b1013414b03ffb798dc418a7eebf"
            },
            "downloads": -1,
            "filename": "pingera_mcp_server-0.1.8-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ccd10b8e5917c378b37045e572f3504f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 53614,
            "upload_time": "2025-10-09T21:17:07",
            "upload_time_iso_8601": "2025-10-09T21:17:07.736470Z",
            "url": "https://files.pythonhosted.org/packages/d2/06/a6cfdd91fa712bb8d1d228f8fe2317aa0c857ba4498a1d89791e824ba372/pingera_mcp_server-0.1.8-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "14d10e48493ff5e9c98afb81273e691f56df7cd6b8d5bbe4661cf9c6557d9671",
                "md5": "d002125c970819149021b9fdc4d13742",
                "sha256": "e491958fa6779343abcaf3d11de01d1ec4183cec8fb5b737f8e324b71bbdd700"
            },
            "downloads": -1,
            "filename": "pingera_mcp_server-0.1.8.tar.gz",
            "has_sig": false,
            "md5_digest": "d002125c970819149021b9fdc4d13742",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 126783,
            "upload_time": "2025-10-09T21:17:08",
            "upload_time_iso_8601": "2025-10-09T21:17:08.821347Z",
            "url": "https://files.pythonhosted.org/packages/14/d1/0e48493ff5e9c98afb81273e691f56df7cd6b8d5bbe4661cf9c6557d9671/pingera_mcp_server-0.1.8.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-09 21:17:08",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "pingera",
    "github_project": "pingera-mcp",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "pingera-mcp-server"
}
        
Elapsed time: 0.99939s