ظهر بروتوكول Model Context Protocol (MCP) لمعالجة مشكلة عدم التوافق. في حياتنا اليومية، يتسبب عدم التوافق في العديد من المواقف المزعجة.
هل سبق أن اصطحبت معك أداة تصفيف شعر أو جهازًا إلكترونيًا أثناء السفر إلى الخارج، ثم اكتشفت أن قابس الجهاز غير متوافق مع مقبس الكهرباء؟ من منظور المطور، لا تختلف هذه المشكلة كثيرًا عن بناء واجهات برمجة تطبيقات (APIs) وأدوات تطوير لوكيل الذكاء الاصطناعي، ثم اكتشاف أنه لا يستطيع الاتصال بها أو استدعاءها بصورة صحيحة. وهنا يأتي دور MCP في معالجة مشكلة عدم التوافق هذه.
يعمل Model Context Protocol (MCP)، الذي قدمته Anthropic عام 2024، كطبقة توحيد معيارية تمكِّن تطبيقات الذكاء الاصطناعي من التواصل بكفاءة مع الخدمات الخارجية، مثل الأدوات ومصادر البيانات/مجموعات البيانات والقوالب المُعدة مسبقًا. ويُعَد MCP في جوهره معيارًا مفتوحًا ووسيطًا يربط تطبيقات الذكاء الاصطناعي بالأدوات التي تستخدمها. وتتكون بنية MCP من ثلاثة عناصر بنائية رئيسية:
أولًا، ما IBM Bob؟ يُعَد IBM Bob بيئة تطوير متكاملة (IDE) ومساعدًا للتحديث يعتمد على الذكاء الاصطناعي التوليدي. ويمكنك النظر إلى Bob باعتباره بيئة تطوير متكاملة مصممة للذكاء الاصطناعي أولًا، ومبرمجًا مساعدًا يعمل إلى جانبك، إذ يفهم نواياك وقاعدة التعليمات البرمجية الخاصة بك والمعايير المعتمدة داخل مؤسستك.
قد يستغرق إنشاء خادم MCP من البداية وقتًا طويلًا، خاصةً للمطورين المبتدئين. لذلك، سنستعرض في هذا البرنامج التعليمي كيفية البدء سريعًا في تنفيذ سير العمل هذا باستخدام IBM Bob من خلال عدد قليل من المطالبات البسيطة باللغة الطبيعية.
يوسِّع تكامل MCP إمكانات Bob من خلال ربطه بالأدوات والخدمات الخارجية، مع إمكانية تكوين الإعدادات على المستوى العام (Global)، الذي يُطبق على جميع مساحات العمل، أو على مستوى المشروع (Project)، الذي يمكن مشاركته مع أعضاء الفريق عبر الملف Bob/mcp.json. يدعم MCP نوعين من وسائل النقل: STDIO (Standard Input/Output) للخوادم المحلية منخفضة زمن الاستجابة، وSSE (Server-Sent Events) لخوادم MCP البعيدة التي يمكن الوصول إليها عبر HTTP/HTTPS. يمكن للمستخدمين تكوين الخوادم باستخدام ملفات JSON من خلال قائمة إعدادات Bob، وذلك لتحديد الأوامر ومتغيرات البيئة والأدوات المعتمدة تلقائيًا. ويُتيح كِلا نوعَي النقل تمكين الخوادم أو تعطيلها، والموافقة التلقائية على أدوات محددة، وإدارة تشغيلها من خلال لوحة إعدادات MCP في Bob.
لنبدأ. إذا كنت تفضِّل متابعة هذا البرنامج التعليمي عبر GitHub، فاطَّلِع على مستودعنا.
1. افتح IBM Bob IDE الذي قمت بتثبيته كأحد المتطلبات الأساسية، وتعرَّف على واجهة مساعد البرمجة الجديد المدعوم بالذكاء الاصطناعي.
2. للوصول إلى لوحة إعدادات MCP، انقر على النقاط الثلاث الموجودة بجوار أيقونة الترس في الزاوية العلوية اليمنى من نافذة الدردشة، ثم اختَر MCP servers من القائمة المنسدلة.
من هنا، يمكنك تمكين MCP أو تعطيله على المستوى العام أو على مستوى كل خادم، وإدارة الأدوات (مثل الموافقة التلقائية أو الحذف أو إعادة التشغيل). كما يمكنك استعراض خوادم المجتمع عبر Bob Marketplace أو إنشاء خادمك الخاص باستخدام MCP SDK.
إذا اختَرت تثبيت خادم من Bob Marketplace، فستلاحظ أنه يمكن تكوين الإعدادات على مستويين: عام (Global): يتم تخزين الإعدادات في
تتجاوز إعدادات مستوى المشروع الإعدادات العامة، ما يمنحك مرونة في تخصيص سلوك MCP بما يتناسب مع حالات الاستخدام المختلفة. ولإدارة هذه الإعدادات، يمكنك تعديل ملفات JSON مباشرةً من خلال قائمة إعدادات Bob، حيث تحدد تفاصيل الخادم، مثل الأوامر ومتغيرات البيئة والأدوات المعتمدة تلقائيًا. وسنستخدم في هذا البرنامج التعليمي SDK.
3. تأكَّد من تفعيل خيار Enable MCP Server Creation حتى تتمكن من إنشاء خوادم MCP مخصصة باستخدام Bob.
4. إذا كان لديك دليل مفضَّل لإعداد مشروعك، فيمكنك فتحه بنفسك داخل IDE، أو الطلب من Bob القيام بذلك من خلال نافذة الدردشة.
3. من الممارسات الشائعة إنشاء بيئات Python افتراضية لعزل تبعيات كل مشروع، حتى لا تتعارض تبعيات المشروعات المختلفة مع بعضها. للقيام بذلك، أدخِل المطالبة التالية: "In this directory, activate a Python virtual environment".
4. من المفترض أن ترى Bob ينفِّذ سلسلة من أوامر الوحدة الطرفية (Terminal). ومن المرجح أن تكون هذه الأوامر مشابهة لما يلي:
نوصي بالإبقاء على خيار Auto-approval معطَّلًا، حتى تتمكن من الموافقة على كل أمر أو رفضه قبل أن ينفِّذه Bob في الوقت الفعلي.
رائع! نجح Bob في إنشاء بيئة افتراضية جديدة وتفعيلها داخل المجلد
بعد إعداد البيئة الافتراضية، يمكننا الآن الانتقال إلى إنشاء خادم MCP. عند مطالبة Bob بإنشاء تعليمات برمجية، أو عند التعامل مع أي نموذج أو مساعد ذكاء اصطناعي، فمن المفيد تضمين أكبر قدر ممكن من التفاصيل المهمة. ولرؤية Bob أثناء العمل، أرسِل إليه المطالبة التالية:
"Create an MCP server that provides read-only access to arXiv. The server should:
بهذه المطالبة البسيطة، يمتلك Bob معلومات كافية لفهم المهمة ووضع "قائمة مهام" بالخطوات اللازمة لإتمامها. لاحِظ أن القائمة لا تتضمن إنشاء خادم MCP فحسب، بل تشمل أيضًا تكوينه واختباره. رائع.
لاحظ أننا نستخدم واجهة arXiv API في هذا البرنامج التعليمي كمثال بسيط لا يتطلب مفاتيح واجهة برمجة التطبيقات (API) أو أي عملية مصادقة للبدء. ومع ذلك، فهذا مجرد مثال، إذ يتمتع Bob أيضًا بالقدرة على التعامل مع خوادم أكثر تعقيدًا تتطلب أذونات.
قبل تنفيذ كل أمر، يمكنك الموافقة على الإجراء أو رفضه. إذا لاحظت أن الأوامر يتم تنفيذها تلقائيًا، فمن المحتمل أن يكون خيار Auto-approval مفعَّلًا.
2. بعد ذلك، يُنشئ Bob الملف
{
"name": "arxiv-server",
"version": "0.1.0",
"description": "MCP server for read-only access to arXiv papers",
"type": "module",
"bin": {
"arxiv-server": "./build/index.js"
},
"files": [
"build"
],
"scripts": {
"build": "tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\"",
"prepare": "npm run build",
"watch": "tsc --watch"
},
"keywords": [
"mcp",
"arxiv",
"research",
"papers"
],
"dependencies": {
"@modelcontextprotocol/sdk": "^1.0.4",
"axios": "^1.7.9",
"zod": "^3.24.1"
},
"devDependencies": {
"@types/node": "^22.10.5",
"typescript": "^5.7.3"
}
}
arxiv-server/tsconfig.json{
"compilerOptions": {
"target": "ES2022",
"module": "Node16",
"moduleResolution": "Node16",
"outDir": "./build",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"declaration": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "build"]
}
4. بعد ذلك، يتم تخزين التنفيذ الرئيسي للخادم، الذي يتضمن وظيفة البحث في arXiv، داخل الملف
#!/usr/bin/env node
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import axios from 'axios';
// Define types for arXiv API responses
interface ArxivEntry {
id: string;
title: string;
summary: string;
authors: Array<{ name: string }>;
published: string;
updated: string;
categories: string[];
primary_category: string;
links: Array<{ href: string; rel: string; type?: string }>;
}
interface ArxivSearchResult {
entries: ArxivEntry[];
totalResults: number;
startIndex: number;
itemsPerPage: number;
}
// Create an MCP server
const server = new McpServer({
name: "arxiv-server",
version: "0.1.0"
});
// Create axios instance for arXiv API
const arxivApi = axios.create({
baseURL: 'http://export.arxiv.org/api',
timeout: 30000,
});
/**
* Parse arXiv API XML response to JSON
*/
function parseArxivXML(xmlData: string): ArxivSearchResult {
const entries: ArxivEntry[] = [];
// Extract total results
const totalResultsMatch = xmlData.match(/<opensearch:totalResults[^>]*>(\d+)<\/opensearch:totalResults>/);
const totalResults = totalResultsMatch ? parseInt(totalResultsMatch[1]) : 0;
const startIndexMatch = xmlData.match(/<opensearch:startIndex[^>]*>(\d+)<\/opensearch:startIndex>/);
const startIndex = startIndexMatch ? parseInt(startIndexMatch[1]) : 0;
const itemsPerPageMatch = xmlData.match(/<opensearch:itemsPerPage[^>]*>(\d+)<\/opensearch:itemsPerPage>/);
const itemsPerPage = itemsPerPageMatch ? parseInt(itemsPerPageMatch[1]) : 0;
// Extract entries
const entryRegex = /<entry>([\s\S]*?)<\/entry>/g;
let entryMatch;
while ((entryMatch = entryRegex.exec(xmlData)) !== null) {
const entryXml = entryMatch[1];
// Extract ID
const idMatch = entryXml.match(/<id>([^<]+)<\/id>/);
const id = idMatch ? idMatch[1] : '';
// Extract title
const titleMatch = entryXml.match(/<title>([^<]+)<\/title>/);
const title = titleMatch ? titleMatch[1].trim().replace(/\s+/g, ' ') : '';
// Extract summary
const summaryMatch = entryXml.match(/<summary>([^<]+)<\/summary>/);
const summary = summaryMatch ? summaryMatch[1].trim().replace(/\s+/g, ' ') : '';
// Extract authors
const authors: Array<{ name: string }> = [];
const authorRegex = /<author>\s*<name>([^<]+)<\/name>/g;
let authorMatch;
while ((authorMatch = authorRegex.exec(entryXml)) !== null) {
authors.push({ name: authorMatch[1].trim() });
}
// Extract published date
const publishedMatch = entryXml.match(/<published>([^<]+)<\/published>/);
const published = publishedMatch ? publishedMatch[1] : '';
// Extract updated date
const updatedMatch = entryXml.match(/<updated>([^<]+)<\/updated>/);
const updated = updatedMatch ? updatedMatch[1] : '';
// Extract categories
const categories: string[] = [];
const categoryRegex = /<category[^>]+term="([^"]+)"/g;
let categoryMatch;
while ((categoryMatch = categoryRegex.exec(entryXml)) !== null) {
categories.push(categoryMatch[1]);
}
const primary_category = categories[0] || '';
// Extract links
const links: Array<{ href: string; rel: string; type?: string }> = [];
const linkRegex = /<link[^>]+href="([^"]+)"[^>]+rel="([^"]+)"(?:[^>]+type="([^"]+)")?/g;
let linkMatch;
while ((linkMatch = linkRegex.exec(entryXml)) !== null) {
links.push({
href: linkMatch[1],
rel: linkMatch[2],
type: linkMatch[3]
});
}
entries.push({
id,
title,
summary,
authors,
published,
updated,
categories,
primary_category,
links
});
}
return {
entries,
totalResults,
startIndex,
itemsPerPage
};
}
/**
* Format search results for display
*/
function formatSearchResults(result: ArxivSearchResult): string {
let output = `Found ${result.totalResults} results (showing ${result.entries.length})\n\n`;
result.entries.forEach((entry, index) => {
output += `${index + 1}. ${entry.title}\n`;
output += ` ID: ${entry.id}\n`;
output += ` Authors: ${entry.authors.map(a => a.name).join(', ')}\n`;
output += ` Published: ${entry.published}\n`;
output += ` Categories: ${entry.categories.join(', ')}\n`;
output += ` Abstract: ${entry.summary.substring(0, 300)}${entry.summary.length > 300 ? '...' : ''}\n`;
// Find abstract link (not PDF)
const abstractLink = entry.links.find(l => l.rel === 'alternate');
if (abstractLink) {
output += ` URL: ${abstractLink.href}\n`;
}
output += '\n';
});
return output;
}
// Add a tool for searching arXiv papers
server.tool(
"search_arxiv",
{
query: z.string().describe("Search query (supports arXiv query syntax)"),
max_results: z.number().min(1).max(50).optional().describe("Maximum number of results to return (1-50, default: 10)"),
start: z.number().min(0).optional().describe("Starting index for pagination (default: 0)"),
sort_by: z.enum(["relevance", "lastUpdatedDate", "submittedDate"]).optional().describe("Sort order (default: relevance)"),
sort_order: z.enum(["ascending", "descending"]).optional().describe("Sort direction (default: descending)")
},
async ({ query, max_results = 10, start = 0, sort_by = "relevance", sort_order = "descending" }) => {
try {
// Enforce reasonable limits
const limitedMaxResults = Math.min(max_results, 50);
const limitedStart = Math.max(start, 0);
// Build query parameters
const params: Record<string, string | number> = {
search_query: query,
start: limitedStart,
max_results: limitedMaxResults,
};
if (sort_by) {
params.sortBy = sort_by;
}
if (sort_order) {
params.sortOrder = sort_order;
}
const response = await arxivApi.get('/query', { params });
// Parse XML response
const result = parseArxivXML(response.data);
// Format results
const formattedResults = formatSearchResults(result);
return {
content: [
{
type: "text",
text: formattedResults,
},
],
};
} catch (error) {
if (axios.isAxiosError(error)) {
return {
content: [
{
type: "text",
text: `arXiv API error: ${error.response?.data?.message ?? error.message}`,
},
],
isError: true,
};
}
throw error;
}
}
);
// Start receiving messages on stdin and sending messages on stdout
const transport = new StdioServerTransport();
await server.connect(transport);
console.error('arXiv MCP server running on stdio');
// Made with Bob
في هذه المرحلة، إذا كان خادمك يتطلب أي مفاتيح واجهة برمجة تطبيقات، فسيطلبها منك Bob.
5. في الخطوة التالية، يعمل Bob على تثبيت التبعيات داخل دليل arxiv-server من خلال تشغيل الأمر التالي.
mcp_settings.jsonBob/mcp.json{
"mcpServers": {}
"mcpServers": {
"arxiv": {
"command": "node",
"args": [ "/here/is/the/path/to/arxiv-server/build/index.js"
],
"disabled": false,
"alwaysAllow": [],
"disabledTools": []
}
}
}
وبذلك تكتمل سلسلة الخطوات التي ينفِّذها Bob لإعداد خادم MCP.
لإكمال سلسلة المهام الواردة في قائمة المهام (To-do list)، يُجري Bob اختبارًا لخادم MCP. وكما يظهر في لقطة الشاشة السابقة، يستدعي Bob الأداة
بعد اكتمال التنفيذ بنجاح، والذي يمكنك التحقق منه بالنقر على السهم المتجه لأسفل لتوسيع النافذة، ستلاحظ أن Bob أجرى اختبارًا آخر. في هذه المرة، كان الاستعلام يبحث عن ورقتين بحثيتين في مجال التعلم الآلي، مع ترتيب النتائج تنازليًا حسب تاريخ الإرسال. وعلى الرغم من استخدام مَعلمات مختلفة، فقد تم تنفيذ استدعاء أداة MCP هذا أيضًا بنجاح.
وبعد نجاح جميع الاختبارات، يكون Bob قد أكمل جميع المهام الفرعية.
لقد اختبر Bob خادم MCP نيابةً عنا بالفعل. ومع ذلك، دعنا نجرِّب بعض الاستعلامات بأنفسنا من خلال نافذة الدردشة؛ لنتحقق إذا ما كان Bob قادرًا على استنتاج مصطلحات البحث الصحيحة والمَعلمات اللازمة تلقائيًا.
اسأل Bob: "What are the latest papers on LLM agent tracing?".
استخرج Bob تلقائيًا عبارة البحث المناسبة من مطالبتنا، وأضاف إليها بعض الكلمات المفتاحية لتحسين نتائج البحث. كما حدَّد الحد الأقصى لعدد النتائج بـ 10 أوراق بحثية، ورتَّبها حسب مدى الصلة بالموضوع. رائع.
لنجرِّب استعلامًا آخر.
ومن المثير للاهتمام أن Bob عدَّل استعلام البحث تلقائيًا بعدما لاحظ وجود نتائج غير مرغوب فيها. لا ينفِّذ Bob استدعاءات الأدوات بشكل آلي فحسب، بل يتعاون مع المستخدم بوصفه وكيلًا مساعدًا. وبعد تكرارين من ذلك، أعاد Bob عدة أوراق بحثية تتوافق بشكل جيد مع المهمة الأصلية.
يتضمن العديد من خوادم MCP مفتوحة المصدر أيضًا ملفات توثيق تساعد الآخرين على البدء بسرعة. لنُدخل المطالبة التالية في نافذة الدردشة:
"In this directory, create a README.md file to document this MCP server. Include setup and usage instructions."
باستخدام مطالبة واحدة بسيطة، أنشأ Bob مستند
ربما ترغب في إنشاء وكيل ذكاء اصطناعي متخصص في الأبحاث باستخدام watsonx Orchestrate يمكنه الوصول إلى خادم MCP هذا؟ يمكن لـ Bob إنشاء وكيل بمجرد مطالبة واحدة بسيطة. أولًا، ثبِّت خادم watsonx Orchestrate ADK الجاهز من السوق الموجود ضمن لوحة إعدادات MCP التي استعرضناها في الخطوة الأولى. ثم أرسِل الأمر التالي:
"Create a watsonx Orchestrate agent that uses this arxiv MCP server."
إذا كانت خدمة watsonx Orchestrate تعمل محليًا، فسيتولى Bob تنفيذ الأوامر اللازمة نيابةً عنك. أما إذا كنت تفضِّل تنفيذ الأوامر بنفسك لاحقًا، فسيقوم Bob بإنشاء النصوص البرمجية وتوثيق جميع الأوامر المطلوبة.
لنلقِ نظرة على كل ملف لفهم ما أنشأه Bob بصورة أفضل. فيما يلي ملف toolkit-config.yaml
kind: mcp
name: arxiv-toolkit
description: مجموعة أدوات للبحث في الأوراق البحثية على arXiv. توفِّر إمكانية الوصول إلى بيانات الأوراق البحثية الوصفية والملخصات ومعلومات النشر من قاعدة بيانات arXiv.
package_root: /local/path/to/arxiv-server
language: node
command: node /local/path/to/arxiv-server/arxiv-server/build/index.js
tools:
- "*"
# Made with Bob
بعد ذلك، لنفتح الملف research-assistant-agent.yaml
name: research-assistant
kind: native
description: مساعد بحثي يعتمد على الذكاء الاصطناعي يساعد في العثور على الأوراق الأكاديمية من arXiv وتلخيصها. متخصص في البحث في الأدبيات العلمية وشرح نتائج الأبحاث وتقديم الاستشهادات المرجعية.
title: Research Assistant
instructions: |
أنت مساعد بحثي خبير ومتخصص في البحث في الأدبيات الأكاديمية على arXiv.
## إمكاناتك
- البحث في arXiv عن أوراق بحثية في أي مجال علمي.
- تلخيص نتائج الأبحاث استنادًا إلى الملخصات بلغة مبسَّطة.
- تحديد أبرز المؤلفين والتوجُّهات البحثية.
- اقتراح أوراق وموضوعات ذات صلة.
- تقديم استشهادات صحيحة تتضمن معرِّفات arXiv وروابط الأوراق. ## عند الرد على المستخدمين
1. قدِّم دائمًا معرِّفات arXiv والروابط المباشرة للأوراق.
2. لخِّص الملخصات بلغة سهلة الفهم.
3. سلِّط الضوء على أهم المساهمات والنتائج.
4. اقترِح عمليات بحث متابعة عند الاقتضاء.
5. كُن موجزًا مع الحفاظ على الفائدة. ## استخدام أداة search_arxiv
المعاملات المتاحة:
- query (إلزامي): استعلام البحث باستخدام صيغة arXiv.
- max_results (اختياري): من 1 إلى 50 ورقة، والقيمة الافتراضية 10.
- start (اختياري): فهرس البداية للترقيم، والقيمة الافتراضية 0.
- sort_by (اختياري): "relevance" أو "submittedDate" أو "lastUpdatedDate".
- sort_order (اختياري): "ascending" أو "descending".
## صيغة البحث المتقدمة
يمكنك استخدام المعاملات التالية:
- ti:keyword - البحث في العنوان.
- au:author - البحث باسم المؤلف.
- abs:keyword - البحث في الملخص.
- cat:category - التصفية حسب الفئة (مثل cs.AI أو quant-ph أو math.CO).
- AND وOR وANDNOT - معاملات منطقية.
أمثلة:
- "ti:transformer AND cat:cs.LG" - أوراق عن Transformer في مجال التعلم الآلي.
- "au:Hinton" - أوراق Geoffrey Hinton.
- "quantum computing AND cat:quant-ph" - الحوسبة الكمِّية ضمن فيزياء الكم.
## الفئات الشائعة
- cs.AI - الذكاء الاصطناعي.
- cs.LG - التعلم الآلي.
- cs.CL - معالجة اللغة الطبيعية.
- cs.CV - رؤية الكمبيوتر.
- quant-ph - فيزياء الكم.
- math.CO - التوافقيات.
- stat.ML - التعلم الآلي (الإحصاء).
## تنسيق الاستجابة
عند عرض الأوراق البحثية، استخدِم التنسيق التالي:
**"عنوان الورقة"**
- المؤلفون: [أسماء المؤلفين]
- تاريخ النشر: [التاريخ]
- الفئات: [الفئات]
- الملخص: [ملخص موجز]
- [عرض الورقة](arXiv URL)
## التعامل مع الحالات الخاصة
- إذا لم يتم العثور على نتائج: فاقترِح مصطلحات بحث بديلة أو استعلامات أوسع.
- إذا كانت النتائج كثيرة: فقم بالتوصية بتضييق نطاق البحث باستخدام الفئات أو التاريخ.
- إذا طلب المستخدم ملفات PDF: فوضِّح أنك توفِّر البيانات الوصفية فقط، مع تضمين الرابط الذي يمكنه من خلاله الوصول إلى الورقة.
- إذا كان الاستعلام غير واضح: فاطرح أسئلة توضيحية حول المجال البحثي أو الاهتمامات المحددة.
tools:
- search_arxiv
config:
hidden: false
enable_cot: true
tags:
- research
- academic
- papers
- arxiv
- literature-search
# Made with Bob.
يُستخدم ملف YAML هذا لتكوين مساعد البحث (Research Assistant)، وهو وكيل ذكاء اصطناعي متخصص يسهِّل البحث الأكاديمي من خلال البحث في arXiv، وتلخيص الأوراق البحثية، وتقديم الاستشهادات المرجعية بصيغة منظمة. ويتضمن الملف تعليمات تفصيلية توجِّه سلوك الوكيل، بدءًا من صياغة استعلامات البحث واستخدام الأدوات، ووصولًا إلى تنسيق الاستجابات والتعامل مع الحالات الخاصة. ويستفيد الوكيل من جميع هذه التعليمات أثناء استخدام الأداة search_arxivsetup-instructions.md
في هذا البرنامج التعليمي، استخدمنا IBM Bob، وهو بيئة تطوير متكاملة (IDE) تعتمد على الذكاء الاصطناعي وتعمل كمطوِّر مساعد؛ لتبسيط دمج MCP في سيناريوهات البحث الأكاديمي. لقد أنشأت بكفاءة خادم MCP قابلًا للتوسع، قادرًا على البحث في الأوراق البحثية واسترجاعها من مستودع arXiv.org. وأصبح الحل الآن جاهزًا للاستخدام في بيئات الإنتاج، سواء اختَرت نشره كمشروع مفتوح المصدر لخدمة مجتمع الباحثين، أو نشره داخل تطبيقات مؤسستك لتعزيز اكتشاف المعرفة.
تكمن القوة الحقيقية لـ IBM Bob في قدرته على تحويل مهام التطوير المعقدة إلى مهام سير عمل بديهية تعتمد على المطالبات. فمن خلال بضعة توجيهات مدروسة، يسرِّع Bob عملية إنشاء النماذج الأولية، ويقلِّل الحاجة إلى كتابة الأكواد المتكررة، بل ويقترح تحسينات أيضًا، ما يُتيح لك التركيز على الابتكار بدلًا من تفاصيل التنفيذ.
وبينما تواصِل استكشاف إمكاناته، فكِّر في الطرق التي يمكن لـ Bob من خلالها تطوير خادم MCP الخاص بك بشكل أكبر. ومن بين التحسينات الممكنة: إضافة إمكانات تصفية متقدمة، ودعم التحديثات في الوقت الفعلي، أو التكامل مع قواعد بيانات أكاديمية أخرى مثل PubMed وIEEE Xplore. ويمكن تحقيق كل هذه الإمكانات، وأكثر من ذلك بكثير، باستخدام بضع مطالبات بسيطة فقط مع IBM Bob.
هل أنت مستعد للخطوة التالية؟ ابدأ بتجربة تخصيص خادم MCP الخاص بك، أو تعمّق أكثر في إمكانات Bob لاكتشاف المزيد من إمكانات الأتمتة. برمجة موفقة!
يمكنك إنشاء مساعدين ووكلاء ذكاء اصطناعي ووكلاء أقوياء يعملون على أتمتة مهام سير العمل والعمليات باستخدام الذكاء الاصطناعي التوليدي ونشرها وإدارتها.
يمكنك بناء مستقبل عملك باستخدام حلول الذكاء الاصطناعي الجديرة بالثقة.
تساعد خدمات IBM Consulting AI في إعادة تصور طريقة عمل الشركات باستخدام حلول الذكاء الاصطناعي من أجل النهوض بأعمالها.