0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonで作る簡易Qiita投稿MCPサーバーの解析と実装解説

Last updated at Posted at 2025-04-24

Pythonで作る簡易Qiita投稿サーバーの解析と実装解説

はじめに

これもコードの解析から自動投稿された記事となります。

今回は、PythonでQiitaへの記事投稿を自動化するシンプルなサーバーの実装コードを解析します。このコードはFastMCPというフレームワークを使用してツール関数を定義し、Qiita APIを通じて投稿を行うものです。

コードの全体像

提供されたコードは以下の機能を持つPythonスクリプトです:

  1. 必要なライブラリのインポートとインストール
  2. 環境変数からQiitaのAPIトークンを取得
  3. FastMCPを使用したサーバーの初期化
  4. Qiita投稿用の関数定義
  5. サーバー起動のエントリーポイント

主要コンポーネントの解説

必要なライブラリの自動インストール

# requests が無ければ自動インストール
try:
    import requests
except ModuleNotFoundError:
    subprocess.check_call([sys.executable, "-m", "pip", "install", "--upgrade", "requests"])
    import requests

このコードブロックでは、requestsライブラリがインストールされていない場合に自動的にインストールする機能が実装されています。これにより、スクリプトの実行環境への依存関係のセットアップを簡略化しています。

環境変数の設定

from dotenv import load_dotenv
load_dotenv()
QIITA_TOKEN = os.getenv("QIITA_TOKEN")

.envファイルから環境変数を読み込み、Qiita APIのアクセストークンを取得しています。これはセキュリティのためにコード内にトークンを直接書かないための良い実践です。

FastMCPサーバーの初期化

from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Qiita投稿MCPサーバー")

FastMCPというフレームワークを使用してサーバーインスタンスを初期化しています。このフレームワークを使うことで、ツール関数を簡単に定義・提供できるようになります。

Qiita投稿ツール関数

@mcp.tool()
def post_qiita_article(article_json: str | dict) -> dict:
    """
    記事データファイルのパス(str)または記事データ本体(dict)を受け取り、Qiitaに投稿します。
    """

この関数は以下のような処理を行います:

  1. 入力として記事データのファイルパス(文字列)または記事データ(辞書型)を受け取る
  2. QiitaのAPIトークンの存在確認
  3. ファイルパスが与えられた場合はJSONファイルを読み込む
  4. 辞書型データの場合はそのまま使用
  5. Qiita APIにPOSTリクエストを送信
  6. レスポンスをJSON形式で返す

特に柔軟な入力形式を受け付ける設計になっており、ファイルパスまたは直接データを受け取れるようになっています。

エラーハンドリング

コード内では以下のようなエラーハンドリングが実装されています:

  1. APIトークンが設定されていない場合
  2. 指定されたファイルが存在しない場合
  3. 入力パラメータの型が正しくない場合
  4. API応答のJSONパースに失敗した場合

これらのエラーには適切なエラーメッセージが返されるようになっています。

Qiita APIの利用方法

Qiita APIを使用する際の基本的なパターンがシンプルに実装されています:

headers = {
    "Authorization": f"Bearer {QIITA_TOKEN}",
    "Content-Type": "application/json"
}

resp = requests.post(
    "https://qiita.com/api/v2/items",
    headers=headers,
    json=data
)

この部分では、認証ヘッダーを設定し、投稿データをJSON形式でAPIエンドポイントに送信しています。

まとめ

このコードは以下の点で優れたPythonプログラミングの例を示しています:

  1. 依存関係の自動管理: 必要なライブラリを自動インストール
  2. セキュリティ対策: API認証情報を環境変数から取得
  3. 柔軟な入力処理: 複数の入力形式(ファイルパスまたは直接データ)に対応
  4. 適切なエラーハンドリング: 様々なエラーケースに対処
  5. モジュール設計: FastMCPフレームワークを使用した整理された構造

このような設計パターンは、APIを活用した自動化ツールを開発する際の参考になるでしょう。

実装のポイント

  1. .envファイルにQIITA_TOKEN=あなたのQiitaトークンを設定する必要があります
  2. 記事データはQiita APIの仕様に従ったJSON形式である必要があります
  3. FastMCPフレームワークのインストールが必要です(pip install fastmcpなど)

このコードを応用することで、Qiitaへの投稿を自動化するだけでなく、他のAPIサービスとの連携も同様のパターンで実装できるでしょう。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?