إنتقل إلى المحتوى الرئيسي

خادم MCP لـ QoreChain (@qorechain/mcp)

يمنح خادم MCP لـ QoreChain وكلاء الذكاء الاصطناعي وأدوات المطورين وصول قراءة إلى QoreChain عبر Model Context Protocol: الكتل والمعاملات والحسابات والمدققين وطبقات التخزين (staking tiers) وحالة التوقيع الهجين secp256k1 مع ML-DSA-87 (FIPS 204) وقراءات عقود EVM والمحاكاة وتقديرات الرسوم والتحويلات غير الموقّعة التي يوقّعها مالك الحساب في محفظته. وهو موجّه للمطورين الذين يربطون عميلًا أو وكيلًا يدعم MCP بـ QoreChain، وللفرق التي تريد عرضًا للسلسلة قابلًا للبرمجة وللقراءة فقط بمخرجات ثابتة.

لا يوقّع الخادم أبدًا، ولا يحتفظ بمفاتيح، ولا يبثّ معاملة. يعمل على جهازك عبر stdio، أو كخادم Streamable HTTP تستضيفه أنت أو تستضيفه QoreChain. الإصدار 0.1.0، نُشر في 27 أكتوبر 2026، بترخيص Apache-2.0. وتعمل أداة سطر الأوامر المقابلة qore بالأدوات نفسها من الطرفية.

الابتكارات​

  • فحص للتوقيع الهجين، لا مجرد وسم. تأخذ get_pq_status تجزئة معاملة، وتتأكد من أن جسم المعاملة يحمل طبقة /qorechain.pqc.v1.PQCHybridSignature واحدة بالضبط، وتتحقق محليًا من طبقة ML-DSA-87 هذه بواسطة QoreSign مقابل المفتاح الذي سجّله الموقّع على السلسلة، مجرّبةً sign-bytes v1 وv2. والجواب هو verified: true أو false مع السبب، وليس تخمينًا من نوع المعاملة.
  • تحويلات غير موقّعة تحمل الرسم الحقيقي. تقرأ prepare_transfer رقم حساب المرسل وتسلسله ومفتاحه العام، وتحاكي التحويل بطبقة ML-DSA-87 نائبة بالحجم الصحيح حتى يشمل الغاز الطبقة التي تضيفها المحفظة عند التوقيع، وتعيد SignDoc وملخصًا مقروءًا وفحوصات. ولا ينقص سوى توقيع المالك.
  • محاكاة برفض مفكوك الترميز. تعيد simulate_tx وestimate_fee الغاز المستهلك وحدًّا مقترحًا للغاز وتغيّر الرصيد لكل عنوان، وعندما سترفض الشبكة المعاملة تعيد رفضًا مفكوك الترميز بدلًا من نص خطأ خام.
  • مخطط واحد للخادم ولأداة سطر الأوامر. كل أمر في qore يشغّل أداة MCP واحدة، وتطبع qore --json بالضبط ملف JSON الذي تعيده الأداة. وتقدّم حزمة Python أسماء الأدوات نفسها ومخططات الإدخال والإخراج نفسها ورموز الأخطاء نفسها؛ وكلتاهما مختبرتان مقابل إجابات السلسلة المسجّلة نفسها.
  • تُرفض الأسرار قبل أن يغادر أي شيء الجهاز. الإدخال الذي يشبه عبارة استرداد (12 كلمة BIP-39 متتالية أو أكثر) أو مفتاحًا خاصًا مجرّدًا من 32 بايت يُرفض بالرمز INVALID_INPUT قبل إجراء أي طلب، وتطلب رسالة الخطأ من المستخدم معاملة ذلك السر على أنه مكشوف.
  • استجابات تُبنى حقلًا حقلًا. كل مخرج يُجمَّع من حقول مسمّاة في جواب السلسلة. ولا تصل أجسام أخطاء المنبع ولا تتبّعات المكدس إلى العميل؛ وتُحوَّل الإخفاقات إلى سبعة رموز أخطاء ثابتة.

فيمَ يُستخدم​

  1. سؤال مساعد برمجة عن حالة السلسلة. يضيف مطوّر الخادم إلى محرّر يدعم MCP ويسأل "ما آخر كتلة على الشبكة الرئيسية؟" أو "اعرض أرصدة qor1... على الشبكة التجريبية". تجيب get_block وget_address_info من النقاط العامة، مع روابط المستكشف.
  2. التحقق من أن معاملة حملت التوقيع الهجين. مطوّر محفظة أو SDK بثّ للتو معاملة ويريد التأكد من أنها تحمل طبقة ML-DSA-87 واحدة بالضبط وأن الطبقة تتحقق مقابل المفتاح المسجّل. تبلّغ get_pq_status (أو qore pq status <hash>) عن فئة التوقيع ونتيجة التحقق المحلي.
  3. تجهيز تحويل ليوقّعه المستخدم. يحتاج مساعد مبني على QoreChain إلى مساعدة مستخدم في إرسال QOR دون لمس المفاتيح. تعيد prepare_transfer SignDoc غير موقّع مع ملخص مقروء وفحوصات وتحذيرات (منها تحذير للشبكة الرئيسية)، وتعطي estimate_fee الرسم. ويوقّع المستخدم في محفظته.
  4. تتبّع أسباب رفض معاملة. لدى فريق خلفية معاملة مرمَّزة ترفضها الشبكة. تعيد simulate_tx الغاز وتغيّرات الرصيد لكل عنوان ورفضًا مفكوك الترميز، ولا تبثّ شيئًا.
  5. قراءة العقود من سكربت أو مهمة CI. يفحص فريق dApp رصيد رمز أو دالة عرض في عقد بالأمر qore read-contract --to 0x... --function "balanceOf(address)" --arg 0x... --returns uint256 --json ويحلّل JSON بـ jq.
  6. لوحات المدققين والتخزين. يسرد محلّل المدققين المرتبطين (bonded) مع حصتهم من قوة التصويت وعمولتهم (get_validators) ويقرأ معاملات طبقات التخزين وأقفال حامل واحد (get_staking_tiers).
  7. تشغيل نقطة نهاية للفريق. تشغّل شركة qorechain-mcp serve خلف وكيلها العكسي الخاص، مع مفاتيح API وحدود معدل، فتشترك عدة أدوات داخلية في نقطة MCP واحدة تشير إلى عقدها الخاصة.

كيف يعمل​

  • الخادم قارئ رفيع عديم الحالة فوق نقاط QoreChain العامة (REST وRPC الإجماع وEVM JSON-RPC). كل استدعاء إلى المنبع هو طلب واحد بمهلة 10 ثوانٍ وحد استجابة 4 MiB وبلا إعادة محاولة.
  • تُبنى الاستجابات حقلًا حقلًا من جواب السلسلة. ولا تصل أجسام أخطاء المنبع ولا تتبّعات المكدس ولا رسائل المكتبات إلى العميل؛ والإخفاق غير المتوقع يصبح INTERNAL_ERROR. وتعود الأخطاء كنتيجة أداة مع isError: true وجسم JSON.
  • تعمل فحوصات التوقيع الهجين محليًا بواسطة QoreSign: يجلب الخادم المعاملة ومفتاح ML-DSA-87 المسجّل للموقّع، ويعيد بناء sign-bytes (v1 أو v2) ثم يتحقق.
  • المحاكاة: على سلسلة بالإصدار v3.2.5 أو أحدث تشمل المحاكاة أصلًا تكلفة التحقق من ML-DSA-87 (exact_gas_simulation: true في get_chain_info)، فيكون حد الغاز المقترح دقيقًا؛ وعلى سلسلة أقدم يُضاف هامش. وعندما لا يحتوي الجسم على طبقة ML-DSA-87، تضيف simulate_tx طبقة نائبة بالحجم الصحيح (لا تُبثّ أبدًا) ليطابق الغاز المعاملة التي ستوقّعها المحفظة (assume_pqc_layer، الافتراضي true). ويكتشف الخادم إصدار السلسلة بنفسه.
  • الـ precompiles في EVM وهما 0x...0A01 (تحقق ML-DSA-87) و0x...0A02 (حالة المفتاح) نشطان على الشبكة التجريبية فقط؛ وعلى الشبكة الرئيسية يعيد الاستدعاء إليهما بيانات فارغة.
  • مخططات الأدوات المقروءة آليًا موجودة في المستودع باسم spec/tools.json، مولَّدة من جواب tools/list للخادم نفسه. والمرجع المقروء للبشر هو docs/tools.md.

كيفية الاستخدام​

تحتاج إلى Node.js 20 أو أحدث لحزمة npm، أو Python 3.10 أو أحدث لحزمة Python.

التشغيل محليًا باستخدام npx​

تأكد من أن الخادم يبدأ، ثم أضفه إلى عميل MCP لديك. تقرأ معظم العملاء التي تشغّل خوادم محلية ملف JSON فيه كائن mcpServers (يختلف اسم الملف وأسماء المفاتيح لخوادم HTTP من عميل إلى آخر؛ راجع وثائق عميلك):

npx -y @qorechain/mcp --version
{
"mcpServers": {
"qorechain": { "command": "npx", "args": ["-y", "@qorechain/mcp"] }
}
}

أعد تشغيل العميل. سيعرض 14 أداة. يتحدث الخادم إلى العميل عبر stdio. ثم اسأل مثلًا:

  • "ما آخر كتلة على الشبكة الرئيسية لـ QoreChain؟" (get_block)
  • "هل تحمل معاملة الشبكة التجريبية F642F59F2A2FEDA2B3A61A3CF49F8B5F792D65985027997004FEBB22A6F42152 طبقة ML-DSA-87 صالحة؟" (get_pq_status)
  • "جهّز تحويل 1.5 QOR على الشبكة التجريبية من عنواني إلى qor1... وقدّر الرسم." (prepare_transfer, estimate_fee)

التشغيل محليًا باستخدام pip أو uvx​

pip install qorechain-mcp
qorechain-mcp --network testnet # stdio
# or, without installing:
uvx qorechain-mcp
{ "mcpServers": { "qorechain": { "command": "uvx", "args": ["qorechain-mcp"] } } }

تقدّم حزمة Python stdio فقط. أما Streamable HTTP ومفاتيح API وحدود المعدل فاستخدم لها حزمة npm (أدناه). وللحزمة أيضًا نقطة دخول مكتبية هي run_tool.

التشغيل كخادم HTTP​

npx -y @qorechain/mcp serve --port 8787
# listening on http://127.0.0.1:8787/mcp

نقل HTTP عديم الحالة ويجيب بصيغة JSON: POST /mcp لطلبات MCP، وGET /healthz للحصول على {"status":"ok"}. الخيارات:

الخيارالافتراضيالمعنى
--port8787منفذ TCP
--host127.0.0.1عنوان الربط؛ 0.0.0.0 يستمع على كل الواجهات
--api-keys-filenoneملف يحوي تجزئات SHA-256 للمفاتيح المقبولة؛ وعند تعيينه تحتاج الطلبات إلى Authorization: Bearer <key>
--rate-limit60عدد الطلبات في الدقيقة لكل مفتاح API ولكل IP عميل؛ و0 يعطّله
--allowed-originnoneأصل متصفح مسموح له باستدعاء نقطة النهاية (قابل للتكرار)؛ وتحصل الأصول الأخرى على HTTP 403
--trust-proxyoffيأخذ IP العميل من X-Forwarded-For؛ فقط خلف وكيل تتحكم به
--networktestnetالشبكة للاستدعاءات التي لا تسمّي شبكة

لحماية نقطة النهاية الخاصة بك، أنشئ مفتاحًا، واحفظ تجزئته فقط، وسلّم المفتاح إلى العميل:

openssl rand -hex 32 > my.key
npx -y @qorechain/mcp hash-key < my.key >> api-keys.txt
npx -y @qorechain/mcp serve --api-keys-file api-keys.txt

يحتوي api-keys.txt على تجزئة واحدة من 64 رقمًا ست عشريًا في كل سطر (يُقبل اختياريًا البادئة sha256:، ويبدأ # تعليقًا). المفتاح المفقود أو المجهول يحصل على HTTP 401 مع رسالة خطأ تبدأ بـ UNAUTHORIZED؛ وعند تجاوز حد المعدل يجيب الخادم بـ HTTP 429 مع Retry-After. ضع TLS أمام أي خادم يمكن الوصول إليه من خارج جهازك.

تصدّر الحزمة أيضًا createServer وcreateHttpHandler وstartNodeServer للتضمين في بيئة التشغيل الخاصة بك. التفاصيل الكاملة: الاستضافة الذاتية في مستودع المصدر.

الإعدادات​

الإعدادكيفالأثر
الشبكة لكل استدعاءالوسيط network في أي أداة: testnet أو mainnetيختار السلسلة لذلك الاستدعاء
الشبكة الافتراضية--network testnet أو --network mainnet في أمر الخادمالشبكة المستخدمة عندما لا يسمّي الاستدعاء شبكة. الافتراضي testnet
منفذ HTTP والمضيف والمفاتيح والحدودخيارات serve أعلاهوضع HTTP فقط
مهلة المنبعثابتة عند 10 ثوانٍ لكل طلب، وحد استجابة 4 MiB، بلا إعادة محاولةالنقاط البطيئة تعطي UPSTREAM_UNAVAILABLE

الشبكة الرئيسية هي qorechain-vladi (معرّف سلسلة EVM 9801) والشبكة التجريبية هي qorechain-diana (معرّف سلسلة EVM 9800). والتحويل المجهّز للشبكة الرئيسية يحمل تحذيرًا إضافيًا. لا توجد متغيرات بيئة للشبكة: إنها خيار سطر الأوامر أو الوسيط لكل استدعاء. لجعل الشبكة الرئيسية الافتراضية لعميل ما:

{ "command": "npx", "args": ["-y", "@qorechain/mcp", "--network", "mainnet"] }

الأدوات​

الأدوات الـ 14 كلها للقراءة فقط وتقبل network اختياريًا. مدخلاتها ومخرجاتها مولَّدة من مخططات الخادم نفسه؛ ويسرد مرجع الأدوات كل حقل.

الأداةما تعيده
get_chain_infoمعرّفات السلسلة وآخر كتلة والحد الأدنى لسعر الغاز وإصدار sign-bytes ومفاتيح ميزات البروتوكول وترقية معلّقة إن كانت مجدولة وprecompiles الـ EVM النشطة
get_blockكتلة واحدة (أو الأخيرة): التجزئة والوقت والمقترِح وعدد المعاملات وحتى 100 تجزئة معاملة
get_transactionمعاملة بتجزئتها الأصلية أو بتجزئة EVM (بالبادئة 0x): الحالة والرسم والمذكرة والغاز وحتى 50 رسالة والموقّعون وفئة التوقيع (pqc أو enrollment أو shake أو classical)
get_address_infoصيغتا العنوان (qor1... و0x...) وحالة الحساب وحتى 100 رصيد والمبلغ المودَع في staking وهل سُجّل مفتاح ML-DSA-87 وهل نُشرت شيفرة بايت
get_pq_statusلعنوان: المفتاح المسجّل والخوارزمية وإثبات الحيازة ونافذة تفويض EVM. ولمعاملة: هل تحمل طبقة هجينة واحدة بالضبط وهل يتحقق منها
get_validatorsالمدققون بحسب الحصة (الافتراضي bonded، بحد أقصى 50، والحد حتى 200): الحالة وعلم الاحتجاز (jailed) والحصة ونسبة قوة التصويت والعمولة
get_staking_tiersوحدة طبقات التخزين: شروط القفل والمكافآت وعقوبة فك القفل المبكر ومجمّع المكافآت، واختياريًا أقفال حامل واحد. سلسلة v3.2.4 وما بعدها
searchيكشف ارتفاع كتلة أو تجزئة معاملة أو عنوانًا أو مدققًا من نص واحد، ويقرأه، ويسمّي الأداة التي تعيد البيانات نفسها
read_contractاستدعاء EVM eth_call فقط، مع ترميز ABI اختياري لتوقيع دالة وفك ترميز النتيجة
estimate_feeالغاز المحاكى وحد الغاز المقترح والرسم (حد الغاز مضروبًا في الحد الأدنى لسعر الغاز)، شاملًا طبقة ML-DSA-87
simulate_txالغاز المستهلك وحد الغاز المقترح وتغيّر الرصيد لكل عنوان ورفض مفكوك الترميز لمعاملة مرمَّزة
prepare_transferMsgSend غير موقّعة من uqor: SignDoc وملخص مقروء وفحوصات وتحذيرات
get_token_holdersدائمًا NOT_AVAILABLE_ON_CHAIN: سرد الحاملين يحتاج مفهرسًا لا تقدمه النقاط العامة
request_faucetدائمًا NOT_AVAILABLE_ON_CHAIN: تأتي QOR للشبكة التجريبية من الصنبور في لوحة التحكم

الأخطاء هي نتائج أدوات مع isError: true وجسم JSON هو {"error": {"code", "message", "details?"}}. والرموز هي NOT_FOUND وINVALID_INPUT وUPSTREAM_UNAVAILABLE وNOT_AVAILABLE_ON_CHAIN وRATE_LIMITED وUNAUTHORIZED وINTERNAL_ERROR.

استخدامه كمكتبة​

تصدّر حزمة npm الدوال createServer({ defaultNetwork }) (نسخة من خادم MCP لأي نقل MCP) وcreateHttpHandler({ apiKeyHashes, rateLimitPerMinute }) (معالج Fetch API، أي (Request) => Promise<Response>) وstartNodeServer(...) (خادم Node HTTP الذي يستخدمه serve). والخيارات المشتركة هي defaultNetwork وendpoints (لتوجيه شبكة إلى عقدك الخاصة) وupstream (timeoutMs وmaxResponseBytes وfetch) وonToolCall (يتلقى اسم الأداة والحالة وزمن الاستجابة).

ويمكن استخدام حزمة Python بالطريقة نفسها عبر run_tool:

import anyio
from qorechain_mcp import Context, run_tool

async def main():
out = await run_tool("get_chain_info", {"network": "mainnet"}, Context())
print(out["latest_block"])

anyio.run(main)

اختبار النقطة المستضافة من الطرفية​

curl -s -X POST https://mcp.qorechain.io/mcp \
-H "Authorization: Bearer $QORECHAIN_MCP_KEY" \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

وبدون مفتاح صالح تجيب النقطة بـ HTTP 401 مع خطأ JSON-RPC تبدأ رسالته بـ UNAUTHORIZED.

استكشاف الأخطاء وإصلاحها​

  • UPSTREAM_UNAVAILABLE: لم تجب النقطة العامة خلال 10 ثوانٍ. حاول مرة أخرى.
  • NOT_FOUND عند كتلة قديمة من الشبكة التجريبية: عقد الشبكة التجريبية تقتطع التاريخ، ويسمّي الخطأ أدنى ارتفاع متاح. تبلّغ get_chain_info عن earliest_available_height.
  • لا أدوات معروضة في العميل: شغّل npx -y @qorechain/mcp --help في طرفية للتأكد من أن Node وnpm يعملان، ثم اقرأ سجل MCP الخاص بالعميل.
  • UNAUTHORIZED على النقطة المستضافة: المفتاح مفقود أو خاطئ أو ملغى أو لم يصبح فعّالًا بعد (قد يستغرق المفتاح الجديد دقيقة أو دقيقتين).

ما الذي شُغِّل​

في 27 أكتوبر 2026 ثُبّتت الحزم المنشورة من السجلات وشُغّلت مقابل نقاط الشبكة التجريبية والشبكة الرئيسية العامة:

  • طبعت qorechain-mcp --version القيمة 0.1.0؛ وعبر stdio أعادت initialize اسم الخادم qorechain-mcp وأعادت tools/list أسماء الأدوات الـ 14 أعلاه؛ وثُبّتت pip install qorechain-mcp==0.1.0 وطبع --version فيها 0.1.0.
  • أجابت qorechain-mcp serve --port 18787 عن GET /healthz بـ {"status":"ok"} وعن استدعاء tools/call للأداة get_chain_info عبر POST /mcp.
  • أعادت get_chain_info السلسلة qorechain-diana ومعرّف سلسلة EVM 9800 والحد الأدنى لسعر الغاز 0.1 uqor وsign-bytes v2 على الشبكة التجريبية، والسلسلة qorechain-vladi ومعرّف سلسلة EVM 9801 وsign-bytes v2 على الشبكة الرئيسية.
  • أعادت get_pq_status على معاملة الشبكة التجريبية أعلاه الفئة pqc وطبقة هجينة واحدة بالضبط وverified: true مع sign-bytes v2.
  • أعادت prepare_transfer لتحويل 1.5 QOR على الشبكة التجريبية SignDoc بحد غاز 171698 ورسم 17170 uqor (0.01717 QOR)، وأعادت simulate_tx على معاملتها غير الموقّعة ok: true مع خصم الرسم من المرسل. لم يُوقَّع شيء ولم يُرسَل شيء.

كيفية الوصول​

  • محليًا (الخيار الأساسي). stdio عبر npx -y @qorechain/mcp أو uvx qorechain-mcp. لا يحتاج إلى حساب ولا إلى مفتاح API. يقرأ من نقاط QoreChain العامة، لذا يحتاج إلى HTTPS صادر.

  • خادم HTTP خاص بك. qorechain-mcp serve، كما سبق، مع مفاتيح API وحدود معدل تضبطها أنت.

  • نقطة نهاية مستضافة. يقدّم https://mcp.qorechain.io/mcp نقل Streamable HTTP. وتستخدم الشبكة التجريبية ما لم يسمِّ الاستدعاء "network": "mainnet". يحتاج كل طلب إلى مفتاح API يُرسل بالصيغة Authorization: Bearer <key>؛ اطلب مفتاحًا من لوحة التحكم (أدناه). وبدون مفتاح تجيب النقطة بـ HTTP 401 (UNAUTHORIZED)، وهذا كان الجواب في 27 أكتوبر 2026. يوجد مفتاح فعّال واحد لكل حساب، ويُحدَّد كل مفتاح بـ 10 طلبات في الثانية (دفعة قصوى 20) و100,000 طلب في اليوم. وفي معظم الاستخدامات لا يحتاج الإعداد المحلي إلى مفتاح وهو الخيار الأبسط.

    للحصول على مفتاح، سجّل الدخول إلى dashboard.qorechain.io/developers، وافتح تبويب AI agents (MCP) واملأ نموذج API key (الاسم أو المؤسسة، وجهة اتصال، والاستخدام المقصود، والحجم المتوقع)، ثم اضغط Request API key. يوافق فريق QoreChain على الطلب أو يرفضه؛ ويعرض الرفض ملاحظته ويمكنك تقديم الطلب مرة أخرى. بعد الموافقة اضغط Generate key: يُعرض المفتاح مرة واحدة، مع زر نسخ ومقتطف إعداد جاهز، ويصبح فعّالًا خلال دقيقة أو دقيقتين. لا تحتفظ QoreChain إلا ببصمة (تجزئة)، ولذلك لا يمكن عرض مفتاح ضائع مرة أخرى؛ ألغِه (يسري خلال دقيقة تقريبًا) واطلب مفتاحًا جديدًا. راجع صفحة المطورين في لوحة التحكم.

إعداد عميل HTTP لخادم يحتاج إلى مفتاح (تختلف أسماء المفاتيح بالضبط من عميل إلى آخر):

{
"mcpServers": {
"qorechain": {
"type": "http",
"url": "https://mcp.qorechain.io/mcp",
"headers": { "Authorization": "Bearer ${QORECHAIN_MCP_KEY}" }
}
}
}

لا تضع أبدًا عبارة استرداد أو مفتاحًا خاصًا في إعداد عميل: لا تحتاج أي أداة في QoreChain إلى واحد منهما.

يقرأ الخادم من هذه النقاط العامة:

الشبكة التجريبيةالشبكة الرئيسية
RESThttps://api-testnet.qore.hosthttps://api.qore.host
RPC الإجماعhttps://rpc-testnet.qore.hosthttps://rpc.qore.host
EVM JSON-RPChttps://evm-testnet.qore.hosthttps://evm.qore.host

التكلفة: الخادم مجاني. والقراءات لا تكلّف شيئًا. وإذا بثثت معاملة بنتها prepare_transfer فيسري رسم الشبكة (الحد الأدنى للرسم 0.1 uqor لكل وحدة غاز).

ملاحظات أمنية​

  • لا يوجد أي مسار شيفرة للتوقيع في الخادم ولا في أداة سطر الأوامر. لا يُوقَّع شيء، ولا يُخزَّن مفتاح، ولا يُبَثّ شيء.
  • تُرفض الأسرار. الإدخال الذي يشبه عبارة استرداد (12 كلمة BIP-39 متتالية أو أكثر) أو مفتاحًا خاصًا مجرّدًا من 32 بايت بصيغة سداسية عشرية يُرفض بالرمز INVALID_INPUT قبل إجراء أي طلب، وتطلب رسالة الخطأ من المستخدم معاملة ذلك السر على أنه مكشوف. لا تضع أبدًا عبارة استرداد أو مفتاحًا خاصًا في إعداد عميل؛ فلا تحتاج أي أداة في QoreChain إلى واحد منهما.
  • لا يُمرَّر نص أخطاء المنبع أبدًا؛ وتُبنى الاستجابات حقلًا حقلًا.
  • السجلات. تحمل سجلات HTTP أسلوب JSON-RPC واسم الأداة والحالة وزمن الاستجابة. أما المدخلات والمخرجات والمفاتيح وعناوين العملاء فلا تُسجَّل.
  • مفاتيح API في الخادم المستضاف ذاتيًا تُخزَّن كتجزئات SHA-256 ولا تُخزَّن أبدًا كنص صريح. ويكون CORS مغلقًا افتراضيًا، وهذا يحمي أيضًا خادمًا مربوطًا بـ localhost من DNS rebinding.
  • يجب تسمية الشبكة الرئيسية صراحةً، وتضيف prepare_transfer تحذيرًا لتحويلات الشبكة الرئيسية.
  • المذكرات عامة ودائمة. لا تضع سرًا في مذكرة أبدًا.
  • عامل مفتاح API المستضاف كأنه كلمة مرور. احتفظ به في متغير بيئة أو في مخزن أسرار وألغِه من لوحة التحكم إذا تسرّب.
  • أبلغ عن الثغرات بشكل خاص إلى security@qore.network، وليس أبدًا في بلاغ عام.

أين نُشر​

السجلالحزمةالإصدارالتشغيلملاحظات
npm@qorechain/mcp0.1.0npx -y @qorechain/mcpالملف التنفيذي qorechain-mcp. stdio وStreamable HTTP. Node.js 20 أو أحدث
PyPIqorechain-mcp0.1.0pip install qorechain-mcp أو uvx qorechain-mcpstdio فقط. Python 3.10 أو أحدث
npm@qorechain/qore-cli0.1.0npm install -g @qorechain/qore-cliالأمر qore. انظر QoreChain CLI

المصدر: github.com/qorechain/qorechain-mcp (عام، Apache-2.0، فُحص في 27 أكتوبر 2026). يحوي المستودع الخادم وأداة سطر الأوامر وحزمة Python ومرجع الأدوات وملاحظات الاستضافة الذاتية وأمثلة لإعدادات العملاء وثلاثة ملفات مهارات للوكلاء. وليست له صورة حاويات منشورة؛ استخدم npx أو pip.

الحدود والمشكلات المعروفة​

  • للقراءة فقط. لا يوجد مسار شيفرة للتوقيع ولا تخزين للمفاتيح ولا بثّ. تعيد prepare_transfer مستندًا غير موقّع. لإتمام التحويل، وقّعه بـ QoreSign أو بمحفظة QoreX وابثّه بنفسك؛ ثم اقرأ النتيجة بـ get_transaction. تستخدم read_contract الأداة eth_call فقط ولا تستطيع تغيير الحالة.
  • يُجهَّز نوع معاملة واحد. تبني prepare_transfer رسالة MsgSend من uqor على المسار الأصلي. ولا تبني معاملات EVM أو SVM أو staking أو الحوكمة أو العقود. أما estimate_fee وsimulate_tx فتقبلان أي معاملة مرمَّزة على المسار الأصلي.
  • أرقام الغاز تتبع إصدار السلسلة لا الشبكة. طبّقت الشبكتان كلتاهما v3.2.5 (الشبكة الرئيسية في 29 أكتوبر 2026)، لذا تشمل المحاكاة تكلفة التحقق من ML-DSA-87 والغاز دقيق (exact_gas_simulation تساوي true على الشبكتين). وعند التعامل مع عقدة أقدم من v3.2.5 يحمل حد الغاز المقترح هامشًا.
  • تاريخ الشبكة التجريبية مقتطع. كتلة قديمة من الشبكة التجريبية تعيد NOT_FOUND، ويسمّي الخطأ أدنى ارتفاع متاح (8,790,799 على الشبكة التجريبية وقت الفحص؛ وكانت الشبكة الرئيسية تخدم من الارتفاع 1). وتفحص get_pq_status الطبقة مقابل المفتاح المسجّل الآن، لذا لا تطابق المعاملات الأقدم بعد تدوير المفتاح.
  • precompiles ما بعد الكمّي في EVM. العنوانان 0x...0A01 (تحقق ML-DSA-87) و0x...0A02 (حالة المفتاح) نشطان على الشبكة التجريبية فقط؛ وعلى الشبكة الرئيسية يعيد الاستدعاء إليهما بيانات فارغة.
  • الحدود. لكل طلب منبع مهلة 10 ثوانٍ وحد استجابة 4 MiB دون إعادة محاولة. تسرد الكتل 100 تجزئة معاملة كحد أقصى، وتعرض المعاملات 50 رسالة كحد أقصى، والحسابات 100 رصيد كحد أقصى. أجسام طلبات HTTP محدودة بـ 512 KiB. والمذكرة 256 حرفًا كحد أقصى، وهي عامة ودائمة، فلا تضع فيها سرًا أبدًا. وحد المعدل في الخادم المستضاف ذاتيًا خاص بكل نسخة ومحفوظ في الذاكرة؛ وخلف موازن أحمال تعدّ كل نسخة على حدة.
  • غير متاح: get_token_holders (لا مفهرس على النقاط العامة) وrequest_faucet (استخدم صنبور لوحة التحكم، الذي يحتاج إلى تسجيل دخول). تحتاج النقطة المستضافة إلى مفتاح API يُطلب من لوحة التحكم؛ أما الإعداد المحلي فلا.
  • الشبكة الرئيسية صريحة. تذهب الاستدعاءات إلى الشبكة التجريبية ما لم تسمِّ "network": "mainnet" أو بدأ الخادم بالخيار --network mainnet.
  • لا تُنشر صورة حاويات. شغّل الخادم بـ npx أو pip.
  • الإصدار. 0.1.0 هو الإصدار الأول؛ قد تتغير أسماء الأدوات والمخططات في إصدارات لاحقة، والملف المولَّد spec/tools.json في المستودع هو المرجع للإصدار الذي ثبّتّه.