Integratie

FTIR.fun MCP-server en REST API

Verbind FTIR.fun met je AI-assistent of automatisatiepijplijn. MCP-server voor Claude/Cursor/Codex. REST API voor aangepaste integraties. Dezelfde 130.000+ referentiespectra en literatuur-ondersteunde AI-interpretatie voor alle methoden.

MCP-server — Claude, Cursor, Codex

De MCP-server (Model Context Protocol) van FTIR.fun is beoordeeld en officieel vermeld op de Anthropic MCP Registry, Smithery en MCP.so. Het stelt FTIR-spectrale zoekopdracht, piekverklaring met DOI-geciteerde literatuur en materiaalidentificatie beschikbaar als aanroepbare tools voor elke MCP-compatibele client.

Snel verbinden

# 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

Beschikbare tools

ToolBeschrijving
search_ftir_libraryZoek 130K+ referentiespectra op pieken of geüpload bestand. Retourneert gerangschikte overeenkomsten met CAS-nummers en overeenkomstscores.
search_public_ftir_resultsZoek door de community gedeelde analyseresultaten op trefwoord.
fetch_public_ftir_resultHaal een specifiek openbaar FTIR-analyseresultaat op met ID voor gedetailleerde beoordeling.

Serverkaart en registerkoppelingen

Bekijk alle platformintegraties

Coze Plugin — Gebruik Binnen 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.

Zoektermen: 红外分析, FTIR, infrared, 光谱检索, 物质识别

REST API

Bibliotheekzoek-API

POST /v1/search

Spectrale bibliotheek zoekopdracht. Accepteert een bestand (volledige spectrum matching) of een pieklijst (piekpositie matching). Als beide worden opgegeven, krijgt bestandszoekopdracht prioriteit.

Authenticatie

X-API-Key: your-api-key

Aanvraagbody

VeldTypeVereistBeschrijving
file_base64stringeen vanBase64-gecodeerd instrumentbestand (ondersteunt CSV, SPA, OPUS, SPC, JCAMP-DX en 15+ andere formaten)
filenamestringmet file_base64Originele bestandsnaam inclusief extensie (bijv. sample.spa)
peaksnumber[]een vanLijst van piekgolfgetallen in cm⁻¹ (bijv. [3026, 1601, 1493, 755])
top_kintegernee (standaard 10)Aantal resultaten om terug te geven, max 50
toleranceintegernee (standaard 8)Piekmatch tolerantie in cm⁻¹, bereik 1–30

Antwoord

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

Voorbeeld — Bestand uploaden

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

Voorbeeld — Pieklijst

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

AI-only-analyse voor bestaande resultaten

Gebruik dit eindpunt alleen nadat er al een zoekresultaat bestaat. FTIR.fun leest of OCRt eerst het aangeleverde rapport, haalt de gerapporteerde kandidaten en piektabel van het monster eruit en voert vervolgens stroomafwaartse KG- en literatuuranalyse uit.

POST /ftir/analyze_existing_results

Het rapport moet zowel de gerapporteerde zoekresultatenlijst als de piektabel van het monster bevatten. Dit eindpunt voert geen spectrale bibliotheekzoekopdracht uit.

Authenticatie

X-API-Key: your-api-key

Aanvraagbody

VeldTypeVereistBeschrijving
report_textstringeen vanPlatte tekst gekopieerd uit een bestaand instrument- of bibliotheekrapport. De tekst moet zowel de gerapporteerde resultaten als de piektabel van het monster bevatten.
report_file_base64stringeen vanBase64-gecodeerd rapportbestand. Ondersteunde formaten: PDF, DOC, DOCX, TXT, CSV, PNG, JPG, JPEG, WEBP, GIF, BMP, TIF, TIFF.
report_filenamestringmet report_file_base64Oorspronkelijke rapportbestandsnaam inclusief extensie (bijvoorbeeld rapport.pdf of rapport.docx).
user_background_textstringneeOptionele monsterachtergrond. Dit wordt alleen als zachte context beschouwd en niet als bewijs.

Harde invoergrens

  • Vereist element 1: ten minste één gerapporteerde zoekresultaatkandidaat, zoals een Top1-hit of een Top15-lijst
  • Vereist element 2: de pieklijst of piektabel van het monster in cm-1 uit hetzelfde rapport
  • Als een van beide elementen ontbreekt, retourneert het eindpunt HTTP 422 en genereert het geen analyserapport

Succesvolle respons

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

Reactie bij ontbrekende invoer

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

Voorbeeld — bestaande rapporttekst

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

Voorbeeld — bestaand rapportbestand

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

Foutcodes

HTTP-statusBetekenis
200Succes
401Ontbrekende of ongeldige API-sleutel
422Ongeldige aanvraagbody, niet-ondersteund rapportformaat of ontbrekende vereiste rapportelementen
500Serverfout
Verzoek indienen Formulier