تقليل استهلاك توكنات MCP: كيف خفّضنا تعريفات أدواتنا بنسبة 60%
كل أداة MCP يستطيع وكيلك استدعاءها هي كتلة من JSON قد يقرؤها النموذج في كل طلب. كانت أدواتنا تزن نحو 95,000 توكن. إليك كيف تقيس أدواتك في دقيقتين، وما حذفناه دون إزالة أداة واحدة، وفحص الميزانية الذي يمنعها من التضخم مجدداً.
في 27 أكتوبر، ألغى مستخدم يدفع اشتراكه في AgentsRoom وذكر التوكنات سبباً. قبل أن نجادل في ذلك، قسنا ما يضيفه تطبيقنا إلى كل وكيل يشغّله.
لم يكن الرقم الأكبر حيث توقعناه. كانت تعليمات البدء لدينا صغيرة. أما أدوات MCP التي نمنحها لكل وكيل (قائمة المهام، وذاكرة المشروع، والبريد بين الوكلاء، والطرفيات، وSSH، وقواعد البيانات وغيرها) فكانت 191 أداة ونحو 380 كيلوبايت من JSON. بمعدل 4 بايت تقريباً لكل توكن، هذا يعني نحو 95,000 توكن من تعريفات الأدوات. قبل أسبوع كان الرقم 78,000. لم يقرر أحد ذلك: كل أداة جديدة أضافت فقرتها فحسب.
نحن نطوّر AgentsRoom، تطبيق سطح مكتب يشغّل Claude Code وCodex وغيرهما من أدوات CLI للبرمجة جنباً إلى جنب ويمنحها هذه الأدوات. هذا ما قسناه، وما حذفناه دون إزالة أداة واحدة، والفحص الذي يمنع عودته. يمكنك تطبيق كل ذلك على خوادم MCP الخاصة بك.
الجواب المختصر
- تعريف الأداة هو JSON قد يقرؤه النموذج في كل طلب: الاسم، والوصف، ومخطط المدخلات. احسب نحو 4 بايت لكل توكن.
- هل تدفع هذه التكلفة في كل دورة أم لا؟ هذا يتوقف على الـ CLI. يؤجّل Claude Code أدوات MCP افتراضياً ويحمّل التعريف حين يحتاج إليه. بعض أدوات CLI ترسل كل المخططات مع كل طلب.
- قِس قبل أن تحذف.
/contextفي Claude Code، أو سكربت من 40 سطراً يطلب من أي خادم قائمة أدواته. - اختصر النص، واحتفظ بالأدوات. الوصف يقول ماذا ومتى. ينتقل دليل الاستخدام إلى مستند يقرؤه الوكيل عند الحاجة. انتقلت أدواتنا من نحو 95,000 إلى نحو 38,000 توكن، أي أقل بـ 2.5 مرة.
- ضع سقفاً في البناء. من دونه، تتضخم التعريفات من جديد من تلقاء نفسها.
ما الذي يكلّفه تعريف الأداة، ومن يدفعه
حين يتصل عميل MCP بخادم، يطلب منه قائمة الأدوات. كل عنصر فيها اسم، ووصف مكتوب للنموذج، ومخطط JSON للمعاملات. يحوّل العميل هذه القائمة إلى تعريفات أدوات تُرسل إلى النموذج، وهكذا يعرف النموذج أن الأداة موجودة وكيف يستدعيها.
لذلك فكل كلمة في الوصف هي مدخلات يقرؤها النموذج. أما عدد مرات قراءتها فيتوقف على العميل:
- يؤجّل Claude Code أدوات MCP افتراضياً. تقول وثائقه، التي قرأناها في 3 نوفمبر 2026 مع تثبيت Claude Code 2.1.314، إن أسماء الأدوات وتعليمات الخوادم وحدها تُحمَّل عند بدء الجلسة، وإن التعريف يُحمَّل عبر البحث عن الأدوات حين يحتاج Claude إلى تلك الأداة. مع
ENABLE_TOOL_SEARCH=false، أو معautoتحت عتبة 10% من نافذة السياق، أو على النماذج الأقدم من Claude Opus 4 وSonnet 4، أو لخادم موسوم بـalwaysLoad، تُحمَّل التعريفات منذ البداية. - أدوات CLI الأخرى تختلف. في اختبارنا الخاص يوم 28 أكتوبر، طلبنا من وكيل أن يجيب بـ «OK»: بدأ Claude Code عند 67,500 توكن وأدواتنا مؤجَّلة، وبدأ Codex CLI 0.164 عند 25,000 توكن ولم يرسل مخططاتنا ككتلة واحدة، أما OpenCode فحمّل أدواتنا الـ 175 إضافة إلى 19 أداة متصفح عند الاتصال وأرسلها مع كل طلب. الخادم نفسه، وفواتير مختلفة تماماً.
التخزين المؤقت للموجّه يخفّف التكلفة حين لا تتغير قائمة الأدوات: بعد الطلب الأول، تُقرأ البادئة الثابتة من ذاكرة التخزين المؤقت بجزء صغير من سعر المدخلات. لكنه لا يعيد المساحة. تبقى التعريفات في نافذة السياق في كل طلب، بجانب الكود والمحادثة. وللوضع المؤجَّل تكلفته الخاصة أيضاً: خطوة بحث قبل أول استخدام لكل أداة.
قِس أدواتك في دقيقتين
في Claude Code، شغّل /context. يقسّم النافذة حسب المصدر ويضع علامة على أدوات MCP المؤجَّلة أو المحمَّلة عند الطلب. شغّله في جلسة جديدة داخل مشروعك، قبل أن تكتب أي شيء، فترى ما تكلّفه إعداداتك قبل أن يبدأ العمل.
لأي خادم وأي CLI، اسأل الخادم مباشرة. خادم MCP عبر stdio يتحدث JSON-RPC، رسالة واحدة في كل سطر: ترسل initialize، ثم tools/list، وتقيس ما يعود. هذا السكربت يفعل ذلك بالضبط، باستخدام Node ودون أي اعتمادية:
// Usage: node mcp-tool-cost.mjs <command that starts the server> [args...]
import { spawn } from 'node:child_process';
const [cmd, ...args] = process.argv.slice(2);
const server = spawn(cmd, args, { stdio: ['pipe', 'pipe', 'ignore'], shell: process.platform === 'win32' });
const tools = [];
let buffer = '';
const send = (msg) => server.stdin.write(JSON.stringify({ jsonrpc: '2.0', ...msg }) + '\n');
const listTools = (cursor) => send({ id: 2, method: 'tools/list', params: cursor ? { cursor } : {} });
server.stdout.on('data', (chunk) => {
buffer += chunk;
let end;
while ((end = buffer.indexOf('\n')) >= 0) {
const line = buffer.slice(0, end).trim();
buffer = buffer.slice(end + 1);
if (line) handle(JSON.parse(line));
}
});
function handle(msg) {
if (msg.id === 1) {
send({ method: 'notifications/initialized' });
listTools();
} else if (msg.id === 2) {
tools.push(...msg.result.tools);
if (msg.result.nextCursor) listTools(msg.result.nextCursor);
else { report(); server.kill(); }
}
}
function report() {
const rows = tools
.map((tool) => ({ name: tool.name, bytes: Buffer.byteLength(JSON.stringify(tool)) }))
.sort((a, b) => b.bytes - a.bytes);
const total = rows.reduce((sum, row) => sum + row.bytes, 0);
for (const row of rows.slice(0, 10)) {
console.log(`${String(row.bytes).padStart(7)} bytes ~${Math.round(row.bytes / 4)} tokens ${row.name}`);
}
console.log(`${rows.length} tools, ${total} bytes, about ${Math.round(total / 4)} tokens`);
}
send({
id: 1,
method: 'initialize',
params: { protocolVersion: '2025-06-18', capabilities: {}, clientInfo: { name: 'tool-cost', version: '1.0.0' } },
});
شغّله بالأمر نفسه الذي يستخدمه الـ CLI لديك لتشغيل الخادم، مثلاً node mcp-tool-cost.mjs npx -y @playwright/mcp@latest. يطبع أثقل عشر أدوات والمجموع. هذا ما حصلنا عليه في 3 نوفمبر 2026:
| الخادم | الأدوات | JSON | تقريباً |
|---|---|---|---|
@modelcontextprotocol/server-filesystem 2.1.0 | 14 | 12,554 بايت | 3,100 توكن |
@playwright/mcp 0.0.84 | 25 | 21,034 بايت | 5,300 توكن |
| أدوات AgentsRoom، 28 أكتوبر قبل الاختصار | 191 | نحو 380,000 بايت | 95,000 توكن |
| أدوات AgentsRoom، 28 أكتوبر بعد الاختصار | 191 | نحو 152,000 بايت | 38,000 توكن |
| أدوات AgentsRoom، 3 نوفمبر | 203 | 159,957 بايت | 40,000 توكن |
أربعة بايتات لكل توكن تقدير يكفي لمقارنة الخوادم ورؤية الاتجاه، لا لتوقّع الفاتورة. أدوات التقسيم الحقيقية (tokenizers) تختلف حسب النموذج والنص، كما وجدنا حين أحصينا 3.8 مليار توكن من توكناتنا.
خوادم الملفات أعلاه معقولة. المشكلة في المجموع: خمسة خوادم بهذا الحجم تبلغ 20,000 توكن، قبل حتى خادم مثل خادمنا.
ما حذفناه، وما لم نلمسه
القاعدة التي وضعناها: لا إزالة لأي أداة، ولا لأي معامل، ولا لأي قيمة مسموح بها أو حقل إلزامي. كان على الوكلاء أن يحتفظوا بكل قدراتهم. النص وحده يمكن أن يتغير.
- وصف الأداة يقول ماذا ومتى، في جملة إلى ثلاث جمل. لا كيف. الـ«كيف» هو المكان الذي كانت فيه البايتات: قواعد، وقيم افتراضية، وحالات حدّية، وأمثلة، وتحذيرات كُتبت بعد أن أساء وكيل استخدام الأداة مرة.
- يحصل المعامل على جملة واحدة، أو لا شيء حين يقول اسمه ونوعه وقائمة قيمه المسموح بها كل شيء. المعاملات التي تتكرر بين الأدوات (
project، وauthor، ومعرّفات التذاكر) حصلت على جملة قياسية واحدة في كل مكان. - دليل الاستخدام انتقل، ولم يُحذف. لكل عائلة من الأدوات ملف تعليمات يقرؤه الوكيل قبل أول استدعاء لتلك العائلة. وبالنسبة إلى أكبر أداة لدينا، تلك التي تحفظ فريقاً من الوكلاء، صار المرجع الكامل للحقول يُعاد عبر استدعاء أداة حين يطلبه الوكيل، بدلاً من أن يرافق المخطط دائماً.
- مراجعة ثانية تحققت من كل معلومة. كل جملة حُذفت من وصف بُحث عنها في ملفات التعليمات، وأُعيدت إليها حين كانت ناقصة.
بعض النتائج، بالبايت من JSON لكل أداة:
| الأداة | قبل | بعد |
|---|---|---|
teams_save | 19,705 | 9,791 |
triggers_save | 16,014 | 4,071 |
backlog_update | 13,150 | 4,253 |
backlog_create | 11,565 | 4,399 |
إجمالاً، صارت 380 كيلوبايت 152 كيلوبايت. كانت ثلاث عشرة أداة فوق 4 كيلوبايت، وما زالت أربع منها كذلك، بسبب عدد الحقول التي تحملها. الفكرة وراء هذه المراجعة كلها: لكي يختار النموذج أداة، يحتاج أن يعرف أنها موجودة ومتى يستدعيها. أما التفاصيل فيمكنها الانتظار حتى لحظة استخدامها.
إذا كنت تكتب خادم MCP، فإن Claude Code يمنحك سبباً إضافياً. فهو يقطع وصف الأداة المحمَّل منذ البداية عند 4,096 حرفاً، وحين يطابق بحثاً مع وصف لا يقرأ إلا الجزء الواقع ضمن هذا الحد. أي شيء مهم بعد تلك النقطة قد لا يُرى أبداً.
الحيلة نفسها لملف البدء
مخططات الأدوات ليست التكلفة الثابتة الوحيدة. يقرأ وكلاؤنا أيضاً ملف تعليمات عن الأدوات قبل استخدامها، وكان قد تضخم إلى 57.7 كيلوبايت، أي نحو 14,000 توكن، يُقرأ كاملاً عند كل بدء وكل استئناف. أبلغنا مستخدم أن وكيل Codex مستأنَفاً بلغ حد سياق العمل لديه خلال دقائق.
كان الإصلاح بالفكرة نفسها. صار الملف فهرساً بنحو 11 كيلوبايت: القواعد التي تنطبق على كل أداة، وسطر واحد لكل عائلة أدوات يشير إلى ملفها الخاص. لا تُقرأ ملفات العائلات الـ 31 إلا قبل أول استدعاء لتلك العائلة. لم يتغير نصها، كلمة بكلمة. الوكيل الذي لا يلمس إلا قائمة المهام لا يقرأ أبداً القسم الخاص بقواعد البيانات.
ينجح هذا أيضاً مع أي ملف CLAUDE.md أو AGENTS.md طويل: احتفظ في الملف المحمَّل دائماً بما تحتاجه كل مهمة، وضع رابطاً لما تبقى. كتبنا المزيد عن ذلك في دليلنا عن AGENTS.md وملفات السياق.
ميزانية تُفشل الـ push
الرقم الذي أقلقنا أكثر لم يكن 95,000. كان 78,000 قبل أسبوع. كل أداة أضافت فقرة، وكل فقرة كانت معقولة، ونما المجموع بنسبة 20% في سبعة أيام.
لذلك صار الحجم فحصاً في البناء. ملف JSON واحد يحمل الميزانية:
{
"totalBytes": 160000,
"perToolBytes": 4000,
"oversized": {
"teams_save": 9791,
"triggers_save": 4071,
"backlog_update": 4253,
"backlog_create": 4399
}
}
يشغّل سكربت خوادم MCP لدينا في بيئة معزولة، ويطلب من كل منها أدواته، ويقيس JSON.stringify(tool) بالبايت، ويخرج بخطأ حين يتجاوز المجموع totalBytes أو حين تتجاوز أداة perToolBytes. الأدوات الأربع التي كانت كبيرة جداً من قبل مدرجة بحجمها: آلية لا تسير إلا في اتجاه واحد. يمكن أن تصغر، ولا يمكن أن تكبر أبداً، وحين تصغر إحداها يطلب السكربت خفض الرقم. يعمل قبل كل push وفي بناء الإصدار. رفع السقف ممكن، لكنه قرار مكتوب في الملف، لا وسيلة لتمرير الفحص.
في 3 نوفمبر، بعد ستة أيام، يقرأ الفحص نفسه 203 أدوات و159,957 بايت: اثنتا عشرة أداة مضافة، و43 بايت تحت السقف. الأداة التالية سيكون عليها أن تفسح لنفسها مكاناً. وهذا بالضبط ما وُجد الفحص من أجله.
أوقف ما لا تستخدمه
أرخص توكن هو توكن أداة لا يراها وكيلك أبداً.
- اقصر الخوادم على المشاريع التي تحتاجها. الخادم المعرَّف على مستوى المستخدم يتبعك إلى كل مستودع. في Claude Code، ملف
.mcp.jsonخاص بالمشروع يبقيه حيث يفيد. - احتفظ بـ
alwaysLoadلعدد قليل من الأدوات. وثائق Claude Code تقولها بوضوح: كل أداة محمَّلة منذ البداية تستهلك سياقاً كان سيبقى متاحاً لمحادثتك. - راقب ما تضيفه نتائج الأدوات، لا التعريفات وحدها. أداة تعيد صفحة أو جدولاً كاملاً قد تكلّف في استدعاء واحد أكثر مما يكلّفه تعريفها طوال اليوم.
في AgentsRoom، يعرض قسم الإعدادات > أدوات AgentsRoom كل عائلة من أدواتنا مع وزنها، ويمكنك إيقاف عائلة أو أداة واحدة، لكل المشاريع، أو لمشروع واحد، أو لمجلد، أو لوكيل واحد. الأداة الموقوفة لا تُعرض على الوكيل إطلاقاً، فلا تكلّف أي سياق. تصف صفحة AgentsRoom MCP الأدوات، ويُظهر تتبّع الجلسة ما ملأ سياق الوكيل، بما في ذلك أدوات MCP، مرتباً حسب الحجم.
ما لم نغيّره
خرجت تكلفتان أخريان من القياس نفسه، وتركناهما على حالهما عن قصد.
- موجز البدء الذي يخبر كل وكيل بدوره وبكيفية الإبلاغ عن حالته: قيمة وسيطة تقارب 5,000 توكن لـ Claude، أي نحو 2.5% من نافذة بحجم 200,000 توكن، ويُقرأ من ذاكرة التخزين المؤقت ابتداءً من الطلب الثاني.
- ملف الحالة الذي يكتبه كل وكيل في نهاية الدورة: بالقياس على 71 سجل جلسة محلياً لـ Claude، يمثّل نحو 2.5% من توكنات السياق.
تقليص أيّ منهما كان سيوفّر أقل من 3% من النافذة ويعرّض جودة عمل الوكلاء للخطر. أما تعريفات الأدوات فكانت 95,000 توكن. هناك ذهب وقتنا.
الأسئلة التي يطرحها الناس فعلاً
كم توكناً تستهلك أدوات MCP؟
تكلّف كل أداة تعريفها كاملاً: الاسم والوصف ومخطط المدخلات، وكلها تُرسل بصيغة JSON. القاعدة التقريبية هي 4 بايت لكل توكن. في قياس أجريناه في 3 نوفمبر 2026: يعرض خادم filesystem الرسمي 14 أداة بنحو 3,100 توكن، ويعرض Playwright MCP 25 أداة بنحو 5,300. كانت أدوات AgentsRoom تزن نحو 95,000 توكن قبل أن نختصرها، ونحو 40,000 اليوم.
هل يحمّل Claude Code كل أدوات MCP في نافذة السياق؟
ليس افتراضياً. ميزة البحث عن الأدوات في Claude Code (tool search) تؤجّل تعريفات أدوات MCP: لا يُحمَّل عند بدء الجلسة إلا أسماء الأدوات وتعليمات الخوادم، ويحمّل Claude التعريف حين يحتاج إلى تلك الأداة. أما ضبط ENABLE_TOOL_SEARCH=false، أو استخدام نموذج أقدم من Claude Opus 4 وSonnet 4، أو خادم موسوم بـ alwaysLoad، فيعيد التعريفات إلى السياق منذ البداية.
هل تقلّل خوادم MCP استهلاك التوكنات؟
قد تفعل، حين تعيد أداة جواباً قصيراً بدلاً من شيء كان الوكيل سيقرؤه كاملاً لولاها، مثل استعلام على قاعدة بيانات بدلاً من تفريغها كاملة. لكن التعريفات تستهلك من السياق، وكذلك النتائج: يحذّر Claude Code حين تتجاوز نتيجة MCP واحدة 10,000 توكن، ويقطعها عند 25,000 افتراضياً. لا يوفّر خادم MCP التوكنات إلا إذا كانت نتائجه أصغر مما يحلّ محله.
كيف أعرف كم من السياق تأخذ أدوات MCP لديّ؟
في Claude Code، شغّل /context: يقسّم السياق حسب المصدر ويضع علامة على أدوات MCP المؤجَّلة. ولأي خادم وأي CLI، اطلب من الخادم قائمة أدواته وقِس حجم JSON، وهذا ما يفعله السكربت المؤلف من 40 سطراً في هذا المقال.
ما الذي يجعل وصف أداة MCP جيداً؟
جملة إلى ثلاث جمل تقول ما تفعله الأداة ومتى تُستدعى، مع وضع الكلمات التي سيبحث عنها الوكيل في البداية. يحصل المعامل على جملة واحدة، أو لا شيء حين يقول اسمه ونوعه وقيمه المسموح بها كل شيء. القواعد والحالات الحدّية والأمثلة الطويلة مكانها مستند يقرؤه الوكيل عند الحاجة. وعلى أي حال، يقطع Claude Code الوصف المحمَّل منذ البداية عند 4,096 حرفاً.
كيف أمنع تعريفات الأدوات من التضخم مجدداً؟
امنحها ميزانية يستطيع البناء التحقق منها. نحتفظ بملف JSON فيه سقف إجمالي وسقف لكل أداة، وبسكربت يشغّل خوادم MCP لدينا ويقيس كل أداة ويخرج بخطأ إذا تجاوز أحد الحدّين، ونشغّله قبل كل push. الأدوات التي كانت كبيرة جداً من قبل يمكن أن تصغر، ولا يمكن أن تكبر أبداً.
النسخة المختصرة
أدوات MCP لديك نص يقرؤه النموذج، ولا أحد يراجع هذا النص كما يراجع الكود. قِسه مرة واحدة: /context في Claude Code، أو السكربت أعلاه لأي خادم. ثم اجعل كل وصف يقول ماذا ومتى، وانقل الـ«كيف» إلى ملف يقرؤه الوكيل حين يحتاجه، وضع رقماً في البناء لديك كي لا يعود إلى التضخم.
انتقلنا من نحو 95,000 إلى نحو 38,000 توكن دون إزالة أي أداة. إذا كنت تشغّل عدة وكلاء بالأدوات نفسها، فإن AgentsRoom مجاني للتنزيل، وتُظهر صفحة خوادم MCP كيف تعرّف خادماً مرة واحدة لكل أدوات CLI ولكل المشاريع.
تحميل AgentsRoom
شغّل كل وكلاء الذكاء الاصطناعي لديك، في كل مشاريعك، من نافذة واحدة.
التطبيق المرافق: تابع وكلاءك أينما كنت
استخدم Claude أو Codex أو Antigravity CLI أو أي مزود AI آخر.
أرسل الأخطاء والطلبات مباشرة إلى قائمة المهام العامة.
تابع القراءة
كيف ترى ما ينفّذه وكيل البرمجة بالذكاء الاصطناعي على خوادمك
وكيلك يعمل على خادم إنتاج، والطرفية لا تقول إلا إنه يستدعي أداة. أي أمر نفّذ، وبماذا أجابت الآلة؟ نص الجلسة يخبرك بذلك بعد فوات الأوان. إليك كيف جعلنا ذلك مرئياً لحظة حدوثه، وما جرّبناه أولاً، وكيف تحصل على الشيء نفسه من دون تطبيقنا.
اقرأ المقالإعطاء سرّ لوكيل برمجة دون وضعه في الموجّه أبدًا
يحتاج الوكيل إلى مفتاح Stripe أو كلمة مرور قاعدة بيانات ليشغّل أمره. الصقها في المحادثة فتذهب إلى سجل المحادثة على قرصك، وإلى مزوّد النموذج، وأحيانًا داخل commit. القاعدة التي وصلنا إليها بعد ثلاثة أخطاء ارتكبناها بأنفسنا: السر يصل إلى الوكيل عبر متغير بيئة، ولا شيء غيره.
اقرأ المقالحساب Claude واحد على حاسوبين، أو لشخصين: ما الذي ينجح
يمكن تسجيل الدخول بحساب Claude واحد على كل أجهزتك، وكلها تستهلك من حد الخمس ساعات والحد الأسبوعي نفسيهما، Claude وClaude Code معًا. استخدام شخصين لحساب واحد مخالف لشروط Anthropic، ولا توجد خطة عائلية. ما تحققنا منه في 25 أكتوبر 2026، وكيف ترى أي حاسوب استهلك ماذا.
اقرأ المقال