Skip to main content
Glama
README.md
# line-bot-ops-mcp

MCP server for running your own LINE bot from Claude, Cursor or any MCP client. It covers the
part generic LINE MCP servers can't: your bot's webhook queue. Ask *why* a message was never
answered, see the failed jobs, and put them back in the queue.

> "Why did the bot stop replying?" → `line_queue_health`, `line_failed_jobs`, `line_retry_job`
> "How many followers did we gain yesterday, and how much push quota is left?"
> "Switch user U123… to the seller menu."

## Tools

| Tool | What it does | Needs |
|---|---|---|
| `line_bot_info` | Display name, basic ID, chat mode of the Official Account | LINE |
| `line_message_quota` | Monthly push quota and how much is used | LINE |
| `line_followers_insight` | Followers, targeted reaches and blocks for one day | LINE |
| `line_get_profile` | Profile of one user who added the bot | LINE |
| `line_richmenu_list` | All Rich Menus, and which is the default | LINE |
| `line_push_text` | Send a text to one user, group or room | LINE |
| `line_link_richmenu` | Show a specific Rich Menu to one user, or remove it | LINE |
| `line_queue_health` | Jobs per status, age of the oldest pending job, jobs stuck in processing | Supabase |
| `line_failed_jobs` | Most recent failed jobs with their error and message text | Supabase |
| `line_retry_job` | Put a failed job back to pending | Supabase |
| `line_find_users` | Search linked users by display name or role | Supabase |
| `line_broadcast` | Send to every friend. Only registered when `LINE_MCP_ALLOW_BROADCAST=true` | LINE |

The LINE tools work with any Messaging API channel. The queue tools expect the `line_jobs` and
`line_users` tables in [`schema.sql`](schema.sql), which is the schema every project generated by
[create-line-bot](https://github.com/MankhongGarden/create-line-bot) already has. If your bot
doesn't use a queue, leave the Supabase variables unset and use the LINE tools only.

## Setup

```json
{
  "mcpServers": {
    "line-bot-ops": {
      "command": "npx",
      "args": ["-y", "line-bot-ops-mcp"],
      "env": {
        "LINE_CHANNEL_ACCESS_TOKEN": "...",
        "SUPABASE_URL": "https://<project>.supabase.co",
        "SUPABASE_SERVICE_ROLE_KEY": "..."
      }
    }
  }
}
```

With Claude Code:

```bash
claude mcp add line-bot-ops -e LINE_CHANNEL_ACCESS_TOKEN=... -e SUPABASE_URL=... -e SUPABASE_SERVICE_ROLE_KEY=... -- npx -y line-bot-ops-mcp
```

| Variable | Required | |
|---|---|---|
| `LINE_CHANNEL_ACCESS_TOKEN` | for LINE tools | Long-lived channel access token |
| `SUPABASE_URL` | for queue tools | `NEXT_PUBLIC_SUPABASE_URL` is accepted too, so a Next.js `.env.local` works as is |
| `SUPABASE_SERVICE_ROLE_KEY` | for queue tools | Server-side only. Never ship it to a browser |
| `LINE_MCP_ALLOW_BROADCAST` | no | `true` to register `line_broadcast` |

The server starts without any of these. A tool whose credentials are missing returns an error
naming the variable.

## Safety

- Broadcast is off unless you opt in, because it messages every friend and can't be undone.
- Every tool carries MCP annotations. Only push, Rich Menu changes, retries and broadcast are
  marked as writes.
- `line_retry_job` only moves jobs that are `failed`. Reply tokens expire soon after the event, so
  a retried job that replies may fail again; push is the fallback.

## Related

- [create-line-bot](https://github.com/MankhongGarden/create-line-bot): scaffolds the bot this
  server is built to operate (fast-ack webhook, queue, idempotency, LIFF).
- [Surviving LINE's 5-second webhook timeout on Vercel](https://github.com/MankhongGarden/line-webhook-fast-ack-dispatcher-worker):
  why the queue exists.

## License

MIT

TDQS

A3.7/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct operation: user lookup vs profile retrieval, push vs broadcast, queue health vs failed job listing vs retry, and rich menu listing vs linking. Overlaps are minimal and descriptions clearly differentiate scope.

Naming Consistency3/5

All tools share a 'line_' prefix and snake_case, but the naming pattern mixes verb_noun (line_find_users, line_get_profile) with noun_noun or noun_list (line_bot_info, line_message_quota, line_richmenu_list). The inconsistency is still readable but not fully predictable.

Tool Count5/5

12 tools is well-scoped for LINE bot operations, covering messaging, monitoring, user lookup, and rich menu management without redundancy. Each tool earns its place.

Completeness4/5

The surface covers core ops like sending messages, monitoring quota and queues, retrying jobs, and inspecting users. Minor gaps exist: rich menu creation/deletion, non-text message types, and group/room management are missing but likely out of scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues