Skip to main content
Glama

Japanese Character Counter MCP Server

by tarakomasu
README.md6.32 kB
# 日本語文字数カウント MCP サーバー Web版ChatGPTの「新しいコネクター」から接続できるMCPサーバーです。日本語テキストの文字数(グラフェム単位)を正確にカウントするツール `countJapaneseChars` を提供します。 ## 機能 - **countJapaneseChars**: 日本語テキストの文字数(グラフェム単位)を正確にカウント - `Intl.Segmenter` を使用してグラフェムクラスターを正確にカウント - サロゲートペアや結合文字を適切に処理 ## 技術スタック - Next.js 16 (App Router) - TypeScript - @modelcontextprotocol/sdk - Intl.Segmenter (グラフェムカウント用) ## セットアップ ### 依存関係のインストール ```bash npm install ``` ### 開発サーバーの起動 ```bash npm run dev ``` 開発サーバーは `http://localhost:3000` で起動します。 MCPサーバーのエンドポイントは `http://localhost:3000/api/mcp` です。 ## 使用方法 ### Web版ChatGPTの「新しいコネクター」から接続 1. ChatGPTの設定で「新しいコネクター」を開く 2. エンドポイントURLを入力: `http://localhost:3000/api/mcp` (開発環境) または `https://your-domain.com/api/mcp` (本番環境) 3. 接続を確立 ### APIエンドポイント - **POST** `/api/mcp`: MCPリクエストを処理 - **GET** `/api/mcp`: SSEストリーム(現在はJSONレスポンスモードを使用) - **DELETE** `/api/mcp`: セッション終了 - **OPTIONS** `/api/mcp`: CORSプリフライト ### ツールの使用例 `countJapaneseChars` ツールを呼び出すと、以下のようなレスポンスが返されます: ```json { "content": [ { "type": "text", "text": "文字数: 9" } ], "structuredContent": { "count": 9, "text": "こんにちは、世界!" } } ``` ## デプロイ ### Vercelへのデプロイ(推奨) #### 1. Vercelアカウントの準備 [Vercel](https://vercel.com/)にサインアップまたはログインします。 #### 2. プロジェクトのデプロイ ```bash # Vercel CLIをインストール(初回のみ) npm install -g vercel # プロジェクトディレクトリでデプロイ vercel # 本番環境へデプロイ vercel --prod ``` または、GitHubと連携して自動デプロイ: 1. GitHubにプロジェクトをプッシュ 2. Vercelダッシュボードで「Import Project」をクリック 3. GitHubリポジトリを選択 4. デプロイ設定を確認(デフォルトで問題なし) 5. 「Deploy」をクリック #### 3. デプロイ後の確認 デプロイ後、提供されたURLの `/api/mcp` エンドポイントがMCPサーバーとして機能します。 例: `https://your-project.vercel.app/api/mcp` #### 4. Web版ChatGPTとの接続 1. ChatGPTの設定を開く 2. 「新しいコネクター」を選択 3. エンドポイントURLを入力: `https://your-project.vercel.app/api/mcp` 4. 接続を確立 ### その他のデプロイ先 #### Netlify ```bash # Netlify CLIをインストール npm install -g netlify-cli # デプロイ netlify deploy --prod ``` #### Railway 1. [Railway](https://railway.app/)にサインアップ 2. 「New Project」→「Deploy from GitHub repo」 3. ビルドコマンド: `npm run build` 4. 開始コマンド: `npm start` ### 環境変数 現在、環境変数の設定は不要です。本番環境でセッション管理を改善する場合は、Redisなどの外部ストレージを使用することを推奨します。 #### Redis統合(オプション) 本番環境で複数インスタンスを使用する場合、Redisでセッション管理を行うことを推奨: ```bash npm install ioredis ``` `app/api/mcp/route.ts` でRedisを使用するようにコードを修正してください。 ## 実装の詳細 ### コード構造(モジュール分割) ``` app/api/mcp/ ├── route.ts # HTTPエンドポイントハンドラー │ # POST, GET, DELETE, OPTIONSメソッド │ # セッション管理 │ ├── lib/ │ ├── helpers.ts # ヘルパー関数 │ │ # - Next.js ⇔ Node.js 変換 │ │ # - CORS設定 │ │ │ └── mcp-server.ts # MCPサーバーセットアップ │ # - サーバーインスタンス作成 │ # - ツール登録 │ └── tools/ └── countJapaneseChars.ts # 文字数カウントツール # - グラフェムカウント実装 # - ツール設定とハンドラー ``` 各ファイルには**超詳細なコメント**が付いており、以下を説明: - なぜそのコードが必要か - どのように動作するか - 注意点や代替案 - 具体的な使用例 ### 主要機能 - **グラフェムカウント**: `Intl.Segmenter` を使用して、人が1文字と捉える単位(グラフェム)を正確にカウント - フォールバック機能付き: `Intl.Segmenter`が利用できない環境でも動作 - **セッション管理**: メモリ内でセッションを管理(本番環境ではRedis等の使用を推奨) - **CORS**: Web版ChatGPTからの接続を許可するため、適切なCORSヘッダーを設定 - `Authorization`ヘッダーにも対応(将来の認証機能に備える) ### プロダクション品質の特徴 1. **ランタイム指定**: `runtime = "nodejs"` でNode.js APIを確実に使用 2. **堅牢な初期化**: `isInitializeRequest`を検出して無条件で新規セッションを作成 3. **エラーハンドリング**: すべてのエンドポイントで適切なエラーレスポンスを返却 4. **ヘルスチェック**: GET エンドポイントでセッション状態を確認可能 5. **クリーンなセッション削除**: DELETE で不要な処理を行わずシンプルに削除 6. **モジュール分割**: 責務ごとにファイルを分割、保守性と可読性を向上 ## ライセンス MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tarakomasu/mcp-practice'

If you have feedback or need assistance with the MCP directory API, please join our Discord server