Metadata-Version: 2.4
Name: linewhiz
Version: 0.1.0
Summary: Premium MCP server for AI-powered LINE Official Account management
Project-URL: Homepage, https://github.com/Kinzen-dev/LineWhiz
Project-URL: Repository, https://github.com/Kinzen-dev/LineWhiz
Project-URL: Issues, https://github.com/Kinzen-dev/LineWhiz/issues
Author-email: Kinzen <kinzen.dev@gmail.com>
License: MIT
License-File: LICENSE
Keywords: ai,automation,chatbot,line,line-official-account,mcp
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.11
Requires-Dist: aiosqlite>=0.20.0
Requires-Dist: httpx>=0.27.0
Requires-Dist: line-bot-sdk>=3.0.0
Requires-Dist: mcp>=1.2.0
Requires-Dist: pydantic-settings>=2.0.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: python-dotenv>=1.0.0
Requires-Dist: sse-starlette>=2.0.0
Requires-Dist: starlette>=0.37.0
Requires-Dist: uvicorn>=0.30.0
Provides-Extra: dev
Requires-Dist: mypy>=1.8.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: ruff>=0.3.0; extra == 'dev'
Description-Content-Type: text/markdown

# LineWhiz

> Premium MCP server that lets AI agents manage LINE Official Accounts.

Users type natural language in **Claude / ChatGPT / Cursor** → LineWhiz calls the LINE Messaging API.

[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)
[![MCP](https://img.shields.io/badge/MCP-v1.2%2B-green.svg)](https://modelcontextprotocol.io)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## Features

| Tool | Tier | Description |
|------|------|-------------|
| `get_account_info` | Free | Get LINE OA info: name, plan, picture |
| `get_friend_count` | Free | Get follower count on a specific date |
| `get_message_quota` | Free | Get remaining message quota this month |
| `send_broadcast` | Pro | Send message to ALL friends |
| `send_push_message` | Pro | Send DM to a specific user |
| `send_multicast` | Pro | Send message to multiple users (max 500) |
| `get_message_delivery_stats` | Pro | Get delivery stats for a date |
| `get_user_profile` | Pro | Get user's display name, picture, etc. |
| `list_rich_menus` | Pro | List all rich menus for this LINE OA |

## Quick Start

### Prerequisites

- Python 3.11+
- [uv](https://docs.astral.sh/uv/) package manager
- LINE Messaging API channel ([create one here](https://developers.line.biz/))

### Setup

```bash
# Clone and install
cd linewhiz && uv sync

# Configure environment
cp .env.example .env
# Edit .env → fill in LINE_CHANNEL_ACCESS_TOKEN and LINE_CHANNEL_SECRET

# Run the server
uv run src/server.py

# Test with MCP Inspector
mcp dev src/server.py

# Run tests
uv run pytest
```

### MCP Client Configuration

Add to your MCP client config (e.g., Claude Desktop `claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "linewhiz": {
      "command": "uv",
      "args": ["run", "src/server.py"],
      "cwd": "/path/to/linewhiz",
      "env": {
        "LINE_CHANNEL_ACCESS_TOKEN": "your_token_here",
        "LINE_CHANNEL_SECRET": "your_secret_here",
        "LINEWHIZ_TIER": "pro"
      }
    }
  }
}
```

## Project Structure

```
linewhiz/
├── CLAUDE.md              # AI coding spec (single source of truth)
├── pyproject.toml
├── Dockerfile
├── docker-compose.yml
├── .env.example
├── src/
│   ├── server.py          # MCP entry point + tool registration
│   ├── config.py          # Env config via pydantic Settings
│   ├── auth/
│   │   ├── api_keys.py    # Key validation (SHA-256)
│   │   └── tiers.py       # Free/Pro/Business gating + rate limits
│   ├── tools/
│   │   ├── account.py     # get_account_info, get_friend_count, get_message_quota
│   │   ├── messaging.py   # send_broadcast, send_push, send_multicast
│   │   ├── richmenu.py    # list/create/set/link rich menus
│   │   ├── insights.py    # get_message_stats, get_user_profile
│   │   ├── automation.py  # [future] auto-reply
│   │   └── reporting.py   # [future] weekly report
│   ├── services/
│   │   ├── line_api.py    # Async LINE API wrapper
│   │   └── flex_builder.py
│   ├── models/
│   │   ├── user.py        # API key + tier models
│   │   └── usage.py       # Usage log model
│   └── db/
│       └── database.py    # SQLite async init + migrations
├── tests/
│   ├── conftest.py
│   ├── test_account.py
│   ├── test_messaging.py
│   ├── test_richmenu.py
│   └── test_auth.py
└── docs/
```

## Tier System

| Tier | Price | Daily Calls | Tools |
|------|-------|-------------|-------|
| **Free** | $0/mo | 100 | Account info, friend count, quota |
| **Pro** | $15/mo | 5,000 | + Messaging, rich menus, insights |
| **Business** | $45/mo | Unlimited | All tools |

## Docker

```bash
# Build and run
docker compose up --build

# Or build manually
docker build -t linewhiz .
docker run --env-file .env linewhiz
```

## Development

```bash
# Install with dev dependencies
uv sync --all-extras

# Lint
uv run ruff check src/ tests/

# Type check
uv run mypy src/

# Test
uv run pytest -v
```

## License

MIT
