Skip to main content
Glama
Zfinix

fiberone-mcp

by Zfinix
README.md
# fiberone-mcp

Unofficial MCP server for the FiberOne Broadband (fob.ng) customer API. Not affiliated with or endorsed by FiberOne.

A Model Context Protocol (MCP) server exposing the FiberOne Broadband subscriber API
(https://eservice.fob.ng) as tools. Built with the official
[@modelcontextprotocol/sdk](https://www.npmjs.com/package/@modelcontextprotocol/sdk)
over stdio transport.

## Skill (agent plugin protocol)

The package ships an agent skill at `skills/fiberone/SKILL.md` (standard SKILL.md frontmatter format). Install it alongside the server so your agent knows how to use the tools:

```sh
aster skills add /path/to/fiberone-mcp -s fiberone --all -y
# or copy the directory into .aster/skills/ (project) or <config>/aster/skills (user-global)
```

## Setup

Requires Node.js 18+.

```bash
cd fiberone-mcp
npm install
npm run build
```

Configure credentials via environment variables (see `.env.example`):

- `FIBERONE_USERNAME` / `FIBERONE_PASSWORD` — your portal login; the server logs in lazily on the first tool call.
- `FIBERONE_TOKEN` *(optional)* — a pre-obtained bearer token to skip login entirely.

Never commit real credentials. `.env` is gitignored.

## MCP config snippet

```json
{
  "mcpServers": {
    "fiberone": {
      "command": "node",
      "args": ["fiberone-mcp/dist/index.js"],
      "env": {
        "FIBERONE_USERNAME": "<your-username>",
        "FIBERONE_PASSWORD": "<your-password>"
      }
    }
  }
}
```

`aster.yaml` equivalent:

```yaml
mcp:
  servers:
    fiberone:
      command: node
      args: [fiberone-mcp/dist/index.js]
      env:
        FIBERONE_USERNAME: <your-username>
        FIBERONE_PASSWORD: <your-password>
```

## Tools

| Tool | Description |
| --- | --- |
| `login` | Log in explicitly and cache the session token |
| `logout` | End the session and clear the cached token |
| `get_account` | Subscriber account details |
| `get_dashboard` | Dashboard overview stats |
| `get_usage` | Data usage (paginated) |
| `get_transactions` | Payment transactions (paginated) |
| `get_plans` | Available plans/packages (paginated) |
| `get_outage_tickets` | Outage tickets (paginated) |
| `create_outage_ticket` | File a real outage report with FiberOne |
| `get_ticket_categories` | Ticket categories and priorities |
| `get_lost_days` | Lost-days log for outage compensation |
| `get_modem_info` | Modem/router devices (paginated) |

All list tools accept `page` (default 1) and `limit` (default 20). Read-only tools are annotated with `readOnlyHint: true`; only `create_outage_ticket` and `logout` mutate state.

Tokens are never returned in tool output or error messages. On 401 the client re-logs in once automatically (unless you supplied `FIBERONE_TOKEN`, which cannot be refreshed).

TDQS

B3.4/5.0

Scored across 22 tools

Disambiguation4/5

Tool names clearly indicate distinct resources: account, usage, transactions, tickets, modem, pause, autorenew, plans, etc. A few related plan tools (get_plans, get_renewal_plan, get_upgrade_plans) could be confused, but descriptions clarify their scope.

Naming Consistency4/5

The set consistently uses lowercase snake_case, with get_ as the dominant read prefix and action verbs for the few writes (login, logout, create_outage_ticket). login/logout break the verb_noun pattern slightly, but the convention is predictable.

Tool Count3/5

At 22 tools, the server is on the heavy side and includes several peripheral getters (FAQs, experience centres, dashboard) that could be trimmed. The count is not unreasonable for a broad ISP self-service API, but it exceeds the ideal 3-15 range.

Completeness2/5

The surface is heavily read-only: it exposes status and history for pauses, auto-renew, pay4me, and upgrades, but no corresponding actions to pause, update auto-renew, create a pay4me request, or upgrade. With only create_outage_ticket as a mutating tool, agents will hit dead ends on common account-management tasks.

Maintenance

ActivityMaintained
ResponsivenessNo issues