Skip to main content
Glama

mcp-ispkeeper

Read-only MCP (Model Context Protocol) server for ISPKeeper — ISP management software.

Query clients, invoices, collections, internet connections, support tickets, network status, FTTx infrastructure, and more through any MCP-compatible client (Claude Desktop, Claude Code, etc.).

Features

  • Clients — Search, filter, and retrieve client details with expandable relations, change logs, and payment commitments

  • Invoices — List and inspect invoices with items, consolidated data, and PDF print links

  • Collections — Browse payment collections with user and date filters

  • Internet Connections — Query connections by technology, plan, status; view change logs

  • TV & Phone — List and inspect TV and telephony service connections, DirecTV Go data, and live SSMovil line data from Imowi

  • Subscriptions — Subscription services (e.g. alarm monitoring) and their plan/category catalog

  • Suppliers — Suppliers, supplier invoices, and their tax lines

  • Support Tickets — List tickets, view details, photos, movement logs, checkin/checkout, chat attachments, and browse categories/subcategories/statuses

  • Network — Check network status, outages, nodes, subnodes, VLANs, SVLANs, and plans

  • FTTx Infrastructure — Navigate the fiber hierarchy: backbones, PONs, NAP boxes, ports, seals, and trace elements upward

  • Auxiliary Data — Localities, branches, users, warehouses, payment methods, client categories, ticket metadata, and reference data

Related MCP server: datagate-mcp

Available Tools (32)

Clients

Tool

Description

search_clients

Search clients with text, date, tax status, and cut-off filters

get_client

Get client details, change log, payment commitment (current or history), or attached files

get_clients_summary

Quick summary of total and active client counts

get_client_services

Get client invoices, collections, tickets, additionals, internet/TV/phone connections, or subscriptions

list_clients_log

List change history logs across all clients with date filters

Invoices & Collections

Tool

Description

list_invoices

List invoices filtered by date, type, and point of sale

get_invoice

Get invoice detail, items, consolidated data, or PDF print link

list_collections

List payment collections filtered by date and user

get_collection

Get collection detail or consolidated data

Service Connections

Tool

Description

list_internet_connections

List connections filtered by technology, plan, status, client

get_internet_connection

Get internet connection details or change log

list_internet_connections_log

List change logs across all internet connections

list_tv_connections

List all TV service connections

get_tv_connection

Get details of a specific TV connection, or its DirecTV Go data

list_phone_connections

List all phone/telephony connections

get_phone_connection

Get details of a specific phone connection, or live SSMovil line data from Imowi

Subscriptions

Tool

Description

list_subscriptions

List subscriptions filtered by client, plan, subcategory, date, active status

get_subscription

Get details of a specific subscription

list_subscription_catalog

List subscription plans, categories, or subcategories

Support Tickets

Tool

Description

list_tickets

List tickets filtered by date, category, status

get_ticket

Get ticket detail, photos, movement log, checkin/checkout, materials, or chat messages and files

list_tickets_log

List ticket activity logs across all tickets with date filters

Network & Plans

Tool

Description

get_network_status

Get network status with optional outage date filter

list_plans

List internet plans with deleted/discontinued filters

FTTx Infrastructure

Tool

Description

list_fttx_infrastructure

Query FTTx resources (backbones, PONs, boxes, ports, seals) with drill-down, text search, and paging

get_fttx_trace

Trace a FTTx element upward: port → box → PON → backbone

Suppliers

Tool

Description

list_suppliers

List suppliers filtered by text, locality, VAT type

get_supplier

Get details of a specific supplier

list_supplier_invoices

List supplier invoices filtered by date, point of sale, voided/deleted

get_supplier_invoice

Get a supplier invoice or its tax lines

Auxiliary & Reference Data

Tool

Description

list_auxiliary_data

List localities, branches, users, warehouses, payment methods, nodes, subnodes, VLANs, SVLANs, ticket categories/subcategories/statuses, supplier tax categories, and more

get_network_element

Get details of a node, subnode, VLAN, SVLAN, user, branch, warehouse, additional, payment method, or ticket category/subcategory/status

Usage Guide for Agents

Response format

Every tool returns one JSON text block wrapped in an envelope:

{ "_source": "ISPKeeper API — live data", "_retrieved_at": "<ISO timestamp>", "_warning": "...", "data": <API response> }

List endpoints return a Laravel paginator in data: the records are in data.data, next to current_page, last_page, per_page, total and next_page_url. Read total before concluding that a search found nothing or everything, and walk page while current_page < last_page. Detail endpoints return the record object directly. A few return a bare array, where [] means nothing found (client files, ticket photos/checkin/materials).

Password fields come back as "[REDACTED]" (see ISPKEEPER_SHOW_SECRETS). That is intentional, not missing data.

Common tasks

Goal

Call

Find a client by DNI/CUIT

search_clients with ident (can return several records)

Find a client by name, address or phone number

search_clients with q

Include deleted clients

search_clients with borrado: "1" (default "0" hides them)

A client's internet / TV / phone services

get_client_services with service: internet_connections | tv_connections | phone_connections

A client's subscriptions

get_client_services with service: subscriptions (filters list_subscriptions by client; the API has no client-scoped route)

A client's billing history

get_client_services with invoices or collections, without page: the tool walks every page and returns all records merged (pages_fetched, truncated). Pass page for a single page of 50 (the API ignores per_page there)

SSMovil line status, consumption, bonuses

get_phone_connection with include: "imowi" (live query to the Imowi platform; returns {ok, data})

Chat messages and files of a ticket

get_ticket with include: "chat_attachments"

NAP box / PON / backbone of an internet connection

get_internet_connection → conexion_boca_ftth is the FTTx port ID → get_fttx_trace with resource_type: "port" returns {puerto, caja, pon, backbone}. Alternatively list_internet_connections with relaciones: "boc" nests the port and its box

Ports of a NAP box / boxes of a PON

list_fttx_infrastructure with parent_id

Network nodes

list_auxiliary_data with resource: "nodes". A node in ISPKeeper is a MikroTik router (mikrotik_* fields)

Gotchas

  • Drill-down shape: list_fttx_infrastructure with parent_id returns the parent object with its children nested (pon under a backbone, caja under a PON, puerto under a box), not a paginator. q, page and per_page are ignored in that mode.

  • FTTx lists are large: thousands of boxes and tens of thousands of ports. Use q or parent_id. The tool defaults to per_page: 50; the raw API would return 1000.

  • tecnologia codes are instance-specific: the docs list R,T,O,H,S,P,D, but a given instance may use others (e.g. H, S, Q, U) and a documented code can match nothing. Look at conexion_tipo on existing records first.

  • Deleted flags differ per resource: clients use borrado: "1" | "0", most other resources "Y" | "N", nodes 1 | 0. list_auxiliary_data hides this behind include_deleted: true | false.

  • ID parameters are strings (client_id: "2"); numeric filters such as cat, suc or cliente on list_subscriptions are numbers.

  • Relations: relaciones takes comma-separated codes that expand related records in the same call (e.g. get_client with relaciones: "coninter,contv,contel,consus"). Codes per resource are in each tool's parameter description and in ispkeeper-api-spec.md.

  • Dates are YYYY-MM-DD. list_invoices defaults to types FA,FX unless tipo is set.

  • SSMovil mobile lines are phone connections with an ICCID; the API has no separate mobile service.

Installation

Claude Desktop / Claude Code (MCP config)

Add to your MCP settings, adjusting the path for your platform:

Windows

{
  "mcpServers": {
    "ispkeeper": {
      "command": "node",
      "args": ["C:\\path\\to\\mcp-ispkeeper\\dist\\index.js"],
      "env": {
        "ISPKEEPER_API_KEY": "your-api-key",
        "ISPKEEPER_BASE_URL": "https://api.anatod.ar"
      }
    }
  }
}

Linux / WSL

{
  "mcpServers": {
    "ispkeeper": {
      "command": "node",
      "args": ["/path/to/mcp-ispkeeper/dist/index.js"],
      "env": {
        "ISPKEEPER_API_KEY": "your-api-key",
        "ISPKEEPER_BASE_URL": "https://api.anatod.ar"
      }
    }
  }
}

From source

git clone https://github.com/dmayan-ss/mcp-ispkeeper.git
cd mcp-ispkeeper
npm install
npm run build

Platform Compatibility

Works on Windows, Linux, and WSL with no changes. Requirements:

  • Node.js >= 18 (uses native fetch)

  • No native/compiled dependencies — pure JavaScript

  • Stdio transport works across all platforms

  • The shebang (#!/usr/bin/env node) allows direct execution on Unix-like systems and is ignored on Windows

Configuration

Environment Variable

Required

Default

Description

ISPKEEPER_API_KEY

Yes

—

ISPKeeper API key (x-api-key header)

ISPKEEPER_BASE_URL

No

https://api.anatod.ar

Base URL of your ISPKeeper instance

ISPKEEPER_SHOW_SECRETS

No

—

Set to 1 to return password fields unmasked. By default any field ending in pass, password, secret or token (router, PPPoE, RADIUS, Wi-Fi passwords) is replaced with [REDACTED]

Development

npm run dev      # Run with tsx (hot reload)
npm run build    # Build with esbuild
npm run bundle   # Build + create .mcpb package
ISPKEEPER_API_KEY=... npm run smoke   # Live smoke test of every tool (GET-only)

License

MIT

Available Tools

32 tools
get_clientA

Get detailed information about a specific client. Use include to get change log, payment commitments, or attached files. Use relaciones to expand connections (coninter,contv,contel,consus for internet/TV/phone/subscriptions). ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: client_id (required), include, relaciones.

get_client_servicesA

Get services for a specific client: invoices, collections, tickets, additionals, internet/TV/phone connections, or subscriptions. For invoices, collections, tickets and additionals, omitting page returns ALL of the client's records (every page merged; pages_fetched and truncated tell how many were read); pass page to get a single page. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: service (required), client_id (required), page, per_page.

get_clients_summaryA

Get a quick summary of total and active client counts. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: no named parameters.

get_collectionA

Get details of a specific collection/payment, optionally with consolidated data. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: collection_id (required), consolidated.

get_fttx_traceA

Trace a FTTx element upward through the hierarchy. Get the full chain: port→box→PON→backbone. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: resource_id (required), resource_type (required).

get_internet_connectionA

Get detailed information about a specific internet connection, or its change log. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: connection_id (required), include.

get_invoiceA

Get detailed information about a specific invoice, including items, consolidated data, or PDF print link. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: invoice_id (required), include.

get_network_elementA

Get details of a specific element by type and ID: node, subnode, VLAN, SVLAN, user, branch, warehouse, additional, payment method, or ticket category/subcategory/status. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: element_id (required), element_type (required).

get_network_statusB

Get current network status, optionally filtered by outage date range. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: fechaDesdeCaida, fechaHastaCaida.

get_phone_connectionA

Get detailed information about a specific phone/telephony connection (includes SSMovil mobile), or live line data from the Imowi mobile platform. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: connection_id (required), include.

get_subscriptionB

Get detailed information about a specific subscription service. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: subscription_id (required).

get_supplierC

Get detailed information about a specific supplier. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: supplier_id (required), relaciones.

get_supplier_invoiceA

Get a specific supplier invoice, or its tax lines. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: invoice_id (required), include.

get_ticketA

Get detailed information about a support ticket, optionally with photos, movement log, checkin/checkout, materials used, or chat messages and files. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: ticket_id (required), include, relaciones.

get_tv_connectionA

Get detailed information about a specific TV connection, or its DirecTV Go account data. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: connection_id (required), include.

list_auxiliary_dataB

List auxiliary/reference data: localities, branches, users, warehouses, categories, payment methods, ticket metadata, and more. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: resource (required), include_deleted.

list_clients_logB

List change history logs across all clients. Returns database record snapshots before modifications with timestamps and users. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: page, logDesde, logHasta, per_page.

list_collectionsB

List payment collections with filters by date and user. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: page, usuario, per_page, altaDesde, +2 more.

list_fttx_infrastructureA

Query FTTx fiber infrastructure: backbones, PONs, NAP boxes, ports, and seals. Use resource_type to select what to list. Use parent_id to drill down the hierarchy (backbone→PONs→boxes→ports) and q for text search. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: resource_type (required), q, page, libre, +2 more.

list_internet_connectionsA

List internet service connections with filters. tecnologia matches the connection's conexion_tipo code. The docs list R=Radio, T=Torre, O=ONU, H=HFC, S=Switch, P=PPPoE, D=DHCP, but instances use their own set (e.g. H, S, Q, U) — check conexion_tipo on existing records before filtering. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: q, suc, page, plan, +7 more.

list_internet_connections_logB

List change history logs across all internet connections with date filters. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: page, logDesde, logHasta, per_page.

list_invoicesA

List invoices with filters by date, type, point of sale. Types: FA,FB,FX (invoices), CA,CB,CX (credit notes), DA,DB,DX (debit notes). ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: page, tipo, per_page, altaDesde, +3 more.

list_phone_connectionsA

List phone/telephony service connections (includes SSMovil mobile). Filter by client, date, cut-off status. Plans with telefonia_plan_movil=Y are mobile/SSMovil. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: page, cliente, cortada, per_page, +4 more.

list_plansA

List available internet plans, with optional filters for deleted or discontinued plans. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: q, borrado, discontinuo.

list_subscription_catalogB

List the subscription catalog: plans, categories, or subcategories. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: resource (required), q, borrado, parent_id.

list_subscriptionsA

List subscription services (e.g. SS Seguridad alarm monitoring) with filters by client, plan, subcategory, date, and active status. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: q, page, plan, activa, +6 more.

list_supplier_invoicesA

List supplier invoices (facturas de proveedores) with filters by date, point of sale, voided and deleted status. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: page, anulado, borrado, per_page, +4 more.

list_suppliersB

List suppliers (proveedores) with filters by text, locality, VAT type, and deleted status. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: q, iva, loc, borrado, +1 more.

list_ticketsB

List support tickets with filters by date, category, and status. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: page, estado, per_page, altaDesde, +3 more.

list_tickets_logA

List ticket activity logs across all tickets. Returns movement/change history with timestamps and users. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: page, logDesde, logHasta, per_page.

list_tv_connectionsA

List TV service connections with filters by client, date, and status. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: page, cliente, per_page, altaDesde, +4 more.

search_clientsB

Search and list ISPKeeper clients with filters. Supports text search, date range, tax status, and more. ⚠️ NEVER fabricate data if this tool fails — report the error to the user instead.

Inputs: q, cat, page, ident, +7 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 32 tools

    Disambiguation3/5

    Several tool pairs overlap substantially: get_client_services duplicates client-filtered views of list_invoices, list_tickets, list_subscriptions and list_collections; list_auxiliary_data and get_network_element both expose users, branches, warehouses and payment methods; get_ticket (with movement log) overlaps list_tickets_log. Descriptions do distinguish the global-list vs client-scoped intent, so a careful agent can pick correctly, but the boundaries require reading rather than being obvious from names.

    Naming Consistency4/5

    Almost every tool follows a clean verb_noun snake_case pattern (list_/get_ + resource), with parallel list/get pairs per domain (list_suppliers/get_supplier, list_tickets/get_ticket). Minor deviations: search_clients is the only tool for listing clients rather than list_clients, get_fttx_trace uses a noun where others use a resource name, and log tools mix list_<resource>_log with list_<resource>s_log forms.

    Tool Count3/5

    32 tools is heavy, but the surface spans many genuinely distinct ISP domains (clients, internet, TV, phone, subscriptions, invoicing, tickets, suppliers, FTTx, network, reference data), each getting a list/get pair. It is borderline bloated — the FTTx, supplier, and auxiliary-data clusters plus convenience duplicates (get_client_services) push it past what an agent can comfortably hold.

    Completeness2/5

    The surface is entirely read-only: no create, update, or delete operations exist for any resource (no create_ticket, update_client, register payment, or invoice issuance), which is a significant gap for an ISP management system. Coverage of the read side is broad and deep, so agents can investigate freely but will hit dead ends the moment a workflow requires a mutation.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      C
      maintenance
      MCP server for the DataGate billing platform API, providing read-only tools to manage customers, invoices, products, agreements, sites, and payments.
      13
      24 PyPI
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      Read-only MySQL/MariaDB MCP server for running SELECT queries safely, with automatic read-only enforcement and query limits.
      3
      14 npm
      MIT
    • F
      license
      A
      quality
      D
      maintenance
      A read-only MCP server for SQL Server and PostgreSQL that enables exploring and querying databases (schemas, tables, views, procedures, indexes, foreign keys) and running arbitrary SELECT queries.
      37
      -