academia-mcp 1.6.0__py3-none-any.whl → 1.6.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -529,6 +529,10 @@ IMPORTANT, please:
529
529
  Description: \justificationTODO{}
530
530
  \end{enumerate}
531
531
 
532
+ \bibliographystyle{plainnat}
533
+ \bibliography{references}
534
+ % Store references.bib in the same directory as the main tex file.
535
+
532
536
  \newpage
533
537
 
534
538
  \section*{Agents4Science Paper Checklist}
academia_mcp/server.py CHANGED
@@ -25,7 +25,7 @@ from .tools.bitflip import (
25
25
  generate_research_proposal,
26
26
  score_research_proposals,
27
27
  )
28
- from .tools.review import review_pdf
28
+ from .tools.review import review_pdf_paper, download_pdf_paper
29
29
 
30
30
 
31
31
  load_dotenv()
@@ -69,6 +69,7 @@ def run(
69
69
  server.add_tool(get_latex_template)
70
70
  server.add_tool(get_latex_templates_list)
71
71
  server.add_tool(visit_webpage)
72
+ server.add_tool(download_pdf_paper)
72
73
 
73
74
  if not disable_web_search_tools:
74
75
  if os.getenv("TAVILY_API_KEY"):
@@ -85,7 +86,7 @@ def run(
85
86
  server.add_tool(generate_research_proposal)
86
87
  server.add_tool(score_research_proposals)
87
88
  server.add_tool(document_qa)
88
- server.add_tool(review_pdf)
89
+ server.add_tool(review_pdf_paper)
89
90
 
90
91
  if port is None:
91
92
  port = int(os.environ.get("PORT", -1))
@@ -13,7 +13,7 @@ from .latex import (
13
13
  from .web_search import web_search, tavily_web_search, exa_web_search, brave_web_search
14
14
  from .visit_webpage import visit_webpage
15
15
  from .bitflip import extract_bitflip_info, generate_research_proposal, score_research_proposals
16
- from .review import review_pdf
16
+ from .review import review_pdf_paper, download_pdf_paper
17
17
 
18
18
  __all__ = [
19
19
  "arxiv_search",
@@ -35,5 +35,6 @@ __all__ = [
35
35
  "extract_bitflip_info",
36
36
  "generate_research_proposal",
37
37
  "score_research_proposals",
38
- "review_pdf",
38
+ "review_pdf_paper",
39
+ "download_pdf_paper",
39
40
  ]
@@ -1,10 +1,11 @@
1
1
  import base64
2
2
  import os
3
+ import uuid
3
4
  from io import BytesIO
4
5
  from pathlib import Path
5
6
  from typing import List, Dict, Any
6
7
 
7
- from academia_mcp.pdf import parse_pdf_file_to_images, parse_pdf_file
8
+ from academia_mcp.pdf import parse_pdf_file_to_images, parse_pdf_file, download_pdf
8
9
  from academia_mcp.llm import llm_acall, ChatMessage
9
10
  from academia_mcp.files import get_workspace_dir
10
11
 
@@ -14,7 +15,6 @@ You are an expert peer reviewer for top CS/ML venues (e.g., NeurIPS/ICML/ACL).
14
15
  Your goal is to produce a fair, rigorous, and reproducible review that is maximally useful to authors and area chairs.
15
16
  Be specific: cite paper sections/figures/tables when criticizing or praising.
16
17
  Use actionable language ("Provide variance across 5 seeds on Dataset X; add leakage control Y").
17
- Try to be as harsh as possible, but still be fair and constructive.
18
18
 
19
19
  # Summary
20
20
  Briefly summarize the paper and its contributions.
@@ -54,25 +54,27 @@ As the questions above indicates, originality does not necessarily require intro
54
54
  Rather, a work that provides novel insights by evaluating existing methods, or demonstrates improved efficiency, fairness, etc. is also equally valuable.
55
55
 
56
56
  # Scores
57
- Quality: Based on what you discussed in “Strengths and Weaknesses”, please assign the paper a numerical rating on the following scale to indicate the quality of the work.
57
+ Try to be specific and detailed in your assessment. Try not to set the same score for all the dimensions.
58
+
59
+ Quality: Based on what you discussed in the “Quality” section, please assign the paper a numerical rating on the following scale to indicate the quality of the work.
58
60
  4 = excellent
59
61
  3 = good
60
62
  2 = fair
61
63
  1 = poor
62
64
 
63
- Clarity: Based on what you discussed in “Strengths and Weaknesses”, please assign the paper a numerical rating on the following scale to indicate the clarity of the paper.
65
+ Clarity: Based on what you discussed in the Clarity” section, please assign the paper a numerical rating on the following scale to indicate the clarity of the paper.
64
66
  4 = excellent
65
67
  3 = good
66
68
  2 = fair
67
69
  1 = poor
68
70
 
69
- Significance: Based on what you discussed in “Strengths and Weaknesses”, please assign the paper a numerical rating on the following scale to indicate the significance of the paper.
71
+ Significance: Based on what you discussed in the Significance” section, please assign the paper a numerical rating on the following scale to indicate the significance of the paper.
70
72
  4 = excellent
71
73
  3 = good
72
74
  2 = fair
73
75
  1 = poor
74
76
 
75
- Originality: Based on what you discussed in “Strengths and Weaknesses”, please assign the paper a numerical rating on the following scale to indicate the originality of the paper.
77
+ Originality: Based on what you discussed in the Originality” section, please assign the paper a numerical rating on the following scale to indicate the originality of the paper.
76
78
  4 = excellent
77
79
  3 = good
78
80
  2 = fair
@@ -117,15 +119,13 @@ Return the result as a JSON object in the following format:
117
119
  "summary": "Summary of the paper",
118
120
  "strengths_and_weaknesses": {
119
121
  "quality": "Quality-related strengths and weaknesses",
122
+ "quality_score": ...,
120
123
  "clarity": "Clarity-related strengths and weaknesses",
124
+ "clarity_score": ...,
121
125
  "significance": "Significance-related strengths and weaknesses",
126
+ "significance_score": ...,
122
127
  "originality": "Originality-related strengths and weaknesses",
123
- },
124
- "scores": {
125
- "quality": ...,
126
- "clarity": ...,
127
- "significance": ...,
128
- "originality": ...,
128
+ "originality_score": ...,
129
129
  },
130
130
  "questions": "Questions and suggestions for the authors",
131
131
  "limitations": "Limitations of the paper",
@@ -136,12 +136,33 @@ Return the result as a JSON object in the following format:
136
136
  """
137
137
 
138
138
 
139
- async def review_pdf(pdf_filename: str) -> str:
139
+ def download_pdf_paper(pdf_url: str) -> str:
140
+ """
141
+ Download a pdf file from a url to the workspace directory.
142
+
143
+ Returns the path to the downloaded pdf file.
144
+
145
+ Args:
146
+ pdf_url: The url of the pdf file.
147
+ """
148
+ if "arxiv.org/pdf" in pdf_url:
149
+ pdf_filename = pdf_url.split("/")[-1]
150
+ else:
151
+ pdf_filename = str(uuid.uuid4())
152
+ if not pdf_filename.endswith(".pdf"):
153
+ pdf_filename += ".pdf"
154
+
155
+ pdf_path = Path(get_workspace_dir()) / pdf_filename
156
+ download_pdf(pdf_url, pdf_path)
157
+ return pdf_filename
158
+
159
+
160
+ async def review_pdf_paper(pdf_filename: str) -> str:
140
161
  """
141
- Review a pdf file.
162
+ Review a pdf file with a paper.
142
163
  It parses the pdf file into images and then sends the images to the LLM for review.
143
164
  It can detect different issues with the paper formatting.
144
- It also returns a proper NeurIPS-stylereview.
165
+ Returns a proper NeurIPS-style review.
145
166
 
146
167
  Args:
147
168
  pdf_filename: The path to the pdf file.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: academia-mcp
3
- Version: 1.6.0
3
+ Version: 1.6.2
4
4
  Summary: MCP server that provides different tools to search for scientific publications
5
5
  Author-email: Ilya Gusev <phoenixilya@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/IlyaGusev/academia_mcp
@@ -4,11 +4,11 @@ academia_mcp/files.py,sha256=tvt3OPr5q6pAPCZ0XvRHHL9ZWuTXINRZvqjeRFmx5YE,815
4
4
  academia_mcp/llm.py,sha256=jh-_H3_gNyRsvpFqFx-yWVhGznnXxehFP79inUy4vVQ,995
5
5
  academia_mcp/pdf.py,sha256=9PlXzHGhb6ay3ldbTdxCcTWvH4TkET3bnb64mgoh9i0,1273
6
6
  academia_mcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- academia_mcp/server.py,sha256=nhOefU4cCwh9EhKlQfMpF0HA1PIMrL04Lt8HtAy4zS0,3121
7
+ academia_mcp/server.py,sha256=MDHWgIIWz99XhTvpoYCouwixjvS6a0BMajcZkW5MpiY,3193
8
8
  academia_mcp/utils.py,sha256=P9U3RjYzcztE0KxXvJSy5wSBaUg2CM9tpByljYrsrl4,4607
9
9
  academia_mcp/latex_templates/agents4science_2025/agents4science_2025.sty,sha256=hGcEPCYBJS4vdhWvN_yEaJC4GvT_yDroI94CfY2Oguk,12268
10
- academia_mcp/latex_templates/agents4science_2025/agents4science_2025.tex,sha256=VxuE1Va7_QtZ87P1iUm8-JOW1e_9tdbSSvhH_hz7Ras,33801
11
- academia_mcp/tools/__init__.py,sha256=vMTCaRVf5DMacq-EmBWdV3msUS6gf-XWnuz7fwRef-U,1185
10
+ academia_mcp/latex_templates/agents4science_2025/agents4science_2025.tex,sha256=k_nOyPv-OxGbFtKSou6nV6l413EfWvozE6zIx04s8iU,33924
11
+ academia_mcp/tools/__init__.py,sha256=N3GLWvrsDBOlAcCRZUUZ6nkR5AkLvX0k26cNJt3hLKM,1243
12
12
  academia_mcp/tools/anthology_search.py,sha256=rhFpJZqGLABgr0raDuH0CARBiAJNJtEI4dlMrKNHfDQ,7669
13
13
  academia_mcp/tools/arxiv_download.py,sha256=gBY0_Kz0yGtVkLMwn6GrAyfBjovZVgcSMuyy67p65Cw,10474
14
14
  academia_mcp/tools/arxiv_search.py,sha256=pzM18qrF3QL03A53w003kE7hQi3s3QKtjgw0m7K88UY,8355
@@ -17,13 +17,13 @@ academia_mcp/tools/document_qa.py,sha256=t9mygYQ7AFIAPiha1nZ-y043luQlkTCBdWb_SDn
17
17
  academia_mcp/tools/hf_datasets_search.py,sha256=KiBkqT4rXjEN4oc1AWZOPnqN_Go90TQogY5-DUm3LQo,2854
18
18
  academia_mcp/tools/latex.py,sha256=bf8VZUgCByzBAMTZCeqrRrmakotext3d3DbtkiOTh1k,5892
19
19
  academia_mcp/tools/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- academia_mcp/tools/review.py,sha256=I0f1Mu6ghjfx-E0fXxCMvF3SjT8RaLJPTRI0YIzYPm0,9579
20
+ academia_mcp/tools/review.py,sha256=gZH2PNjb_KkVT2bi36wO9cBUH3SpNIoQPhUCSBHGgms,10197
21
21
  academia_mcp/tools/s2_citations.py,sha256=dqrBp76RrX1zH2XzcMAoWBbvbtyhxLeF-xnqOKD_JiM,4852
22
22
  academia_mcp/tools/visit_webpage.py,sha256=OZdqDkVPIbANyFw5o5jIjU5Rr_dolxrGDs63Ud-GmRM,1966
23
23
  academia_mcp/tools/web_search.py,sha256=mobKm4iqKppn8pduZYMzWRo1MQBjkAqmMtrFLI5XY2Y,6296
24
- academia_mcp-1.6.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
25
- academia_mcp-1.6.0.dist-info/METADATA,sha256=TN907qKcT_KntyMNmK0an5QrL8Wuluo4qx9CjxGC9eY,3714
26
- academia_mcp-1.6.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
- academia_mcp-1.6.0.dist-info/entry_points.txt,sha256=gxkiKJ74w2FwJpSECpjA3XtCfI5ZfrM6N8cqnwsq4yY,51
28
- academia_mcp-1.6.0.dist-info/top_level.txt,sha256=CzGpRFsRRJRqWEb1e3SUlcfGqRzOxevZGaJWrtGF8W0,13
29
- academia_mcp-1.6.0.dist-info/RECORD,,
24
+ academia_mcp-1.6.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
25
+ academia_mcp-1.6.2.dist-info/METADATA,sha256=ZwYVEe9pxMqw6H5UkJfY6rfD59zd9dk8xjZe5pObp7o,3714
26
+ academia_mcp-1.6.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
+ academia_mcp-1.6.2.dist-info/entry_points.txt,sha256=gxkiKJ74w2FwJpSECpjA3XtCfI5ZfrM6N8cqnwsq4yY,51
28
+ academia_mcp-1.6.2.dist-info/top_level.txt,sha256=CzGpRFsRRJRqWEb1e3SUlcfGqRzOxevZGaJWrtGF8W0,13
29
+ academia_mcp-1.6.2.dist-info/RECORD,,