mahjong-calculator

mahjong-calculator

Enables mahjong score calculation from Claude by inputting tile configurations, including dora indicators and game state parameters.

Category
访问服务器

README

麻雀点数計算 MCP サーバー

Claude ProjectsやClaude Desktopから麻雀の点数計算ができるMCPサーバーです。

特徴

  • テキスト形式で牌姿を入力(例: 123m456p789s11z
  • 赤ドラ対応(0で表現、例: 50m = 赤5萬)
  • 点数、役、翻数、符を自動計算
  • Claude Desktopからツールとして直接呼び出し可能
  • stdio/SSE両方のトランスポートに対応

MCPサーバーとは

MCP (Model Context Protocol) は、Claude DesktopとAIツール間の通信プロトコルです。MCPサーバーを作成することで、Claudeに新しい機能(ツール)を追加できます。

このプロジェクトでは、麻雀の点数計算をClaudeから呼び出せるようにしています。

トランスポート方式

MCPサーバーには2つの接続方式があります:

  • stdio(標準入出力): Claude Desktopがサーバープロセスを直接起動・管理(推奨)
  • SSE(Server-Sent Events): HTTPサーバーとして常駐し、Claude Desktopが接続

このプロジェクトでは、安定性と管理の容易さから stdio方式 を推奨しています。

セットアップ

1. 依存関係のインストール

uv sync

2. Claude Desktop での設定

設定ファイルの場所:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Linux/macOS(ネイティブ環境)の場合

{
  "mcpServers": {
    "mahjong-calculator": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/mahjong_calculator",
        "run",
        "python",
        "-m",
        "src.server"
      ]
    }
  }
}

注意: /absolute/path/to/mahjong_calculator の部分は、このプロジェクトの絶対パスに置き換えてください。

Windows + WSL環境の場合(推奨設定)

Windows上のClaude DesktopからWSL内のMCPサーバーを起動する場合:

{
  "mcpServers": {
    "mahjong-calculator": {
      "command": "wsl",
      "args": [
        "-e",
        "bash",
        "-c",
        "export PATH=$HOME/.local/bin:$PATH && cd /home/your-username/projects/mahjong_calculator && exec uv run python -m src.server"
      ]
    }
  }
}

重要:

  • /home/your-username/projects/mahjong_calculator をWSL内の実際のプロジェクトパスに置き換えてください
  • your-username をWSLのユーザー名に置き換えてください
  • この設定は、一行のコマンドとして実行されるため、確実に動作します

3. Claude Desktopを再起動

設定を反映させるため、Claude Desktopを完全に終了してから再起動してください。

使用方法

Claude DesktopやClaude Projectsで以下のように質問してください:

基本的な使い方

手牌: 234m345p456s6677z
和了牌: 7z
の点数を教えて

注意: 手牌(13枚)と和了牌(1枚)の合計14枚が正しい和了形(4面子1雀頭)である必要があります。

立直ツモの場合

手牌: 234m234p234s555z
和了牌: 5z
でツモ和了、立直ありの場合の点数を計算して

ドラありの場合

手牌: 234m456p678s3344s
和了牌: 5s
でロン和了、ドラ表示牌が1mの場合の点数は?

入力形式

牌の表記

  • 萬子: 1-9m(例: 123m
  • 筒子: 1-9p(例: 456p
  • 索子: 1-9s(例: 789s
  • 字牌: 1-7z
    • 1z = 東
    • 2z = 南
    • 3z = 西
    • 4z = 北
    • 5z = 白
    • 6z = 發
    • 7z = 中
  • 赤ドラ: 0で表現(例: 50m = 赤5萬)

牌姿 説明
123m456p789s1122z 一萬二萬三萬四筒五筒六筒七索八索九索東東南南
1230m456p789s11z 一萬二萬三萬赤五萬四筒五筒六筒七索八索九索東東
234m234p234s55z 二萬三萬四萬二筒三筒四筒二索三索四索白白

パラメータ

MCPツール calculate_mahjong_score は以下のパラメータを受け付けます:

パラメータ 必須 デフォルト 説明
tiles string - 手牌
win_tile string - 和了牌
dora_indicators string "" ドラ表示牌(カンマ区切り)
player_wind string "east" 自風(east/south/west/north)
round_wind string "east" 場風(east/south/west/north)
is_tsumo boolean true ツモ和了かどうか
is_riichi boolean false 立直しているか
is_ippatsu boolean false 一発か
is_rinshan boolean false 嶺上開花か
is_chankan boolean false 搶槓か
is_haitei boolean false 海底摸月か
is_houtei boolean false 河底撈魚か

トラブルシューティング

Claude Desktopで認識されない

  1. 設定ファイルのパスと形式を確認

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
    • JSON構文エラーがないか確認(JSONLintで検証可能)
    • ファイルをUTF-8で保存しているか確認
  2. プロジェクトのパスが絶対パスになっているか確認

    • 相対パスは使用できません
    • WSL環境の場合: /home/username/... 形式
  3. WSL環境での確認事項

    • uv コマンドが正しくインストールされているか確認:
      which uv
      uv --version
      
    • PATHが正しく設定されているか確認
    • Windows側から手動でコマンドを実行してテスト:
      wsl -e bash -c "export PATH=$HOME/.local/bin:$PATH && cd /home/username/projects/mahjong_calculator && uv run python -m src.server"
      
  4. Claude Desktopを完全に再起動

    • Windowsの場合: タスクマネージャーでプロセスが完全に終了していることを確認
    • 設定変更後は必ず再起動が必要

サーバーを再起動すると接続できなくなる(WSL環境)

問題: ローカルでSSE形式のサーバーを起動した場合、再起動後にClaude Desktopから接続できなくなる

解決策: stdio形式を使用する(上記の「Windows + WSL環境の場合」の設定)

stdio形式の利点:

  • Claude Desktopがサーバープロセスのライフサイクルを管理
  • ポートの競合や接続問題が発生しない
  • 設定が簡単で安定している

SSE形式を使いたい場合

どうしてもSSE形式を使いたい場合は、以下の手順で起動:

bash /home/miz/projects/mahjong_calculator/start_http_server.sh

設定ファイル:

{
  "mcpServers": {
    "mahjong-calculator": {
      "url": "http://localhost:8000/sse"
    }
  }
}

注意: SSE形式は手動でサーバーを起動・停止する必要があり、管理が煩雑です。

計算結果がおかしい

  1. 入力形式が正しいか確認

    • 萬子: m, 筒子: p, 索子: s, 字牌: z
    • 数字は0-9のみ(0は赤ドラ)
    • 例: 123m456p789s1122z
  2. 手牌が14枚になっているか確認

    • 手牌13枚 + 和了牌1枚 = 合計14枚
    • 正しい和了形(4面子1雀頭)である必要があります
  3. 和了っているか確認

    • 向聴数が-1(テンパイを超えている状態)

Claude Desktopのログを確認

MCPサーバーのログは標準エラー出力に出力されます。Claude Desktopのログで詳細を確認できます:

  • macOS: ~/Library/Logs/Claude/
  • Windows: %APPDATA%\Claude\logs\

ログで以下を確認:

  • サーバーが正常に起動しているか
  • コマンドのパスが正しいか
  • 実行時エラーが発生していないか

開発

ローカルでのテスト

MCPサーバーとして起動せずに、直接Pythonスクリプトとして動作確認できます:

# JSON出力のテスト
uv run python test_json_output.py

# エラーケースのテスト
uv run python test_error_cases.py

MCPサーバーのテスト

stdio形式で手動テスト:

bash start_stdio_server.sh

SSE形式で手動テスト(別ターミナルで実行):

# サーバー起動
bash start_http_server.sh

# 別ターミナルでアクセスを確認
curl http://localhost:8000/sse

テストの実行

uv run pytest

型チェック

uv run mypy src/

コードフォーマット

uv run ruff check src/

依存関係の更新

# 依存関係を追加
uv add package-name

# 依存関係を更新
uv sync --upgrade

プロジェクト構成

mahjong_calculator/
├── pyproject.toml              # プロジェクト設定・依存関係
├── uv.lock                     # 依存関係のロックファイル
├── README.md                   # このファイル
├── main.py                     # スタンドアロン実行用(MCP不使用)
├── start_http_server.sh        # SSE形式でのサーバー起動スクリプト
├── start_stdio_server.sh       # stdio形式でのサーバー起動スクリプト
├── test_json_output.py         # JSON出力のテスト
├── test_error_cases.py         # エラーケースのテスト
└── src/
    ├── __init__.py             # パッケージ初期化
    ├── constants.py            # 定数定義
    ├── tile_parser.py          # 入力解析(テキスト→内部形式)
    ├── calculator.py           # 点数計算ロジック
    └── server.py               # MCPサーバー(エントリーポイント)

ファイルの役割

コアモジュール

  • server.py: MCPサーバーのエントリーポイント。Claude Desktopとの通信を担当

    • calculate_mahjong_score(): MCPツールとして公開される関数
    • stdio/SSE両方のトランスポートに対応
  • calculator.py: 麻雀の点数計算ロジック

    • calculate_hand(): 手牌と和了牌から点数を計算
    • GameContext: 対局状況(自風、場風、リーチなど)を管理
    • 役、符、点数の詳細を返す
  • tile_parser.py: テキスト形式の牌姿を解析

    • 123m456p789s11z のような入力をmahjongライブラリの形式に変換
    • 赤ドラ(0)の処理に対応
  • constants.py: 役名や符の理由の日本語翻訳など、定数を定義

起動スクリプト

  • start_stdio_server.sh: stdio形式でサーバーを起動(Claude Desktop推奨)
  • start_http_server.sh: SSE形式(HTTP)でサーバーを起動

テスト

  • test_json_output.py: 計算結果のJSON形式をテスト
  • test_error_cases.py: エラーハンドリングをテスト

アーキテクチャ

Claude Desktop
    ↓ (MCP stdio/SSE)
server.py (FastMCP)
    ↓
calculator.py (計算ロジック)
    ↓
tile_parser.py (入力解析)
    ↓
mahjong-python (外部ライブラリ)
  1. Claude Desktop が MCP プロトコルでリクエストを送信
  2. server.pycalculate_mahjong_score ツールとしてリクエストを受信
  3. tile_parser.py が牌姿テキストを解析
  4. calculator.py が mahjong-python ライブラリを使って計算
  5. 結果を JSON 形式で Claude Desktop に返却

ライセンス

このプロジェクトは個人用です。

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选