Интеграция

MCP-сервер и REST API FTIR.fun

Подключите FTIR.fun к вашему AI-ассистенту или конвейеру автоматизации. MCP-сервер для Claude/Cursor/Codex. REST API для пользовательских интеграций. Те же 130 000+ эталонных спектров и подкрепленная литературой AI-интерпретация во всех методах.

MCP-сервер — Claude, Cursor, Codex

MCP-сервер (Model Context Protocol) FTIR.fun проверен и официально внесен в реестры Anthropic MCP Registry, Smithery и MCP.so. Он предоставляет поиск FTIR-спектров, объяснение пиков с цитированием литературы по DOI и идентификацию материалов в виде вызываемых инструментов для любого совместимого с MCP клиента.

Быстрое подключение

# 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

Доступные инструменты

ИнструментОписание
search_ftir_libraryПоиск 130 000+ эталонных спектров по пикам или загруженному файлу. Возвращает ранжированные совпадения с номерами CAS и оценками сходства.
search_public_ftir_resultsПоиск результатов анализа, опубликованных сообществом, по ключевому слову.
fetch_public_ftir_resultПолучить конкретный публичный результат анализа FTIR по ID для детального просмотра.

Карточка сервера и ссылки на реестры

Посмотреть все интеграции с платформами

Плагин Coze — использование внутри 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.

Ключевые слова для поиска: 红外分析, FTIR, infrared, 光谱检索, 物质识别

REST API

API поиска по библиотеке

POST /v1/search

Поиск по спектральной библиотеке. Принимает файл (полное спектральное совпадение) или список пиков (совпадение по положению пиков). Если указано и то, и другое, приоритет имеет поиск по файлу.

Аутентификация

X-API-Key: your-api-key

Тело запроса

ПолеТипОбязательноОписание
file_base64stringодин изФайл прибора в кодировке Base64 (поддерживает CSV, SPA, OPUS, SPC, JCAMP-DX и более 15 других форматов)
filenamestringс file_base64Исходное имя файла с расширением (например, sample.spa)
peaksnumber[]один изСписок волновых чисел пиков в см⁻¹ (например, [3026, 1601, 1493, 755])
top_kintegerнет (по умолчанию 10)Количество возвращаемых результатов, макс. 50
toleranceintegerнет (по умолчанию 8)Допуск совпадения пиков в см⁻¹, диапазон 1–30

Ответ

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

Пример — загрузка файла

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

Пример — список пиков

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

Анализ только с ИИ для существующих результатов

Используйте эту конечную точку только после того, как результат поиска уже существует. FTIR.fun сначала считывает или выполняет OCR предоставленного отчета, извлекает найденные кандидаты и таблицу пиков образца, затем запускает последующий анализ на основе графов знаний и литературы.

POST /ftir/analyze_existing_results

Отчет должен содержать как список найденных результатов поиска, так и таблицу пиков образца. Эта конечная точка не выполняет поиск по спектральной библиотеке самостоятельно.

Аутентификация

X-API-Key: your-api-key

Тело запроса

ПолеТипОбязательноОписание
report_textstringодин изПростой текст, скопированный из существующего отчета прибора или библиотеки. Текст должен включать как найденные результаты, так и таблицу пиков образца.
report_file_base64stringодин изФайл отчета в кодировке Base64. Поддерживаемые форматы: PDF, DOC, DOCX, TXT, CSV, PNG, JPG, JPEG, WEBP, GIF, BMP, TIF, TIFF.
report_filenamestringс report_file_base64Исходное имя файла отчета с расширением (например, report.pdf или report.docx).
user_background_textstringнетНеобязательный фон образца. Он рассматривается только как мягкий контекст и не является доказательством.

Жесткая граница входных данных

  • Обязательный элемент 1: по крайней мере один найденный кандидат результата поиска, например, совпадение Top1 или список Top15
  • Обязательный элемент 2: список пиков образца или таблица пиков в см-1 из того же отчета
  • Если какой-либо элемент отсутствует, конечная точка возвращает HTTP 422 и не генерирует аналитический отчет

Успешный ответ

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

Ответ при отсутствии входных данных

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

Пример — существующий текст отчета

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

Пример — существующий файл отчета

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

Коды ошибок

HTTP статусЗначение
200Успех
401Отсутствует или неверный ключ API
422Недопустимое тело запроса, неподдерживаемый формат отчета или отсутствие обязательных элементов отчета
500Ошибка на стороне сервера
Отправить запрос Форма