paper-search-cli 0.1.0

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 (166) hide show
  1. package/.env.example +165 -0
  2. package/LICENSE +21 -0
  3. package/README-sc.md +642 -0
  4. package/README.md +642 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +637 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/config/ConfigService.d.ts +26 -0
  10. package/dist/config/ConfigService.d.ts.map +1 -0
  11. package/dist/config/ConfigService.js +145 -0
  12. package/dist/config/ConfigService.js.map +1 -0
  13. package/dist/config/constants.d.ts +140 -0
  14. package/dist/config/constants.d.ts.map +1 -0
  15. package/dist/config/constants.js +93 -0
  16. package/dist/config/constants.js.map +1 -0
  17. package/dist/core/diagnostics.d.ts +43 -0
  18. package/dist/core/diagnostics.d.ts.map +1 -0
  19. package/dist/core/diagnostics.js +544 -0
  20. package/dist/core/diagnostics.js.map +1 -0
  21. package/dist/core/handleToolCall.d.ts +8 -0
  22. package/dist/core/handleToolCall.d.ts.map +1 -0
  23. package/dist/core/handleToolCall.js +440 -0
  24. package/dist/core/handleToolCall.js.map +1 -0
  25. package/dist/core/schemas.d.ts +454 -0
  26. package/dist/core/schemas.d.ts.map +1 -0
  27. package/dist/core/schemas.js +322 -0
  28. package/dist/core/schemas.js.map +1 -0
  29. package/dist/core/searchers.d.ts +45 -0
  30. package/dist/core/searchers.d.ts.map +1 -0
  31. package/dist/core/searchers.js +73 -0
  32. package/dist/core/searchers.js.map +1 -0
  33. package/dist/core/tools.d.ts +7 -0
  34. package/dist/core/tools.d.ts.map +1 -0
  35. package/dist/core/tools.js +640 -0
  36. package/dist/core/tools.js.map +1 -0
  37. package/dist/models/Paper.d.ts +64 -0
  38. package/dist/models/Paper.d.ts.map +1 -0
  39. package/dist/models/Paper.js +70 -0
  40. package/dist/models/Paper.js.map +1 -0
  41. package/dist/platforms/ArxivSearcher.d.ts +64 -0
  42. package/dist/platforms/ArxivSearcher.d.ts.map +1 -0
  43. package/dist/platforms/ArxivSearcher.js +531 -0
  44. package/dist/platforms/ArxivSearcher.js.map +1 -0
  45. package/dist/platforms/BioRxivSearcher.d.ts +47 -0
  46. package/dist/platforms/BioRxivSearcher.d.ts.map +1 -0
  47. package/dist/platforms/BioRxivSearcher.js +196 -0
  48. package/dist/platforms/BioRxivSearcher.js.map +1 -0
  49. package/dist/platforms/CORESearcher.d.ts +16 -0
  50. package/dist/platforms/CORESearcher.d.ts.map +1 -0
  51. package/dist/platforms/CORESearcher.js +148 -0
  52. package/dist/platforms/CORESearcher.js.map +1 -0
  53. package/dist/platforms/CrossrefSearcher.d.ts +34 -0
  54. package/dist/platforms/CrossrefSearcher.d.ts.map +1 -0
  55. package/dist/platforms/CrossrefSearcher.js +339 -0
  56. package/dist/platforms/CrossrefSearcher.js.map +1 -0
  57. package/dist/platforms/EuropePMCSearcher.d.ts +20 -0
  58. package/dist/platforms/EuropePMCSearcher.d.ts.map +1 -0
  59. package/dist/platforms/EuropePMCSearcher.js +173 -0
  60. package/dist/platforms/EuropePMCSearcher.js.map +1 -0
  61. package/dist/platforms/GoogleScholarSearcher.d.ts +77 -0
  62. package/dist/platforms/GoogleScholarSearcher.d.ts.map +1 -0
  63. package/dist/platforms/GoogleScholarSearcher.js +262 -0
  64. package/dist/platforms/GoogleScholarSearcher.js.map +1 -0
  65. package/dist/platforms/IACRSearcher.d.ts +51 -0
  66. package/dist/platforms/IACRSearcher.d.ts.map +1 -0
  67. package/dist/platforms/IACRSearcher.js +339 -0
  68. package/dist/platforms/IACRSearcher.js.map +1 -0
  69. package/dist/platforms/OpenAIRESearcher.d.ts +22 -0
  70. package/dist/platforms/OpenAIRESearcher.d.ts.map +1 -0
  71. package/dist/platforms/OpenAIRESearcher.js +223 -0
  72. package/dist/platforms/OpenAIRESearcher.js.map +1 -0
  73. package/dist/platforms/OpenAlexSearcher.d.ts +14 -0
  74. package/dist/platforms/OpenAlexSearcher.d.ts.map +1 -0
  75. package/dist/platforms/OpenAlexSearcher.js +114 -0
  76. package/dist/platforms/OpenAlexSearcher.js.map +1 -0
  77. package/dist/platforms/PMCSearcher.d.ts +20 -0
  78. package/dist/platforms/PMCSearcher.d.ts.map +1 -0
  79. package/dist/platforms/PMCSearcher.js +177 -0
  80. package/dist/platforms/PMCSearcher.js.map +1 -0
  81. package/dist/platforms/PaperSource.d.ts +143 -0
  82. package/dist/platforms/PaperSource.d.ts.map +1 -0
  83. package/dist/platforms/PaperSource.js +125 -0
  84. package/dist/platforms/PaperSource.js.map +1 -0
  85. package/dist/platforms/PubMedSearcher.d.ts +104 -0
  86. package/dist/platforms/PubMedSearcher.d.ts.map +1 -0
  87. package/dist/platforms/PubMedSearcher.js +422 -0
  88. package/dist/platforms/PubMedSearcher.js.map +1 -0
  89. package/dist/platforms/SciHubSearcher.d.ts +66 -0
  90. package/dist/platforms/SciHubSearcher.d.ts.map +1 -0
  91. package/dist/platforms/SciHubSearcher.js +398 -0
  92. package/dist/platforms/SciHubSearcher.js.map +1 -0
  93. package/dist/platforms/ScienceDirectSearcher.d.ts +42 -0
  94. package/dist/platforms/ScienceDirectSearcher.d.ts.map +1 -0
  95. package/dist/platforms/ScienceDirectSearcher.js +326 -0
  96. package/dist/platforms/ScienceDirectSearcher.js.map +1 -0
  97. package/dist/platforms/ScopusSearcher.d.ts +43 -0
  98. package/dist/platforms/ScopusSearcher.d.ts.map +1 -0
  99. package/dist/platforms/ScopusSearcher.js +364 -0
  100. package/dist/platforms/ScopusSearcher.js.map +1 -0
  101. package/dist/platforms/SemanticScholarSearcher.d.ts +96 -0
  102. package/dist/platforms/SemanticScholarSearcher.d.ts.map +1 -0
  103. package/dist/platforms/SemanticScholarSearcher.js +419 -0
  104. package/dist/platforms/SemanticScholarSearcher.js.map +1 -0
  105. package/dist/platforms/SpringerSearcher.d.ts +54 -0
  106. package/dist/platforms/SpringerSearcher.d.ts.map +1 -0
  107. package/dist/platforms/SpringerSearcher.js +407 -0
  108. package/dist/platforms/SpringerSearcher.js.map +1 -0
  109. package/dist/platforms/UnpaywallSearcher.d.ts +18 -0
  110. package/dist/platforms/UnpaywallSearcher.d.ts.map +1 -0
  111. package/dist/platforms/UnpaywallSearcher.js +115 -0
  112. package/dist/platforms/UnpaywallSearcher.js.map +1 -0
  113. package/dist/platforms/WebOfScienceSearcher.d.ts +111 -0
  114. package/dist/platforms/WebOfScienceSearcher.d.ts.map +1 -0
  115. package/dist/platforms/WebOfScienceSearcher.js +500 -0
  116. package/dist/platforms/WebOfScienceSearcher.js.map +1 -0
  117. package/dist/platforms/WileySearcher.d.ts +44 -0
  118. package/dist/platforms/WileySearcher.d.ts.map +1 -0
  119. package/dist/platforms/WileySearcher.js +148 -0
  120. package/dist/platforms/WileySearcher.js.map +1 -0
  121. package/dist/services/CitationService.d.ts +66 -0
  122. package/dist/services/CitationService.d.ts.map +1 -0
  123. package/dist/services/CitationService.js +237 -0
  124. package/dist/services/CitationService.js.map +1 -0
  125. package/dist/services/MultiSourceSearchService.d.ts +19 -0
  126. package/dist/services/MultiSourceSearchService.d.ts.map +1 -0
  127. package/dist/services/MultiSourceSearchService.js +96 -0
  128. package/dist/services/MultiSourceSearchService.js.map +1 -0
  129. package/dist/services/OpenAccessFallbackService.d.ts +20 -0
  130. package/dist/services/OpenAccessFallbackService.d.ts.map +1 -0
  131. package/dist/services/OpenAccessFallbackService.js +124 -0
  132. package/dist/services/OpenAccessFallbackService.js.map +1 -0
  133. package/dist/utils/ErrorHandler.d.ts +99 -0
  134. package/dist/utils/ErrorHandler.d.ts.map +1 -0
  135. package/dist/utils/ErrorHandler.js +266 -0
  136. package/dist/utils/ErrorHandler.js.map +1 -0
  137. package/dist/utils/Logger.d.ts +6 -0
  138. package/dist/utils/Logger.d.ts.map +1 -0
  139. package/dist/utils/Logger.js +26 -0
  140. package/dist/utils/Logger.js.map +1 -0
  141. package/dist/utils/PDFExtractor.d.ts +34 -0
  142. package/dist/utils/PDFExtractor.d.ts.map +1 -0
  143. package/dist/utils/PDFExtractor.js +130 -0
  144. package/dist/utils/PDFExtractor.js.map +1 -0
  145. package/dist/utils/PdfDownload.d.ts +7 -0
  146. package/dist/utils/PdfDownload.d.ts.map +1 -0
  147. package/dist/utils/PdfDownload.js +52 -0
  148. package/dist/utils/PdfDownload.js.map +1 -0
  149. package/dist/utils/QuotaManager.d.ts +32 -0
  150. package/dist/utils/QuotaManager.d.ts.map +1 -0
  151. package/dist/utils/QuotaManager.js +95 -0
  152. package/dist/utils/QuotaManager.js.map +1 -0
  153. package/dist/utils/RateLimiter.d.ts +50 -0
  154. package/dist/utils/RateLimiter.d.ts.map +1 -0
  155. package/dist/utils/RateLimiter.js +121 -0
  156. package/dist/utils/RateLimiter.js.map +1 -0
  157. package/dist/utils/RequestCache.d.ts +26 -0
  158. package/dist/utils/RequestCache.d.ts.map +1 -0
  159. package/dist/utils/RequestCache.js +66 -0
  160. package/dist/utils/RequestCache.js.map +1 -0
  161. package/dist/utils/SecurityUtils.d.ts +80 -0
  162. package/dist/utils/SecurityUtils.d.ts.map +1 -0
  163. package/dist/utils/SecurityUtils.js +357 -0
  164. package/dist/utils/SecurityUtils.js.map +1 -0
  165. package/package.json +111 -0
  166. package/skills/paper-search/SKILL.md +192 -0
@@ -0,0 +1,640 @@
1
+ export const TOOLS = [
2
+ {
3
+ name: 'search_papers',
4
+ description: 'Search academic papers from multiple sources including arXiv, Web of Science, etc.',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: {
8
+ query: { type: 'string', description: 'Search query string' },
9
+ platform: {
10
+ type: 'string',
11
+ enum: [
12
+ 'arxiv',
13
+ 'webofscience',
14
+ 'pubmed',
15
+ 'wos',
16
+ 'biorxiv',
17
+ 'medrxiv',
18
+ 'semantic',
19
+ 'iacr',
20
+ 'googlescholar',
21
+ 'scholar',
22
+ 'scihub',
23
+ 'sciencedirect',
24
+ 'springer',
25
+ 'scopus',
26
+ 'crossref',
27
+ 'openalex',
28
+ 'unpaywall',
29
+ 'pmc',
30
+ 'europepmc',
31
+ 'core',
32
+ 'openaire',
33
+ 'all'
34
+ ],
35
+ description: 'Platform to search (default: crossref). Use --sources for comma-separated multi-source search. Note: Wiley only supports PDF download by DOI.'
36
+ },
37
+ sources: {
38
+ type: 'string',
39
+ description: 'Comma-separated source list for multi-source search, or all for non-risky open/API sources. Example: crossref,openalex,pubmed,pmc'
40
+ },
41
+ maxResults: {
42
+ type: 'number',
43
+ minimum: 1,
44
+ maximum: 100,
45
+ description: 'Maximum number of results to return'
46
+ },
47
+ year: { type: 'string', description: 'Year filter (e.g., "2023", "2020-2023", "2020-")' },
48
+ author: { type: 'string', description: 'Author name filter' },
49
+ journal: { type: 'string', description: 'Journal name filter' },
50
+ category: { type: 'string', description: 'Category filter (e.g., cs.AI for arXiv)' },
51
+ days: {
52
+ type: 'number',
53
+ description: 'Number of days to search back (bioRxiv/medRxiv only)'
54
+ },
55
+ fetchDetails: {
56
+ type: 'boolean',
57
+ description: 'Fetch detailed information (IACR only)'
58
+ },
59
+ fieldsOfStudy: {
60
+ type: 'array',
61
+ items: { type: 'string' },
62
+ description: 'Fields of study filter (Semantic Scholar only)'
63
+ },
64
+ sortBy: {
65
+ type: 'string',
66
+ enum: ['relevance', 'date', 'citations'],
67
+ description: 'Sort results by relevance, date, or citations'
68
+ },
69
+ sortOrder: {
70
+ type: 'string',
71
+ enum: ['asc', 'desc'],
72
+ description: 'Sort order: ascending or descending'
73
+ }
74
+ },
75
+ required: ['query']
76
+ }
77
+ },
78
+ {
79
+ name: 'search_arxiv',
80
+ description: 'Search academic papers specifically from arXiv preprint server',
81
+ inputSchema: {
82
+ type: 'object',
83
+ properties: {
84
+ query: { type: 'string', description: 'Search query string' },
85
+ maxResults: {
86
+ type: 'number',
87
+ minimum: 1,
88
+ maximum: 50,
89
+ description: 'Maximum number of results to return'
90
+ },
91
+ category: { type: 'string', description: 'arXiv category filter (e.g., cs.AI, physics.gen-ph)' },
92
+ author: { type: 'string', description: 'Author name filter' },
93
+ year: { type: 'string', description: 'Year filter (e.g., "2023", "2020-2023")' },
94
+ sortBy: {
95
+ type: 'string',
96
+ enum: ['relevance', 'date', 'citations'],
97
+ description: 'Sort results by field'
98
+ },
99
+ sortOrder: {
100
+ type: 'string',
101
+ enum: ['asc', 'desc'],
102
+ description: 'Sort order: ascending or descending'
103
+ }
104
+ },
105
+ required: ['query']
106
+ }
107
+ },
108
+ {
109
+ name: 'search_webofscience',
110
+ description: 'Search academic papers from Web of Science database',
111
+ inputSchema: {
112
+ type: 'object',
113
+ properties: {
114
+ query: { type: 'string', description: 'Search query string' },
115
+ maxResults: {
116
+ type: 'number',
117
+ minimum: 1,
118
+ maximum: 50,
119
+ description: 'Maximum number of results to return'
120
+ },
121
+ year: { type: 'string', description: 'Publication year filter (e.g., "2023", "2020-2023")' },
122
+ author: { type: 'string', description: 'Author name filter' },
123
+ journal: { type: 'string', description: 'Journal name filter' },
124
+ sortBy: {
125
+ type: 'string',
126
+ enum: ['relevance', 'date', 'citations', 'title', 'author', 'journal'],
127
+ description: 'Sort results by field'
128
+ },
129
+ sortOrder: {
130
+ type: 'string',
131
+ enum: ['asc', 'desc'],
132
+ description: 'Sort order: ascending or descending'
133
+ }
134
+ },
135
+ required: ['query']
136
+ }
137
+ },
138
+ {
139
+ name: 'search_pubmed',
140
+ description: 'Search biomedical literature from PubMed/MEDLINE database using NCBI E-utilities API',
141
+ inputSchema: {
142
+ type: 'object',
143
+ properties: {
144
+ query: { type: 'string', description: 'Search query string' },
145
+ maxResults: {
146
+ type: 'number',
147
+ minimum: 1,
148
+ maximum: 100,
149
+ description: 'Maximum number of results to return'
150
+ },
151
+ year: { type: 'string', description: 'Publication year filter (e.g., "2023", "2020-2023")' },
152
+ author: { type: 'string', description: 'Author name filter' },
153
+ journal: { type: 'string', description: 'Journal name filter' },
154
+ publicationType: {
155
+ type: 'array',
156
+ items: { type: 'string' },
157
+ description: 'Publication type filter (e.g., ["Journal Article", "Review"])'
158
+ },
159
+ sortBy: {
160
+ type: 'string',
161
+ enum: ['relevance', 'date'],
162
+ description: 'Sort results by relevance or date'
163
+ }
164
+ },
165
+ required: ['query']
166
+ }
167
+ },
168
+ {
169
+ name: 'search_biorxiv',
170
+ description: 'Search bioRxiv preprint server for biology papers',
171
+ inputSchema: {
172
+ type: 'object',
173
+ properties: {
174
+ query: { type: 'string', description: 'Search query string' },
175
+ maxResults: {
176
+ type: 'number',
177
+ minimum: 1,
178
+ maximum: 100,
179
+ description: 'Maximum number of results to return'
180
+ },
181
+ days: {
182
+ type: 'number',
183
+ description: 'Number of days to search back (default: 30)'
184
+ },
185
+ category: { type: 'string', description: 'Category filter (e.g., neuroscience, genomics)' }
186
+ },
187
+ required: ['query']
188
+ }
189
+ },
190
+ {
191
+ name: 'search_medrxiv',
192
+ description: 'Search medRxiv preprint server for medical papers',
193
+ inputSchema: {
194
+ type: 'object',
195
+ properties: {
196
+ query: { type: 'string', description: 'Search query string' },
197
+ maxResults: {
198
+ type: 'number',
199
+ minimum: 1,
200
+ maximum: 100,
201
+ description: 'Maximum number of results to return'
202
+ },
203
+ days: {
204
+ type: 'number',
205
+ description: 'Number of days to search back (default: 30)'
206
+ },
207
+ category: { type: 'string', description: 'Category filter (e.g., infectious_diseases, epidemiology)' }
208
+ },
209
+ required: ['query']
210
+ }
211
+ },
212
+ {
213
+ name: 'search_semantic_scholar',
214
+ description: 'Search Semantic Scholar for academic papers with citation data',
215
+ inputSchema: {
216
+ type: 'object',
217
+ properties: {
218
+ query: { type: 'string', description: 'Search query string' },
219
+ maxResults: {
220
+ type: 'number',
221
+ minimum: 1,
222
+ maximum: 100,
223
+ description: 'Maximum number of results to return'
224
+ },
225
+ year: { type: 'string', description: 'Year filter (e.g., "2023", "2020-2023")' },
226
+ fieldsOfStudy: {
227
+ type: 'array',
228
+ items: { type: 'string' },
229
+ description: 'Fields of study filter (e.g., ["Computer Science", "Biology"])'
230
+ }
231
+ },
232
+ required: ['query']
233
+ }
234
+ },
235
+ {
236
+ name: 'search_semantic_snippets',
237
+ description: 'Search Semantic Scholar Open Access snippet index for text excerpts from titles, abstracts, and body text. Requires SEMANTIC_SCHOLAR_API_KEY.',
238
+ inputSchema: {
239
+ type: 'object',
240
+ properties: {
241
+ query: { type: 'string', description: 'Natural-language query for text snippets' },
242
+ limit: {
243
+ type: 'number',
244
+ minimum: 1,
245
+ maximum: 1000,
246
+ description: 'Maximum number of snippet results to return. Default: 5'
247
+ },
248
+ year: { type: 'string', description: 'Publication year filter, e.g. "2020-2024"' },
249
+ fieldsOfStudy: {
250
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
251
+ description: 'Field-of-study filter, e.g. "Medicine" or ["Medicine","Biology"]'
252
+ },
253
+ paperIds: {
254
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
255
+ description: 'Optional paper IDs to restrict results to, comma-separated or array'
256
+ },
257
+ authors: {
258
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
259
+ description: 'Optional author-name filter, comma-separated or array'
260
+ },
261
+ venue: {
262
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
263
+ description: 'Optional venue filter, comma-separated or array'
264
+ },
265
+ minCitationCount: {
266
+ type: 'number',
267
+ minimum: 0,
268
+ description: 'Only return snippets from papers with at least this many citations'
269
+ },
270
+ publicationDateOrYear: {
271
+ type: 'string',
272
+ description: 'Publication date/year range, e.g. "2020-01-01:2024-12-31"'
273
+ },
274
+ fields: {
275
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
276
+ description: 'Optional Semantic Scholar snippet fields to return'
277
+ }
278
+ },
279
+ required: ['query']
280
+ }
281
+ },
282
+ {
283
+ name: 'search_iacr',
284
+ description: 'Search IACR ePrint Archive for cryptography papers',
285
+ inputSchema: {
286
+ type: 'object',
287
+ properties: {
288
+ query: { type: 'string', description: 'Search query string' },
289
+ maxResults: {
290
+ type: 'number',
291
+ minimum: 1,
292
+ maximum: 50,
293
+ description: 'Maximum number of results to return'
294
+ },
295
+ fetchDetails: {
296
+ type: 'boolean',
297
+ description: 'Fetch detailed information for each paper (slower)'
298
+ }
299
+ },
300
+ required: ['query']
301
+ }
302
+ },
303
+ {
304
+ name: 'download_paper',
305
+ description: 'Download PDF file of an academic paper',
306
+ inputSchema: {
307
+ type: 'object',
308
+ properties: {
309
+ paperId: { type: 'string', description: 'Paper ID (e.g., arXiv ID, DOI for Sci-Hub)' },
310
+ platform: {
311
+ type: 'string',
312
+ enum: ['arxiv', 'biorxiv', 'medrxiv', 'semantic', 'iacr', 'scihub', 'springer', 'wiley', 'pmc', 'europepmc', 'core'],
313
+ description: 'Platform where the paper is from'
314
+ },
315
+ savePath: {
316
+ type: 'string',
317
+ description: 'Directory to save the PDF file'
318
+ }
319
+ },
320
+ required: ['paperId', 'platform']
321
+ }
322
+ },
323
+ {
324
+ name: 'search_google_scholar',
325
+ description: 'Search Google Scholar for academic papers using web scraping',
326
+ inputSchema: {
327
+ type: 'object',
328
+ properties: {
329
+ query: { type: 'string', description: 'Search query string' },
330
+ maxResults: {
331
+ type: 'number',
332
+ minimum: 1,
333
+ maximum: 20,
334
+ description: 'Maximum number of results to return'
335
+ },
336
+ yearLow: {
337
+ type: 'number',
338
+ description: 'Earliest publication year'
339
+ },
340
+ yearHigh: {
341
+ type: 'number',
342
+ description: 'Latest publication year'
343
+ },
344
+ author: {
345
+ type: 'string',
346
+ description: 'Author name filter'
347
+ }
348
+ },
349
+ required: ['query']
350
+ }
351
+ },
352
+ {
353
+ name: 'get_paper_by_doi',
354
+ description: 'Retrieve paper information using DOI from available platforms',
355
+ inputSchema: {
356
+ type: 'object',
357
+ properties: {
358
+ doi: { type: 'string', description: 'DOI (Digital Object Identifier)' },
359
+ platform: {
360
+ type: 'string',
361
+ enum: ['arxiv', 'webofscience', 'pubmed', 'crossref', 'openalex', 'unpaywall', 'pmc', 'europepmc', 'core', 'all'],
362
+ description: 'Platform to search'
363
+ }
364
+ },
365
+ required: ['doi']
366
+ }
367
+ },
368
+ {
369
+ name: 'search_scihub',
370
+ description: 'Search and download papers from Sci-Hub using DOI or paper URL. Automatically detects and uses the fastest available mirror.',
371
+ inputSchema: {
372
+ type: 'object',
373
+ properties: {
374
+ doiOrUrl: {
375
+ type: 'string',
376
+ description: 'DOI (e.g., "10.1038/nature12373") or full paper URL'
377
+ },
378
+ downloadPdf: {
379
+ type: 'boolean',
380
+ description: 'Whether to download the PDF file',
381
+ default: false
382
+ },
383
+ savePath: {
384
+ type: 'string',
385
+ description: 'Directory to save the PDF file (if downloadPdf is true)'
386
+ }
387
+ },
388
+ required: ['doiOrUrl']
389
+ }
390
+ },
391
+ {
392
+ name: 'check_scihub_mirrors',
393
+ description: 'Check the health status of all Sci-Hub mirror sites',
394
+ inputSchema: {
395
+ type: 'object',
396
+ properties: {
397
+ forceCheck: {
398
+ type: 'boolean',
399
+ description: 'Force a fresh health check even if recent data exists',
400
+ default: false
401
+ }
402
+ }
403
+ }
404
+ },
405
+ {
406
+ name: 'get_platform_status',
407
+ description: 'Check the status and capabilities of available academic platforms',
408
+ inputSchema: {
409
+ type: 'object',
410
+ properties: {
411
+ validate: {
412
+ type: 'boolean',
413
+ description: 'Whether to validate configured API keys by making a real request (may trigger rate limits). Default: false.'
414
+ }
415
+ }
416
+ }
417
+ },
418
+ {
419
+ name: 'search_sciencedirect',
420
+ description: 'Search academic papers from Elsevier ScienceDirect database (requires API key)',
421
+ inputSchema: {
422
+ type: 'object',
423
+ properties: {
424
+ query: { type: 'string', description: 'Search query string' },
425
+ maxResults: {
426
+ type: 'number',
427
+ minimum: 1,
428
+ maximum: 100,
429
+ description: 'Maximum number of results to return'
430
+ },
431
+ year: { type: 'string', description: 'Year filter (e.g., "2023", "2020-2023")' },
432
+ author: { type: 'string', description: 'Author name filter' },
433
+ journal: { type: 'string', description: 'Journal name filter' },
434
+ openAccess: {
435
+ type: 'boolean',
436
+ description: 'Filter for open access articles only'
437
+ }
438
+ },
439
+ required: ['query']
440
+ }
441
+ },
442
+ {
443
+ name: 'search_springer',
444
+ description: 'Search academic papers from Springer Nature database. Uses Metadata API by default (all content) or OpenAccess API when openAccess=true (full text available). Same API key works for both.',
445
+ inputSchema: {
446
+ type: 'object',
447
+ properties: {
448
+ query: { type: 'string', description: 'Search query string' },
449
+ maxResults: {
450
+ type: 'number',
451
+ minimum: 1,
452
+ maximum: 100,
453
+ description: 'Maximum number of results to return'
454
+ },
455
+ year: { type: 'string', description: 'Year filter (e.g., "2023", "2020-2023")' },
456
+ author: { type: 'string', description: 'Author name filter' },
457
+ journal: { type: 'string', description: 'Journal name filter' },
458
+ subject: { type: 'string', description: 'Subject area filter' },
459
+ openAccess: {
460
+ type: 'boolean',
461
+ description: 'Search only open access content'
462
+ },
463
+ type: {
464
+ type: 'string',
465
+ enum: ['Journal', 'Book', 'Chapter'],
466
+ description: 'Publication type filter'
467
+ }
468
+ },
469
+ required: ['query']
470
+ }
471
+ },
472
+ {
473
+ name: 'search_wiley',
474
+ description: 'DEPRECATED: Wiley TDM API does not support keyword search. Use search_crossref to find Wiley articles, then use download_paper with platform="wiley" to download PDFs by DOI.',
475
+ inputSchema: {
476
+ type: 'object',
477
+ properties: {
478
+ query: { type: 'string', description: 'This tool is deprecated. Use search_crossref instead.' }
479
+ },
480
+ required: ['query']
481
+ }
482
+ },
483
+ {
484
+ name: 'search_scopus',
485
+ description: 'Search the Scopus abstract and citation database (requires Elsevier API key)',
486
+ inputSchema: {
487
+ type: 'object',
488
+ properties: {
489
+ query: { type: 'string', description: 'Search query string' },
490
+ maxResults: {
491
+ type: 'number',
492
+ minimum: 1,
493
+ maximum: 25,
494
+ description: 'Maximum number of results (max 25 per request)'
495
+ },
496
+ year: { type: 'string', description: 'Year filter (e.g., "2023", "2020-2023")' },
497
+ author: { type: 'string', description: 'Author name filter' },
498
+ journal: { type: 'string', description: 'Journal name filter' },
499
+ affiliation: { type: 'string', description: 'Institution/affiliation filter' },
500
+ subject: { type: 'string', description: 'Subject area filter' },
501
+ openAccess: {
502
+ type: 'boolean',
503
+ description: 'Filter for open access articles only'
504
+ },
505
+ documentType: {
506
+ type: 'string',
507
+ enum: ['ar', 'cp', 're', 'bk', 'ch'],
508
+ description: 'Document type: ar=article, cp=conference paper, re=review, bk=book, ch=chapter'
509
+ }
510
+ },
511
+ required: ['query']
512
+ }
513
+ },
514
+ {
515
+ name: 'search_crossref',
516
+ description: 'Search academic papers from Crossref database. Free API with extensive scholarly metadata coverage across publishers.',
517
+ inputSchema: {
518
+ type: 'object',
519
+ properties: {
520
+ query: { type: 'string', description: 'Search query string' },
521
+ maxResults: {
522
+ type: 'number',
523
+ minimum: 1,
524
+ maximum: 100,
525
+ description: 'Maximum number of results to return'
526
+ },
527
+ year: { type: 'string', description: 'Year filter (e.g., "2023", "2020-2023")' },
528
+ author: { type: 'string', description: 'Author name filter' },
529
+ sortBy: {
530
+ type: 'string',
531
+ enum: ['relevance', 'date', 'citations'],
532
+ description: 'Sort results by relevance, date, or citations'
533
+ },
534
+ sortOrder: {
535
+ type: 'string',
536
+ enum: ['asc', 'desc'],
537
+ description: 'Sort order: ascending or descending'
538
+ }
539
+ },
540
+ required: ['query']
541
+ }
542
+ },
543
+ {
544
+ name: 'search_openalex',
545
+ description: 'Search OpenAlex, a broad free metadata source with citation counts and open-access location metadata',
546
+ inputSchema: {
547
+ type: 'object',
548
+ properties: {
549
+ query: { type: 'string', description: 'Search query string' },
550
+ maxResults: { type: 'number', minimum: 1, maximum: 100, description: 'Maximum number of results to return' },
551
+ year: { type: 'string', description: 'Single publication year filter, e.g. "2024"' }
552
+ },
553
+ required: ['query']
554
+ }
555
+ },
556
+ {
557
+ name: 'search_unpaywall',
558
+ description: 'Resolve open-access metadata and PDF URL candidates for a DOI using Unpaywall',
559
+ inputSchema: {
560
+ type: 'object',
561
+ properties: {
562
+ query: { type: 'string', description: 'DOI string or text containing a DOI' },
563
+ maxResults: { type: 'number', minimum: 1, maximum: 1, description: 'Unpaywall returns at most one result' }
564
+ },
565
+ required: ['query']
566
+ }
567
+ },
568
+ {
569
+ name: 'search_pmc',
570
+ description: 'Search PubMed Central open-access full-text records',
571
+ inputSchema: {
572
+ type: 'object',
573
+ properties: {
574
+ query: { type: 'string', description: 'Search query string' },
575
+ maxResults: { type: 'number', minimum: 1, maximum: 100, description: 'Maximum number of results to return' },
576
+ year: { type: 'string', description: 'Publication year filter' }
577
+ },
578
+ required: ['query']
579
+ }
580
+ },
581
+ {
582
+ name: 'search_europepmc',
583
+ description: 'Search Europe PMC biomedical metadata and open full-text links',
584
+ inputSchema: {
585
+ type: 'object',
586
+ properties: {
587
+ query: { type: 'string', description: 'Search query string' },
588
+ maxResults: { type: 'number', minimum: 1, maximum: 100, description: 'Maximum number of results to return' },
589
+ year: { type: 'string', description: 'Publication year filter' }
590
+ },
591
+ required: ['query']
592
+ }
593
+ },
594
+ {
595
+ name: 'search_core',
596
+ description: 'Search CORE open-access repository metadata and PDF candidates',
597
+ inputSchema: {
598
+ type: 'object',
599
+ properties: {
600
+ query: { type: 'string', description: 'Search query string' },
601
+ maxResults: { type: 'number', minimum: 1, maximum: 100, description: 'Maximum number of results to return' },
602
+ year: { type: 'string', description: 'Publication year filter' }
603
+ },
604
+ required: ['query']
605
+ }
606
+ },
607
+ {
608
+ name: 'search_openaire',
609
+ description: 'Search OpenAIRE as an open-access repository discovery source',
610
+ inputSchema: {
611
+ type: 'object',
612
+ properties: {
613
+ query: { type: 'string', description: 'Search query string' },
614
+ maxResults: { type: 'number', minimum: 1, maximum: 100, description: 'Maximum number of results to return' },
615
+ year: { type: 'string', description: 'Publication year filter' }
616
+ },
617
+ required: ['query']
618
+ }
619
+ },
620
+ {
621
+ name: 'download_with_fallback',
622
+ description: 'Download with an open-access-first fallback chain: source-native download, metadata PDF URL, PMC/Europe PMC/CORE/OpenAIRE discovery, Unpaywall DOI resolution, optional Sci-Hub opt-in.',
623
+ inputSchema: {
624
+ type: 'object',
625
+ properties: {
626
+ source: { type: 'string', description: 'Primary source name, e.g. arxiv, crossref, pmc, core' },
627
+ paperId: { type: 'string', description: 'Source-native paper identifier' },
628
+ doi: { type: 'string', description: 'Optional DOI for OA fallback resolution' },
629
+ title: { type: 'string', description: 'Optional title for repository discovery fallback' },
630
+ savePath: { type: 'string', description: 'Directory to save the PDF file' },
631
+ useSciHub: {
632
+ type: 'boolean',
633
+ description: 'Explicitly opt in to Sci-Hub as the final fallback. Default: false.'
634
+ }
635
+ },
636
+ required: ['source', 'paperId']
637
+ }
638
+ }
639
+ ];
640
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/core/tools.ts"],"names":[],"mappings":"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"}