Integración

Servidor MCP y API REST de FTIR.fun

Conecta FTIR.fun a tu asistente de IA o pipeline de automatización. Servidor MCP para Claude/Cursor/Codex. API REST para integraciones personalizadas. Los mismos más de 130,000 espectros de referencia e interpretación de IA respaldada por literatura en todos los métodos.

Servidor MCP — Claude, Cursor, Codex

El servidor MCP (Protocolo de Contexto de Modelo) de FTIR.fun ha sido revisado y listado oficialmente en Anthropic MCP Registry, Smithery y MCP.so. Expone búsqueda espectral FTIR, explicación de picos con literatura citada por DOI e identificación de materiales como herramientas invocables para cualquier cliente compatible con MCP.

Conexión rápida

# 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

Herramientas disponibles

HerramientaDescripción
search_ftir_libraryBusca más de 130K espectros de referencia por picos o archivo subido. Devuelve coincidencias clasificadas con números CAS y puntuaciones de similitud.
search_public_ftir_resultsBusca resultados de análisis compartidos por la comunidad por palabra clave.
fetch_public_ftir_resultObtén un resultado de análisis FTIR público específico por ID para una revisión detallada.

Tarjeta del servidor y enlaces del registro

Ver todas las integraciones de plataformas

Plugin de Coze — Usar Dentro de 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.

Palabras clave de búsqueda: 红外分析, FTIR, infrared, 光谱检索, 物质识别

API REST

API de Búsqueda en Biblioteca

POST /v1/search

Búsqueda en biblioteca espectral. Acepta un archivo (coincidencia de espectro completo) o una lista de picos (coincidencia de posición de pico). Si se proporcionan ambos, la búsqueda de archivo tiene prioridad.

Autenticación

X-API-Key: your-api-key

Cuerpo de la solicitud

CampoTipoRequeridoDescripción
file_base64stringuno deArchivo de instrumento codificado en Base64 (soporta CSV, SPA, OPUS, SPC, JCAMP-DX y más de 15 otros formatos)
filenamestringcon file_base64Nombre de archivo original incluyendo extensión (ej. sample.spa)
peaksnumber[]uno deLista de números de onda de picos en cm⁻¹ (ej. [3026, 1601, 1493, 755])
top_kintegerno (predeterminado 10)Número de resultados a devolver, máximo 50
toleranceintegerno (predeterminado 8)Tolerancia de coincidencia de picos en cm⁻¹, rango 1–30

Respuesta

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

Ejemplo — Carga de archivo

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

Ejemplo — Lista de picos

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

Análisis Solo IA para Resultados Existentes

Use este endpoint solo después de que ya exista un resultado de búsqueda. FTIR.fun primero lee o aplica OCR al informe proporcionado, extrae los candidatos reportados y la tabla de picos de la muestra, luego ejecuta el análisis posterior de KG y respaldado por literatura.

POST /ftir/analyze_existing_results

El informe debe contener tanto la lista de resultados de búsqueda reportados como la tabla de picos de la muestra. Este endpoint no realiza la búsqueda en la biblioteca espectral por sí mismo.

Autenticación

X-API-Key: your-api-key

Cuerpo de la solicitud

CampoTipoRequeridoDescripción
report_textstringuno deTexto plano copiado de un informe de instrumento o biblioteca existente. El texto debe incluir tanto los resultados reportados como la tabla de picos de la muestra.
report_file_base64stringuno deArchivo de informe codificado en Base64. Formatos soportados: PDF, DOC, DOCX, TXT, CSV, PNG, JPG, JPEG, WEBP, GIF, BMP, TIF, TIFF.
report_filenamestringcon report_file_base64Nombre de archivo del informe original incluyendo extensión (por ejemplo report.pdf o report.docx).
user_background_textstringnoFondo de muestra opcional. Esto se trata solo como contexto suave y no como evidencia.

Límite Estricto de Entrada

  • Elemento requerido 1: al menos un candidato de resultado de búsqueda reportado, como un acierto Top1 o una lista Top15
  • Elemento requerido 2: la lista de picos de la muestra o tabla de picos en cm-1 del mismo informe
  • Si falta cualquiera de los elementos, el endpoint devuelve HTTP 422 y no genera un informe de análisis.

Respuesta Exitosa

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

Respuesta de Entrada Faltante

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

Ejemplo — Texto de Informe Existente

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

Ejemplo — Archivo de Informe Existente

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

Códigos de error

Estado HTTPSignificado
200Éxito
401Clave API faltante o no válida
422Cuerpo de solicitud inválido, formato de informe no soportado, o elementos requeridos del informe faltantes.
500Error del servidor
Enviar solicitud Formulario