Lacuna Research

ทางการ

แผนที่งานวิจัย ML แบบอ่านอย่างเดียวสำหรับเอเจนต์เขียนโค้ด: บทความวิจัย แนวทางการวิจัย ผู้เขียน แหล่งเผยแพร่ สถาบัน และสมมติฐาน โดยแต่ละรายการเชื่อมโยงไปยังแหล่งที่มา โฮสต์ไว้และไม่ต้องยืนยันตัวตน อีกทั้งยังมีแพ็กเกจ PyPI

คุณทำอะไรได้บ้างด้วย Lacuna Research MCP?

  • เชื่อมโยงโค้ดกับบทความวิจัย — ถามว่า repository บน GitHub ใช้ทำอะไรตามบทความวิจัยฉบับใด แล้วติดตามความสัมพันธ์ official_code_for ที่บันทึกไว้ไปยังบทความและแหล่งข้อมูล
  • ค้นหาวรรณกรรมวิชาการ — ค้นหาบทความด้วย search_lacuna จากนั้นเปิดผลลัพธ์ด้วย get_paper เพื่อดูบริบทโดยสรุป ทั้งบทสรุป ผู้เขียน และรูปภาพประกอบ
  • ค้นหาแหล่งข้อมูลที่เชื่อมโยง — ค้นหา codebase, ชุดข้อมูล, โมเดล หรือเดโมด้วย search_lacuna แล้วตรวจสอบรายการหนึ่งด้วย get_resource เพื่อดูบทความและแง่มุมที่เชื่อมโยง
  • สำรวจแนวทางการวิจัย — ดูบทสรุปของแนวทางหนึ่ง แล้วไล่ดูบทความที่แนบมาทีละหน้าโดยใช้ get_direction_papers
  • สำรวจข้อเสนอที่สร้างขึ้น — ค้นหาข้อเสนอด้วย search_type="hypothesis" แล้วอ่านรายการที่ได้ด้วย get_hypothesis ในฐานะแนวคิดสำหรับการศึกษา ไม่ใช่ข้อค้นพบ
  • จัดทำประวัตินักวิจัยและแหล่งเผยแพร่ — ดูบริบท บทความ แนวทาง หรือเครือข่ายของผู้เขียน แล้วเปรียบเทียบแหล่งเผยแพร่และสถาบัน

เซิร์ฟเวอร์ MCP แบบโฮสต์

npx add-mcp 'https://lacuna.tiptreesystems.com/api/mcp'

ติดตั้งลง Claude Code, Codex, Cursor และอื่นๆ

เอกสาร

Lacuna Research MCP — Empower your coding agent for machine learning research

Python 3.11+ MCP server MIT license

Lacuna Research MCP

Lacuna ซึ่งพัฒนาโดย Tiptree Systems เป็นแผนที่งานวิจัยด้านแมชชีนเลิร์นนิงในรูปแบบกราฟความรู้ที่หลากหลาย เชื่อมโยงบทความ ทิศทางการวิจัย ผู้เขียน แหล่งเผยแพร่ สถาบัน และข้อเสนอการวิจัยที่สร้างขึ้น พร้อมเส้นทางแหล่งที่มาจากวัตถุที่ได้มาทุกชิ้นย้อนกลับไปยังบทความและหน้าที่แน่นอนซึ่งเป็นที่มา

Lacuna Research MCP มอบสิ่งต่อไปนี้ให้กับเอเจนต์เขียนโค้ดของนักวิจัย AI:

  • ข้อเสนอการวิจัยที่สร้างขึ้น สำรวจแนวคิดการวิจัยที่สร้างด้วย The Alien Space of Science
  • ทิศทางการวิจัย สำรวจกลุ่มแนวคิดที่เชื่อมโยงกับบทความ ผู้เขียน และข้อเสนอ
  • วรรณกรรมพร้อมใช้สำหรับเอเจนต์ ค้นหาบทความล่าสุดในรูปแบบ markdown พร้อมลิงก์แหล่งที่มา
  • ข้อมูลเชิงลึกเกี่ยวกับนักวิจัย ติดตามผู้เขียน ผลงานตีพิมพ์ ทิศทาง ผลกระทบ และนักวิจัยที่เกี่ยวข้อง
  • การทำแผนที่ภาพรวม เปรียบเทียบแหล่งเผยแพร่ สถาบัน นักวิจัยชั้นนำ และกิจกรรมการตีพิมพ์

ตัวอย่างเช่น ติดตามการติดตั้งใช้งานไปยังความสัมพันธ์กับบทความที่บันทึกไว้:

ค้นหาบทความเบื้องหลัง Dao-AILab/flash-attention แสดงความเชื่อมโยงที่บันทึกไว้ กับ repository และลิงก์ไปยังบทความต้นฉบับ

ตัวอย่างนี้ติดตาม repository → ความสัมพันธ์กับบทความที่บันทึกไว้ → บทความและแหล่งที่มา Lacuna ส่งคืนความสัมพันธ์ official_code_for ไปยัง FlashAttention พร้อมลิงก์ไปยัง repository และบทความต้นฉบับ ตรวจสอบแหล่งที่มาเหล่านั้นเพื่อยืนยัน ความเชื่อมโยง เรียกใช้ตัวอย่าง หรือ ทำตาม notebook

ติดตั้ง · ทักษะการวิจัย · เริ่มต้นใช้งานครั้งแรก · เครื่องมือ · เอกสารอ้างอิง API · การกำหนดค่า

ติดตั้ง

Agent plugin สำหรับ Cursor

repository นี้ยังบรรจุการเชื่อมต่อ MCP แบบโฮสต์และ ทักษะการวิจัย ทั้งสองรายการไว้เป็น Agent Plugin ด้วย Cursor รองรับรูปแบบนี้

หากต้องการทดสอบในเครื่อง ให้คัดลอก repository นี้ไปที่ ~/.cursor/plugins/local/lacuna-research-mcp แล้วโหลด Cursor ใหม่ จากนั้นเปิด Customize เพื่อตรวจสอบทักษะทั้งสองรายการและการเชื่อมต่อ MCP plugin จะเชื่อมต่อ กับ https://lacuna.tiptreesystems.com/api/mcp โดยไม่ต้องติดตั้ง Python ในเครื่องหรือมี บัญชี Lacuna เปิดใช้การเชื่อมต่อนี้หรือเซิร์ฟเวอร์ Lacuna ที่กำหนดค่าด้วยตนเองอย่างใดอย่างหนึ่ง เพื่อหลีกเลี่ยงเครื่องมือซ้ำกัน

Cursor และ VS Code

ใช้เซิร์ฟเวอร์แบบโฮสต์โดยไม่ต้องติดตั้ง Python ในเครื่องหรือมีบัญชี Lacuna:

Add to Cursor Add to VS Code

ปุ่มเหล่านี้จะเปิดขั้นตอนการติดตั้ง MCP ของ editor ตรวจสอบ URL ของเซิร์ฟเวอร์และ ยืนยันการติดตั้ง หลังจากเชื่อมต่อแล้ว ให้ถามคำถามเกี่ยวกับ FlashAttention ด้านบน เอเจนต์ของคุณควรใช้ search_lacuna, get_resource และ get_paper

การกำหนดค่าด้วยตนเองหากลิงก์ติดตั้งไม่เปิด

ใน Cursor ให้ผสานรายการนี้เข้ากับ mcpServers ใน .cursor/mcp.json:

{
  "mcpServers": {
    "lacuna-research": {"url": "https://lacuna.tiptreesystems.com/api/mcp"}
  }
}

ใน VS Code ให้ผสานรายการนี้เข้ากับ servers ใน .vscode/mcp.json:

{
  "servers": {
    "lacuna-research": {"type": "http", "url": "https://lacuna.tiptreesystems.com/api/mcp"}
  }
}

เก็บรายการเซิร์ฟเวอร์ที่มีอยู่ไว้ เปิดการตั้งค่า MCP ของ editor เพื่อตรวจสอบ การเชื่อมต่อและเปิดใช้เครื่องมือของ Lacuna สำหรับการสนทนา

เซิร์ฟเวอร์ MCP แบบโฮสต์ (Claude connector)

ใช้เซิร์ฟเวอร์ MCP แบบโฮสต์ของ Lacuna กับไคลเอ็นต์ใดก็ได้ที่รองรับ Streamable HTTP ไม่จำเป็นต้องติดตั้งในเครื่อง

https://lacuna.tiptreesystems.com/api/mcp

ใน Claude ให้เปิด Customize → Connectors → + Add → Add custom connector ตั้งชื่อว่า Lacuna Research วาง URL ด้านบน แล้วเลือก No sign in หากระบบถามเกี่ยวกับการยืนยันตัวตน เพิ่ม connector ให้เสร็จ จากนั้นเปิดใช้จาก + → Connectors ในการสนทนา

สำหรับ workspace แบบ Team และ Enterprise ต้องเพิ่ม connector ใน Organization settings → Connectors ก่อน ดูรายละเอียดได้ที่ การตั้งค่า custom connector ของ Claude

ติดตั้งในเครื่อง

วิธีติดตั้ง Lacuna Research MCP ที่ง่ายที่สุดคือขอให้เอเจนต์เขียนโค้ดของคุณ เช่น Codex หรือ Claude Code ดำเนินการ:

ติดตั้งและกำหนดค่าแพ็กเกจ lacuna-research-mcp จาก PyPI สำหรับไคลเอ็นต์นี้

หากต้องการตั้งค่าด้วยตนเอง คำแนะนำด้านล่างใช้ uvx เพื่อเรียกใช้รุ่นล่าสุดที่ติดแท็กจาก PyPI ติดตั้ง uv ก่อน Lacuna Research MCP ต้องใช้ Python 3.11 ขึ้นไป

Codex

เพิ่มเซิร์ฟเวอร์ด้วย Codex CLI:

codex mcp add lacuna-research -- uvx lacuna-research-mcp

หรือเพิ่มรายการต่อไปนี้ใน ~/.codex/config.toml (หรือใน .codex/config.toml ภายในโปรเจกต์ที่เชื่อถือได้ หากต้องการตั้งค่าเฉพาะโปรเจกต์):

[mcp_servers.lacuna-research]
command = "uvx"
args = ["lacuna-research-mcp"]

เรียกใช้ codex mcp list เพื่อตรวจสอบว่ากำหนดค่าเซิร์ฟเวอร์แล้ว แอป Codex, CLI และส่วนขยาย IDE ใช้การกำหนดค่านี้ร่วมกันบนเครื่องเดียวกัน

Claude Code

เพิ่มเซิร์ฟเวอร์สำหรับทุกโปรเจกต์ด้วย Claude Code CLI:

claude mcp add --scope user lacuna-research -- uvx lacuna-research-mcp

ละ --scope user ไว้เพื่อเพิ่มเซิร์ฟเวอร์เฉพาะโปรเจกต์ปัจจุบัน หรือเพิ่มรายการต่อไปนี้ภายใต้วัตถุระดับบนสุด mcpServers ใน ~/.claude.json:

{
  "mcpServers": {
    "lacuna-research": {
      "type": "stdio",
      "command": "uvx",
      "args": ["lacuna-research-mcp"]
    }
  }
}

เรียกใช้ claude mcp get lacuna-research เพื่อตรวจสอบว่ากำหนดค่าเซิร์ฟเวอร์แล้ว

Claude Desktop

เปิด Settings → Developer → Edit Config แล้วเพิ่มเซิร์ฟเวอร์ภายใต้ mcpServers ใน claude_desktop_config.json:

{
  "mcpServers": {
    "lacuna-research": {
      "command": "uvx",
      "args": ["lacuna-research-mcp"]
    }
  }
}

รีสตาร์ต Claude Desktop หลังบันทึกไฟล์

ไคลเอ็นต์ MCP อื่น ๆ

สำหรับไคลเอ็นต์ใดก็ตามที่รองรับเซิร์ฟเวอร์ MCP แบบ stdio ในเครื่อง ให้ใช้การกำหนดค่ามาตรฐานนี้:

{
  "mcpServers": {
    "lacuna-research": {
      "command": "uvx",
      "args": ["lacuna-research-mcp"]
    }
  }
}

คำสั่งแบบสแตนด์อโลน

ติดตั้งเซิร์ฟเวอร์ MCP เป็นคำสั่งถาวร:

uv tool install lacuna-research-mcp
lacuna-research-mcp

เรียกใช้โดยไม่ติดตั้งคำสั่งถาวร:

uvx lacuna-research-mcp

หากคำสั่งนี้จบลงด้วยข้อผิดพลาดเกี่ยวกับรุ่นก่อนเผยแพร่ (เช่น "Python 3.14.0rc2 is a prerelease...") แสดงว่า uv ของคุณกำลังใช้ Python 3.14 รุ่นก่อนเผยแพร่ ซึ่ง MCP SDK ไม่รองรับ อัปเดต uv (uv self update) ติดตั้ง Python รุ่นที่เผยแพร่แล้ว (uv python install 3.14) หรือเรียกใช้ uvx --python 3.13 lacuna-research-mcp

เซิร์ฟเวอร์ HTTP ที่โฮสต์เอง

หากต้องการให้บริการไคลเอ็นต์ MCP ระยะไกลผ่าน Streamable HTTP แทน stdio:

uvx lacuna-research-mcp --transport streamable-http --host 0.0.0.0 --port 8000

endpoint คือ /mcp เซิร์ฟเวอร์ไม่มีสถานะและตอบกลับเป็น JSON จึงทำงานหลัง load balancer ได้โดยไม่ต้องยึดติดกับเซสชัน เมื่อใช้ค่าเริ่มต้น --host 127.0.0.1 เซิร์ฟเวอร์จะยอมรับเฉพาะส่วนหัว Host จาก localhost ดังนั้นให้ bind กับที่อยู่ที่ไม่ใช่ loopback เมื่อ reverse proxy ส่งต่อ hostname สาธารณะ

เวอร์ชันพัฒนาล่าสุด

PyPI มีรุ่นที่ติดแท็ก หากต้องการลองโค้ดล่าสุดจาก branch main แทน:

uvx --from git+https://github.com/tiptreesystems/lacuna-research-mcp.git lacuna-research-mcp

การพัฒนาในเครื่อง

ใช้ uv:

git clone https://github.com/tiptreesystems/lacuna-research-mcp.git
cd lacuna-research-mcp
uv sync --extra dev
uv run lacuna-research-mcp

ใช้ pip:

cd <path-to-lacuna-research-mcp>
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -U pip
python -m pip install -e .

ทักษะการวิจัย

เซิร์ฟเวอร์ MCP มีเครื่องมือให้ใช้งาน ทักษะเสริมเหล่านี้สอนเอเจนต์ของคุณให้ใช้ เครื่องมือเหล่านั้นสำหรับงานวิจัยสองประเภท:

ทักษะตัวอย่างคำขอ
ตรวจสอบงานก่อนหน้าก่อนที่ฉันจะติดตั้ง token merging สำหรับ vision transformer ช่วยหางานที่ใกล้เคียงที่สุดและ baseline ที่ควรนำมาเปรียบเทียบ
ติดตามโค้ดไปยังบทความDao-AILab/flash-attention ใช้บทความใดเป็นพื้นฐาน แสดงความสัมพันธ์ที่บันทึกไว้และแหล่งที่มา

เชื่อมต่อเซิร์ฟเวอร์ MCP ก่อน จากนั้นเมื่อติดตั้ง Node.js 22.20+ แล้ว ให้เรียกใช้ skills CLI จากโปรเจกต์ของคุณ:

npx skills add tiptreesystems/lacuna-research-mcp

เลือกทักษะและเอเจนต์ที่ต้องการใช้ หากต้องการติดตั้งเฉพาะเวิร์กโฟลว์จากโค้ดไปยังบทความ:

npx skills add tiptreesystems/lacuna-research-mcp --skill lacuna-code-to-paper

โดยค่าเริ่มต้น ทักษะจะติดตั้งในโปรเจกต์ปัจจุบัน ไม่ได้ติดตั้งหรือกำหนดค่า เซิร์ฟเวอร์ MCP หากไคลเอ็นต์ของคุณต้องค้นหาทักษะใหม่ ให้เริ่มเซสชันเอเจนต์ใหม่หลังติดตั้ง

เริ่มต้นใช้งานครั้งแรก

ถามคำถามข้อใดข้อหนึ่งด้านบนในเอเจนต์ที่เชื่อมต่อแล้ว หรือลองถามเกี่ยวกับรายการอ่าน:

รายการของฉันมี FlashAttention และ FlashAttention-2 ฉันควรอ่าน baseline หรือข้อจำกัดใดบ้าง เกี่ยวกับ attention แบบ long-context?

หากต้องการตัวอย่างที่ทำซ้ำได้โดยไม่ต้องใช้ model API key ให้ clone repository นี้แล้วเรียกใช้:

uv run examples/code_to_paper.py

notebook อธิบายแต่ละขั้นตอนและเปรียบเทียบเส้นทางแหล่งที่มากับการค้นหาบทความเพียงครั้งเดียว หากต้องการเรียกใช้เครื่องมือโดยตรง ให้ใช้ขั้นตอนเดียวกันดังนี้:

  1. search_lacuna(query="FlashAttention", search_type="resource", resource_kind="codebase", limit=5)
  2. ตรวจสอบตัวตนของ repository แล้วส่ง ID ที่ได้กลับไปยัง get_resource(resource_id_or_url=...)
  3. ติดตาม publications[].paper_id ที่ส่งกลับมาด้วย get_paper(artifact_id_or_url=..., view="context", figure_limit=0)

สำหรับการค้นหาวรรณกรรม ให้ใช้ search_lacuna(query="methods for detecting prompt injection attacks", search_type="paper", limit=5) สำหรับข้อเสนอที่สร้างขึ้น ให้ใช้ search_lacuna(query="LLM jailbreak defense", search_type="hypothesis", limit=5) แล้วติดตาม ID ที่ส่งกลับมาด้วย get_hypothesis ข้อเสนอที่สร้างขึ้นเป็นแนวคิดสำหรับการศึกษาเพิ่มเติม ไม่ใช่หลักฐานของผลการวิจัยที่ตีพิมพ์แล้ว

เกี่ยวกับ Lacuna

ไปป์ไลน์ของ Lacuna ปรับข้อมูลบรรณานุกรมจาก OpenAlex, OpenReview, DBLP และ arXiv ให้สอดคล้องกัน ดึงองค์ประกอบแนวคิดจากเนื้อหาบทความและจัดกลุ่มเป็นทิศทางการวิจัย (บทความ Lacuna) และสุ่มสร้างข้อเสนอการวิจัยใหม่จากทิศทางเหล่านั้นด้วย The Alien Space of Science แผนที่นี้ครอบคลุม บทความมากกว่า 2.29 ล้านฉบับ, โปรไฟล์ผู้เขียนมากกว่า 215,000 ราย, ทิศทางการวิจัยมากกว่า 28,000 รายการ, ข้อเสนอการวิจัยมากกว่า 25,000 รายการ และ แหล่งเผยแพร่มากกว่า 5,300 แห่ง — และขยายตัวอย่างต่อเนื่องเมื่อมีการนำเข้าบทความใหม่จาก arXiv และแหล่งอื่น ๆ ด้าน AI

ขอบเขต

คลังข้อมูลครอบคลุมงานวิจัยด้านแมชชีนเลิร์นนิงและ AI ได้แก่ บทความ ทิศทางการวิจัย ผลงานวิจัยของผู้เขียน แหล่งเผยแพร่ สถาบัน สมมติฐานการวิจัยที่สร้างขึ้น และทรัพยากรงานวิจัย (repository บน GitHub ชุดข้อมูลและโมเดลบน Hugging Face และระเบียน Zenodo) ที่เชื่อมโยงกับบทความ ไม่มีประวัติบุคคล ข่าว หรือเนื้อหาเว็บที่ไม่ใช่งานวิจัย เอเจนต์ควรตอบคำถามนอกขอบเขตนี้โดยใช้แหล่งข้อมูลอื่น

สิ่งที่เปิดให้ใช้งาน

  • search_lacuna ใช้ endpoint สาธารณะของ Lacuna ที่ /api/v1/search สำหรับทิศทางการวิจัย บทความ ผู้เขียน แหล่งเผยแพร่ สถาบัน สมมติฐาน และทรัพยากร การค้นหาบทความโดยตรง (search_type="paper") จะใช้ตัวจัดอันดับ lexical+semantic สำหรับระบบ production ของเซิร์ฟเวอร์ เมื่ออาร์กิวเมนต์การจัดอันดับอื่นยังคงเป็นค่าเริ่มต้น ส่ง search_type="hypothesis" เพื่อค้นหาสมมติฐาน ส่ง search_type="resource" เพื่อค้นหาคลังโค้ด ชุดข้อมูล โมเดล และเดโมที่เชื่อมโยงกับบทความ โดยเลือกกรองได้ด้วย resource_kind (codebase, dataset, model, demo) และ provider (github, huggingface, zenodo); ตัวอย่างเช่น resource_kind="dataset" ใช้ค้นหาชุดข้อมูลสำหรับการทดสอบประสิทธิภาพ การค้นหาทรัพยากรจะปฏิเสธ date_from/date_to, venue, การเรียงลำดับตามปี และการจัดอันดับเชิงความหมาย (ทรัพยากรไม่มีวันที่ แหล่งเผยแพร่ หรือ embedding)
  • get_hypothesis(hypothesis_id_or_url, view="context") สมมติฐาน/ข้อเสนอ view="context" (ค่าเริ่มต้น) คือบริบทข้อเสนอแบบกระชับที่ดึงข้อมูลครั้งเดียว (สรุป บทคัดย่อ ทิศทางที่เชื่อมโยง); view="full" ส่งคืนระเบียนเวอร์ชันของเซิร์ฟเวอร์ พร้อมประวัติเวอร์ชันและจำนวนสัญญาณ เนื้อหาข้อเสนออยู่ใน versions[].markdown
  • get_direction(cluster_id_or_url, view="context") ทิศทาง/กลุ่มงานวิจัย view="context" (ค่าเริ่มต้น) ขอข้อมูลสรุปแบบกระชับที่มุ่งเน้นสำหรับเอเจนต์; view="full" ส่งคืนระเบียนกลุ่มดิบ
  • get_direction_papers(cluster_id_or_url, page, limit, view="compact") บทความที่แบ่งหน้าและเชื่อมโยงกับทิศทาง view="compact" (ค่าเริ่มต้น) ส่งคืนแถวที่พร้อมใช้อ้างอิง (id, url, title, year, venue, ผู้เขียนบางส่วน, ข้อความบางส่วนจากบทคัดย่อ); view="full" ส่งคืนระเบียนบทความดิบจาก upstream
  • get_paper(artifact_id_or_url, view="context", figure_limit=None, include_resources=True) ค้นหาบทความพร้อมเวอร์ชันที่มีให้ใช้งาน ใช้ ID ของอาร์ติแฟกต์จากเวอร์ชันเพื่ออ่านข้อมูล โดยค่าเริ่มต้น บริบทและมุมมองแบบเต็มจะรวมทรัพยากรที่เชื่อมโยง (คลังโค้ด ชุดข้อมูล โมเดล และเดโม); ส่ง include_resources=False เพื่อไม่รวมทรัพยากรเหล่านั้น มุมมองอื่นจะไม่สนใจตัวเลือกนี้ view="context" (ค่าเริ่มต้น) ขอบริบทแบบกระชับที่มุ่งเน้นสำหรับเอเจนต์; มุมมองอื่นได้แก่ "full", "preview", "blog", "figures", "concepts" หรือ "neighbors" ในมุมมองบริบท figure_limit จำกัดจำนวนภาพตัวอย่าง (ค่าเริ่มต้นของเซิร์ฟเวอร์คือ 3; ส่ง 0 เพื่อปิดภาพตัวอย่างโดยยังคงสัญญาณ figures_truncated ไว้)
  • get_resource(resource_id_or_url) ค้นหาทรัพยากรด้วย id (จากการค้นหาทรัพยากรหรือรายการ resources ของ get_paper) หรือ URL ของ Lacuna /resource/...: URL ภายนอก สรุป แง่มุมต่าง ๆ (งาน รูปแบบ ขนาด ใบอนุญาต) เมตริกของผู้ให้บริการ ข้อความบางส่วนจาก README/การ์ด บทความที่เชื่อมโยงภายใต้ publications (พร้อม paper_id และความสัมพันธ์ เช่น dataset_for) ทิศทางที่เกี่ยวข้อง และทรัพยากรที่มีการกล่าวถึง
  • เครื่องมือผู้เขียน: get_author_context(…, view="context"), get_author_papers, get_author_directions และ get_author_neighbors เริ่มด้วย get_author_context ซึ่งค่าเริ่มต้นจะแสดงมุมมองแบบกระชับที่มุ่งเน้นสำหรับเอเจนต์ (บทความจำนวนจำกัด พร้อมรายการ impact_directions ที่อ่านง่าย แทนข้อมูล telemetry ดิบของ impact_clusters) ใช้เครื่องมือบทความ ทิศทาง และเพื่อนบ้านโดยเฉพาะเพื่อไล่ดูรายการเหล่านั้นเป็นหน้า โดยไม่ต้องดึงบริบทผู้เขียนซ้ำ view="full" ส่งคืนบริบทแบบเต็มตามโครงสร้างที่เซิร์ฟเวอร์จำกัดขอบเขตไว้ (คอลเลกชันจำกัดไว้ที่ 100 รายการ) ส่ง include_neighbors=true เพื่อรวมผู้เขียนที่คล้ายกันอย่างชัดเจน ซึ่งอาจเพิ่มเวลาแฝงของเซิร์ฟเวอร์อย่างมาก
  • เครื่องมือแหล่งเผยแพร่และสถาบัน: get_venue_context(…, view="context"), get_institution_context(…, view="context"), get_institution_authors เครื่องมือบริบทจะใช้รูปแบบกระชับเป็นค่าเริ่มต้น (รายการมีจำนวนจำกัด ตัดบล็อกที่ซ้ำกันออก; แหล่งเผยแพร่จะเก็บช่วงกิจกรรมล่าสุดไว้ ซึ่งรวม year ที่ร้องขอเสมอ) ใช้ get_institution_authors เพื่อไล่ดูรายชื่อผู้เขียนทั้งหมดของสถาบันเป็นหน้า

API ที่มีตัวห่อหุ้ม

เครื่องมือ MCPendpoint ของ Lacuna API
search_lacuna(query, search_type, limit, offset, author_id_or_url, date_from, date_to, venue, sort, ranking_profile, fields, resource_kind, provider)GET /api/v1/search (ส่ง resource_kind และ provider เป็นพารามิเตอร์ query kind และ provider ที่ส่งซ้ำ และต้องใช้ search_type="resource" หรือ "all" author_id_or_url จำกัด search_type="paper" ให้เหลือผู้เขียนหนึ่งคน โดยรับ author ID แบบดิบหรือ URL หน้า author ของ Lacuna fields จำกัด/ถ่วงน้ำหนักฟิลด์ข้อความที่ใช้จัดอันดับ lexical เช่น title^4,abstract และเลือกตัวจัดอันดับ lexical แบบทดลอง สำหรับการค้นหาบทความที่เรียงตามความเกี่ยวข้องเป็นค่าเริ่มต้น ตัวเลือกนี้จะข้ามตัวจัดอันดับ lexical+semantic สำหรับระบบ production ฟิลด์ที่อนุญาต ได้แก่ title, abstract, summary, concepts, name, top_names, venue, description, topics, provider_key, paper_titles โดยแต่ละฟิลด์ใช้ได้เฉพาะกับประเภทที่มีฟิลด์นั้น — title: บทความ/คลัสเตอร์/แหล่งเผยแพร่/สมมติฐาน/ทรัพยากร; description/topics/provider_key/paper_titles: ทรัพยากร; abstract/summary/concepts: บทความ; name: ผู้เขียน/สถาบัน/แหล่งเผยแพร่; top_names: คลัสเตอร์/สมมติฐาน; venue: บทความ/แหล่งเผยแพร่ (search_type="all" ครอบคลุมทั้งหมด) น้ำหนักต้องเป็นไปตาม 0 < weight <= 100 ระบบจะปฏิเสธฟิลด์ที่ไม่รู้จัก น้ำหนักที่อยู่นอกช่วง ฟิลด์ที่ใช้ร่วมกับประเภทนั้นไม่ได้ และ fields ที่ใช้ร่วมกับ ranking_profile="semantic" เนื่องจากมิฉะนั้นเซิร์ฟเวอร์จะละทิ้ง จำกัด หรือเพิกเฉยต่อค่าเหล่านั้นโดยไม่แจ้งให้ทราบ)
get_hypothesis(hypothesis_id_or_url, view="context")view="context" → GET /api/v1/context/hypothesis/{hypothesis_id}?view=compact; view="full" → GET /api/v1/hypotheses/{hypothesis_id}
get_direction(cluster_id_or_url, view="context")view="context" → GET /api/v1/context/direction/{cluster_id}?view=compact; view="full" → GET /api/v1/clusters/{cluster_id}
get_direction_papers(cluster_id_or_url, page, limit, view="compact")GET /api/v1/clusters/{cluster_id}/papers?view=compact (ค่าเริ่มต้น) หรือ ?view=complete
get_paper(artifact_id_or_url, view="context", figure_limit=None, include_resources=True)view="context" → GET /api/v1/context/paper/{artifact_id}?view=compact (ใช้ &figure_limit=N เมื่อตั้งค่า); view="full" → GET /api/v1/papers/{artifact_id}; view="preview" → …/preview; view="blog" → …/blog; view="figures" → …/figures; view="concepts" → …/concepts; view="neighbors" → …/neighbors; บริบทและแบบเต็มจะส่ง include_resources URL หน้า Work (/work/<name>, /work/<slug>/wrk_…) หรือ id แบบดิบของ wrk_… จะถูกอ่านผ่าน GET /api/v1/context/work/{work_id_or_name} ก่อน
get_resource(resource_id_or_url)GET /api/v1/resources/{resource_id}
get_author_papers(author_id_or_url, limit=50, offset=0)GET /api/v1/authors/{author_id}/papers
get_author_directions(author_id_or_url, limit=50, offset=0)GET /api/v1/authors/{author_id}/directions
get_author_context(author_id_or_url, view="context", include_neighbors=false)view="context" → GET /api/v1/context/author/{author_id}?view=compact; view="full" → GET /api/v1/context/author/{author_id} (include_neighbors=true ใช้ร้องขอผู้เขียนที่คล้ายกันอย่างชัดเจน)
get_author_neighbors(author_id_or_url, limit=8, offset=0)GET /api/v1/authors/{author_id}/neighbors
get_venue_context(venue_key_or_url, year, view="context")view="context" → GET /api/v1/context/venue/{vkey}[/{year}]?view=compact; view="full" → เส้นทางเดียวกันโดยไม่มี view
get_institution_context(institution_key_or_url, view="context")view="context" → GET /api/v1/context/institution/{ikey}?view=compact; view="full" → เส้นทางเดียวกันโดยไม่มี view
get_institution_authors(institution_key_or_url, limit=50, offset=0)GET /api/v1/institutions/{ikey}/authors

สำหรับอาร์กิวเมนต์ id-or-URL ให้ส่ง id ดิบที่ได้จาก search_lacuna หรือ URL หน้า Lacuna ที่เกี่ยวข้อง MCP จะแปลงฟิลด์ url และ *_url ที่สัมพันธ์กับ Lacuna ให้เป็น URL แบบ absolute และยังแปลงลิงก์ Lacuna ให้เป็น absolute ด้วย (รวมถึงหน้า /resource/...) ภายในฟิลด์ที่ชื่อ summary_markdown, article_markdown, markdown, content หรือ description

get_author_context ถูกจำกัดขอบเขตฝั่งเซิร์ฟเวอร์ในทั้งสองมุมมอง มุมมองกระชับเริ่มต้นจะแสดงข้อมูลสรุปที่คัดสรรแล้ว; view="full" จะแสดงโครงสร้างแบบเต็มที่มีขนาดใหญ่กว่า โดยจำกัดคอลเลกชันที่ฝังอยู่ไว้ที่ 100 รายการ ใช้ get_author_papers และ get_author_directions แทนการพยายามแบ่งหน้าคอลเลกชันบริบทที่ฝังอยู่

คำขอค้นหาจำกัดผลลัพธ์ไว้ที่ 50 รายการต่อครั้ง และคำขอหน้าบทความตามทิศทางจำกัดผลลัพธ์ไว้ที่ 100 รายการต่อครั้ง ใน search_lacuna date_from และ date_to คือขอบเขตวันที่เผยแพร่แบบรวมวันต้นทางและวันปลายทาง รูปแบบที่ยอมรับ ได้แก่ YYYY, YYYY-MM และ YYYY-MM-DD; ตัวอย่างเช่น date_from="2020", date_to="2022-03" จะรวมบทความตั้งแต่วันที่ 1 มกราคม 2020 ถึงวันที่ 31 มีนาคม 2022

search_lacuna เปิดให้ใช้โปรไฟล์การจัดอันดับต่อไปนี้:

  • default / lexical โปรไฟล์เริ่มต้นสำหรับการค้นหาทั้งหมด เมื่อไม่ได้ตั้งค่า search_type="paper", sort="relevance" และ fields จะใช้ตัวจัดอันดับ lexical+semantic สำหรับระบบ production ของเซิร์ฟเวอร์ พร้อมการสำรองเมื่อเกิดปัญหาอย่างเหมาะสม ค่าเริ่มต้นของ search_type="all" ใน MCP จะใช้การจัดอันดับ lexical เริ่มต้นของเซิร์ฟเวอร์แทน
  • semantic ใช้สำหรับดึงบทความโดยอาศัย embedding คำค้นหาเชิงความหมายจะไม่ใช้ส่วนการจัดอันดับ lexical ตามปกติ แต่เซิร์ฟเวอร์ยังสามารถเพิ่มผลการจับคู่ชื่อเรื่องแบบตรงกันด้วย lexical ได้ รองรับเฉพาะการค้นหา paper และ all เท่านั้น (มีเพียงบทความที่มี semantic embedding) และใช้ร่วมกับตัวกรอง resource_kind/provider ไม่ได้
  • bm25_title_abstract / bm25 ใช้สำหรับจับคู่ lexical โดยจำกัดเฉพาะชื่อเรื่องและบทคัดย่อ ระบบจะปฏิเสธการค้นหา author และ institution (ระเบียนเหล่านั้นไม่มีฟิลด์ชื่อเรื่องหรือบทคัดย่อ)

การค้นหาทั้งหมดใช้ค่าเริ่มต้นของเซิร์ฟเวอร์ เว้นแต่จะระบุ ranking_profile MCP จะปฏิเสธชุดค่าผสมของโปรไฟล์/ประเภทที่ไม่รองรับ เนื่องจากมิฉะนั้นเซิร์ฟเวอร์จะเปลี่ยนไปใช้การค้นหาสตริงย่อยและเพิกเฉยต่อโปรไฟล์การจัดอันดับที่ร้องขอโดยไม่แจ้งให้ทราบ

sort รับค่า relevance (ค่าเริ่มต้น), year_desc และ year_asc การเรียงลำดับตามปีใช้ร่วมกับ ranking_profile="semantic" ไม่ได้ — เซิร์ฟเวอร์จะเพิกเฉยต่อการเรียงลำดับโดยไม่แจ้งให้ทราบ — ดังนั้น MCP จึงปฏิเสธชุดค่าผสมดังกล่าว สำหรับคำค้นหาที่ต้องการผลลัพธ์ใหม่และเกี่ยวข้อง ให้คงการจัดอันดับเชิงความหมายไว้ แล้วจำกัดความใหม่ด้วย date_from/date_to แทน

ตัวแปรสภาพแวดล้อม

  • LACUNA_SITE_URL ค่าเริ่มต้นคือ https://lacuna.tiptreesystems.com
  • LACUNA_MCP_TIMEOUT ค่าเริ่มต้นคือ 30
  • LACUNA_MCP_MAX_RETRIES ค่าเริ่มต้นคือ 2; ใช้กับ timeout ข้อผิดพลาดด้าน transport และการตอบกลับ HTTP 429, 502, 503 และ 504
  • LACUNA_MCP_USER_AGENT ค่าเริ่มต้นคือ lacuna-research-mcp/{package_version}
  • LACUNA_MCP_BEARER_TOKEN bearer token ที่ไม่บังคับ ส่งเป็น Authorization: Bearer ... สำหรับการติดตั้งใช้งาน Lacuna แบบส่วนตัว
  • LACUNA_MCP_CLIENT_TOKEN token ที่ไม่บังคับ ส่งเป็น X-Lacuna-Client-Token เพื่อระบุเซิร์ฟเวอร์ MCP ที่โฮสต์ให้ Lacuna ทราบ สำหรับการจำกัดอัตราการค้นหาของ Lacuna เอง
  • LACUNA_MCP_LOG_LEVEL ค่าเริ่มต้นคือ WARNING (หนึ่งใน DEBUG, INFO, WARNING, ERROR, CRITICAL) ค่าเริ่มต้นช่วยให้การทำงานปกติเงียบไว้ ลดระดับนี้เฉพาะเมื่อต้องการดีบัก เนื่องจาก INFO/DEBUG ทำให้ HTTP client บันทึก URL คำขอทั้งหมด — รวมถึง query string ของคำค้นหา — ลงใน stderr ซึ่ง MCP host บางแห่งเก็บรักษาไว้

ตัวแปรสภาพแวดล้อมจะถูกอ่านครั้งเดียวเมื่อสร้างเซิร์ฟเวอร์ MCP หรือเมื่อเรียกใช้เครื่องมือ/API โดยตรงครั้งแรก หากนำเข้าโมดูลโดยไม่เรียก create_mcp()

โครงสร้างการติดตั้งใช้งาน

เซิร์ฟเวอร์เป็น MCP adapter แบบบางที่ทำงานครอบ HTTP API ของ Lacuna การติดตั้งใช้งานแบ่งตามหน้าที่ดังนี้:

  • lacuna_research_mcp/server.py การสร้างแอป MCPServer การลงทะเบียนเครื่องมือ การล้างข้อมูลเมื่อสิ้นสุดอายุการใช้งาน และจุดเข้าใช้งาน CLI ของ lacuna-research-mcp
  • lacuna_research_mcp/tools.py ฟังก์ชันเครื่องมือ MCP เครื่องมือแต่ละรายการจะปรับรูปแบบอินพุต เรียก endpoint ของ Lacuna API ที่ตรงกันผ่านตัวช่วย client ที่ใช้ร่วมกัน และส่งคืนข้อมูลที่เข้ากันได้กับ JSON
  • lacuna_research_mcp/client.py การเข้าถึง HTTP ของ Lacuna ขณะทำงาน: httpx.AsyncClient ที่ผูกกับ event loop การจัดการการลองใหม่ การห่อหุ้มข้อผิดพลาด การแยกวิเคราะห์ JSON การปรับ URL ในการตอบกลับให้เป็นมาตรฐาน และ api_get/api_object/api_payload
  • lacuna_research_mcp/config.py ค่าคงที่ขณะทำงาน RuntimeConfig การสร้าง user-agent ของแพ็กเกจ และการแยกวิเคราะห์สภาพแวดล้อม
  • lacuna_research_mcp/ids.py ตัวช่วยที่รับได้ทั้ง id ดิบหรือ URL หน้า Lacuna และดึงส่วนเส้นทาง API ที่ปลอดภัย
  • lacuna_research_mcp/normalize.py การประมวลผลคำตอบภายหลังสำหรับ URL สัมพัทธ์ของ Lacuna และลิงก์ Markdown
  • lacuna_research_mcp/errors.py ประเภทข้อยกเว้นที่แสดงต่อผู้ใช้สำหรับความล้มเหลวในการเข้าถึง Lacuna API

หมายเหตุ

  • get_paper และ get_direction มีค่าเริ่มต้นเป็น view="context" มุมมองบริบทเหล่านี้จะขอเพย์โหลดขนาดกะทัดรัดที่ออกแบบมาสำหรับเอเจนต์ของ Lacuna เป็นค่าเริ่มต้น เพื่อให้การตอบกลับจาก MCP มีขนาดเล็ก บริบทของบทความประกอบด้วย summary_markdown เมื่อมีข้อมูล (มิฉะนั้นจะใช้ abstract) ผู้เขียน และรูปภาพประกอบ ส่วนบริบทของทิศทางการวิจัยประกอบด้วย summary_markdown บทความ/ผู้เขียน/ทิศทางที่เกี่ยวข้องโดยจำกัดจำนวน และเครื่องหมายระบุการตัดทอน ใช้ view="full" เมื่อต้องการข้อมูลเมตาดิบ และใช้มุมมองบทความอื่นๆ (preview, blog, figures, concepts, neighbors) เมื่อต้องการทรัพยากรย่อยแยกเป็นรายการ
  • การค้นหาบทความที่จัดเรียงตามความเกี่ยวข้องอย่างชัดเจนโดยไม่มี fields ที่กำหนดเอง จะใช้ตัวจัดอันดับเชิงคำศัพท์และเชิงความหมายสำหรับระบบใช้งานจริงของเซิร์ฟเวอร์เป็นค่าเริ่มต้น กำหนด ranking_profile="semantic" เพื่อดึงข้อมูลโดยอิงจาก embedding (ซึ่งอาจมีการจัดลำดับทับด้วยชื่อเรื่องที่ตรงกันทุกประการ) หรือกำหนด "bm25_title_abstract" เพื่อจับคู่เชิงคำศัพท์จากชื่อเรื่องและบทคัดย่อ
  • เครื่องมือดูรายละเอียดส่วนใหญ่ยอมรับทั้ง ID ที่ได้จากการค้นหาและ URL ของ Lacuna ที่เกี่ยวข้อง
  • URL ของ Lacuna แบบสัมพัทธ์ในฟิลด์การตอบกลับ url/*_url และฟิลด์ที่ชื่อ summary_markdown, article_markdown, markdown, content หรือ description จะถูกแปลงเป็น URL แบบสัมบูรณ์
  • คีย์ของสถานที่จัดงานและสถาบันเป็นแฮชที่ไม่มีความหมายในตัวเอง (เช่น d7bf22905bd6) ไม่ใช่ชื่อที่มนุษย์อ่านเข้าใจได้อย่าง icml ค้นหาคีย์ด้วย search_lacuna(search_type="venue") ก่อน หรือส่ง URL ของหน้า /venue/...

การอ้างอิง

หากเห็นว่างานของเรามีประโยชน์ สามารถอ้างอิงบทความที่อยู่เบื้องหลังการสร้างข้อเสนอการวิจัยและแผนที่การวิจัยของ Lacuna ได้

การสร้างข้อเสนอการวิจัย — The Alien Space of Science

@inproceedings{artiles2026alien,
  title     = {The Alien Space of Science: Sampling Coherent but Cognitively Unavailable Research Directions},
  author    = {Artiles, Alejandro H. and Weiss, Martin and Brinkmann, Levin and Rahwan, Iyad and Sch{\"o}lkopf, Bernhard and Pal, Christopher and Larochelle, Hugo and Goyal, Anirudh and Rahaman, Nasim},
  booktitle = {Advances in Neural Information Processing Systems},
  year      = {2026},
  eprint    = {2603.01092},
  archivePrefix = {arXiv},
  url       = {https://arxiv.org/abs/2603.01092}
}

แผนที่การวิจัย — Lacuna

@misc{weiss2026lacunaresearchmapmachine,
  title         = {Lacuna: A Research Map for Machine Learning},
  author        = {Martin Weiss and Miles Q. Li and Alejandro H. Artiles and Yacine Mkhinini and Chris Pal and Hugo Larochelle and Nasim Rahaman},
  year          = {2026},
  eprint        = {2606.26246},
  archivePrefix = {arXiv},
  primaryClass  = {cs.DL},
  url           = {https://arxiv.org/abs/2606.26246}
}

ใบอนุญาต

MIT ดู LICENSE.