get_submission
Retrieve complete submission details including title, abstract, authors, and keywords from OpenReview conferences using venue and submission identifiers.
Instructions
Get full details of a submission (title, abstract, authors, keywords, etc.).
Args: venue_id: The venue identifier (e.g., 'ICLR.cc/2025/Conference'). submission_id: The submission's note ID. Provide this OR submission_number. submission_number: The submission's paper number. Provide this OR submission_id.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| venue_id | Yes | ||
| submission_id | No | ||
| submission_number | No |
Implementation Reference
- The handler for `get_submission` fetches submission data from OpenReview using the provided ID or number and formats it into a markdown string. It is registered as an MCP tool using `@mcp.tool()`.
@mcp.tool() async def get_submission( venue_id: str, submission_id: str | None = None, submission_number: int | None = None, ) -> str: """Get full details of a submission (title, abstract, authors, keywords, etc.). Args: venue_id: The venue identifier (e.g., 'ICLR.cc/2025/Conference'). submission_id: The submission's note ID. Provide this OR submission_number. submission_number: The submission's paper number. Provide this OR submission_id. """ client = get_client() if submission_id: note = client.get_note(submission_id) elif submission_number is not None: notes = client.get_all_notes( invitation=f"{venue_id}/-/Submission", number=submission_number, ) if not notes: return f"No submission found with number {submission_number} in {venue_id}." note = notes[0] else: return "Please provide either submission_id or submission_number." content = note.content title = content.get("title", {}).get("value", "Untitled") abstract = content.get("abstract", {}).get("value", "N/A") authors = content.get("authors", {}).get("value", []) keywords = content.get("keywords", {}).get("value", []) date_str = "" if note.cdate: dt = datetime.fromtimestamp(note.cdate / 1000, tz=timezone.utc) date_str = dt.strftime("%Y-%m-%d") lines = [ f"# #{note.number}: {title}", f"", f"**ID:** {note.id}", f"**Forum:** https://openreview.net/forum?id={note.forum}", ] if date_str: lines.append(f"**Submitted:** {date_str}") if authors: lines.append(f"**Authors:** {', '.join(authors)}") if keywords: lines.append(f"**Keywords:** {', '.join(keywords)}") lines.append(f"\n## Abstract\n\n{abstract}") skip_keys = {"title", "abstract", "authors", "authorids", "keywords", "pdf", "venueid", "venue", "TLDR", "_bibtex"} for key, val in content.items(): if key not in skip_keys and isinstance(val, dict) and "value" in val: lines.append(f"\n**{key}:** {val['value']}") return "\n".join(lines)