Qiita MCP Server
Qiita および Qiita Team の記事検索・閲覧機能を提供する MCP (Model Context Protocol) サーバー。
特徴
- 📖 記事の検索・閲覧
- 🏷️ タグによる絞り込み
- 👤 ユーザー別記事取得
- 💬 コメント取得
- ⭐ ストック(ブックマーク)記事の取得
- 🔒 Qiita Team 対応
- ⚡ Hono による高速なルーティング
- ✅ Zod による型安全なバリデーション
技術スタック
- Hono: 軽量で高速な Web フレームワーク
- Zod: TypeScript ファーストなスキーマバリデーション
- MCP SDK: Model Context Protocol の公式 SDK
- TypeScript: 型安全な開発
仕様書
詳細な仕様は docs/specification.md を参照してください。
インストール
npm install
npm run build
起動
サーバーの起動
npm start
デフォルトでは http://localhost:3000 で起動します。
環境変数
ポート設定(オプション)
export PORT=3000
Qiita アクセストークン(オプション)
認証なしでも公開記事は閲覧できますが、レート制限が厳しくなります。 アクセストークンを設定することを推奨します。
export QIITA_ACCESS_TOKEN=your_access_token_here
アクセストークンは Qiita の設定ページ で取得できます。
Qiita Team(オプション)
Qiita Team を使用する場合は、チーム名を設定します。
export QIITA_TEAM=your_team_name
環境変数を設定して起動
QIITA_ACCESS_TOKEN=your_token PORT=3000 npm start
Claude Desktop での設定
本サーバーは SSE (Server-Sent Events) 方式で動作します。
Claude Desktop の設定ファイルに以下を追加します。
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"qiita": {
"url": "http://localhost:3000/sse"
}
}
}
重要: Claude Desktop から接続する前に、サーバーを起動しておく必要があります。
サーバーを起動してから Claude Desktop を起動、またはリロードしてください。
環境変数付きで起動する場合
別のターミナルウィンドウで以下のコマンドを実行してサーバーを起動します:
QIITA_ACCESS_TOKEN=your_token npm start
Qiita Team を使用する場合:
QIITA_ACCESS_TOKEN=your_token QIITA_TEAM=your_team_name npm start
提供されるツール
search_items
記事を検索します。
パラメータ:
query(string, optional): 検索クエリpage(number, optional): ページ番号(1-100、デフォルト: 1)per_page(number, optional): 1ページあたりの件数(1-100、デフォルト: 20)
使用例:
Qiita で「MCP Server」を検索してください
get_item
特定の記事を取得します。
パラメータ:
item_id(string, required): 記事ID
使用例:
記事 ID が "abc123" の記事を表示してください
get_items_by_tag
特定のタグが付いた記事を取得します。
パラメータ:
tag_id(string, required): タグIDpage(number, optional): ページ番号per_page(number, optional): 1ページあたりの件数
使用例:
Python タグの記事を表示してください
get_items_by_user
特定のユーザーの記事を取得します。
パラメータ:
user_id(string, required): ユーザーIDpage(number, optional): ページ番号per_page(number, optional): 1ページあたりの件数
使用例:
ユーザー "example_user" の記事を表示してください
get_tags
タグ一覧を取得します。
パラメータ:
page(number, optional): ページ番号per_page(number, optional): 1ページあたりの件数sort(string, optional): ソート順("count" または "name")
使用例:
人気のタグ一覧を表示してください
get_item_comments
記事のコメントを取得します。
パラメータ:
item_id(string, required): 記事ID
使用例:
記事 "abc123" のコメントを表示してください
get_user_stocks
ユーザーがストックした記事を取得します。
パラメータ:
user_id(string, required): ユーザーIDpage(number, optional): ページ番号per_page(number, optional): 1ページあたりの件数
使用例:
ユーザー "example_user" がストックした記事を表示してください
開発
# ビルド
npm run build
# 開発モード(ウォッチモード)
npm run dev
# 起動
npm start
ライセンス
MIT
