Integração

Servidor MCP e API REST do FTIR.fun

Conecte o FTIR.fun ao seu assistente de IA ou pipeline de automação. Servidor MCP para Claude/Cursor/Codex. API REST para integrações personalizadas. Os mesmos mais de 130.000 espectros de referência e interpretação de IA respaldada por literatura em todos os métodos.

Servidor MCP — Claude, Cursor, Codex

O servidor MCP (Model Context Protocol) do FTIR.fun foi revisado e oficialmente listado no Anthropic MCP Registry, Smithery e MCP.so. Ele expõe busca espectral FTIR, explicação de picos com literatura citada por DOI e identificação de materiais como ferramentas chamáveis para qualquer cliente compatível com MCP.

Conexão 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

Ferramentas Disponíveis

FerramentaDescrição
search_ftir_libraryPesquise mais de 130.000 espectros de referência por picos ou arquivo enviado. Retorna correspondências classificadas com números CAS e pontuações de similaridade.
search_public_ftir_resultsPesquise resultados de análise compartilhados pela comunidade por palavra-chave.
fetch_public_ftir_resultBusque um resultado específico de análise FTIR pública por ID para revisão detalhada.

Cartão do Servidor e Links do Registro

Ver Todas as Integrações de Plataforma

Plugin Coze — Use dentro do 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.

Palavras-chave de pesquisa: 红外分析, FTIR, infravermelho, 光谱检索, 物质识别

API REST

API de Pesquisa de Biblioteca

POST /v1/search

Pesquisa na biblioteca espectral. Aceita um arquivo (correspondência de espectro completo) ou uma lista de picos (correspondência de posição de pico). Se ambos forem fornecidos, a pesquisa por arquivo tem prioridade.

Autenticação

X-API-Key: your-api-key

Corpo da Requisição

CampoTipoObrigatórioDescrição
file_base64stringum deArquivo de instrumento codificado em Base64 (suporta CSV, SPA, OPUS, SPC, JCAMP-DX e mais de 15 outros formatos)
filenamestringcom file_base64Nome do arquivo original incluindo extensão (ex: sample.spa)
peaksnumber[]um deLista de números de onda de pico em cm⁻¹ (ex: [3026, 1601, 1493, 755])
top_kintegernão (padrão 10)Número de resultados a retornar, máximo 50
toleranceintegernão (padrão 8)Tolerância de correspondência de pico em cm⁻¹, intervalo 1–30

Resposta

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

Exemplo — Upload de Arquivo

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

Exemplo — 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álise Exclusivamente com IA para Resultados Existentes

Use este endpoint somente depois que um resultado de pesquisa já existir. O FTIR.fun primeiro lê ou faz OCR do relatório fornecido, extrai os candidatos relatados e a tabela de picos da amostra e, em seguida, executa análise downstream com KG e literatura.

POST /ftir/analyze_existing_results

O relatório deve conter tanto a lista de resultados de pesquisa relatados quanto a tabela de picos da amostra. Este endpoint não realiza pesquisa em biblioteca espectral por si só.

Autenticação

X-API-Key: your-api-key

Corpo da Requisição

CampoTipoObrigatórioDescrição
report_textstringum deTexto simples copiado de um instrumento existente ou relatório de biblioteca. O texto deve incluir tanto os resultados relatados quanto a tabela de picos da amostra.
report_file_base64stringum deArquivo de relatório codificado em Base64. Formatos suportados: PDF, DOC, DOCX, TXT, CSV, PNG, JPG, JPEG, WEBP, GIF, BMP, TIF, TIFF.
report_filenamestringcom report_file_base64Nome do arquivo do relatório original incluindo extensão (por exemplo, report.pdf ou report.docx).
user_background_textstringnãoContexto opcional da amostra. Isso é tratado apenas como contexto suave e não como evidência.

Limite Rígido de Entrada

  • Elemento obrigatório 1: pelo menos um candidato a resultado de pesquisa relatado, como um hit Top1 ou uma lista Top15
  • Elemento obrigatório 2: a lista de picos da amostra ou tabela de picos em cm-1 do mesmo relatório
  • Se algum dos elementos estiver ausente, o endpoint retorna HTTP 422 e não gera um relatório de análise

Resposta de Sucesso

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

Resposta de Entrada Ausente

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

Exemplo — Texto de Relatório 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())

Exemplo — Arquivo de Relatório 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 Erro

Status HTTPSignificado
200Sucesso
401Chave de API ausente ou inválida
422Corpo da solicitação inválido, formato de relatório não suportado ou elementos obrigatórios do relatório ausentes
500Erro no servidor
Enviar Pedido Formulário