mcpField
A
AskSakina Islamic Knowledge

AskSakina Islamic Knowledge

リモート
asksakina.com科学・教育03 日前に更新
リポジトリ公式サイト

AskSakina Islamic Knowledge について

AskSakina Islamic Knowledgeは、AIエージェントやクライアント向けにイスラム教の資料を収録したリファレンスサーバーです。クルアーンの節、ドゥアー、アッラーの99の御名に加え、提示方法の指針と危機対応を提供します。宗教的助言ではなく資料集です。

主な機能

  1. 01章・節番号やテーマからクルアーンを検索
  2. 02生活状況に応じたドゥアーを検索
  3. 03アッラーの99の御名を参照
  4. 04学習用プロンプトとリソースを提供
  5. 05提示指針と危機対応リソースを付与

活用シーン

  1. 01アラビア語と訳文付きで節を取得
  2. 02状況に合うドゥアーを探す
  3. 03学習の一環としてアッラーの御名を調べる
  4. 04危機に関する問い合わせに支援先のみを返す

MCP 対応

MCP経由で4つの検索ツール、4つの学習ジャーニープロンプト、7つのリソースを提供します。応答にはメタデータと呼び出し元エージェント向けの提示指針が含まれます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://sakina-mcp.fly.dev/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@asksakina/islamic-knowledge-mcp2.5.1

ツール

4
パラメーター型必須説明
ayahintegerはいスーラ内のアーヤ(節)番号
surahintegerはいスーラ番号(1~114)
localeenumいいえ翻訳のロケール。デフォルトは "en"(Pickthall)です。ウルドゥー語とインドネシア語の翻訳はまだ利用できません。"ur" と "id" では注記付きの Pickthall 英語訳が返されます。en | id | ur | ar
audienceenumいいえ任意:curious、revert、practising。利用可能な場合は、事前に作成された学習用コンテキストを返します。省略すると標準レコードが返されます。curious | revert | practising

詳細

AskSakina Islamic Knowledge MCP Server

npm version License MCP Registry

専門家のAIによるレビューを受けた、AI エージェント向けのイスラム教知識です。 コーランの章句、厳選されたドゥアーのコーパス、アッラーの99の御名を収録しています。AskSakinaの体系化された専門家AIレビューのプロセスを通じて、主流のスンニ派4法学派(ハナフィー派、マーリキー派、シャーフィイー派、ハンバリー派)に照らしてレビューされていますが、資格を持つ学者に代わるものではありません。すべての応答は、エージェントが内容を気付かれないまま誤って伝えることのないよう、提示規約でラップされています。

設計方針: 「AskSakinaは記録を提供し、エージェントは回答を提供します。」 このサーバーは参考ライブラリであり、助言者ではありません。各応答には、免責事項、LLM向け指示、提示規約、教育的背景を含む_sakina_metaエンベロープが含まれます。呼び出し元のエージェントが記録をどう扱うかは、そのエージェントの責任です。すべての応答には扱い方に関する明示的な指示が含まれますが、サーバーが別のAIにその指示への従属を強制することはできません。


提供する内容

Model Context Protocolを通じて、4つの検索ツール、4つの学習ジャーニー用プロンプト、7つのリソースを提供します。すべての記録はAskSakinaのメインアプリ(asksakina.com)を出典としており、各MCPリリースには、構築時に公開アプリで表示されていた内容が反映されています。

ツール機能
get_quran_verseスーラと節(surah:ayah)を指定して、コーランの章句を原文どおりに検索します
get_dua生活の状況(不安、朝、旅行など)に応じて、厳選されたドゥアーのコーパスを検索します
get_name_of_allah番号(1–99)または文字列で、アッラーの99の御名のいずれかを取得します
find_versesAskSakinaのテーマ別章句インデックスから、トピックのキーワードでコーランの章句を検索します
understand_a_verse (prompt)スーラと節を指定して章句を1つ取得し、あればその教えに関する注記とともに提示します
explore_names_of_allah (prompt)番号を指定して御名を1つ取得し(指定がない場合は1)、その御名を提示して次の御名を案内します
what_muslims_believe (prompt)スーラ・アル=イクラース、御名アル=ラフマーン、信仰箇条と五行についてレビュー済みの概要、そしてコーラン2:256を提示します
first_steps_new_muslim (prompt)イスラム教に改宗したばかりの方に、4つのステップを1つずつ提示します:唯一神とその慈悲、過去の罪は赦されること、礼拝の段階的な実践、あなたの人々
sakina://about (resource)一度だけ読むブリーフィング。中核となる7つの指示と、Gemによる承認済みのダアワ用テキスト3件(コーランの保存、ハディースの格付け、マズハブの帰属)を収録しています
sakina://learn/... (resources, 2.5.0)2つの学習ジャーニーで使用する、レビュー済みの6つのテキストを原文どおりに提供します

ツール

get_quran_verse

スーラと節(surah:ayah)を指定して、コーランの章句を原文どおりに検索します。アラビア語のテキスト、翻訳、スーラ名(アラビア語+英語)、およびquran提示規約を含むAskSakina標準のエンベロープを返します。この規約は、エージェントに対して、言い換えをしないこと、スーラと節を明記すること、翻訳に「意味の翻訳」とラベルを付けることを指示します。

パラメーター

名前型必須備考
surah1..114はいスーラ番号
ayah1..286はいスーラ内の節
locale'en' | 'id' | 'ur' | 'ar' | 'tr'いいえ。既定値はen翻訳言語。arは、アラビア語の原文と併せてピックソールの英訳を返します。ウルドゥー語、インドネシア語、トルコ語の翻訳はライセンス取得待ちのため、まだ利用できません。ur、id、trを指定した場合はピックソールの英訳が返され、translation_language: "en"と、その旨を示すtranslation_noteが含まれます

応答例(抜粋)

{
  "_sakina_meta": {
    "version": "1.0",
    "content_type": "quran_verse",
    "presentation_contract": {
      "quran": {
        "no_paraphrase": true,
        "require_citation": "surah:ayah",
        "translation_label": "Translation of the Meaning"
      }
    }
    /* … */
  },
  "content": {
    "surah": { "number": 2, "name_arabic": "البقرة", "name_english": "Al-Baqarah" },
    "ayah": 186,
    "arabic": "وَإِذَا سَأَلَكَ عِبَادِي عَنِّي فَإِنِّي قَرِيبٌ ۖ …",
    "translation": "And when My servants ask you concerning Me — indeed I am near. …"
  }
}
get_dua

生活上の状況(不安、悲嘆、朝、旅行など)に合ったドゥアーを返します。状況は、正式なカテゴリのスラッグ、別名マップ、タグの分類に照らして解決されます。「母を亡くした後の悲嘆」のような自然な表現も解決されます。サーバーが表現を正規化し、既知のカテゴリ、別名、タグ、同義語の単語や、いくつかの複数語のフレーズと照合します。処理は決定論的で、AI は使用しません。content.matched_by に解決方法が示されます。悲嘆(WO#386): 質問者自身の悲嘆を示すクエリ(「母を亡くしました」、「母を亡くした後の悲嘆」、「父が亡くなりました」、「遺族」)は、状況 bereaved に解決されます。葬儀の儀式や亡くなった人を指す表現(「葬儀」、「故人のためのドゥアー」、「母の墓参り」)は deceased のままです。親(WO#430): 親を表す語(母、ママ、母親、父、パパ、父親、親、両親)と死亡を表す語(亡くなった、死亡、他界、墓、埋葬、ジャナーザ、ジャナザ、墓地、葬儀、亡くなる、死、故人、失う)を含むクエリは、この悲嘆ルートに進み、mothers や fathers を返すことはありません。親を表す語と「恋しい」が含まれ、死亡を表す語がない場合は、生存している親または亡くなった親に適したドゥアーのみが返されます。通常の親に関するクエリ(「私の母」、「両親」)は変更されません。「墓」のように死亡を表す語だけの場合は、何も解決されません。bereaved は、フィクフの査読者(Gem 4)が選定した7つのドゥアーを指定順で返し、アラビア語の男性形についての teaching_note を含み、常に少なくとも穏やかなサポートの注記を付けます。危機の検出は、未加工の入力全体を対象に最初に実行されます。自傷行為と虐待には、それぞれ別のブロック(crisis_type)が用意されています。虐待のブロックには、家庭内虐待に関する窓口情報と、虐待に特化した指示が含まれます。深刻な危機(自傷行為または虐待)がある場合、ドゥアーは返されません。content_type は crisis_resource_only となり、危機支援リソースが応答全体を占めます。各ブロックでは、24時間年中無休の窓口が最初に列挙され、利用時間が限られている窓口についてはその時間が明記されます。状況に危機を示すキーワード(メインアプリの detectCrisis キーワードリストと照合)が含まれる場合、応答には適切なホットラインと向社会的な指示を含む必須の crisis_resource ブロックが追加されます。

パラメーター

名前型必須備考
contextstringcontext または id のいずれか自由形式の生活上の状況
idstringcontext または id のいずれか以前の応答に含まれる related 参照から取得したドゥアー ID(WO#390)
locale'en' | 'id' | 'ur' | 'ar' | 'tr'いいえ。既定値は enドゥアーの記録はすべてのロケールで英語です。危機支援リソースはリクエストのロケールで提供されます(2.2.1)。ロケールが省略された場合、または en の場合、深刻な危機に関するリソースは、該当する危機キーワードの言語(id、ur、ar、tr)で提供されます(2.2.2)
audience'curious' | 'revert' | 'practising'いいえユーザー自身による自己説明のみを使用します。teach.audience として反映されます。省略した場合、teach ブロックには unknown と表示されます(2.2.0)
limit整数(1~10)いいえ。既定値は 3状況の検索で返すレコード数(2.2.0)。遺族向けセットと虐待の許可リストは常にすべて返されます。id と併用した場合は無視されます
offset0 以上の整数いいえ。既定値は 0limit を指定したページ分割で、ページの前にスキップするレコード数(2.2.0)。id と併用した場合、および bereaved の場合は無視されます

結果の整形(2.2.0)。 状況の検索では、既存のルート順(バンドルの順序。bereaved では Gem 4 の固定順)で、offset の位置から limit 件のレコードを返します。ページの後にも続きがある場合、content.total_available に全件数が示され、content.truncated は true となり、content.more に「この状況に関するドゥアーがさらに N 件あります。すべて表示するには、offset と limit を指定して get_dua を呼び出してください。」という注記が含まれます。同じ注記は CRITICAL_RULES にも記載されます。0 以外の場合は content.offset が含まれます。ページ分割により、カテゴリ内のすべてのレコードを取得できます。

応答の例(省略あり)

{
  "_sakina_meta": {
    "content_type": "dua_collection",
    "presentation_contract": {
      "hadith": { "require_grading": "per_record" /* true when every record is graded */ }
    }
    /* … */
  },
  "content": {
    "context": "stress-anxiety",
    "duas": [
      {
        "dua_block": "Arabic: …\nTransliteration: …\nTranslation: …\nOrigin: Quran 21:87\nSource: Quran 21:87\nGrading: Quranic",
        "title": "Dua to Deal with Distress & Depression",
        "arabic": "وَذَا ٱلنُّونِ إِذ ذَّهَبَ …",
        "source": "Quran 21:87",
        "grading": "Quranic",
        "grading_status": "quranic",
        "origin": "quran",
        "quran_citation": "Quran 21:87"
      },
      {
        "title": "Dua to Remove Sorrow & Grief:",
        "source": "Source not recorded in AskSakina corpus",
        "grading": "Not graded in AskSakina corpus",
        "grading_status": "not_recorded"
        /* … */
      }
      /* … */
    ],
    "total_results": 3,
    "total_available": 12,
    "truncated": true,
    "more": "9 more du'as for this context; call get_dua with offset and limit to see them.",
    "grading_summary": { "quranic": 2, "graded": 0, "not_a_narration": 0, "not_recorded": 1 }
  }
  // crisis_resource block added if context triggers the crisis keyword list
}

グレーディングの状態。 各ドゥアーのレコードには grading_status が含まれます。quranic(テキストがクルアーンの一節または節の一部)、graded(ハディースのグレーディングが記録されている)、not_a_narration(預言者からの伝承ではなく、一般的な祈願。そう示す grading_directive を含む)、または not_recorded(AskSakina のコーパスにグレーディングが存在しない)のいずれかです。現在、コーパスの大半は not_recorded です。Source と Grading の行では、グレーディングが存在するかのように示すのではなく、その旨を記載しています。クルアーンの参照先が確認済みのドゥアーには origin: "quran" と quran_citation が含まれ、アラビア語はバンドル時に AskSakina の聖典モジュールから解決されたタンジール・ウスマーン体のテキストです。

get_name_of_allah

番号(1~99)または文字列(転写、アラビア語、英語の意味)で検索します。アラビア語、転写、ロケールに応じた意味、考察、クルアーンの参照箇所を返します。

パラメーター — 次のいずれか:

NameTypeNotes
number1..99主な検索方法
namestring転写、アラビア語、英語の意味

さらに、任意の locale(tr は英語の意味と考察を返します)。

応答例(一部省略)

{
  "_sakina_meta": { "content_type": "name_of_allah" /* … */ },
  "content": {
    "number": 29,
    "arabic": "الحَكَم",
    "transliteration": "Al-Hakam",
    "meaning": "The Judge",
    "reflection": "Allah is the absolute Judge…",
    "quran_references": ["6:114", "13:41"]
  }
}
find_verses

get_quran_verse の参照検索に加えて、トピック検索を行います(WO#386)。クエリを正規化し、各単語を AskSakina のテーマ別節インデックスのテーマ(不安、感謝、忍耐、信頼、悲しみ、希望、赦し、朝、金曜日、ラマダーン、励まし)に、テーマ名または定義済みの同義語リストによって照合します。決定論的に動作し、埋め込みも AI 呼び出しもありません。

2.5.0(WO#495)では、15 個のテーマが追加され、それぞれに規則で定められた順序で節が含まれます:交友、家族と結婚、来世、両親、夜と休息、人格、公正、保護、クルアーンと知識、信仰と導き、預言者と創造、季節、糧、癒やし、確信。交友(孤独)には、悲しみと同様に支援ブロックが含まれ、教訓的な内容はありません。癒やしには、節は精神的な慰めであり、医療に代わるものではないという指示がもう一つ含まれます。危機検出器が単独では認識しない虐待関連の単語(「abuse」「abusive」「violence」およびその派生形)を含むクエリは、15 個のいずれのテーマにも該当せず、2.4 と同じ応答が返されます。2.5.1(WO#500)以降、これらの単語を使った開示表現(「abusing me」「abusive husband」「my father is violent」、および Gem 3 のウルドゥー語、アラビア語、インドネシア語、ベンガル語、ペルシア語の表現)は危機キーワードとなり、いずれのテーマよりも先に虐待リソースブロックを返します。

各節には reference(スーラ:節)、arabic(聖典モジュールから取得した節全文、タンジール・ウスマーン体、バイト単位で完全一致)、translation(get_quran_verse と同じ方法で取得したピックトール訳の節全文)、スーラ名、およびどのテーマのリストに含まれるかを示す relevance_note が含まれます。この注記は解説ではありません。上流に接続できない場合でもアラビア語は返され、translation は null となり、注記が付されます。

一致するものがない場合、エラーではなく content_type: "not_found"、verses: []、no_results: true、利用可能なテーマのリストが返されます。危機検出は get_dua と同様に最初に実行されます。深刻な危機(自傷または虐待)がある場合は、節もテーマのリストも含まない crisis_resource_only を返します。

パラメーター

NameTypeRequiredNotes
querystringはいトピックまたはキーワード。例:patience、grief、gratitude
limit1..10いいえ。既定値は 5節の数
locale'en' | 'id' | 'ur' | 'ar' | 'tr'いいえ。既定値は en各国の危機リソースを選択します。翻訳はピックトール英訳です。ur、id、tr には翻訳未提供の注記が付されます
リソース:sakina://about

ツールを使用する前に、このリソースをお読みください。7 つの中核指示に加えて、Gem の審査を通過した教育的なダアワー文書が 3 つ含まれています。ほとんどの MCP クライアントは、初回接続時に自動で取得します。

サーバーのinstructions(2.2.0)

初期化結果にはinstructionsが含まれます(1,529文字、上限の1,801文字以内)。ここには、引用と指導に関するルール、2026年10月20日に定められたダアワの作法に関するブロック(原文のまま)、および条件付きの門戸開放の一文が含まれます(イスラムそのものにユーザーが関心を示した場合に限り、会話ごとに最大1回、苦境にある場合は決して提示せず、回答の条件として提示せず、断られた後は決して提示しない)。instructionsを表示するクライアントは、セッションごとに一度、モデルにこれらのルールを伝えます。_sakina_meta.llm_directivesにある応答ごとのルールは、どちらの場合にも適用されます。

指導(2.2.0、「引き継ぐのではなく、教える」)

あるレコードに指導用エントリーがある場合(src/teach/entries.ts。現時点で6件)、そのレコードには、audienceの有無にかかわらず、teachブロックとrelatedリストが含まれます。指示では指導の順序が定められています。まずレコードをそのまま正確に引用します(アラビア語、翻訳、出典、評価)。次に、AskSakinaの注記に基づく文脈として、teachブロックの内容だけを説明し、タフスィールや裁定として扱わないでください。注記の範囲を超える場合は、その旨を伝え、信頼できるタフスィールまたは有資格の学者を案内します。振り返りの質問は回答を加えず、原文のまま提示し、関連する次のステップは最大1つ提示します。サポートブロックの配下、悲嘆への対応ルート、危機への応答には何も付加されません。また、ユーザーが苦境、悲嘆、または危機にあることを明かした後にのみレコードを引用するよう、指示でエージェントに伝えます。teachブロックがない場合、エージェントはレコード自体に含まれるフィールドだけに基づき、AskSakinaの注記として出典を示して説明した後、同様に引き継ぐことができます。

プロンプト:学習の道のり(2.4.0)

MCPプロンプトを表示するクライアント向け(たとえば、スラッシュコマンドとして表示するクライアント向け)のプロンプトが2つあります。それぞれ、1つのユーザーメッセージを返し、エージェントに1つのツールを呼び出すよう指示します。その後、すでに応答に含まれているルール(_sakina_meta.llm_directives.CRITICAL_RULESとpresentation_contract。teachブロックが提供される場合は、指導の順序もここに含まれます)およびサーバーのダアワの作法(原文のまま)に従って、応答を提示するよう指示します。プロンプトが宗教的な内容を追加することはありません。ユーザーが目にする内容はすべて、ツールのレコードと、存在する場合はGemが承認した指導用エントリーから得られます。

プロンプト引数呼び出すツール次のステップ
understand_a_versesurah(1-114)、ayah(1-286)、両方とも必須get_quran_verseteachブロック固有の関連ステップがあれば、それを提示
explore_names_of_allahnumber(1-99)、任意。指定がなければ1get_name_of_allah名前のnumber + 1を1回提示(99の後には提示しない)
  • 引数は数字のみの文字列で、プロンプトの実行前に検証されます。それ以外の値は-32602とともに拒否され、値はエコーされません。アーヤがそのスーラに存在するかどうかは、直接呼び出した場合と同様に、ツールが回答します(not_found)。
  • 応答にcrisis_resourceブロック(危機またはソフトサポート)が含まれる場合、メッセージは、エージェントにそのブロックの指示に従い、何も追加しないよう伝えます。振り返りの質問も次のステップも提示しません。
  • プロンプトの引数はログに記録も集計もされません。/statsで集計されるのは、各プロンプトが名前ごとに取得された回数のみです。
プロンプト:2つの道のり(2.5.0)
プロンプト引数エージェントに求めること
what_muslims_believeaudience(curious、revert、practisingのいずれか)、省略可。指定がない場合はcurioussakina://aboutを読み、112:1-4、Name 1、リソース sakina://learn/what-muslims-believeと2:256を取得します。以降の応答はそれらの記録のみを参照します。次のステップを1つ提示します。オープンドアの一文は最大1回までとし、危機ブロックまたは苦痛の後には決して提示しません
first_steps_new_muslimstep(1から4)、省略可。指定がない場合は1audienceを常にrevertとして、取得ごとに1つのステップを提示します。1:シャハーダ(ユーザーに唱えるよう求めない)、112:1-4、Names 1と2。2:8:38、赦しに関するリソース、Name 34、39:53、ドゥアー Sahih al-Bukhari 744(get_duaのID D00234)。3:ウドゥーと最初の礼拝、1:1。4:コミュニティを見つけること。オープンドアは提示しません。
  • 引数はプロンプトの実行前にチェックされます。それ以外は-32602で拒否され、値はエコーされません。
  • リソース(sakina://learn/what-muslims-believe、sakina://learn/first-steps#shahada、#forgiven、#wudu、#first-prayer、#community)は、アプリ独自のレビュー済みシードモジュールとGemsの裁定からスクリプトで生成されます(scripts/wo495-learn-content.ts)。コミット済みのテキストと異なる場合、ビルドは失敗します。
  • 新しいムスリム向けの注記(audience_note)。 audience: "revert"の場合、6つの記録(112:1、1:1、Names 1、2、34、およびドゥアーD00234)に、新しいムスリム向けのAskSakinaの注記が含まれます。それぞれに独自の引用と、正確に引用するためのnote_blockがあります。教えが差し控えられる場合(危機、サポートブロック、悲嘆、非英語ロケール)は、注記も差し控えられます。

レスポンスのエンベロープ

すべてのツールは同じ形式を返します。

{
  "_sakina_meta": {
    "version": "1.0",
    "source": "AskSakina Islamic Knowledge Server (asksakina.com)",
    "content_type": "quran_verse" | "dua_collection" | "name_of_allah" | "not_found" | "crisis_resource_only",
    "disclaimer": "AskSakina provides curated Islamic reference content for educational purposes. …",
    "llm_directives": { "CRITICAL_RULES": ["…"] },
    "presentation_contract": {
      "quran":         { "no_paraphrase": true, "require_citation": "surah:ayah" /* … */ },
      "hadith":        { "require_grading": true, "require_source": true /* … */ },
      "name_of_allah": { "no_paraphrase_arabic": true /* … */ }
    },
    "educational_context": "…"
  },
  "content": { /* tool-specific record; a record with a teaching entry also carries "teach" and "related" (2.2.0) */ },
  // get_dua and find_verses, when crisis keywords detected:
  "crisis_resource": { "level": "hard" | "soft", "crisis_type": "self-harm" | "abuse", "locale": "…", "directive": "…", "text": "…" }
}

エンベロープは契約です。_sakina_meta.presentation_contractは、記録の表示方法をエージェントに伝えます。disclaimerは、エージェントが独自の権限で主張できない内容を伝えます。crisis_resourceは、ユーザーの苦痛が安全上のしきい値を超えた場合に、危機対応リソースを最優先で提示するようエージェントに求めます。これらはクライアントAIへの指示であり、サーバーが別のAIに従わせることはできません。

構造化出力(2.4.2)

各ツールはoutputSchemaを公開し、エンベロープを2回返します。1回はstructuredContent(オブジェクト)として、もう1回はテキストコンテンツ(以前のリリースから変更のない、同じエンベロープのJSONテキスト)として返します。どちらにも常に同じデータが含まれます。ツールごとのスキーマ(src/contracts/output-schemas.ts):

ツールcontent_typecontent
get_quran_versequran_verse、not_found節(スーラ番号と名前、アーヤ、arabic_text、translation、translation_source、translation_language。任意でteach、relatedを含む)、または{ requested, reason }
get_duadua_collection、not_found、crisis_resource_only{ context, matched_by, duas[], total_results, total_available, truncated, grading_summary }、または{ requested, reason }、または{ requested, withheld, reason }
get_name_of_allahname_of_allah、not_found、crisis_resource_only御名(name_block、number、arabic、transliteration、english_meaning、reflection、quranic_references。任意でteach、relatedを含む)、または{ requested, reason }、または{ requested, withheld, reason }
find_versesverse_collection、not_found、crisis_resource_only{ query, matched_themes[], verses[], total_results, no_results }、または一致なしの形式(available_themes)、または{ requested, withheld, reason }

すべてのレスポンスには_sakina_meta(version、source、content_type、disclaimer、任意でdisclaimer_locale、llm_directives.CRITICAL_RULES、presentation_contract、educational_context)が含まれます。また、危機対応ブロックまたはソフトサポートブロックが適用される場合は、crisis_resource(level、任意でcrisis_type、locale、directive、text)も含まれます。すべてのオブジェクトはオープン形式です。後のリリースでフィールドが追加されても、検証を行うクライアントでエラーにはなりません。

クイックスタート

npx で実行(インストール不要)
npx -y @asksakina/islamic-knowledge-mcp --stdio

--stdio を指定すると、このパッケージは標準入力/標準出力経由で MCP を通信します。任意の MCP クライアントに接続してご利用ください。フラグを指定しない場合は、ホストされているエンドポイントと同様に、$PORT(デフォルトは 3030)で Streamable HTTP サーバー(POST /mcp、GET /health)を起動します。2.1.0 より前のバージョンでは、sakina-mcp コマンドを実行してもどちらも起動せずに終了していました(WO#444)。

リモートの Streamable HTTP 経由で接続
https://sakina-mcp.fly.dev/mcp

ローカルのサブプロセスよりも、ホストされたエンドポイントを優先するエージェント向けです。同じツール、同じエンベロープ、同じレート制限を使用します。

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json(macOS)または %APPDATA%/Claude/claude_desktop_config.json(Windows)に追加します。

{
  "mcpServers": {
    "sakina": {
      "command": "npx",
      "args": ["-y", "@asksakina/islamic-knowledge-mcp", "--stdio"]
    }
  }
}

Claude Desktop を再起動します。ツールピッカーに 4 つのツールと sakina://about リソースが表示されます。

Cursor

~/.cursor/mcp.json(またはワークスペースの .cursor/mcp.json)に追加します。

{
  "mcpServers": {
    "sakina": {
      "command": "npx",
      "args": ["-y", "@asksakina/islamic-knowledge-mcp", "--stdio"]
    }
  }
}
VS Code(MCP 対応の拡張機能を使用)

ワークスペースの .vscode/mcp.json に追加します。

{
  "servers": {
    "sakina-islamic-knowledge": {
      "command": "npx",
      "args": ["-y", "@asksakina/islamic-knowledge-mcp", "--stdio"]
    }
  }
}
リモート HTTP 経由で汎用 MCP クライアントを接続
{
  "mcpServers": {
    "sakina": {
      "type": "streamable-http",
      "url": "https://sakina-mcp.fly.dev/mcp"
    }
  }
}

ユースケース

この MCP サーバーは、厳選されたイスラム教の資料を必要とし、言い換えずに原文をそのまま引用するよう明示的に指示された形で資料を受け取る、あらゆるエージェントやアプリケーション向けに設計されています。

  • 記録されている場合に出典を示す、イスラム教のチャットボットを構築します。 get_quran_verse と get_dua を会話フローに組み込みます。提示方法の規約では、エージェントに原文をそのまま引用し、評価を付記するよう指示します。また、各応答にはコンテンツの種類が示され、ドゥアーについては各記録の評価ステータスも示されます。
  • 礼拝時刻に応じたスピリチュアルなコンテンツをエージェントに追加します。 コーランとドゥアーのツールを礼拝時刻 API と組み合わせ、適切な時間にアッラーの言葉を提示します。
  • ユーザーの状況に基づいてドゥアーを推奨します。 get_dua の危機関連キーワードフィルターは、自傷を示す表現や虐待などの危険なケースに対応します。そのため、安全上重大なメッセージに対して、汎用的なドゥアーで返答しないようアシスタントに指示できます。
  • アッラーの 99 の御名について質問に回答します。 get_name_of_allah は、番号または名前による検索に対して、正式なアラビア語表記、翻字、意味、考察に加えて、コーランの出典を返します。
  • 神学的な包摂性を保ちます。 このサーバーは、議論のある法的見解を普遍的な答えとして提示しないよう設計されています。

コンテンツの完全性

新規および変更されたコンテンツは、リリース前に AskSakina の「Gem」専門 AI レビューチェーンで審査されます。イスラム知識に関するすべてのリリースは、4 人のレビュアーによる審査を通過する必要があります。

  1. クルアーンと翻訳の検証。 アーヤの正確性、スーラ/アーヤの引用の正確性、ハディースの格付け、出典の確認。
  2. フィクフの多様性(複数のマズハブ)。 学派をまたいだ正確性、見解が分かれる話題で単一のマズハブに基づく枠組みを避けること、包摂的な言葉遣い。
  3. イスラム心理学と牧会的ケア。 心の準備が整う範囲での安全性、危機フィルターの網羅性、罪悪感に基づく動機付けを避けること。
  4. 探求者/イスラムに初めて触れる人への配慮。 ムスリム以外の読者に向けたアラビア語用語の解説、平易な英語でのフィクフ、信仰を前提としない内省。

コードに実装されているアーキテクチャ上の動作:

  • Unicode の預言者への祝福表記(U+FDFA、ﷺ)は、すべてのデータローダー境界で (peace be upon him) に置き換えられます。レスポンスビルダーは、この記号を含む出力を拒否します。
  • 各ドゥアーのレコードには grading_status(quranic、graded、not_a_narration、not_recorded)が含まれます。hadith の表示契約では、返されたすべてのレコードが格付け済み、またはクルアーンに由来する場合に限り require_grading: true を設定し、それ以外の場合は "per_record" を設定します。そのため、レスポンスの外枠が、データに存在しない格付けを示すことはありません。
  • 危機に関するキーワード検出は、すべての get_dua リクエストで実行されます。使用するキーワードリストは、メインアプリの安全性チェックと同じです。

聖なる目的での利用ライセンス。 このサーバーは Sacred Use License のもとで配布されます(LICENSE を参照)。許可される用途は、ダアワ、教育、個人的な礼拝、ムスリム向けアプリケーションへの敬意ある統合を中心としています。このライセンスでは、イスラム知識を希少なもの、または有料でしか入手できないものとして扱う収益化を禁止しています。ライセンス条項の公開概要は https://www.asksakina.com/en/mcp にあります。

プライバシー。 プライバシーと分析を参照してください。


開発用にローカルで実行する

cd mcp-server
npm install
npm run bundle-data     # snapshot data from main repo into data/
npm run typecheck       # tsc --noEmit
npm run start           # HTTP server on :3030 via tsx
npm run test:tools      # exercise each tool, prints sample JSON

# Or build + run from compiled output:
npm run build           # tsc -> dist/, postbuild adds shebang + dist/package.json
npm run start:dist      # node dist/server.js

POST /mcp は標準の MCP JSON-RPC 2.0 を受け付けます。GET /health は { "status": "ok", "name", "version" } を返します。

レート制限

デフォルト:IP ごとに 1 分あたり 60 リクエスト。

  • UPSTASH_REDIS_REST_URL と UPSTASH_REDIS_REST_TOKEN が設定されている場合 → Upstash Redis による分散型固定ウィンドウ方式。
  • それ以外の場合 → プロセスごとのメモリ内トークンバケット方式。

レスポンスには X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset が含まれます。上限を超えると、コード -32029 の 429 が返されます。

認証

v1 では認証なしで提供されます。任意の X-Sakina-App-Id ヘッダーを受け付けますが、v1 では検証もログへの記録も行いません。v2 では必須になります。

プライバシーと分析

このサービスでは、集計データのみを扱うデータモデルを採用しています(WO#360、日次集計 WO#456、学習カウンター WO#477)。サーバーは各ツールについて、結果(ok、not_found、error)別の呼び出し数、運用上の平均値を算出するためのハンドラー実行時間の合計、学習ブロックを含む応答数を継続的に集計します。また、すべてのツールを対象に、省略可能な audience 引数の各値(curious、revert、practising、unknown、または指定なし)を含む呼び出し数と、各学習プロンプトの取得回数も集計します。これらはすべて合計値のみで、/stats エンドポイントを通じて報告されます。

  • 永続的な追跡はありません: アプリケーションによって、リクエストごとのログやクライアント識別子がディスクやデータベースに書き込まれることはありません。
  • IP アドレスの一時的な取り扱い: クライアントの IP アドレスは、レート制限の適用にのみ使用されます。各アドレスはレート制限の期間(60 秒)の間、Upstash Redis にレート制限キーとして保持された後、期限切れになります。Upstash が利用できない場合は、同じ期間だけインメモリのフォールバックがプロセスメモリに保持し、その後破棄します。生の IP アドレスがアプリケーションによって永続化されたり、ログに書き込まれたりすることはありません。
  • ペイロードのログ記録はありません: リクエストパラメーター(コンテキスト値、聖句の参照、Name の番号、プロンプト引数、ロケールなど)や応答ペイロードが取得または記録されることはありません。集計対象となる引数は audience のみで、4 つの固定値と「なし」の集計数だけを記録します。その値が呼び出し、ツール、その他の何かと関連付けて保存されることはありません。
  • 起動後のカウンター: /stats が by_tool の下で報告する合計値は RAM 上にのみ存在し、サーバープロセスの再起動時にリセットされます。
  • サーバー自身のディスク上の日次集計: ホストサーバーでは、UTC の日ごとのツール別呼び出し数と結果(ok、not_found、error)、ハンドラー実行時間の合計、学習ブロックを含む呼び出し数、audience の値の集計数、各学習プロンプトの取得回数が、再起動後も保持されるようサーバー自身のディスクに書き込まれます。保持期間は最長 90 日で、それより古い日のデータは削除されます。これらのデータには、IP アドレス、ユーザーエージェント、クライアント識別子、個々の呼び出し時刻、パラメーター、ペイロードは含まれず、リクエストや個人と結び付けることもできません。MCP_USAGE_DIR が設定されている場合にのみ書き込まれます。ローカルでの npx または --stdio の実行では何も書き込まれません。
  • 個人単位の情報はありません: クライアント、セッション、ユーザー、会話ごとのカウンターは保持されません。学習、オーディエンス、プロンプトのカウンターは、ツールごとの呼び出し数と同様に、すべての呼び出し元を対象とする単一の累計値です。

規制に関する注記(英国 GDPR):レート制限期間を超えて識別可能な情報が保持されることはないため、アクセスまたは消去の対象となる記録はありません。アプリケーション自体は個人データを永続化しませんが、当社のインフラストラクチャプロバイダー(Fly.io)は、標準的なネットワークルーティングおよびプラットフォームセキュリティのため、エッジ層で IP アドレスを一時的に処理する点にご注意ください。

/stats エンドポイント

認証が必要なサマリーエンドポイントです。

curl -H "Authorization: Bearer $MCP_STATS_TOKEN" https://sakina-mcp.fly.dev/stats

MCP_STATS_TOKEN 環境変数を設定する必要があります(設定されていない場合、エンドポイントは 503 を返し、認証されていないリクエストへの応答を拒否します)。トークンの比較には、処理時間が一定となる方式を使用します。

ペイロードの形式:

{
  "privacy": "aggregate-only counters; no per-request records, no IPs, no user-agents, no client identifiers, no geolocation, no params beyond a tally of audience values, no payloads; since-start totals reset on restart; daily totals (per tool: ok, not_found, error, summed duration, teach served; plus audience tally and prompt fetches by name) kept on the server's own disk for at most 90 days",
  "since": "2026-09-25T…",
  "total_requests": N,
  "by_tool": {
    "get_quran_verse":   { "total": N, "ok": N, "not_found": N, "error": N, "avg_response_ms": N, "teach_served": N },
    "get_dua":           { "total": N, "ok": N, "not_found": N, "error": N, "avg_response_ms": N, "teach_served": N },
    "get_name_of_allah": { "total": N, "ok": N, "not_found": N, "error": N, "avg_response_ms": N, "teach_served": N },
    "find_verses":       { "total": N, "ok": N, "not_found": N, "error": N, "avg_response_ms": N, "teach_served": N }
  },
  "audience": { "curious": N, "revert": N, "practising": N, "unknown": N, "absent": N },
  "prompts": { "understand_a_verse": N, "explore_names_of_allah": N, "what_muslims_believe": N, "first_steps_new_muslim": N },
  "rate_limiter": {
    "state": "upstash",
    "upstash_configured": true,
    "upstash_failures": 0,
    "last_failure": null,
    "last_failure_at": null,
    "last_success_at": "2026-09-25T…",
    "startup_check": "Upstash reachable (PING ok, 12 ms); state: upstash"
  },
  "basmala_prefix_mismatch": 0,
  "daily": {
    "retention_days": 90,
    "days": [
      { "date": "2026-10-12", "total": N,
        "by_tool": { "get_dua": { "total": N, "ok": N, "not_found": N, "error": N, "avg_response_ms": N, "teach_served": N }, … },
        "audience": { "curious": N, "revert": N, "practising": N, "unknown": N, "absent": N },
        "prompts": { "understand_a_verse": N, "explore_names_of_allah": N, "what_muslims_believe": N, "first_steps_new_muslim": N } }
    ]
  }
}

daily は保存済みの日付を新しい順に列挙し、まだ書き込まれていない今日の呼び出しも含みます。MCP_USAGE_DIR が未設定の場合は null になり、この場合、privacy の行にはメモリー内のカウンターのみが記載されます(「教示を提供したツールごとの件数、audience 値とプロンプトの名前ごとの取得回数を含む、集計のみのメモリー内カウンター。再起動するとリセットされます」)。

teach_served は、教示ブロックを含む応答の件数を数えます(WO#488)。audience は、各ツール呼び出しで省略可能な audience 引数の値を、固定の4つの値ごとに集計します。値を指定しなかった呼び出しは absent として数えます。この件数はすべてのツールを通じた合計であり、ツール、呼び出し、またはUTC日の単位より細かい時刻とは結び付けられません。prompts は、名前ごとに各学習プロンプトの取得回数を数えます。プロンプトの引数は読み取られません。

rate_limiter.state の値は、upstash(Upstash が応答している)、degraded(Upstash は設定されているものの動作していない状態。リクエストはメモリー内のフォールバックによって制限され、決して許可されません)、または memory(Upstash が設定されていない)です。失敗理由にはHTTPステータスまたはエラーが記録され、クライアントのIPアドレスは記録されません。basmala_prefix_mismatch は、上流から取得したアーヤ1のテキストが、記録されているどちらのバスマラ形式でも始まらず、そのまま提供された件数を数えます。これは集計件数のみであり、このログ行に節の参照情報は含まれません。

Fly での初回セットアップ
fly secrets set MCP_STATS_TOKEN=$(openssl rand -hex 32)
fly deploy

サーバーが fly.toml でマウントする /data ボリュームに書き込むのは、1種類のデータだけです。日次合計がUTC日ごとに1ファイル、/data/usage(MCP_USAGE_DIR)に保存されます。書き込みは5分ごと、およびFlyがマシンを停止するときに行われます。LOG_DIR(/data/logs)は、WO#360以降使用されていません。

データソース

ツールソース
get_quran_verse英語(2.1.0、WO#444): AskSakina が修正した Pickthall 版を、アプリの public/quran/en.pickthall から data/pickthall.json として同梱しています(全6,236節。1930年版のテキストに対する WO#442 の修正を含み、節末の句読点はなく、アプリのリーダーに表示されるとおりです)。すべてのロケールで使用されます。ur と id には注記が表示されます(それらの翻訳はライセンス取得待ちのため保留中です。1.4.1)。アラビア語とスーラ名: 実行時に alquran.cloud から取得します(Tanzil 由来の Uthmani 版)。先頭のバイトオーダーマークは削除されます。上流データでは、スーラ1と9を除く各スーラの第1節の前にバスマラも付加されています。Gem 2(バスマラが第1節の一部となるのは1:1のみ)に従い、上流から送られる2種類のバイト形式に一致する、スーラ2~8および10~114の第1節に付加されたその接頭辞を削除します。節の残りの部分はバイト単位でそのまま提供されます。認識されない開始部分は変更せずに提供され、/stats の basmala_prefix_mismatch にカウントされます。すべて節ごとに取得されます(/ayah/{surah}:{ayah})。Saheeh International 版は提供されません(1.2.0、WO#245 で削除)。節と版の組み合わせごとに、プロセス内で24時間キャッシュされます。
get_duaAskSakina のドゥアーコーパス(2.1.0 時点で440件)。npm run bundle-data により、../src/data/duas から data/duas.json にスナップショットとして保存されます。検証済みのクルアーン参照を持つドゥアーのアラビア語は、同じ処理の中で聖典モジュール(../src/lib/scripture、Tanzil Uthmani 版)から取得されます。
get_name_of_allahAskSakina のアッラーの99の御名。npm run bundle-data により、../src/lib/data/99-names からスナップショットとして保存されます。
find_versesAskSakina のテーマ別節インデックス(../src/lib/data/thematic-verses)。npm run bundle-data により、data/thematic-verses.json にスナップショットとして保存されます。インデックスから取得するのは各節の参照とテーマのみです。アラビア語は同じ処理の中で聖典モジュールから、Pickthall 訳は同梱の data/pickthall.json(2.1.0)から取得します(スーラ名は引き続き実行時に alquran.cloud から取得され、get_quran_verse と同じキャッシュが使われます)。

ドゥアーと御名のデータはメインアプリのデータファイルのスナップショットです。そのため、データが更新されると、次回の npm run bundle-data でここにも反映されます(デプロイワークフローで実行されます)。公開パッケージには、ビルド時点のスナップショットが含まれます。


v1 の対象外

Phase 3 の計画書に基づきます。

  • セマンティック検索/search_islamic_guidance — Gem によるレビュー済みの評価セットが必要です(find_verses はインデックス検索であり、セマンティック検索ではありません)。
  • explain_islamic_concept — Architect レベルの裁定が下されるまで、CLAUDE.md の「AI はスピリチュアル/フィクフに関する助言を行わない」というルールに直接抵触します。
  • get_pastoral_guidance — Gem 3 の枠組みは AskSakina が管理するサーフェスを前提としており、別途レビューを受けずに MCP 経由でリリースすることはできません。
  • check_halal_ingredient — WO#61 の復元が完了するまで対応できません。
  • HMAC 署名の強制 — v1 では X-Sakina-App-Id ヘッダーを受け付けますが、無視します。

デプロイ

公開時点で自己完結します。npm run bundle-data により、メインの AskSakina モノレポからドゥアーコーパス、アッラーの99の御名、および正規の安全性モジュールを data/ と src/safety/_synced/ にスナップショットとして保存します。コンパイル済みの dist/ と同梱の data/ ディレクトリは、実行時にメインアプリに依存しません。

bundle-data は prebuild スクリプト(WO#138)によって自動実行されるため、新たにチェックアウトした状態でも npm run build は自己完結しています。手動でバンドルする必要はありません。src/safety/_synced/ ディレクトリは git にコミットされているため、メインアプリの安全性モジュールとの相違は、コミット間の git diff に表示されます。

docker build は prebuild を実行しません(モノレポではなく mcp-server/ ディレクトリのみをコピーします)。data/ にデータを用意するため、docker build の前にホスト上で npm run bundle-data を実行してください。新しいクローンからビルドする場合も同様です。docker build の前に npm install && npm run bundle-data を実行してください。

CI デプロイ(標準手順 — WO#249)

すべての MCP リリースは MCP Server Deploy GitHub Actions ワークフロー (.github/workflows/mcp-deploy.yml)を通じて行われます。開発者のマシンには flyctl の認証情報も npm の認証情報も保持しません。Architect がリポジトリの Actions タブから(workflow_dispatch)次の 2 つのブール値入力で実行します。

  • deploy_fly(デフォルトは true)— ビルドし、flyctl deploy で sakina-mcp.fly.dev にデプロイします。
  • sync_mirror(デフォルトは true)— ビルドしたパッケージを公開ミラー (github.com/yserrag/asksakina-mcp)にプッシュし、そこで v<version> タグを付けます。ミラー側の ワークフローが、信頼された公開と来歴情報(WO#444)を使用して npm に @asksakina/islamic-knowledge-mcp を公開します。このリポジトリには npm トークンを保持しません。

ジョブは main で Gem 10 の完全なランブックを実行します:npm ci → npm run bundle-data (重要な処理)→ flyctl deploy → /health をポーリング → ライブ Pickthall バイトチェック( 2:255 と 9:129) → ライブ Dhun-Nun チェック → レートリミッターのプローブ(警告のみ)→ ライブ公開ガード → エージェント評価(警告のみ。WO#386 以降、ガードの後に実行するため、ブロックするガードが先にレート制限の予算を確保できます)→ ミラーの同期とタグ付け(ミラーが公開します)。この バイトチェックでは、ライブエンドポイントに対して MCP の initialize ハンドシェイクと tools/call get_quran_verse を実行します:"save Him"(Pickthall)なら合格しますが、"except Him"(Saheeh International)または到達不能な /mcp の場合は、ミラーの同期前にジョブが失敗し、 flyctl status とログを出力して、手動ロールバック用のコマンドを表示します。9:129 には 「There is no God save Him」と表示される必要があります。これは、修正済みテキストをバンドルした場合にのみ表示されます。 シークレット FLY_API_TOKEN と ASKSAKINA_MCP_DEPLOY_KEY はリポジトリの設定に保存され、 出力されることはありません。

前のイメージへの自動ロールバックは Gem 10 の最終目標ですが、後続対応に延期されています。現在のライブイメージ自体が壊れているため、まだ自動復元できる既知の正常なイメージがありません。最初の実行ではエラーを明示して停止し、手動でロールバックするのみです。

Fly.io(手動/緊急時)

上記の CI ワークフローを優先してください。以下は、flyctl の認証がすでに設定されているマシンで使用する基本的なコマンドです:

cd mcp-server
fly launch              # first time only — picks up fly.toml
fly secrets set \
  UPSTASH_REDIS_REST_URL=... \
  UPSTASH_REDIS_REST_TOKEN=...
npm run bundle-data     # load-bearing: docker build copies host data/
fly deploy
fly status
curl https://<app>.fly.dev/health

本番アプリ:sakina-mcp.fly.dev。アプリ名は sakina-mcp、リージョンは lhr、内部ポートは 3030、HTTPS を強制し、/health のヘルスチェックを 30 秒ごとに実行し、アイドル時に自動停止します。共有 CPU 1 基、メモリ 256 MB。

デプロイ後の検証とロールバック

fly deploy のたびに、ライブエンドポイントから取得した Quran の節を、ロック済みの Pickthall テーブル(docs/wo-cert/si-pickthall-LOCKED-final.json)とバイト単位で照合し、翻訳版が Saheeh International ではなく Pickthall であることを確認します:

curl -s https://sakina-mcp.fly.dev/mcp ... # call get_quran_verse for a known ref
# compare the returned translation to the locked Pickthall text for that ref

バイトチェックに失敗した場合(SI のテキストが配信された場合、または翻訳が Pickthall と一致しない場合)は、まずロールバックし、その後に原因を診断してください。それ以上の調査や修正を行う前に、直ちに前のイメージを再デプロイしてください:

fly releases --app sakina-mcp                 # find the last-good release / image
fly deploy --app sakina-mcp --image <previous-image-ref>

ライブ環境で SI への回帰が発生した場合、先行修正を試みないでください。既知の正常なイメージを復元し、そのイメージでバイトチェックに合格することを確認してから、問題のあるビルドをオフラインで診断してください。

ローカルコンテナのテスト
docker compose up --build
curl http://localhost:3030/health
その他のデプロイ先

このパッケージは Node.js の HTTP サーバーにすぎないため、Dockerfile または Node プロセスを受け入れるあらゆるプラットフォームで実行できます:Railway、Render、小規模な VPS、Cloudflare Workers(streamable-http トランスポートを使用)、Vercel Functions(小規模なアダプターを使用)。Upstash が設定されていない場合、メモリ内レートリミッターは適切にフォールバックします。


npm への公開

公開は、publish_npm: true を指定して MCP Server Deploy ワークフローを通じて行います(CI デプロイ を参照)。Architect が Actions タブから実行し、NPM_TOKEN はリポジトリの設定に保存されています。手動で行う場合(緊急時。ローカルの npm 認証が必要):

cd mcp-server
npm login                                    # to the @asksakina org
npm publish --access public

prepublishOnly は bundle-data → build → test:tools を実行するため、公開される tarball には常に最新のデータとクリーンなビルドが含まれます。files フィールドでは、dist/、data/、README.md、LICENSE、.mcp/server.json のみを許可リストに登録しています。

公開する内容を確認するため、まず npm pack --dry-run で公開用 tarball を確認してください。

MCP レジストリへの登録

mcp-server/.mcp/server.json は、公式 MCP レジストリにおける AskSakina の識別情報を宣言します。

  • サーバー名:com.asksakina/islamic-knowledge
  • パッケージ:@asksakina/islamic-knowledge-mcp(npm、stdio トランスポート)
  • リモート:https://sakina-mcp.fly.dev/mcp(Streamable HTTP)

公開フロー:MCP Registry Publish GitHub Actions ワークフロー(メインリポジトリの .github/workflows/mcp-registry-publish.yml、手動実行)。server.json、package.json、npm の内容が一致していることを確認し、次を実行します。

mcp-publisher login dns --domain asksakina.com --private-key <KEY>   # or: login http
mcp-publisher publish .mcp/server.json
curl "https://registry.modelcontextprotocol.io/v0/servers?search=com.asksakina"

com.asksakina のドメイン所有権の証明には Ed25519 キーを使用します。公開鍵は asksakina.com の DNS TXT レコード(v=MCPv1; k=ed25519; p=<base64>、2026 年 5 月以降)または https://asksakina.com/.well-known/mcp-registry-auth に配置し、秘密鍵はリポジトリのシークレット MCP_REGISTRY_PRIVATE_KEY に保存します。

Smithery への再公開(バージョン更新後)

バージョンは次の 3 か所にあり、すべて同時に更新します。

  1. package.json("version")
  2. mcp-server/.mcp/server.json(トップレベルの version および packages[0].version)
  3. mcp-server/src/server.ts(SERVER_VERSION 定数。/health と /.well-known/mcp/server-card.json に表示されます)

バージョン更新時の再公開チェックリスト:

cd mcp-server
npm run typecheck && npm run test:tools && npm run test:analytics
npm run bundle-data
npm publish                                       # npm registry
mcp-publisher publish .mcp/server.json            # MCP Registry
fly deploy                                        # Smithery scanner picks up the new card via /.well-known/mcp/server-card.json

Smithery は /.well-known/mcp/server-card.json を自動スキャンし、数分以内に再インデックスします。Smithery API を手動で呼び出す必要はありません。


リンク

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。