Skip to main content
Glama

message_reviewer

Send private messages to specific reviewers about paper submissions, with preview capability before final confirmation.

Instructions

Send a private message to a specific reviewer. Visible to the reviewer, ACs, SACs, and PCs.

Returns a preview — call confirm_submission to actually send it.

Args: venue_id: The venue identifier. submission_number: The paper number. reviewer_id: The reviewer's anonymous ID (e.g., 'Reviewer_ABCD'). subject: Message subject line. message_text: Message body.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
venue_idYes
submission_numberYes
reviewer_idYes
subjectYes
message_textYes

Implementation Reference

  • The message_reviewer tool handler is defined here. It constructs a message payload for a specific reviewer on an OpenReview submission and adds it to the pending store for confirmation.
    async def message_reviewer(
        venue_id: str,
        submission_number: int,
        reviewer_id: str,
        subject: str,
        message_text: str,
    ) -> str:
        """Send a private message to a specific reviewer. Visible to the reviewer, ACs, SACs, and PCs.
    
        Returns a preview — call confirm_submission to actually send it.
    
        Args:
            venue_id: The venue identifier.
            submission_number: The paper number.
            reviewer_id: The reviewer's anonymous ID (e.g., 'Reviewer_ABCD').
            subject: Message subject line.
            message_text: Message body.
        """
        client = get_client()
        profile_id = client.profile.id
    
        ac_groups = client.get_groups(
            prefix=f"{venue_id}/Submission{submission_number}/Area_Chair_",
            signatory=profile_id,
        )
        if not ac_groups:
            return f"Could not find your AC group for Submission #{submission_number}."
    
        ac_anon_id = ac_groups[0].id
        reviewer_group = f"{venue_id}/Submission{submission_number}/{reviewer_id}"
    
        readers = [
            f"{venue_id}/Program_Chairs",
            f"{venue_id}/Submission{submission_number}/Senior_Area_Chairs",
            f"{venue_id}/Submission{submission_number}/Area_Chairs",
            reviewer_group,
        ]
    
        # Resolve the submission to get forum/replyto eagerly
        note = _resolve_submission(client, venue_id, submission_number=submission_number)
        note_forum = note.id if note else None
        note_replyto = note.id if note else None
    
        payload = {
            "invitation": f"{venue_id}/Submission{submission_number}/-/Official_Comment",
            "signatures": [ac_anon_id],
            "note_forum": note_forum,
            "note_replyto": note_replyto,
            "readers": readers,
            "content": {
                "title": {"value": subject},
                "comment": {"value": message_text},
            },
        }
        readers_display = "\n".join(f"  - {r}" for r in readers)
        preview = "\n".join([
            f"## Message to {reviewer_id} (Submission #{submission_number})",
            f"**From:** {ac_anon_id}",
            f"**Subject:** {subject}",
            f"**Visible to:**\n{readers_display}",
            f"\n{message_text}",
        ])
        confirmation_id = pending_store.add(action="message_reviewer", payload=payload, preview=preview)
        return f"{preview}\n\n---\n**Confirmation ID:** `{confirmation_id}`\n\nCall `confirm_submission` with this ID to send the message."

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/michaelqshieh/openreview-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server