二次創作版 v1.1:友だちリンクの二重検証、MCP サーバー、キータイプの分離

リリース日: 2026年10月26日

現在のバージョン: v1.1.2(最新)

このページは v1.1 ラインのすべての変更をまとめたもので、v1.1.0、v1.1.1、v1.1.2 を対象としています。同じライン内のパッチはこのページに統合されます。新しいライン(1.2 など)が始まると新しいページが作成され、告知は変更の規模と必要性に応じて作成されます。

このラインのリリース

バージョンタイプハイライト
v1.1.0MINOR友だちリンク検証が DNS TXT と HTML ファイルアップロードをサポート
v1.1.1MINOR外部 AI クライアント向けの /mcp サーバー
v1.1.2PATCHREST API キーと MCP キーを別タイプに分離

v1.1.0 友だちリンクの2つの検証方法

申請が JSON 検証を通過すると、ボットは awaiting_method_choice ステージに入り、申請者に選択を求めます:

  • DNS TXT レコードの場合、1(または 一 / 方案一 / 方法一)と返信
  • HTML ファイルをアップロードする場合、2(または 二 / 方案二 / 方法二)と返信

DNS の場合、手順にはホスト _jiaofriend、タイプ TXT、値として検証コードが記載されます。検証では Cloudflare DNS-over-HTTPS 経由で _jiaofriend.<visitor-domain> の TXT レコードを照会し、いずれかにコードが含まれているかを確認します。ファイル方式では厳格なチェックを維持します:GET が 200 を返し、タグとスクリプトを除去した後の <body> テキストにコードが含まれている必要があります。

状態機械には awaiting_verification ステージが追加され、verifyMethod が記録されます。変更申請では旧サイトと新サイトの両方で再度方法を選択します。アップグレード前の verifying 状態はファイル検証にフォールバックします。DNS 検索は注入可能な依存関係 resolveTxt(name) => Promise<string[]> を経由し、リゾルバをテスト可能かつ交換可能に保ちます。

このリリースでは、友だちリンク検証が SPA フォールバック、カスタム 404 ページ、403/500 応答、30x リダイレクトを受け入れてしまう問題、/friends-sitemap.xml がフロントエンドルーターに飲み込まれる問題、キー表示時に暗号化ストレージが平文になる問題、キャプチャの繰り返し初期化で申請がクラッシュする問題、CJS / ESM バンドル下での受信メール解析の問題も修正されています。

v1.1.1 MCP サーバー

サイトに /mcp エンドポイントが追加され、記事、モーメント、友だちリンク、サイト設定が MCP(Model Context Protocol)経由で公開されます。これにより Claude Code、Cursor、Claude Desktop、MCP Inspector がコンテンツを読み取り、維持できます。

  • トランスポート: Streamable HTTP。リクエストごとに新しいインスタンスを作成し、リクエスト間で状態を共有しません
  • 認証: X-API-Key または Authorization: Bearer。設定ページのキーを再利用し、最終使用日時を更新します
  • スコープフィルタリング: tools/list はキーのスコープでフィルタリングされ、新しい content.read スコープがあります
  • 安全性チェック: Host と Origin の検証が DNS リバインディングをブロックし、カスタムドメインは MCP_ALLOWED_HOSTS を通じて有効化されます
ツール必要なスコープ目的
whoami任意の有効なキーキー ID、アカウント ID、スコープ、利用可能なツールを返す
list_posts / get_post / search_postscontent.read記事の一覧、読み取り、検索(下書きと非公開記事を含む)
list_tags / list_moments / list_friendscontent.readタグ、モーメント、友だちリンクの一覧
create_post / update_post / delete_postfeed.write記事の作成(デフォルトは下書き)、更新、削除
create_moment / update_moment / delete_momentmoment.writeモーメントの作成、更新、削除
create_friend / update_friend / delete_friendfriend.write友だちリンクの作成、更新、削除
get_config / update_config対応する config.*設定セクションの読み書き。スコープ外のキーは拒否されます

クライアント設定の例:

{
  "mcpServers": {
    "rin": {
      "type": "http",
      "url": "https://<site-domain>/mcp",
      "headers": {
        "X-API-Key": "<mcp-key>"
      }
    }
  }
}

カスタムドメインでは、Cloudflare でドメインを Worker のカスタムドメインまたはルートとして関連付け、ドメインを MCP_ALLOWED_HOSTS に追加します(または FRONTEND_URL をサイトのオリジンに設定します)。421 Misdirected Request は Cloudflare エッジから、403 Invalid Host はサーバーの許可リストから返されます。両方の詳細は API ガイド を参照してください。

v1.1.2 REST API キーと MCP キーの分離

以前は両方のエンドポイントが同じキーとスコープのセットを共有していたため、スクリプト自動化用に作成したキーでも MCP エンドポイントを呼び出せました。キーは現在2つのタイプに分離されています:

タイプkey_typeエンドポイント典型的な用途
REST API キー1/api/key/*外部スクリプト、スケジュールジョブ、自動化
MCP キー2/mcpClaude Code、Cursor、MCP Inspector などの MCP クライアント
  • タイプは作成時に固定され、設定ページでは REST API と MCP の別タブでキーが一覧表示され、作成されます
  • エンドポイントと一致しないタイプは、ビジネスロジックが実行される前に認証段階で 403 として拒否されます
  • content.read は MCP キーのみ利用可能です。REST API キーは feed.write、moment.write、friend.write、および config.* スコープを選択します

データベースに key_type カラムが追加され、マイグレーション 0021.sql が既存キーを自動分類します:スコープに content.read を含むキーは MCP キーになり、それ以外は REST API キーになります。既存の MCP クライアントはキーを再作成せずにアップグレード後も動作します。スクリプトと MCP クライアントの両方に使われていたキーは1つの機能のみを保持するため、用途別に分割してください。

バージョンステータスと番号付け

プロジェクトは標準的なセマンティックバージョニングに従い、バージョンラインは v1.0.0 から始まり、リリースタグは vX.Y.Z を使用します:

  1. MAJOR: 互換性のない変更。X が増加し、下位の番号はリセットされます
  2. MINOR: 後方互換性のある機能。Y が増加し、Z はリセットされます
  3. PATCH: 修正と小さな変更。Z が増加します
  4. プレリリース: -beta や -rc.1 などのサフィックス。例:v1.2.0-beta.1

すべてのリリースは変更履歴に記録されます。告知ページは変更の規模と必要性に応じて維持され、1つのラインの複数リリースが同じページを共有できます。項目が公式アップストリームと本プロジェクトのバージョンの両方に言及する場合、本プロジェクトのバージョンは yjvX.Y.Z と表記されます。現在 v1.1 が最新ラインです。

アップグレードに関する注意

  • コードをプルして再デプロイします。マイグレーションはデプロイフローの一部として実行され、手動の手順はありません
  • カスタムドメインのサイトは MCP_ALLOWED_HOSTS を設定する必要があります。設定しない場合、MCP ハンドシェイクは 403 を返します
  • 既存のキーは自動的に分類されます。クライアントが 403 を報告する場合は、キーのタブがエンドポイントと一致しているか確認してください

エンドポイントの詳細は API ガイド、変更の完全なリストは 変更履歴 を参照してください。

フィードバック

v1.1.0~v1.1.2 の検証中に問題を見つけた場合は、以下から報告してください: