fiberone-mcp
# 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
Scored across 22 tools
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.
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.
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.
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.