Intégration

Serveur MCP FTIR.fun et API REST

Connectez FTIR.fun à votre assistant IA ou pipeline d'automatisation. Serveur MCP pour Claude/Cursor/Codex. API REST pour les intégrations personnalisées. Mêmes 130 000+ spectres de référence et interprétation IA appuyée par la littérature pour toutes les méthodes.

Serveur MCP — Claude, Cursor, Codex

Le serveur MCP (Model Context Protocol) de FTIR.fun a été examiné et officiellement répertorié sur l'Anthropic MCP Registry, Smithery et MCP.so. Il expose la recherche spectrale FTIR, l'explication des pics avec des citations DOI et l'identification de matériaux en tant qu'outils appelables pour tout client compatible MCP.

Connexion rapide

# 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

Outils disponibles

OutilDescription
search_ftir_libraryRecherchez plus de 130 000 spectres de référence par pics ou fichier téléchargé. Renvoie les correspondances classées avec les numéros CAS et les scores de similarité.
search_public_ftir_resultsRecherchez les résultats d'analyse partagés par la communauté par mot-clé.
fetch_public_ftir_resultRécupérez un résultat d'analyse FTIR public spécifique par ID pour un examen détaillé.

Carte du serveur et liens du registre

Voir toutes les intégrations de plateformes

Plugin Coze — Utilisation dans 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.

Mots-clés de recherche : 红外分析, FTIR, infrared, 光谱检索, 物质识别

API REST

API de recherche dans la bibliothèque

POST /v1/search

Recherche dans la bibliothèque spectrale. Accepte un fichier (correspondance plein spectre) ou une liste de pics (correspondance par position des pics). Si les deux sont fournis, la recherche par fichier a priorité.

Authentification

X-API-Key: your-api-key

Corps de la requête

ChampTypeRequisDescription
file_base64stringun deFichier instrument encodé en Base64 (prend en charge CSV, SPA, OPUS, SPC, JCAMP-DX et plus de 15 autres formats)
filenamestringavec file_base64Nom de fichier original incluant l'extension (par ex. sample.spa)
peaksnumber[]un deListe des nombres d'onde de pics en cm⁻¹ (par ex. [3026, 1601, 1493, 755])
top_kintegernon (par défaut 10)Nombre de résultats à retourner, max 50
toleranceintegernon (par défaut 8)Tolérance de correspondance des pics en cm⁻¹, plage 1–30

Réponse

{ "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 }

Exemple — Téléchargement de fichier

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())

Exemple — Liste de pics

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())

Analyse exclusivement IA pour les résultats existants

Utilisez ce point de terminaison seulement après qu'un résultat de recherche existe déjà. FTIR.fun lit ou OCR d'abord le rapport fourni, extrait les candidats rapportés et le tableau des pics de l'échantillon, puis exécute l'analyse KG et de la littérature en aval.

POST /ftir/analyze_existing_results

Le rapport doit contenir à la fois la liste des résultats de recherche rapportés et le tableau des pics de l'échantillon. Ce point de terminaison n'effectue pas lui-même de recherche dans la bibliothèque spectrale.

Authentification

X-API-Key: your-api-key

Corps de la requête

ChampTypeRequisDescription
report_textstringun deTexte brut copié à partir d'un rapport d'instrument ou de bibliothèque existant. Le texte doit inclure à la fois les résultats rapportés et le tableau des pics de l'échantillon.
report_file_base64stringun deFichier de rapport encodé en base64. Formats pris en charge : PDF, DOC, DOCX, TXT, CSV, PNG, JPG, JPEG, WEBP, GIF, BMP, TIF, TIFF.
report_filenamestringavec report_file_base64Nom de fichier du rapport d'origine incluant l'extension (par exemple rapport.pdf ou rapport.docx).
user_background_textstringnonContexte d'échantillon optionnel. Ceci est traité uniquement comme contexte souple et non comme preuve.

Limite d'entrée stricte

  • Élément requis 1 : au moins un candidat de résultat de recherche rapporté, tel qu'un résultat Top1 ou une liste Top15.
  • Élément requis 2 : la liste des pics de l'échantillon ou le tableau des pics en cm-1 du même rapport.
  • Si l'un des éléments manque, le point de terminaison renvoie HTTP 422 et ne génère pas de rapport d'analyse.

Réponse de succès

{ "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": {} }

Réponse en cas d'entrée manquante

{ "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 } } }

Exemple — Texte de rapport existant

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())

Exemple — Fichier de rapport existant

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())

Codes d'erreur

Statut HTTPSignification
200Succès
401Clé API manquante ou invalide
422Corps de requête invalide, format de rapport non pris en charge, ou éléments de rapport requis manquants.
500Erreur côté serveur
Soumettre la demande Formulaire