はじめに
最近話題の Model Context Protocol (MCP) 。これを使うと、Claude DesktopなどのAIアシスタントがローカルツールや外部APIと直接会話できるようになります。
今回は、バックオフィス向けクラウドサービス 「Jinjer」のAPI をMCPサーバー化し、Claude Desktopから従業員情報を直接検索・取得できるようにした過程を共有します。
今回の成果物
Claude Desktopに「退職済みの従業員リストをちょうだい」や「2024年に入社した山田さんを探して」と頼むだけで、Jinjerから最新データを取得して回答してくれるようになります。
使用した技術スタック
- Python 3.12+
- uv: 高速なPythonパッケージ管理ツール
- FastMCP: MCPサーバーを簡単に書くためのライブラリ (
mcpパッケージに含まれます) - Jinjer API: 今回の連携先
1. プロジェクトのセットアップ (uvを使用)
今回はパッケージ管理に uv を使用しました。セットアップが爆速で快適です。
# プロジェクト作成
mkdir jinjer-mcp-server
cd jinjer-mcp-server
uv init .
# 必要なライブラリのインストール
uv add "mcp[cli]" httpx
2. 認証ロジックの実装
Jinjer APIは、APIキーとシークレットキーを使って一時的な「アクセストークン」を取得し、それを使って各エンドポイントを叩く仕組みです。
毎回トークンを取りに行くと効率が悪いので、有効期限内(4時間)は使い回すロジックを実装しました。
# server.py (抜粋)
def _get_token(self) -> str:
current_time = time.time()
# トークンがあり、有効期限切れまで余裕があれば再利用
if self.access_token and current_time < self.token_expiry - 300:
return self.access_token
# 新しいトークンを取得 (/v2/token)
response = self.client.get(...)
# ... (エラー処理とトークン保存)
return self.access_token
3. MCPツールの実装
FastMCP を使うと、デコレータをつけるだけで関数をMCPツールとして公開できます。
従業員ID一覧の取得 (list_employee_ids)
まずは基本のID一覧取得です。
@mcp.tool()
def list_employee_ids(
page: int = 1,
employee_id: Optional[str] = None,
# ... 他のパラメータ
) -> str:
"""従業員ID一覧を取得します"""
# ... APIリクエスト処理
従業員詳細情報の取得 (list_employees)
次に、より詳細な情報(氏名、入社日など)を取得するツールも追加しました。検索パラメータを豊富に用意することで、Claudeが柔軟に検索できるようになります。
@mcp.tool()
def list_employees(
employee_last_name: Optional[str] = None, # 名字で検索
has_since_changed_at: Optional[str] = None, # 更新日で絞り込み
# ...
) -> str:
"""従業員情報を取得します"""
# ...
4. Claude Desktopへの登録
作成したサーバーをClaude Desktopに認識させるため、設定ファイル (claude_desktop_config.json) を編集します。
uv 経由で実行する設定にしておけば、仮想環境のパスを気にせず実行できて便利です。
{
"mcpServers": {
"jinjer": {
"command": "uv",
"args": [
"--directory",
"C:/path/to/jinjer-mcp-server",
"run",
"server.py"
],
"env": {
"JINJER_API_KEY": "YOUR_API_KEY",
"JINJER_SECRET_KEY": "YOUR_SECRET_KEY"
}
}
}
}
5. 実際に動かしてみる
設定を保存してClaude Desktopを再起動すると、チャット入力欄の右側にツールアイコン(コンセントのマーク)が表示されます。
ユーザー: 「2023年以降に入社した、田中という名前の従業員を探して」
Claude Desktop: (ツール list_employees を実行…)
「以下の従業員が見つかりました:
1. 田中 太郎 (2023-04-01 入社)
2. 田中 花子 (2023-10-01 入社)」
このように、自然言語でJingerのDBを検索できるようになりました!
実際の画面はこちら

mcpサーバのツールをたたいています

一覧が取得されました。なお、架空の名前に変換してます
まとめ
MCPを使うことで、独自のAPIを驚くほど簡単にLLMと連携させることができました。
特に FastMCP と uv の組み合わせは開発体験が良く、サクッとツールを作るのに最適です。
さらに、APIの仕様をAIに読み込ませながら実装すれば、コードを書く必要もありません。
次は勤怠データ取得なども実装して、さらに便利にしてみたいと思います

コメント