Publish.fun

AI-native research journal: submit papers for AI peer review, track decisions, revise, and cite.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
85%
Naming quality
97%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,520Tokens (tool definitions)
~1.4 KBTypical response size
Moderate attention impact (1.19% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mcp": {
      "url": "https://publish.fun/api/mcp"
    }
  }
}

Remote endpoints

https://publish.fun/api/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_submission_guidelines

Get the requirements and JSON schema for submitting a paper to Publish.fun, and how to obtain an API key + verify ORCID. With Authorization: Bearer <api_key> on the request it also returns the account's current submission_allowance (how many submissions are left this hour and today, and when the next slot opens).

Input Schema

{
  "type": "object",
  "properties": {}
}
🟡submit_paper(title, authors, abstract, content, keywords, ...)

Submit a research paper for AI peer review. Requires Authorization: Bearer <api_key> on the request and a verified ORCID iD on the account.

Input Schema

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string"
    },
    "authors": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "affiliation": {
            "type": "string"
          },
          "orcid": {
            "type": "string"
          }
        }
      }
    },
    "abstract": {
      "type": "string"
    },
    "content": {
      "type": "string",
      "minLength": 200,
      "maxLength": 150000,
      "description": "Paper body in GitHub-Flavored Markdown ($...$ math, GFM tables, ![cap](url) figures)."
    },
    "keywords": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 100
      },
      "maxItems": 20
    },
    "license": {
      "type": "string",
      "enum": [
        "CC-BY-4.0",
        "CC0-1.0"
      ],
      "description": "Open license for the published article; CC-BY-4.0 (default) or CC0-1.0. Authors retain copyright."
    },
    "coauthorsConfirmed": {
      "type": "boolean",
      "description": "Required true when there is more than one author: confirms every listed co-author consented to this submission and to publication."
    }
  },
  "required": [
    "title",
    "authors",
    "abstract",
    "content"
  ]
}
🟢get_paper_status(id)

Get the review status of a paper you submitted (decisions with their editorial_notes, reviews, current round, and versions: each round's manuscript with the title, abstract and keywords in force for it), plus your account's submission_allowance. Requires Authorization: Bearer <api_key>.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The internal id returned at submission (p_…) or, once published, the PF- permanent id."
    }
  },
  "required": [
    "id"
  ]
}
🟡submit_revision(id, content, response_letter, title, abstract, ...)

Submit a revised manuscript for a paper whose status is revision_requested — address the decision's summary_to_authors and key_concerns from get_paper_status, concern by concern in response_letter (see its description). The paper re-enters review as the next round: after a major-revision request the same panel checks each listed concern against the revised manuscript, reusing its earlier web evidence unless it cites a DOI or arXiv id that version did not, or more than 30% of its paragraphs are new or changed since the version that evidence was gathered on, and the editor accepts once every concern is addressed unless a new correctness, validity, novelty or reproducibility issue is documented with evidence; a round after a minor-revision request is checked by the editor alone (see get_submission_guidelines for the revision policy). Requires Authorization: Bearer <api_key>.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The paper's internal id (p_…) or PF- permanent id."
    },
    "content": {
      "type": "string",
      "minLength": 200,
      "maxLength": 150000,
      "description": "The FULL revised paper body in GitHub-Flavored Markdown (200–150,000 chars)."
    },
    "response_letter": {
      "type": "string",
      "description": "Response to the reviewers (20+ chars). Structure the response letter by concern: for each concern in the decision's key_concerns, quote it, then say what changed and where (the section of the revised manuscript), or explain why it was not changed. Reviewers verify each concern against the revised manuscript, not the letter alone."
    },
    "title": {
      "type": "string",
      "minLength": 3,
      "maxLength": 300,
      "description": "Optional: replaces the paper's title. Omit to keep it."
    },
    "abstract": {
      "type": "string",
      "minLength": 50,
      "maxLength": 3000,
      "description": "Optional: replaces the abstract. Revise it when the claims or method changed — reviewers read the abstract you leave in place. Omit to keep it."
    },
    "keywords": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 100
      },
      "maxItems": 20,
      "description": "Optional: replaces the keywords. Omit to keep them."
    }
  },
  "required": [
    "id",
    "content",
    "response_letter"
  ],
  "additionalProperties": false
}
🟡upload_image(data, filename)

Upload a figure image (PNG, JPEG, GIF or WebP) for a manuscript and get a permanent public URL to reference as ![caption](url) in submit_paper / submit_revision content. An uploaded image is public as soon as it is uploaded: anyone with the link can open it, before any review and whether or not the paper is ever accepted, so upload only images that may be made public. Copies of images referenced at other hosts or embedded inline are public in the same way once the paper enters review. The image is re-encoded (metadata stripped; GIF/WebP stored as PNG; at most 10 MB and 25 megapixels; 60 uploads/hour). NOTE: this JSON-RPC endpoint accepts bodies up to 4 MB, so base64 images are capped at roughly 3 MB here — for larger files POST multipart/form-data to /api/uploads/images (GET it for the schema). Images become permanent once a submitted manuscript references them; unreferenced uploads are removed after 7 days. Requires Authorization: Bearer <api_key> and a verified ORCID iD.

Input Schema

{
  "type": "object",
  "properties": {
    "data": {
      "type": "string",
      "description": "The image bytes as base64 — bare, or a data: URL (data:image/png;base64,...). The format is detected from the bytes."
    },
    "filename": {
      "type": "string",
      "maxLength": 255,
      "description": "Optional; only used to suggest a caption in the returned markdown."
    }
  },
  "required": [
    "data"
  ]
}
🟢cite_paper(permanent_id, format)

Get a citation for a published paper (no auth). Returns BibTeX/RIS/CSL/text.

Input Schema

{
  "type": "object",
  "properties": {
    "permanent_id": {
      "type": "string",
      "description": "e.g. PF-260626.000001"
    },
    "format": {
      "type": "string",
      "enum": [
        "bibtex",
        "ris",
        "csl",
        "text",
        "all"
      ]
    }
  },
  "required": [
    "permanent_id"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools