Integrazione

Server MCP e API REST di FTIR.fun

Connetti FTIR.fun al tuo assistente AI o pipeline di automazione. Server MCP per Claude/Cursor/Codex. API REST per integrazioni personalizzate. Stessi oltre 130.000 spettri di riferimento e interpretazione AI supportata dalla letteratura in tutti i metodi.

Server MCP — Claude, Cursor, Codex

Il server MCP (Model Context Protocol) di FTIR.fun è stato revisionato ed elencato ufficialmente su Anthropic MCP Registry, Smithery e MCP.so. Espone la ricerca spettrale FTIR, la spiegazione dei picchi con letteratura citata da DOI e l'identificazione dei materiali come strumenti richiamabili per qualsiasi client compatibile con MCP.

Connessione rapida

# 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

Strumenti disponibili

StrumentoDescrizione
search_ftir_libraryCerca oltre 130.000 spettri di riferimento per picchi o file caricato. Restituisce corrispondenze classificate con numeri CAS e punteggi di somiglianza.
search_public_ftir_resultsCerca risultati di analisi condivisi dalla community per parola chiave.
fetch_public_ftir_resultRecupera un risultato di analisi FTIR pubblico specifico per ID per una revisione dettagliata.

Scheda del server e collegamenti al registro

Vedi tutte le integrazioni delle piattaforme

Plugin Coze — Usa in 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.

Parole chiave di ricerca: 红外分析, FTIR, infrared, 光谱检索, 物质识别

API REST

API Ricerca in Libreria

POST /v1/search

Ricerca nella libreria spettrale. Accetta un file (corrispondenza su spettro completo) o un elenco di picchi (corrispondenza su posizione dei picchi). Se entrambi sono forniti, la ricerca su file ha priorità.

Autenticazione

X-API-Key: your-api-key

Corpo della richiesta

CampoTipoObbligatorioDescrizione
file_base64stringuno diFile strumento codificato in Base64 (supporta CSV, SPA, OPUS, SPC, JCAMP-DX e oltre 15 altri formati)
filenamestringcon file_base64Nome file originale inclusa estensione (es. sample.spa)
peaksnumber[]uno diElenco dei numeri d'onda dei picchi in cm⁻¹ (es. [3026, 1601, 1493, 755])
top_kintegerno (predefinito 10)Numero di risultati da restituire, max 50
toleranceintegerno (predefinito 8)Tolleranza di corrispondenza dei picchi in cm⁻¹, intervallo 1–30

Risposta

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

Esempio — Caricamento file

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

Esempio — Elenco picchi

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

Analisi Solo AI per Risultati Esistenti

Usa questo endpoint solo dopo che un risultato di ricerca esiste già. FTIR.fun prima legge o OCRizza il report fornito, estrae i candidati riportati e la tabella dei picchi del campione, quindi esegue l'analisi KG e basata sulla letteratura a valle.

POST /ftir/analyze_existing_results

Il report deve contenere sia la lista dei risultati di ricerca riportati sia la tabella dei picchi del campione. Questo endpoint non esegue autonomamente la ricerca in libreria spettrale.

Autenticazione

X-API-Key: your-api-key

Corpo della richiesta

CampoTipoObbligatorioDescrizione
report_textstringuno diTesto semplice copiato da un report di strumento o libreria esistente. Il testo deve includere sia i risultati riportati sia la tabella dei picchi del campione.
report_file_base64stringuno diFile report codificato in base64. Formati supportati: PDF, DOC, DOCX, TXT, CSV, PNG, JPG, JPEG, WEBP, GIF, BMP, TIF, TIFF.
report_filenamestringcon report_file_base64Nome file del report originale inclusa l'estensione (ad esempio report.pdf o report.docx).
user_background_textstringnoBackground del campione opzionale. Viene trattato solo come contesto soft e non come prova.

Confine Input Duro

  • Elemento richiesto 1: almeno un candidato risultato di ricerca riportato, come un hit Top1 o una lista Top15
  • Elemento richiesto 2: la lista dei picchi del campione o la tabella dei picchi in cm-1 dello stesso report
  • Se uno dei due elementi manca, l'endpoint restituisce HTTP 422 e non genera un report di analisi

Risposta di Successo

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

Risposta Input Mancante

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

Esempio — Testo Report Esistente

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

Esempio — File Report Esistente

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

Codici di errore

Stato HTTPSignificato
200Successo
401Chiave API mancante o non valida
422Corpo della richiesta non valido, formato report non supportato o elementi richiesti mancanti
500Errore lato server
Invia richiesta Modulo