التكامل

خادم MCP و REST API لـ FTIR.fun

قم بتوصيل FTIR.fun بمساعد الذكاء الاصطناعي الخاص بك أو خط أنابيب الأتمتة. خادم MCP لـ Claude/Cursor/Codex. REST API للتكاملات المخصصة. نفس أكثر من 130,000 طيف مرجعي وتفسير الذكاء الاصطناعي المدعوم بالأدبيات عبر جميع الطرق.

خادم MCP — Claude, Cursor, Codex

تمت مراجعة خادم MCP (بروتوكول سياق النموذج) الخاص بـ FTIR.fun وإدراجه رسميًا في سجل Anthropic MCP وSmithery وMCP.so. إنه يعرض البحث الطيفي FTIR وشرح القمم بأدبيات مستشهد بها DOI وتحديد المواد كأدوات قابلة للاستدعاء لأي عميل متوافق مع MCP.

اتصال سريع

# Claude Desktop / Claude Code claude mcp add ftirfun https://ftir.fun/mcp # Cursor # Add to ~/.cursor/mcp.json: {"mcpServers": {"ftirfun": {"url": "https://ftir.fun/mcp"}}} # OpenAI Codex codex mcp add ftirfun https://ftir.fun/mcp

الأدوات المتاحة

أداةالوصف
search_ftir_libraryابحث في أكثر من 130 ألف طيف مرجعي بواسطة القمم أو ملف مرفوع. يعيد نتائج متطابقة مرتبة مع أرقام CAS ودرجات التشابه.
search_public_ftir_resultsابحث في نتائج التحليل المشتركة من المجتمع بواسطة الكلمة الرئيسية.
fetch_public_ftir_resultاجلب نتيجة تحليل FTIR عامة محددة بواسطة المعرف للمراجعة التفصيلية.

بطاقة الخادم وروابط السجل

عرض جميع تكاملات المنصات

إضافة Coze — استخدم داخل Doubao

Open Doubao → Plugin Store → search "FTIR" or "红外分析" → tap Add. No configuration needed. Doubao will automatically route infrared-related queries to our spectral search engine.

كلمات البحث: 红外分析, FTIR, infrared, 光谱检索, 物质识别

REST API

واجهة برمجة تطبيقات البحث في المكتبة

POST /v1/search

بحث في المكتبة الطيفية. يقبل ملفًا (مطابقة الطيف الكامل) أو قائمة ذروات (مطابقة مواقع الذروات). إذا تم تقديم كليهما، فإن بحث الملف له الأولوية.

المصادقة

X-API-Key: your-api-key

جسم الطلب

حقلالنوعمطلوبالوصف
file_base64stringواحد منملف جهاز مشفر بـ Base64 (يدعم CSV وSPA وOPUS وSPC وJCAMP-DX وأكثر من 15 تنسيقًا آخر)
filenamestringمع file_base64اسم الملف الأصلي بما في ذلك الامتداد (مثال: sample.spa)
peaksnumber[]واحد منقائمة أرقام الموجات الذروية بوحدة cm⁻¹ (مثال: [3026, 1601, 1493, 755])
top_kintegerلا (الافتراضي 10)عدد النتائج المطلوب إرجاعها، الحد الأقصى 50
toleranceintegerلا (الافتراضي 8)تسامح مطابقة الذروة بوحدة cm⁻¹، النطاق 1–30

الاستجابة

{ "success": true, "search_mode": "full_spectrum", "n_matches": 10, "matches": [ { "rank": 1, "name": "Polystyrene", "cas": "25086-18-4", "num": 326, "similarity": 0.9586 } ], "file_format": "Thermo SPA", "n_points": 3601, "error": null }

مثال — رفع ملف

import base64, requests with open("sample.spa", "rb") as f: b64 = base64.b64encode(f.read()).decode() resp = requests.post( "https://api.ftir.fun/v1/search", headers={"X-API-Key": "your-key", "Content-Type": "application/json"}, json={"file_base64": b64, "filename": "sample.spa", "top_k": 5}, ) print(resp.json())

مثال — قائمة القمم

import requests resp = requests.post( "https://api.ftir.fun/v1/search", headers={"X-API-Key": "your-key", "Content-Type": "application/json"}, json={"peaks": [3082, 3026, 2923, 1601, 1493, 1451, 1028, 906, 755, 699], "top_k": 5}, ) print(resp.json())

تحليل بالذكاء الاصطناعي فقط للنتائج الحالية

استخدم نقطة النهاية هذه فقط بعد وجود نتيجة بحث بالفعل. يقوم FTIR.fun أولاً بقراءة أو التعرف الضوئي على التقرير المقدم، ويستخرج المرشحين المُبلغين وجدول قمم العينة، ثم يشغل تحليل المعرفة (KG) والأدبيات الداعمة التنازلية.

POST /ftir/analyze_existing_results

يجب أن يحتوي التقرير على كل من قائمة نتائج البحث المُبلغ عنها وجدول قمم العينة. لا تقوم نقطة النهاية هذه بإجراء بحث في المكتبة الطيفية بنفسها.

المصادقة

X-API-Key: your-api-key

جسم الطلب

حقلالنوعمطلوبالوصف
report_textstringواحد مننص عادي منسوخ من تقرير جهاز أو مكتبة موجود. يجب أن يتضمن النص كلاً من النتائج المُبلغ عنها وجدول قمم العينة.
report_file_base64stringواحد منملف تقرير مشفر بـ Base64. التنسيقات المدعومة: PDF، DOC، DOCX، TXT، CSV، PNG، JPG، JPEG، WEBP، GIF، BMP، TIF، TIFF.
report_filenamestringمع report_file_base64اسم ملف التقرير الأصلي بما في ذلك الامتداد (مثال report.pdf أو report.docx).
user_background_textstringلاخلفية عينة اختيارية. يتم التعامل مع هذا كسياق مرن فقط وليس كدليل.

حدود إدخال صارمة

  • العنصر المطلوب 1: مرشح واحد على الأقل من نتائج البحث المُبلغ عنها، مثل نتيجة Top1 أو قائمة Top15
  • العنصر المطلوب 2: قائمة قمم العينة أو جدول القمم بوحدة cm-1 من نفس التقرير
  • إذا كان أي من العنصرين مفقودًا، تُرجع نقطة النهاية HTTP 422 ولا تُنشئ تقرير تحليل

استجابة ناجحة

{ "success": true, "analysis_mode": "ai_only_existing_results", "message": "AI-only analysis completed from the supplied existing results report.", "input_requirements": { "service_boundary": "AI-only analysis starts after a search result already exists.", "required_inputs": [ "At least one reported search result candidate (Top1 or Top15).", "The sample peak table or peak list in cm-1." ] }, "missing_requirements": [], "missing_requirement_messages": [], "extracted_report": { "source_kind": "pdf", "used_ocr": true, "peak_values_cm1": [1736, 1601, 1241], "library_candidates": [ {"rank": 1, "name": "Polyethylene terephthalate", "cas_number": "25038-59-9", "raw_score_text": "856/1000", "normalized_similarity": 0.856} ] }, "summary": "Reported library results rank Polyethylene terephthalate first.", "report_view": {}, "final_decision": {}, "direct_evidence": {}, "related_literature": {} }

استجابة الإدخال المفقود

{ "detail": { "success": false, "analysis_mode": "ai_only_existing_results", "error": "missing_required_report_elements", "message": "AI-only analysis requires both reported library results and a sample peak table.", "missing_requirements": ["sample_peak_table"], "missing_requirement_messages": [ "Missing sample peak table. Provide the sample peak list or peak table in cm-1 from the same report." ], "input_requirements": { "failure_behavior": "If either the reported result list or the sample peak table is missing, the service stops and returns a 422 response." }, "extracted_report": { "report_has_library_results": true, "report_has_peak_table": false } } }

مثال — نص تقرير موجود

import requests report_text = """ Sample: PET fragment Top1: Polyethylene terephthalate Score: 856/1000 Top2: Polyester resin Score: 801/1000 Peak table (cm-1): 3435, 2932, 1715, 1409, 1241, 1093, 1017, 872, 722 """ resp = requests.post( "https://api.ftir.fun/ftir/analyze_existing_results", headers={"X-API-Key": "your-key", "Content-Type": "application/json"}, json={"report_text": report_text, "user_background_text": "consumer packaging fragment"}, ) print(resp.json())

مثال — ملف تقرير موجود

import base64, requests with open("instrument-report.pdf", "rb") as f: b64 = base64.b64encode(f.read()).decode() resp = requests.post( "https://api.ftir.fun/ftir/analyze_existing_results", headers={"X-API-Key": "your-key", "Content-Type": "application/json"}, json={ "report_file_base64": b64, "report_filename": "instrument-report.pdf", "user_background_text": "suspected packaging adhesive", }, ) print(resp.json())

رموز الخطأ

حالة HTTPالمعنى
200نجاح
401مفتاح API مفقود أو غير صالح
422نص الطلب غير صالح، تنسيق تقرير غير مدعوم، أو عناصر تقرير مطلوبة مفقودة
500خطأ من جانب الخادم
إرسال الطلب نموذج