Claude Desktopで自前のMCPを導入してみよう。Claude APIを使った占いツール作成入門
今回はClaude Desktopの機能拡張として利用できるMCPについて、実際に手を動かしながら解説します。具体的には、Claude APIを活用した「今月の運勢を占う」ツールを作成して、Claude Desktopに組み込む方法を紹介します。
MCPサーバーのセットアップ
MCPサーバーを作るためには、まずプロジェクトをセットアップする必要があります。ここでは、Zennの記事で紹介されている方法を簡単に紹介します。詳細な手順については、元記事をご覧ください。
基本的なセットアップ手順
- Node.jsとnpmが必要です(インストール済みを前提とします)
- 次のコマンドでプロジェクトを作成します:
npx @modelcontextprotocol/create-server your-mcp-name
- プロジェクト作成時に質問に答えていくと、自動的にClaude.appの設定に登録されます
- SDKを最新版に更新します:
npm install @modelcontextprotocol/sdk@latest npm install zod
- 生成されたコードを最新SDKに対応させる必要があります(詳細は元記事参照)
この設定が完了したら、次のコマンドでビルドします:
npm run build
Claude Desktopを起動または再読み込みすると、MCPサーバーが読み込まれます。これで基本的なセットアップは完了です。
準備するもの
- Node.js環境
- Claude Desktopアプリケーション
- Anthropic API キー(Claude APIを利用するため)
占いツールの実装
セットアップしたMCPプロジェクトに、占いツールの機能を実装していきます。まずは、MCPツールの基本的な構造を理解するために、雛形から見ていきましょう。
/**
* 占いツールの登録
* Claude APIを利用し、今月の運勢を占う
*/
server.tool(
"get-fortune",
"Get fortune for the month",
{
birthMonth: z.number().describe("Your birth month"),
},
async ({ birthMonth}) => {
// ここに処理を実装
}
)
この雛形をベースに、実際にClaude APIを呼び出して占い結果を返す完全な実装を見ていきましょう。
server.tool(
"get-fortune",
"Get fortune for the month",
{
birthMonth: z.number().min(1).max(12).describe("Your birth month"),
},
async ({ birthMonth }) => {
try {
// Anthropicクライアントの初期化
const anthropic = new Anthropic({
apiKey: process.env.CLAUDE_API_KEY,
});
// 月の名前を取得
const monthNames = [
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
const monthName = monthNames[birthMonth - 1];
// Claudeへのプロンプト作成
const message = await anthropic.messages.create({
model: "claude-3-haiku-20240307",
max_tokens: 500,
temperature: 0.7,
system: "あなたは占い師です。誕生月から今月の運勢を占います。運勢は「全体運」「金運」「恋愛運」「健康運」の4つのカテゴリで、それぞれ★5段階で評価し、簡単な説明を日本語で付けてください。",
messages: [
{
role: "user",
content: `誕生月は${monthName}(${birthMonth}月)です。今月の運勢を占ってください。`
}
]
});
// 返答を取得
const contentBlock = message.content[0];
const fortuneText = contentBlock.type === 'text'
? contentBlock.text
: '占いの結果を取得できませんでした。';
return {
content: [
{
type: "text",
text: fortuneText,
},
],
};
} catch (error) {
console.error("Error getting fortune:", error);
return {
content: [
{
type: "text",
text: "占いの取得中にエラーが発生しました。申し訳ありませんが、後ほど再度お試しください。",
},
],
};
}
},
);
この実装では、以下のことを行っています:
- ユーザーから1〜12の数値(誕生月)を入力として受け取る
- Anthropic APIクライアントを初期化
- 受け取った数値から月の名前(January〜December)を取得
- Claude APIにリクエストを送信し、占い結果を取得
- システムプロンプトで占い師としての振る舞いを指定
- ユーザーメッセージとして誕生月を伝える
- 取得した結果をフォーマットして返却
- エラーハンドリングを実装
Claude Desktopへの導入方法
実装したMCPツールをClaude Desktopで利用するには、設定ファイルに情報を追加する必要があります。
環境変数の設定
claude_desktop_config.json
ファイルにMCPの情報と環境変数を設定します。@modelcontextprotocol/create-server
を使った設定であれば、すでにcommand
やargs
は設定されているはずです。その場合は、env
部分を追加してください。
{
"mcpServers": {
"fortune": {
"command": "node",
"args": [
"/Users/your-username/path/to/your/mcp-fortune/build/index.js"
],
"env": {
"CLAUDE_API_KEY": "sk-ant-api03-xxxxxx"
}
}
}
}
この設定では:
-
mcpServers
の下にfortune
という名前でMCPを登録 -
command
とargs
で実行コマンドとその引数を指定(ビルドした.jsファイルへのパス) -
env
セクションで必要な環境変数(この場合はCLAUDE_API_KEY)を設定
設定ファイルを更新したら、Claude Desktopアプリを再起動して変更を反映させる必要があります。
デバッグとトラブルシューティング
MCPツールで問題が発生した場合は、ログファイルを確認することで原因を特定できます:
% tail ~/Library/Logs/Claude/mcp-server-fortune.log -f
ログファイル名はmcp-server-{mcp-name}.log
という形式で、mcp-name
はclaude_desktop_config.json
で定義した名前(この例ではfortune
)になります。
動作確認とリロード
MCPをビルドした後、Claude Desktopアプリでは完全な再起動は必要ありませんが、F5キーを押して画面をリロードする必要があります。リロードするまでは新しく追加したツールは表示されません。
実際に使ってみる
Claude Desktopで占いツールを使ってみるには、明示的にツール名を指定するのが確実です。例えば、「get-fortuneツールを使って、私の運勢を占ってください。誕生月は4月です」のように伝えると、MCPを通じて占いツールが実行されます。
まとめ
今回は、Claude APIを利用した占いツールをMCP形式で実装し、Claude Desktopに導入する方法を紹介しました。この仕組みを応用すれば、様々な外部APIと連携したツールを作成できます。
注意点として:
- 環境変数はclaude_desktop_config.jsonに設定する
- 設定ファイル更新後はClaude Desktopの再起動が必要
- MCPビルド後はF5でのリロードが必要
- トラブル時はログファイルを確認する
より詳細なMCPサーバーの作成方法については、ぜひZennの記事を参照してください。基本的な設定から実装例まで詳しく解説されています。
MCPを使うことで、Claudeの能力を大幅に拡張できます。ぜひ自分だけのオリジナルツールを作って、Claude Desktopをもっと便利に使いこなしてみてください!
Discussion