PestScan MCP by usefulapi

Read customers, locations, orders, appointments, infestations and bait stations in PestScan.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
78%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,793Tokens (tool definitions)
~1.9 KBTypical response size
Significant attention impact (2.96% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "pestscan": {
      "url": "https://pestscan.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://pestscan.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (15)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢pestscan_test_connection

Log in and check that the PestScan API answers. Good first call. PestScan API: GET /v1/test/connection.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_customers(searchText, customerType, externalId, id, page, ...)

List customers (companies and private persons) with their names and external ids. Use it to find a customer id. PestScan API: GET /v1/crm/customers.

Input Schema

{
  "type": "object",
  "properties": {
    "searchText": {
      "description": "Free-text search filter, as the API accepts it.",
      "type": "string"
    },
    "customerType": {
      "description": "Customer type: 1 = company, 2 = private person.",
      "anyOf": [
        {
          "type": "number",
          "const": 1
        },
        {
          "type": "number",
          "const": 2
        }
      ]
    },
    "externalId": {
      "description": "Filter by the external id your system uses for the record.",
      "type": "string"
    },
    "id": {
      "description": "Filter by the numeric PestScan id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "page": {
      "description": "Page number, from 1 (default 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "pageSize": {
      "description": "Records per page (default 20, max 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_locations(searchText, externalId, id, customerId, page, ...)

List customer locations (the sites that pests are checked at), with their customer id. PestScan API: GET /v1/crm/locations.

Input Schema

{
  "type": "object",
  "properties": {
    "searchText": {
      "description": "Free-text search filter, as the API accepts it.",
      "type": "string"
    },
    "externalId": {
      "description": "Filter by the external id your system uses for the record.",
      "type": "string"
    },
    "id": {
      "description": "Filter by the numeric PestScan id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "customerId": {
      "description": "Filter by the customer id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "page": {
      "description": "Page number, from 1 (default 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "pageSize": {
      "description": "Records per page (default 20, max 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_get_location(id)

Get one location with its full details by PestScan id. PestScan API: GET /v1/crm/locations/GetById?id.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647,
      "description": "The numeric PestScan id of the record."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_orders(fromDate, toDate, id, externalId, page, ...)

List orders (visits) created in a date range, with status, visit type and planned dates. PestScan API: GET /v1/crm/orders.

Input Schema

{
  "type": "object",
  "properties": {
    "fromDate": {
      "description": "Only orders created on or after this date or date-time.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
    },
    "toDate": {
      "description": "Only orders created on or before this date or date-time.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
    },
    "id": {
      "description": "Filter by the numeric PestScan id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "externalId": {
      "description": "Filter by the external id your system uses for the record.",
      "type": "string"
    },
    "page": {
      "description": "Page number, from 1 (default 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "pageSize": {
      "description": "Records per page (default 20, max 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_new_orders

List order sheets that are new for this integration, not yet taken over. Reading does not confirm them. PestScan API: GET /v1/crm/orders/new.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_completed_orders

List order sheets that are completed and ready for the integration. Reading does not confirm them. PestScan API: GET /v1/crm/orders/completed.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_appointments(id, fromDate, toDate, page, pageSize)

List appointments with their employees, in a date range (end on or after fromDate, start on or before toDate). PestScan API: GET /v1/crm/appointments.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "description": "Filter by the numeric PestScan id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "fromDate": {
      "description": "ISO 8601 date or date-time, e.g. 2026-11-01 or 2026-11-01T00:00:00Z.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
    },
    "toDate": {
      "description": "ISO 8601 date or date-time, e.g. 2026-11-01 or 2026-11-01T00:00:00Z.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
    },
    "page": {
      "description": "Page number, from 1 (default 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "pageSize": {
      "description": "Records per page (default 20, max 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_infestations(surveyId, externalSurveyId, baitStationId, pestType, fromDate, ...)

List infestations (pest findings) recorded at a location, filtered by survey, bait station, pest type or date. PestScan API: GET /v1/crm/infestations.

Input Schema

{
  "type": "object",
  "properties": {
    "surveyId": {
      "description": "Filter by the location (survey) PestScan id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "externalSurveyId": {
      "description": "Filter by the location (survey) external id.",
      "type": "string"
    },
    "baitStationId": {
      "description": "Filter by the bait station id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "pestType": {
      "description": "Filter by pest type, as the API names it.",
      "type": "string"
    },
    "fromDate": {
      "description": "ISO 8601 date or date-time, e.g. 2026-11-01 or 2026-11-01T00:00:00Z.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
    },
    "toDate": {
      "description": "ISO 8601 date or date-time, e.g. 2026-11-01 or 2026-11-01T00:00:00Z.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
    },
    "page": {
      "description": "Page number, from 1 (default 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "pageSize": {
      "description": "Records per page (default 20, max 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_bait_stations(baitStationId, surveyId, externalSurveyId, getFrom, page, ...)

List bait stations (monitoring points) with their location, optionally from a date. PestScan API: GET /v1/crm/baitstations.

Input Schema

{
  "type": "object",
  "properties": {
    "baitStationId": {
      "description": "Filter by the numeric PestScan id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "surveyId": {
      "description": "Filter by the location (survey) PestScan id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "externalSurveyId": {
      "description": "Filter by the location (survey) external id.",
      "type": "string"
    },
    "getFrom": {
      "description": "Only bait stations changed on or after this date or date-time.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
    },
    "page": {
      "description": "Page number, from 1 (default 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "pageSize": {
      "description": "Records per page (default 20, max 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_recommendations(surveyId, status, getFrom, page, pageSize)

List recommendations (advice from the inspector) for locations, filtered by survey and status. PestScan API: GET /v1/crm/recommendations.

Input Schema

{
  "type": "object",
  "properties": {
    "surveyId": {
      "description": "Filter by the location (survey) id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "status": {
      "description": "Filter by the exact recommendation status value.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "getFrom": {
      "description": "Only recommendations changed on or after this date or date-time.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
    },
    "page": {
      "description": "Page number, from 1 (default 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "pageSize": {
      "description": "Records per page (default 20, max 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_consumption(surveyId, surveyExternalId, orderSheetId, fromDate, toDate, ...)

List materials used (consumption) per location or visit, in a date range. PestScan API: GET /v1/crm/consumption.

Input Schema

{
  "type": "object",
  "properties": {
    "surveyId": {
      "description": "Filter by the location (survey) PestScan id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "surveyExternalId": {
      "description": "Filter by the location (survey) external id.",
      "type": "string"
    },
    "orderSheetId": {
      "description": "Filter by the visit (order sheet) PestScan id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "fromDate": {
      "description": "ISO 8601 date or date-time, e.g. 2026-11-01 or 2026-11-01T00:00:00Z.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
    },
    "toDate": {
      "description": "ISO 8601 date or date-time, e.g. 2026-11-01 or 2026-11-01T00:00:00Z.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:\\d{2})?)?$"
    },
    "page": {
      "description": "Page number, from 1 (default 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "pageSize": {
      "description": "Records per page (default 50, max 200).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_employees(searchText, externalId, employeeId, page, pageSize)

List employees (technicians and office users) with their names and external ids. PestScan API: GET /v1/crm/employees.

Input Schema

{
  "type": "object",
  "properties": {
    "searchText": {
      "description": "Search by first name, last name or username.",
      "type": "string"
    },
    "externalId": {
      "description": "Filter by the external id your system uses for the record.",
      "type": "string"
    },
    "employeeId": {
      "description": "Filter by the numeric PestScan id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "page": {
      "description": "Page number, from 1 (default 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "pageSize": {
      "description": "Records per page (default 20, max 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_articles(searchText, externalId, id, categoryId, page, ...)

List articles (products and materials) with their category. Category 0 = rodents, 1 = insects, 2 = electric traps. PestScan API: GET /v1/crm/articles.

Input Schema

{
  "type": "object",
  "properties": {
    "searchText": {
      "description": "Search by article name.",
      "type": "string"
    },
    "externalId": {
      "description": "Filter by the external id your system uses for the record.",
      "type": "string"
    },
    "id": {
      "description": "Filter by the numeric PestScan id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "categoryId": {
      "description": "Filter by category id (0 = rodents, 1 = insects, 2 = electric traps).",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "page": {
      "description": "Page number, from 1 (default 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "pageSize": {
      "description": "Records per page (default 20, max 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢pestscan_list_visit_types(searchText, id, page, pageSize)

List the visit types (kinds of visit) that the account uses. PestScan API: GET /v1/crm/visit-types.

Input Schema

{
  "type": "object",
  "properties": {
    "searchText": {
      "description": "Search by description.",
      "type": "string"
    },
    "id": {
      "description": "Filter by the numeric PestScan id.",
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647
    },
    "page": {
      "description": "Page number, from 1 (default 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 2147483647
    },
    "pageSize": {
      "description": "Records per page (default 20, max 100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded15 tools