edit_review
Update an existing review for a conference paper submission. Modify text, rating, confidence, and other review elements, then preview changes before final submission.
Instructions
Edit your existing review. Returns a preview — call confirm_submission to actually post the edit.
Args: venue_id: The venue identifier. submission_number: The paper number. review_text: Updated review text. rating: Updated rating. confidence: Updated confidence. title: Updated title. strengths: Updated strengths. weaknesses: Updated weaknesses. questions: Updated questions.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| venue_id | Yes | ||
| submission_number | Yes | ||
| review_text | No | ||
| rating | No | ||
| confidence | No | ||
| title | No | ||
| strengths | No | ||
| weaknesses | No | ||
| questions | No |
Implementation Reference
- The `edit_review` function handles the logic of updating a review in OpenReview. It fetches the existing review, prepares the updated content, and stores a pending edit operation.
async def edit_review( venue_id: str, submission_number: int, review_text: str | None = None, rating: int | None = None, confidence: int | None = None, title: str | None = None, strengths: str | None = None, weaknesses: str | None = None, questions: str | None = None, ) -> str: """Edit your existing review. Returns a preview — call confirm_submission to actually post the edit. Args: venue_id: The venue identifier. submission_number: The paper number. review_text: Updated review text. rating: Updated rating. confidence: Updated confidence. title: Updated title. strengths: Updated strengths. weaknesses: Updated weaknesses. questions: Updated questions. """ client = get_client() profile_id = client.profile.id anon_groups = client.get_groups( prefix=f"{venue_id}/Submission{submission_number}/Reviewer_", signatory=profile_id, ) if not anon_groups: return f"Could not find your anonymous reviewer group for Submission #{submission_number}." anon_id = anon_groups[0].id existing_reviews = client.get_all_notes( invitation=f"{venue_id}/Submission{submission_number}/-/Official_Review", signature=anon_id, ) if not existing_reviews: return f"No existing review found for Submission #{submission_number} by you." existing = existing_reviews[0] content = dict(existing.content) if title is not None: content["title"] = {"value": title} if review_text is not None: content["review"] = {"value": review_text} if rating is not None: content["rating"] = {"value": rating} if confidence is not None: content["confidence"] = {"value": confidence} if strengths is not None: content["strengths"] = {"value": strengths} if weaknesses is not None: content["weaknesses"] = {"value": weaknesses} if questions is not None: content["questions"] = {"value": questions} payload = { "invitation": f"{venue_id}/Submission{submission_number}/-/Official_Review", "signatures": [anon_id], "note_id": existing.id, "content": content, } preview_lines = [ f"## Edited Review Preview for Submission #{submission_number}", f"**Editing note:** {existing.id}", f"**Rating:** {content.get('rating', {}).get('value', 'N/A')}", f"**Confidence:** {content.get('confidence', {}).get('value', 'N/A')}", ] review_val = content.get("review", {}).get("value", "") if review_val: preview_lines.append(f"\n{review_val}") preview = "\n".join(preview_lines) confirmation_id = pending_store.add(action="edit_review", payload=payload, preview=preview) return f"{preview}\n\n---\n**Confirmation ID:** `{confirmation_id}`\n\nCall `confirm_submission` with this ID to update the review." - src/openreview_mcp/tools/reviews.py:195-195 (registration)The `edit_review` function is decorated with `@mcp.tool()` which registers it as an MCP tool. Although the decorator is applied to the function definition, in this file the registration happens implicitly via the function definition.
async def edit_review(