all-in-mcp 0.2.5__tar.gz → 0.2.7__tar.gz

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.
Files changed (23) hide show
  1. all_in_mcp-0.2.7/PKG-INFO +129 -0
  2. all_in_mcp-0.2.7/README.md +84 -0
  3. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/pyproject.toml +1 -1
  4. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/src/all_in_mcp/academic_platforms/crossref.py +4 -76
  5. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/src/all_in_mcp/academic_platforms/iacr.py +13 -2
  6. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/src/all_in_mcp/server.py +30 -89
  7. all_in_mcp-0.2.5/PKG-INFO +0 -226
  8. all_in_mcp-0.2.5/README.md +0 -181
  9. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/.gitignore +0 -0
  10. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/LICENSE +0 -0
  11. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/docs/api.md +0 -0
  12. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/docs/configuration.md +0 -0
  13. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/docs/cryptobib.md +0 -0
  14. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/docs/development.md +0 -0
  15. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/docs/google_scholar.md +0 -0
  16. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/docs/iacr.md +0 -0
  17. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/docs/pypi-setup.md +0 -0
  18. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/src/all_in_mcp/__init__.py +0 -0
  19. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/src/all_in_mcp/academic_platforms/__init__.py +0 -0
  20. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/src/all_in_mcp/academic_platforms/base.py +0 -0
  21. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/src/all_in_mcp/academic_platforms/cryptobib.py +0 -0
  22. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/src/all_in_mcp/academic_platforms/google_scholar.py +0 -0
  23. {all_in_mcp-0.2.5 → all_in_mcp-0.2.7}/src/all_in_mcp/paper.py +0 -0
@@ -0,0 +1,129 @@
1
+ Metadata-Version: 2.4
2
+ Name: all-in-mcp
3
+ Version: 0.2.7
4
+ Summary: An MCP (Model Context Protocol) server providing daily-use utility functions and academic paper search capabilities
5
+ Project-URL: Homepage, https://github.com/jiahaoxiang2000/all-in-mcp
6
+ Project-URL: Repository, https://github.com/jiahaoxiang2000/all-in-mcp
7
+ Project-URL: Documentation, https://github.com/jiahaoxiang2000/all-in-mcp/tree/main/docs
8
+ Project-URL: Issues, https://github.com/jiahaoxiang2000/all-in-mcp/issues
9
+ Author-email: isomo <jiahaoxiang2000@gmail.com>
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: academic,iacr,mcp,model-context-protocol,papers,utilities
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Topic :: Scientific/Engineering
23
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
+ Classifier: Topic :: Text Processing :: General
25
+ Requires-Python: >=3.10
26
+ Requires-Dist: beautifulsoup4>=4.12.0
27
+ Requires-Dist: feedparser>=6.0.10
28
+ Requires-Dist: httpx>=0.24.0
29
+ Requires-Dist: mcp>=1.9.4
30
+ Requires-Dist: pypdf>=4.0.0
31
+ Requires-Dist: requests>=2.31.0
32
+ Provides-Extra: all
33
+ Requires-Dist: psutil>=5.9.0; extra == 'all'
34
+ Provides-Extra: dev
35
+ Requires-Dist: build>=1.0.0; extra == 'dev'
36
+ Requires-Dist: mypy>=1.5.0; extra == 'dev'
37
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
38
+ Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
39
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
40
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
41
+ Requires-Dist: twine>=4.0.0; extra == 'dev'
42
+ Provides-Extra: system
43
+ Requires-Dist: psutil>=5.9.0; extra == 'system'
44
+ Description-Content-Type: text/markdown
45
+
46
+ # All-in-MCP
47
+
48
+ An MCP (Model Context Protocol) server that provides utility functions, including academic paper search capabilities.
49
+
50
+ - [**Paper Tools overview _Video_**](https://www.bilibili.com/video/BV1RMKWzdEk8)
51
+ - [_Overview PDF_](https://github.com/jiahaoxiang2000/tutor/blob/main/Apaper/setup.pdf)
52
+
53
+ ## Features
54
+
55
+ This MCP server exposes the following daily-use utility tools as MCP endpoints:
56
+
57
+ ### Available Tools
58
+
59
+ - **Academic Research**:
60
+ - `search-iacr-papers`: Search academic papers from IACR ePrint Archive
61
+ - `download-iacr-paper`: Download PDF of an IACR ePrint paper
62
+ - `read-iacr-paper`: Read and extract text content from an IACR ePrint paper PDF
63
+ - **Bibliography Search**:
64
+ - `search-cryptobib-papers`: Search CryptoBib bibliography database for cryptography papers (structured metadata or raw BibTeX)
65
+ - **Crossref Search**:
66
+ - `search-crossref-papers`: Search academic papers from Crossref database
67
+ - **Google Scholar**:
68
+ - `search-google-scholar-papers`: Search academic papers across disciplines with citation data
69
+ - **PDF Reading**:
70
+ - `read-pdf`: Read and extract text from local and online PDF files
71
+
72
+ All tools are implemented as async MCP endpoints with proper validation and error handling.
73
+
74
+ ## Quick Start
75
+
76
+ - [**Video for Env Setup**](https://www.bilibili.com/video/BV1cZKozaEjg)
77
+ - [_Overview PDF_](https://github.com/jiahaoxiang2000/tutor/blob/main/Apaper/config.pdf)
78
+
79
+ ### Prerequisites
80
+
81
+ - Python 3.10 or higher
82
+ - UV package manager
83
+
84
+ ### Installation
85
+
86
+ Install from PyPI (Recommended by `UV`)
87
+
88
+ ```bash
89
+ uv pip install all-in-mcp
90
+ ```
91
+
92
+ ### Integration with MCP Clients Vscode
93
+
94
+ Add this server to your MCP client configuration. The server runs using stdio transport.
95
+
96
+ Example configuration for Vscode:
97
+
98
+ ```json .vscode/mcp.json
99
+ {
100
+ "servers": {
101
+ "all-in-mcp": {
102
+ "type": "stdio",
103
+ "command": "uv",
104
+ "args": ["run", "all-in-mcp"]
105
+ }
106
+ }
107
+ }
108
+ ```
109
+
110
+ <details>
111
+ <summary>Development</summary>
112
+
113
+ For development setup and contribution guidelines, see the [Development Guide](docs/development.md).
114
+
115
+ ### Quick Development Setup
116
+
117
+ ```bash
118
+ # Clone the repository
119
+ git clone https://github.com/jiahaoxiang2000/all-in-mcp.git
120
+ cd all-in-mcp
121
+
122
+ # Install with development dependencies
123
+ uv sync --extra dev
124
+
125
+ # Run tests
126
+ uv run pytest
127
+ ```
128
+
129
+ </details>
@@ -0,0 +1,84 @@
1
+ # All-in-MCP
2
+
3
+ An MCP (Model Context Protocol) server that provides utility functions, including academic paper search capabilities.
4
+
5
+ - [**Paper Tools overview _Video_**](https://www.bilibili.com/video/BV1RMKWzdEk8)
6
+ - [_Overview PDF_](https://github.com/jiahaoxiang2000/tutor/blob/main/Apaper/setup.pdf)
7
+
8
+ ## Features
9
+
10
+ This MCP server exposes the following daily-use utility tools as MCP endpoints:
11
+
12
+ ### Available Tools
13
+
14
+ - **Academic Research**:
15
+ - `search-iacr-papers`: Search academic papers from IACR ePrint Archive
16
+ - `download-iacr-paper`: Download PDF of an IACR ePrint paper
17
+ - `read-iacr-paper`: Read and extract text content from an IACR ePrint paper PDF
18
+ - **Bibliography Search**:
19
+ - `search-cryptobib-papers`: Search CryptoBib bibliography database for cryptography papers (structured metadata or raw BibTeX)
20
+ - **Crossref Search**:
21
+ - `search-crossref-papers`: Search academic papers from Crossref database
22
+ - **Google Scholar**:
23
+ - `search-google-scholar-papers`: Search academic papers across disciplines with citation data
24
+ - **PDF Reading**:
25
+ - `read-pdf`: Read and extract text from local and online PDF files
26
+
27
+ All tools are implemented as async MCP endpoints with proper validation and error handling.
28
+
29
+ ## Quick Start
30
+
31
+ - [**Video for Env Setup**](https://www.bilibili.com/video/BV1cZKozaEjg)
32
+ - [_Overview PDF_](https://github.com/jiahaoxiang2000/tutor/blob/main/Apaper/config.pdf)
33
+
34
+ ### Prerequisites
35
+
36
+ - Python 3.10 or higher
37
+ - UV package manager
38
+
39
+ ### Installation
40
+
41
+ Install from PyPI (Recommended by `UV`)
42
+
43
+ ```bash
44
+ uv pip install all-in-mcp
45
+ ```
46
+
47
+ ### Integration with MCP Clients Vscode
48
+
49
+ Add this server to your MCP client configuration. The server runs using stdio transport.
50
+
51
+ Example configuration for Vscode:
52
+
53
+ ```json .vscode/mcp.json
54
+ {
55
+ "servers": {
56
+ "all-in-mcp": {
57
+ "type": "stdio",
58
+ "command": "uv",
59
+ "args": ["run", "all-in-mcp"]
60
+ }
61
+ }
62
+ }
63
+ ```
64
+
65
+ <details>
66
+ <summary>Development</summary>
67
+
68
+ For development setup and contribution guidelines, see the [Development Guide](docs/development.md).
69
+
70
+ ### Quick Development Setup
71
+
72
+ ```bash
73
+ # Clone the repository
74
+ git clone https://github.com/jiahaoxiang2000/all-in-mcp.git
75
+ cd all-in-mcp
76
+
77
+ # Install with development dependencies
78
+ uv sync --extra dev
79
+
80
+ # Run tests
81
+ uv run pytest
82
+ ```
83
+
84
+ </details>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "all-in-mcp"
3
- version = "0.2.5"
3
+ version = "0.2.7"
4
4
  description = "An MCP (Model Context Protocol) server providing daily-use utility functions and academic paper search capabilities"
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -224,87 +224,15 @@ class CrossrefSearcher(PaperSource):
224
224
 
225
225
  def download_pdf(self, paper_id: str, save_path: str) -> str:
226
226
  """
227
- Download PDF for a paper (limited functionality for Crossref)
228
-
229
- Note: Crossref is primarily a metadata service. PDF downloads
230
- depend on publisher policies and may not always be available.
227
+ Not implemented: Download PDF for a paper (limited functionality for Crossref)
231
228
  """
232
- if not paper_id:
233
- return "Error: paper_id is required"
234
-
235
- try:
236
- # If paper_id is a DOI, try to get work details first
237
- if not paper_id.startswith("http"):
238
- work_url = f"{self.WORKS_ENDPOINT}/{quote_plus(paper_id)}"
239
- response = self.client.get(work_url, headers=self._get_headers())
240
- response.raise_for_status()
241
-
242
- work_data = response.json()
243
- work = work_data.get("message", {})
244
-
245
- # Look for PDF link
246
- links = work.get("link", [])
247
- pdf_url = None
248
- for link in links:
249
- if link.get("content-type") == "application/pdf":
250
- pdf_url = link.get("URL")
251
- break
252
-
253
- if not pdf_url:
254
- return f"Error: No PDF link found for DOI {paper_id}. Crossref provides metadata; PDFs are hosted by publishers."
255
- else:
256
- pdf_url = paper_id
257
-
258
- # Attempt to download PDF
259
- from pathlib import Path
260
-
261
- save_path_obj = Path(save_path)
262
- save_path_obj.mkdir(parents=True, exist_ok=True)
263
-
264
- # Create filename from DOI or URL
265
- if paper_id.startswith("10."):
266
- filename = (
267
- f"crossref_{paper_id.replace('/', '_').replace('.', '_')}.pdf"
268
- )
269
- else:
270
- filename = f"crossref_paper_{hash(paper_id) % 10000}.pdf"
271
-
272
- file_path = save_path_obj / filename
273
-
274
- pdf_response = self.client.get(pdf_url, headers=self._get_headers())
275
- pdf_response.raise_for_status()
276
-
277
- with open(file_path, "wb") as f:
278
- f.write(pdf_response.content)
279
-
280
- return str(file_path)
281
-
282
- except Exception as e:
283
- return f"Error downloading PDF: {e}"
229
+ return "Crossref does not provide a direct way to download PDFs. Use the paper's URL or DOI to access the publisher's site for PDF downloads if available."
284
230
 
285
231
  def read_paper(self, paper_id: str, save_path: str) -> str:
286
232
  """
287
- Read paper text (downloads PDF first if needed)
288
-
289
- Note: Success depends on PDF availability from publishers
233
+ crossref doesn't provide a direct way to read paper text.
290
234
  """
291
- if not paper_id:
292
- return "Error: paper_id is required"
293
-
294
- try:
295
- # First try to download the PDF
296
- pdf_path = self.download_pdf(paper_id, save_path)
297
-
298
- if pdf_path.startswith("Error"):
299
- return pdf_path
300
-
301
- # Read the PDF using the existing read_pdf function
302
- from ..paper import read_pdf
303
-
304
- return read_pdf(pdf_path)
305
-
306
- except Exception as e:
307
- return f"Error reading paper: {e}"
235
+ return "Crossref does not provide a direct way to read paper text. Use the download_pdf method to get the PDF if available."
308
236
 
309
237
  def search_by_doi(self, doi: str) -> Optional[Paper]:
310
238
  """Search for a specific paper by DOI"""
@@ -141,7 +141,12 @@ class IACRSearcher(PaperSource):
141
141
  return None
142
142
 
143
143
  def search(
144
- self, query: str, max_results: int = 10, fetch_details: bool = True
144
+ self,
145
+ query: str,
146
+ max_results: int = 10,
147
+ fetch_details: bool = True,
148
+ year_min: int | None = None,
149
+ year_max: int | None = None,
145
150
  ) -> list[Paper]:
146
151
  """
147
152
  Search IACR ePrint Archive
@@ -150,6 +155,8 @@ class IACRSearcher(PaperSource):
150
155
  query: Search query string
151
156
  max_results: Maximum number of results to return
152
157
  fetch_details: Whether to fetch detailed information for each paper (slower but more complete)
158
+ year_min: Minimum publication year (revised after)
159
+ year_max: Maximum publication year (revised before)
153
160
 
154
161
  Returns:
155
162
  List[Paper]: List of paper objects
@@ -158,7 +165,11 @@ class IACRSearcher(PaperSource):
158
165
 
159
166
  try:
160
167
  # Construct search parameters
161
- params = {"q": query}
168
+ params: dict[str, str | int] = {"q": query}
169
+ if year_min:
170
+ params["revisedafter"] = year_min
171
+ if year_max:
172
+ params["revisedbefore"] = year_max
162
173
 
163
174
  # Make request
164
175
  response = self.session.get(self.IACR_SEARCH_URL, params=params)
@@ -47,6 +47,14 @@ async def handle_list_tools() -> list[types.Tool]:
47
47
  "description": "Whether to fetch detailed information for each paper (default: True)",
48
48
  "default": True,
49
49
  },
50
+ "year_min": {
51
+ "type": "integer",
52
+ "description": "Minimum publication year (revised after)",
53
+ },
54
+ "year_max": {
55
+ "type": "integer",
56
+ "description": "Maximum publication year (revised before)",
57
+ },
50
58
  },
51
59
  "required": ["query"],
52
60
  },
@@ -185,44 +193,6 @@ async def handle_list_tools() -> list[types.Tool]:
185
193
  "required": ["query"],
186
194
  },
187
195
  ),
188
- types.Tool(
189
- name="download-crossref-paper",
190
- description="Download PDF of a Crossref paper (when available from publisher)",
191
- inputSchema={
192
- "type": "object",
193
- "properties": {
194
- "paper_id": {
195
- "type": "string",
196
- "description": "DOI or URL of the paper",
197
- },
198
- "save_path": {
199
- "type": "string",
200
- "description": "Directory to save the PDF (default: './downloads')",
201
- "default": "./downloads",
202
- },
203
- },
204
- "required": ["paper_id"],
205
- },
206
- ),
207
- types.Tool(
208
- name="read-crossref-paper",
209
- description="Read and extract text content from a Crossref paper PDF",
210
- inputSchema={
211
- "type": "object",
212
- "properties": {
213
- "paper_id": {
214
- "type": "string",
215
- "description": "DOI or URL of the paper",
216
- },
217
- "save_path": {
218
- "type": "string",
219
- "description": "Directory where the PDF is/will be saved (default: './downloads')",
220
- "default": "./downloads",
221
- },
222
- },
223
- "required": ["paper_id"],
224
- },
225
- ),
226
196
  types.Tool(
227
197
  name="read-pdf",
228
198
  description="Read and extract text content from a PDF file (local or online)",
@@ -255,6 +225,8 @@ async def handle_call_tool(
255
225
  query = arguments.get("query", "")
256
226
  max_results = arguments.get("max_results", 10)
257
227
  fetch_details = arguments.get("fetch_details", True)
228
+ year_min = arguments.get("year_min")
229
+ year_max = arguments.get("year_max")
258
230
 
259
231
  if not query:
260
232
  return [
@@ -263,17 +235,34 @@ async def handle_call_tool(
263
235
  )
264
236
  ]
265
237
 
266
- papers = iacr_searcher.search(query, max_results, fetch_details)
238
+ papers = iacr_searcher.search(
239
+ query,
240
+ max_results=max_results,
241
+ fetch_details=fetch_details,
242
+ year_min=year_min,
243
+ year_max=year_max,
244
+ )
267
245
 
268
246
  if not papers:
247
+ year_filter_msg = ""
248
+ if year_min or year_max:
249
+ year_range = f" ({year_min or 'earliest'}-{year_max or 'latest'})"
250
+ year_filter_msg = f" in year range{year_range}"
269
251
  return [
270
252
  types.TextContent(
271
- type="text", text=f"No papers found for query: {query}"
253
+ type="text",
254
+ text=f"No papers found for query: {query}{year_filter_msg}",
272
255
  )
273
256
  ]
274
257
 
275
258
  # Format the results
276
- result_text = f"Found {len(papers)} IACR papers for query '{query}':\n\n"
259
+ year_filter_msg = ""
260
+ if year_min or year_max:
261
+ year_range = f" ({year_min or 'earliest'}-{year_max or 'latest'})"
262
+ year_filter_msg = f" in year range{year_range}"
263
+ result_text = (
264
+ f"Found {len(papers)} IACR papers for query '{query}'{year_filter_msg}:\n\n"
265
+ )
277
266
  for i, paper in enumerate(papers, 1):
278
267
  result_text += f"{i}. **{paper.title}**\n"
279
268
  result_text += f" - Paper ID: {paper.paper_id}\n"
@@ -586,54 +575,6 @@ async def handle_call_tool(
586
575
  )
587
576
  ]
588
577
 
589
- elif name == "download-crossref-paper":
590
- paper_id = arguments.get("paper_id", "")
591
- save_path = arguments.get("save_path", "./downloads")
592
-
593
- if not paper_id:
594
- return [
595
- types.TextContent(
596
- type="text", text="Error: paper_id parameter is required"
597
- )
598
- ]
599
-
600
- result = crossref_searcher.download_pdf(paper_id, save_path)
601
-
602
- if result.startswith("Error"):
603
- return [types.TextContent(type="text", text=result)]
604
- else:
605
- return [
606
- types.TextContent(
607
- type="text", text=f"PDF downloaded successfully to: {result}"
608
- )
609
- ]
610
-
611
- elif name == "read-crossref-paper":
612
- paper_id = arguments.get("paper_id", "")
613
- save_path = arguments.get("save_path", "./downloads")
614
-
615
- if not paper_id:
616
- return [
617
- types.TextContent(
618
- type="text", text="Error: paper_id parameter is required"
619
- )
620
- ]
621
-
622
- result = crossref_searcher.read_paper(paper_id, save_path)
623
-
624
- if result.startswith("Error"):
625
- return [types.TextContent(type="text", text=result)]
626
- else:
627
- # Truncate very long text for display
628
- if len(result) > 5000:
629
- truncated_result = (
630
- result[:5000]
631
- + f"\n\n... [Text truncated. Full text is {len(result)} characters long]"
632
- )
633
- return [types.TextContent(type="text", text=truncated_result)]
634
- else:
635
- return [types.TextContent(type="text", text=result)]
636
-
637
578
  elif name == "read-pdf":
638
579
  pdf_source = arguments.get("pdf_source", "")
639
580
 
all_in_mcp-0.2.5/PKG-INFO DELETED
@@ -1,226 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: all-in-mcp
3
- Version: 0.2.5
4
- Summary: An MCP (Model Context Protocol) server providing daily-use utility functions and academic paper search capabilities
5
- Project-URL: Homepage, https://github.com/jiahaoxiang2000/all-in-mcp
6
- Project-URL: Repository, https://github.com/jiahaoxiang2000/all-in-mcp
7
- Project-URL: Documentation, https://github.com/jiahaoxiang2000/all-in-mcp/tree/main/docs
8
- Project-URL: Issues, https://github.com/jiahaoxiang2000/all-in-mcp/issues
9
- Author-email: isomo <jiahaoxiang2000@gmail.com>
10
- License: MIT
11
- License-File: LICENSE
12
- Keywords: academic,iacr,mcp,model-context-protocol,papers,utilities
13
- Classifier: Development Status :: 4 - Beta
14
- Classifier: Intended Audience :: Developers
15
- Classifier: Intended Audience :: Science/Research
16
- Classifier: License :: OSI Approved :: MIT License
17
- Classifier: Programming Language :: Python :: 3
18
- Classifier: Programming Language :: Python :: 3.10
19
- Classifier: Programming Language :: Python :: 3.11
20
- Classifier: Programming Language :: Python :: 3.12
21
- Classifier: Programming Language :: Python :: 3.13
22
- Classifier: Topic :: Scientific/Engineering
23
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
- Classifier: Topic :: Text Processing :: General
25
- Requires-Python: >=3.10
26
- Requires-Dist: beautifulsoup4>=4.12.0
27
- Requires-Dist: feedparser>=6.0.10
28
- Requires-Dist: httpx>=0.24.0
29
- Requires-Dist: mcp>=1.9.4
30
- Requires-Dist: pypdf>=4.0.0
31
- Requires-Dist: requests>=2.31.0
32
- Provides-Extra: all
33
- Requires-Dist: psutil>=5.9.0; extra == 'all'
34
- Provides-Extra: dev
35
- Requires-Dist: build>=1.0.0; extra == 'dev'
36
- Requires-Dist: mypy>=1.5.0; extra == 'dev'
37
- Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
38
- Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
39
- Requires-Dist: pytest>=8.0.0; extra == 'dev'
40
- Requires-Dist: ruff>=0.1.0; extra == 'dev'
41
- Requires-Dist: twine>=4.0.0; extra == 'dev'
42
- Provides-Extra: system
43
- Requires-Dist: psutil>=5.9.0; extra == 'system'
44
- Description-Content-Type: text/markdown
45
-
46
- # All-in-MCP
47
-
48
- An MCP (Model Context Protocol) server that provides daily-use utility functions, including academic paper search capabilities.
49
-
50
- ## Features
51
-
52
- ### Daily Utilities
53
-
54
- - **Academic Research**: IACR ePrint Archive paper search, download, and reading
55
- - **Bibliography Search**: CryptoBib database search for cryptography papers
56
- - **Google Scholar**: Search academic papers across disciplines with citation data
57
- - **PDF Reading**: Read and extract text from local and online PDF files
58
-
59
- ### Paper Search Capabilities
60
-
61
- #### IACR ePrint Archive
62
-
63
- - Search academic papers from IACR ePrint Archive
64
- - Download PDF files
65
- - Extract and read text content from papers
66
- - Metadata extraction (authors, publication dates, abstracts)
67
-
68
- #### CryptoBib Database
69
-
70
- - Search comprehensive cryptography bibliography database
71
- - Access to thousands of cryptographic research papers
72
- - Retrieve structured paper metadata or raw BibTeX entries
73
- - Support for all major cryptography venues and conferences
74
-
75
- #### Google Scholar
76
-
77
- - Search academic papers across multiple disciplines
78
- - Access to citation counts and publication metadata
79
- - Broad coverage of academic literature from various sources
80
- - Year-based filtering for targeted searches
81
-
82
- ## Quick Start
83
-
84
- ### Prerequisites
85
-
86
- - Python 3.12 or higher
87
- - UV package manager
88
-
89
- ## Installation
90
-
91
- ### Option 1: Install from PyPI (Recommended)
92
-
93
- ```bash
94
- pip install all-in-mcp
95
- ```
96
-
97
- ### Option 2: Install from Source
98
-
99
- 1. Clone this repository:
100
-
101
- ```bash
102
- git clone https://github.com/jiahaoxiang2000/all-in-mcp.git
103
- cd all-in-mcp
104
- ```
105
-
106
- 2. Install with UV:
107
-
108
- ```bash
109
- uv sync
110
- ```
111
-
112
- ### Running the Server
113
-
114
- After installation, you can run the MCP server directly:
115
-
116
- ```bash
117
- all-in-mcp
118
- ```
119
-
120
- Or if you installed from source with UV:
121
-
122
- ```bash
123
- uv run all-in-mcp
124
- ```
125
-
126
- ## Integration with MCP Clients
127
-
128
- Add this server to your MCP client configuration. The server runs using stdio transport.
129
- See detailed integration guide in [`docs/INTEGRATION.md`](docs/INTEGRATION.md).
130
-
131
- Example configuration for Claude Desktop:
132
-
133
- ```json
134
- {
135
- "mcpServers": {
136
- "all-in-mcp": {
137
- "command": "uv",
138
- "args": ["run", "all-in-mcp"],
139
- "cwd": "/path/to/all-in-mcp"
140
- }
141
- }
142
- }
143
- ```
144
-
145
- ## Development
146
-
147
- For development setup and contribution guidelines, see the [Development Guide](docs/development.md).
148
-
149
- ### Quick Development Setup
150
-
151
- ```bash
152
- # Clone the repository
153
- git clone https://github.com/jiahaoxiang2000/all-in-mcp.git
154
- cd all-in-mcp
155
-
156
- # Install with development dependencies
157
- uv sync --extra dev
158
-
159
- # Run tests
160
- uv run pytest
161
-
162
- # Run linting
163
- uv run ruff check src/
164
- uv run ruff format src/
165
-
166
- # Type checking
167
- uv run mypy src/all_in_mcp
168
- ```
169
-
170
- ### Releases
171
-
172
- This project uses the existing release helper script for creating releases:
173
-
174
- #### Using the Release Script
175
-
176
- Use the release helper script to create a new version:
177
-
178
- ```bash
179
- python scripts/release.py 0.1.2
180
- ```
181
-
182
- This script will:
183
-
184
- 1. Update the version in `pyproject.toml`
185
- 2. Create a git commit
186
- 3. Create a git tag
187
- 4. Push the changes to trigger CI/CD
188
-
189
- #### Manual Process
190
-
191
- Alternatively, you can manually:
192
-
193
- 1. **Update version** in `pyproject.toml`:
194
-
195
- ```toml
196
- version = "0.1.2" # Change this
197
- ```
198
-
199
- 2. **Commit and tag**:
200
-
201
- ```bash
202
- git add pyproject.toml
203
- git commit -m "Bump version to 0.1.2"
204
- git tag v0.1.2
205
- git push --follow-tags
206
- ```
207
-
208
- ### Debugging
209
-
210
- For debugging, use the [MCP Inspector](https://github.com/modelcontextprotocol/inspector):
211
-
212
- ```bash
213
- npx @modelcontextprotocol/inspector uv --directory /path/to/all-in-mcp run all-in-mcp
214
- ```
215
-
216
- ## Documentation
217
-
218
- Complete documentation is available in the [`docs/`](docs/) directory:
219
-
220
- - **[API Reference](docs/api.md)** - Complete API documentation
221
- - **[Installation Guide](docs/installation.md)** - Setup instructions
222
- - **[IACR Integration](docs/iacr.md)** - Academic paper search details
223
- - **[CryptoBib Integration](docs/cryptobib.md)** - Bibliography database search
224
- - **[Development Guide](docs/development.md)** - Contributing guidelines
225
- - **[PyPI Setup Guide](docs/pypi-setup.md)** - Publishing configuration
226
- - **[Examples](docs/examples.md)** - Usage examples
@@ -1,181 +0,0 @@
1
- # All-in-MCP
2
-
3
- An MCP (Model Context Protocol) server that provides daily-use utility functions, including academic paper search capabilities.
4
-
5
- ## Features
6
-
7
- ### Daily Utilities
8
-
9
- - **Academic Research**: IACR ePrint Archive paper search, download, and reading
10
- - **Bibliography Search**: CryptoBib database search for cryptography papers
11
- - **Google Scholar**: Search academic papers across disciplines with citation data
12
- - **PDF Reading**: Read and extract text from local and online PDF files
13
-
14
- ### Paper Search Capabilities
15
-
16
- #### IACR ePrint Archive
17
-
18
- - Search academic papers from IACR ePrint Archive
19
- - Download PDF files
20
- - Extract and read text content from papers
21
- - Metadata extraction (authors, publication dates, abstracts)
22
-
23
- #### CryptoBib Database
24
-
25
- - Search comprehensive cryptography bibliography database
26
- - Access to thousands of cryptographic research papers
27
- - Retrieve structured paper metadata or raw BibTeX entries
28
- - Support for all major cryptography venues and conferences
29
-
30
- #### Google Scholar
31
-
32
- - Search academic papers across multiple disciplines
33
- - Access to citation counts and publication metadata
34
- - Broad coverage of academic literature from various sources
35
- - Year-based filtering for targeted searches
36
-
37
- ## Quick Start
38
-
39
- ### Prerequisites
40
-
41
- - Python 3.12 or higher
42
- - UV package manager
43
-
44
- ## Installation
45
-
46
- ### Option 1: Install from PyPI (Recommended)
47
-
48
- ```bash
49
- pip install all-in-mcp
50
- ```
51
-
52
- ### Option 2: Install from Source
53
-
54
- 1. Clone this repository:
55
-
56
- ```bash
57
- git clone https://github.com/jiahaoxiang2000/all-in-mcp.git
58
- cd all-in-mcp
59
- ```
60
-
61
- 2. Install with UV:
62
-
63
- ```bash
64
- uv sync
65
- ```
66
-
67
- ### Running the Server
68
-
69
- After installation, you can run the MCP server directly:
70
-
71
- ```bash
72
- all-in-mcp
73
- ```
74
-
75
- Or if you installed from source with UV:
76
-
77
- ```bash
78
- uv run all-in-mcp
79
- ```
80
-
81
- ## Integration with MCP Clients
82
-
83
- Add this server to your MCP client configuration. The server runs using stdio transport.
84
- See detailed integration guide in [`docs/INTEGRATION.md`](docs/INTEGRATION.md).
85
-
86
- Example configuration for Claude Desktop:
87
-
88
- ```json
89
- {
90
- "mcpServers": {
91
- "all-in-mcp": {
92
- "command": "uv",
93
- "args": ["run", "all-in-mcp"],
94
- "cwd": "/path/to/all-in-mcp"
95
- }
96
- }
97
- }
98
- ```
99
-
100
- ## Development
101
-
102
- For development setup and contribution guidelines, see the [Development Guide](docs/development.md).
103
-
104
- ### Quick Development Setup
105
-
106
- ```bash
107
- # Clone the repository
108
- git clone https://github.com/jiahaoxiang2000/all-in-mcp.git
109
- cd all-in-mcp
110
-
111
- # Install with development dependencies
112
- uv sync --extra dev
113
-
114
- # Run tests
115
- uv run pytest
116
-
117
- # Run linting
118
- uv run ruff check src/
119
- uv run ruff format src/
120
-
121
- # Type checking
122
- uv run mypy src/all_in_mcp
123
- ```
124
-
125
- ### Releases
126
-
127
- This project uses the existing release helper script for creating releases:
128
-
129
- #### Using the Release Script
130
-
131
- Use the release helper script to create a new version:
132
-
133
- ```bash
134
- python scripts/release.py 0.1.2
135
- ```
136
-
137
- This script will:
138
-
139
- 1. Update the version in `pyproject.toml`
140
- 2. Create a git commit
141
- 3. Create a git tag
142
- 4. Push the changes to trigger CI/CD
143
-
144
- #### Manual Process
145
-
146
- Alternatively, you can manually:
147
-
148
- 1. **Update version** in `pyproject.toml`:
149
-
150
- ```toml
151
- version = "0.1.2" # Change this
152
- ```
153
-
154
- 2. **Commit and tag**:
155
-
156
- ```bash
157
- git add pyproject.toml
158
- git commit -m "Bump version to 0.1.2"
159
- git tag v0.1.2
160
- git push --follow-tags
161
- ```
162
-
163
- ### Debugging
164
-
165
- For debugging, use the [MCP Inspector](https://github.com/modelcontextprotocol/inspector):
166
-
167
- ```bash
168
- npx @modelcontextprotocol/inspector uv --directory /path/to/all-in-mcp run all-in-mcp
169
- ```
170
-
171
- ## Documentation
172
-
173
- Complete documentation is available in the [`docs/`](docs/) directory:
174
-
175
- - **[API Reference](docs/api.md)** - Complete API documentation
176
- - **[Installation Guide](docs/installation.md)** - Setup instructions
177
- - **[IACR Integration](docs/iacr.md)** - Academic paper search details
178
- - **[CryptoBib Integration](docs/cryptobib.md)** - Bibliography database search
179
- - **[Development Guide](docs/development.md)** - Contributing guidelines
180
- - **[PyPI Setup Guide](docs/pypi-setup.md)** - Publishing configuration
181
- - **[Examples](docs/examples.md)** - Usage examples
File without changes
File without changes
File without changes
File without changes
File without changes