all-in-mcp 0.2.5__py3-none-any.whl → 0.2.6__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.
- all_in_mcp/academic_platforms/crossref.py +4 -76
- all_in_mcp/server.py +0 -86
- all_in_mcp-0.2.6.dist-info/METADATA +129 -0
- {all_in_mcp-0.2.5.dist-info → all_in_mcp-0.2.6.dist-info}/RECORD +7 -7
- all_in_mcp-0.2.5.dist-info/METADATA +0 -226
- {all_in_mcp-0.2.5.dist-info → all_in_mcp-0.2.6.dist-info}/WHEEL +0 -0
- {all_in_mcp-0.2.5.dist-info → all_in_mcp-0.2.6.dist-info}/entry_points.txt +0 -0
- {all_in_mcp-0.2.5.dist-info → all_in_mcp-0.2.6.dist-info}/licenses/LICENSE +0 -0
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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"""
|
all_in_mcp/server.py
CHANGED
@@ -185,44 +185,6 @@ async def handle_list_tools() -> list[types.Tool]:
|
|
185
185
|
"required": ["query"],
|
186
186
|
},
|
187
187
|
),
|
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
188
|
types.Tool(
|
227
189
|
name="read-pdf",
|
228
190
|
description="Read and extract text content from a PDF file (local or online)",
|
@@ -586,54 +548,6 @@ async def handle_call_tool(
|
|
586
548
|
)
|
587
549
|
]
|
588
550
|
|
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
551
|
elif name == "read-pdf":
|
638
552
|
pdf_source = arguments.get("pdf_source", "")
|
639
553
|
|
@@ -0,0 +1,129 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: all-in-mcp
|
3
|
+
Version: 0.2.6
|
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.12 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>
|
@@ -1,14 +1,14 @@
|
|
1
1
|
all_in_mcp/__init__.py,sha256=REDwcbifpuUnsFAhNowIKCZ-8g6irIzUFTI_f8Aunxk,215
|
2
2
|
all_in_mcp/paper.py,sha256=vSJyC_ehfZX5-ASYG048z8gaD1LKafFdJvR13iQcJRw,7104
|
3
|
-
all_in_mcp/server.py,sha256=
|
3
|
+
all_in_mcp/server.py,sha256=GAb_RUlFi2UyXOASB9IM_fQmHHr5F6bQXbPV8J964pI,24420
|
4
4
|
all_in_mcp/academic_platforms/__init__.py,sha256=IpI29DMS4_mSmTEa8VkQEiJCl7OyFbswSx7mWSp08P4,285
|
5
5
|
all_in_mcp/academic_platforms/base.py,sha256=VYMp8_tnp7YzXKAXLfr7uUxgvJBNKRyC_NT1uVhBOwY,673
|
6
|
-
all_in_mcp/academic_platforms/crossref.py,sha256=
|
6
|
+
all_in_mcp/academic_platforms/crossref.py,sha256=D-wvSwnOocP16m9fA3xJ6VGEpmRPtMmGoFm5MlyPdXE,8707
|
7
7
|
all_in_mcp/academic_platforms/cryptobib.py,sha256=F9N23eojfyAIjnFDPrJAYOpZ_Vi9iHOqNHGtKC6O16c,17360
|
8
8
|
all_in_mcp/academic_platforms/google_scholar.py,sha256=_KLFfIOZeFCGxFOt-nwzm1fgZKMlXOf3HvIjXAYE5cI,8737
|
9
9
|
all_in_mcp/academic_platforms/iacr.py,sha256=MUPxFycVS0eMsJok71y12RUqjxbRrCReG33V5ORAbfU,15450
|
10
|
-
all_in_mcp-0.2.
|
11
|
-
all_in_mcp-0.2.
|
12
|
-
all_in_mcp-0.2.
|
13
|
-
all_in_mcp-0.2.
|
14
|
-
all_in_mcp-0.2.
|
10
|
+
all_in_mcp-0.2.6.dist-info/METADATA,sha256=viUPVp5EJXz5XdzgI-ZewGAWZBok5eu2LvSH5QYMjRQ,4242
|
11
|
+
all_in_mcp-0.2.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
12
|
+
all_in_mcp-0.2.6.dist-info/entry_points.txt,sha256=FbQOtUQzOIfkMNp4qQV1NTU9K4J7C0XGH9wKKhfK1VM,47
|
13
|
+
all_in_mcp-0.2.6.dist-info/licenses/LICENSE,sha256=idExTHItK7AC5FVo4H9HKnr6h51Z8BKCEztZPyP8nK8,1062
|
14
|
+
all_in_mcp-0.2.6.dist-info/RECORD,,
|
@@ -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
|
File without changes
|
File without changes
|
File without changes
|