1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MCP サーバーを自作して Claude Desktop に独自ツールを生やす実践入門

1
Posted at

Model Context Protocol(MCP)は Anthropic が公開したオープンなプロトコルで、LLM クライアントに外部ツールやリソースを接続するための共通規格である。Claude Desktop は MCP クライアントとして動き、設定ファイルにサーバーを追記するだけで Claude に独自ツールを渡せる

何が嬉しいのか

  • ツールを一度書けば、対応する任意の MCP クライアントから使える
  • 権限・入出力スキーマが JSON Schema で明示される
  • stdio / SSE など複数のトランスポートに対応

最小のサーバー実装(Python)

公式 SDK mcp を使う。社内の計算ツールを Claude から呼べる状態にしてみる。

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("calc-server")

@mcp.tool()
def add(a: float, b: float) -> float:
    '''2つの数を加算する'''
    return a + b

@mcp.tool()
def tax_included(price: float, rate: float = 0.10) -> float:
    '''税込価格を計算する'''
    return round(price * (1 + rate))

if __name__ == "__main__":
    mcp.run()

関数のドックストリングがそのままツール説明になり、型ヒントが入力スキーマに変換される。

Claude Desktop への登録

claude_desktop_config.json に以下を追記する。パスは OS ごとに異なる(macOS なら ~/Library/Application Support/Claude/)。

{
  "mcpServers": {
    "calc": {
      "command": "python",
      "args": ["/absolute/path/to/server.py"]
    }
  }
}

Claude Desktop を再起動すると、チャット内のツールアイコンに calc が現れる。

リソースも公開できる

ツールは「副作用のある関数」、リソースは「読み取り専用のデータ」と棲み分けされている。社内ドキュメントを渡すならリソースが適切。

@mcp.resource("docs://onboarding")
def onboarding_doc() -> str:
    return open("onboarding.md", encoding="utf-8").read()

実運用で気をつける点

  • 副作用の強い操作には確認を入れる。ファイル削除・外部 API 課金などは引数に dry_run を設ける
  • エラーメッセージは人間向けに書く。LLM はエラー文を読んで次の行動を決めるため、曖昧だと暴走する
  • ログを stdout に出さない。stdio トランスポートでは JSON が壊れる。ログは stderr へ

まとめ

MCP は「LLM に自分の道具箱を渡す」ための最短ルートである。SDK を入れて関数にデコレータを付けるだけで、Claude Desktop から即座に呼べる。社内ツールを MCP 化しておくと、別クライアントに乗り換えても資産が生き続けるのも大きい。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?