@fre4x/arxiv 1.0.1
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.
- package/README.md +54 -0
- package/dist/api.d.ts +14 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +96 -0
- package/dist/api.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +251 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +52 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +54 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# arxiv — The Research Fang
|
|
2
|
+
|
|
3
|
+
> *Knowledge is the only weapon that sharpens itself. This B1TE cuts through the noise.*
|
|
4
|
+
|
|
5
|
+
Part of **[FRE4X-B1TE](../)** — a monorepo of MCP servers built for autonomous agents.
|
|
6
|
+
|
|
7
|
+
Agents sleep while humans read. This server doesn't sleep. It hunts across the entire arXiv corpus — millions of papers, every category, in real time — so the agent always knows what humans don't yet.
|
|
8
|
+
|
|
9
|
+
## Tools
|
|
10
|
+
|
|
11
|
+
| Tool | What it hunts |
|
|
12
|
+
|------|--------------|
|
|
13
|
+
| `arxiv_search` | Free-text search with field prefixes (`ti:`, `au:`, `abs:`, `cat:`) and boolean operators |
|
|
14
|
+
| `arxiv_get_paper` | Full metadata for one or more papers by arXiv ID |
|
|
15
|
+
| `arxiv_search_by_author` | All papers by a specific author |
|
|
16
|
+
| `arxiv_search_by_category` | Papers in a subject category (e.g. `cs.AI`, `cs.LG`, `q-fin.TR`) |
|
|
17
|
+
| `arxiv_list_categories` | All supported arXiv subject categories |
|
|
18
|
+
|
|
19
|
+
## Query Syntax
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
ti:attention AND cat:cs.LG
|
|
23
|
+
au:Bengio AND abs:generalization
|
|
24
|
+
cat:cs.CV AND ti:object detection
|
|
25
|
+
ti:diffusion AND NOT abs:image
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
All list tools support `limit` (max 100) and `offset` for pagination.
|
|
29
|
+
All tools support `response_format: "markdown"` (default) or `"json"`.
|
|
30
|
+
|
|
31
|
+
## Deploy
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"mcpServers": {
|
|
36
|
+
"arxiv": {
|
|
37
|
+
"command": "npx",
|
|
38
|
+
"args": ["-y", "@fre4x/arxiv"]
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Development
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
bun install
|
|
48
|
+
bun run dev # tsx, no build
|
|
49
|
+
bun run build # compile → dist/
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## License
|
|
53
|
+
|
|
54
|
+
MIT — **WE ARE THE FRE4X.**
|
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ArxivSearchResult, SortBy, SortOrder } from "./types.js";
|
|
2
|
+
export interface SearchParams {
|
|
3
|
+
query: string;
|
|
4
|
+
start?: number;
|
|
5
|
+
maxResults?: number;
|
|
6
|
+
sortBy?: SortBy;
|
|
7
|
+
sortOrder?: SortOrder;
|
|
8
|
+
}
|
|
9
|
+
export declare class ArxivApiClient {
|
|
10
|
+
search(params: SearchParams): Promise<ArxivSearchResult>;
|
|
11
|
+
getById(ids: string[]): Promise<ArxivSearchResult>;
|
|
12
|
+
private parseResponse;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,iBAAiB,EAIjB,MAAM,EACN,SAAS,EACV,MAAM,YAAY,CAAC;AAqEpB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,qBAAa,cAAc;IACnB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiBxD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAYxD,OAAO,CAAC,aAAa;CAsBtB"}
|
package/dist/api.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import { XMLParser } from "fast-xml-parser";
|
|
3
|
+
import { SortBy, SortOrder, } from "./types.js";
|
|
4
|
+
const BASE_URL = "https://export.arxiv.org/api/query";
|
|
5
|
+
const parser = new XMLParser({
|
|
6
|
+
ignoreAttributes: false,
|
|
7
|
+
attributeNamePrefix: "@_",
|
|
8
|
+
isArray: (tagName) => ["entry", "author", "category", "link"].includes(tagName),
|
|
9
|
+
});
|
|
10
|
+
function extractArxivId(fullId) {
|
|
11
|
+
// arXiv IDs look like: http://arxiv.org/abs/2301.00001v1
|
|
12
|
+
const match = fullId.match(/abs\/([^v]+)/);
|
|
13
|
+
return match ? match[1] : fullId;
|
|
14
|
+
}
|
|
15
|
+
function parsePaper(entry) {
|
|
16
|
+
const rawAuthors = entry["author"] ?? [];
|
|
17
|
+
const authors = rawAuthors.map((a) => ({
|
|
18
|
+
name: String(a["name"] ?? ""),
|
|
19
|
+
}));
|
|
20
|
+
const rawCategories = entry["category"] ?? [];
|
|
21
|
+
const categories = rawCategories.map((c) => ({
|
|
22
|
+
term: String(c["@_term"] ?? ""),
|
|
23
|
+
scheme: c["@_scheme"],
|
|
24
|
+
label: c["@_label"],
|
|
25
|
+
}));
|
|
26
|
+
const rawLinks = entry["link"] ?? [];
|
|
27
|
+
const links = rawLinks.map((l) => ({
|
|
28
|
+
href: String(l["@_href"] ?? ""),
|
|
29
|
+
rel: l["@_rel"],
|
|
30
|
+
type: l["@_type"],
|
|
31
|
+
title: l["@_title"],
|
|
32
|
+
}));
|
|
33
|
+
const pdfLink = links.find((l) => l.title === "pdf" || l.type === "application/pdf");
|
|
34
|
+
const pdfUrl = pdfLink?.href;
|
|
35
|
+
const primaryCategoryRaw = entry["arxiv:primary_category"];
|
|
36
|
+
const primaryCategory = primaryCategoryRaw
|
|
37
|
+
? {
|
|
38
|
+
term: String(primaryCategoryRaw["@_term"] ?? ""),
|
|
39
|
+
scheme: primaryCategoryRaw["@_scheme"],
|
|
40
|
+
}
|
|
41
|
+
: undefined;
|
|
42
|
+
const fullId = String(entry["id"] ?? "");
|
|
43
|
+
return {
|
|
44
|
+
id: fullId,
|
|
45
|
+
arxivId: extractArxivId(fullId),
|
|
46
|
+
title: String(entry["title"] ?? "").replace(/\s+/g, " ").trim(),
|
|
47
|
+
summary: String(entry["summary"] ?? "").replace(/\s+/g, " ").trim(),
|
|
48
|
+
authors,
|
|
49
|
+
categories,
|
|
50
|
+
primaryCategory,
|
|
51
|
+
published: String(entry["published"] ?? ""),
|
|
52
|
+
updated: String(entry["updated"] ?? ""),
|
|
53
|
+
links,
|
|
54
|
+
pdfUrl,
|
|
55
|
+
doi: entry["arxiv:doi"],
|
|
56
|
+
journalRef: entry["arxiv:journal_ref"],
|
|
57
|
+
comment: entry["arxiv:comment"],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export class ArxivApiClient {
|
|
61
|
+
async search(params) {
|
|
62
|
+
const { query, start = 0, maxResults = 10, sortBy = SortBy.RELEVANCE, sortOrder = SortOrder.DESCENDING } = params;
|
|
63
|
+
const response = await axios.get(BASE_URL, {
|
|
64
|
+
params: {
|
|
65
|
+
search_query: query,
|
|
66
|
+
start,
|
|
67
|
+
max_results: maxResults,
|
|
68
|
+
sortBy,
|
|
69
|
+
sortOrder,
|
|
70
|
+
},
|
|
71
|
+
timeout: 30000,
|
|
72
|
+
});
|
|
73
|
+
return this.parseResponse(response.data);
|
|
74
|
+
}
|
|
75
|
+
async getById(ids) {
|
|
76
|
+
const response = await axios.get(BASE_URL, {
|
|
77
|
+
params: {
|
|
78
|
+
id_list: ids.join(","),
|
|
79
|
+
max_results: ids.length,
|
|
80
|
+
},
|
|
81
|
+
timeout: 30000,
|
|
82
|
+
});
|
|
83
|
+
return this.parseResponse(response.data);
|
|
84
|
+
}
|
|
85
|
+
parseResponse(xml) {
|
|
86
|
+
const parsed = parser.parse(xml);
|
|
87
|
+
const feed = parsed["feed"];
|
|
88
|
+
const totalResults = parseInt(String(feed["opensearch:totalResults"]?.["#text"] ?? feed["opensearch:totalResults"] ?? "0"), 10);
|
|
89
|
+
const startIndex = parseInt(String(feed["opensearch:startIndex"]?.["#text"] ?? feed["opensearch:startIndex"] ?? "0"), 10);
|
|
90
|
+
const itemsPerPage = parseInt(String(feed["opensearch:itemsPerPage"]?.["#text"] ?? feed["opensearch:itemsPerPage"] ?? "0"), 10);
|
|
91
|
+
const rawEntries = feed["entry"] ?? [];
|
|
92
|
+
const papers = rawEntries.map(parsePaper);
|
|
93
|
+
return { totalResults, startIndex, itemsPerPage, papers };
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { ArxivApiClient } from "./api.js";
|
|
6
|
+
import { ResponseFormat, SortBy, SortOrder, ARXIV_CATEGORIES } from "./types.js";
|
|
7
|
+
const api = new ArxivApiClient();
|
|
8
|
+
const server = new McpServer({
|
|
9
|
+
name: "arxiv-mcp-server",
|
|
10
|
+
version: "1.0.0",
|
|
11
|
+
});
|
|
12
|
+
const CHARACTER_LIMIT = 50000;
|
|
13
|
+
// ─── Formatting helpers ────────────────────────────────────────────────────────
|
|
14
|
+
function formatPaperMarkdown(paper) {
|
|
15
|
+
const lines = [];
|
|
16
|
+
lines.push(`## ${paper.title}`);
|
|
17
|
+
lines.push(`**arXiv ID**: [${paper.arxivId}](https://arxiv.org/abs/${paper.arxivId})`);
|
|
18
|
+
lines.push(`**Authors**: ${paper.authors.map((a) => a.name).join(", ")}`);
|
|
19
|
+
lines.push(`**Published**: ${paper.published.split("T")[0]}`);
|
|
20
|
+
if (paper.updated !== paper.published) {
|
|
21
|
+
lines.push(`**Updated**: ${paper.updated.split("T")[0]}`);
|
|
22
|
+
}
|
|
23
|
+
const cats = paper.categories.map((c) => {
|
|
24
|
+
const label = ARXIV_CATEGORIES[c.term];
|
|
25
|
+
return label ? `${c.term} (${label})` : c.term;
|
|
26
|
+
});
|
|
27
|
+
lines.push(`**Categories**: ${cats.join(", ")}`);
|
|
28
|
+
if (paper.doi)
|
|
29
|
+
lines.push(`**DOI**: ${paper.doi}`);
|
|
30
|
+
if (paper.journalRef)
|
|
31
|
+
lines.push(`**Journal**: ${paper.journalRef}`);
|
|
32
|
+
if (paper.pdfUrl)
|
|
33
|
+
lines.push(`**PDF**: ${paper.pdfUrl}`);
|
|
34
|
+
if (paper.comment)
|
|
35
|
+
lines.push(`**Comment**: ${paper.comment}`);
|
|
36
|
+
lines.push(`\n### Abstract\n\n${paper.summary}`);
|
|
37
|
+
return lines.join("\n");
|
|
38
|
+
}
|
|
39
|
+
function formatPaperListMarkdown(papers, total, start) {
|
|
40
|
+
const lines = [];
|
|
41
|
+
lines.push(`# arXiv Search Results\n`);
|
|
42
|
+
lines.push(`Showing ${papers.length} of ${total} results (offset: ${start})\n`);
|
|
43
|
+
papers.forEach((paper, i) => {
|
|
44
|
+
lines.push(`### ${i + 1 + start}. ${paper.title}`);
|
|
45
|
+
lines.push(`**arXiv**: [${paper.arxivId}](https://arxiv.org/abs/${paper.arxivId}) | ` +
|
|
46
|
+
`**Authors**: ${paper.authors.slice(0, 3).map((a) => a.name).join(", ")}${paper.authors.length > 3 ? " et al." : ""}`);
|
|
47
|
+
lines.push(`**Published**: ${paper.published.split("T")[0]} | ` +
|
|
48
|
+
`**Category**: ${paper.primaryCategory?.term ?? paper.categories[0]?.term ?? "N/A"}`);
|
|
49
|
+
lines.push(`> ${paper.summary.substring(0, 300)}${paper.summary.length > 300 ? "..." : ""}`);
|
|
50
|
+
lines.push("");
|
|
51
|
+
});
|
|
52
|
+
if (total > start + papers.length) {
|
|
53
|
+
lines.push(`*${total - start - papers.length} more results available. Use \`offset=${start + papers.length}\` to continue.*`);
|
|
54
|
+
}
|
|
55
|
+
return lines.join("\n");
|
|
56
|
+
}
|
|
57
|
+
function truncate(content) {
|
|
58
|
+
if (content.length <= CHARACTER_LIMIT)
|
|
59
|
+
return content;
|
|
60
|
+
return content.substring(0, CHARACTER_LIMIT) +
|
|
61
|
+
"\n\n> Content truncated due to size limit. Use pagination to fetch more.";
|
|
62
|
+
}
|
|
63
|
+
// ─── Shared schemas ────────────────────────────────────────────────────────────
|
|
64
|
+
const paginationSchema = {
|
|
65
|
+
limit: z.number().int().min(1).max(100).default(10).describe("Number of results to return (max 100)"),
|
|
66
|
+
offset: z.number().int().min(0).default(0).describe("Offset for pagination"),
|
|
67
|
+
};
|
|
68
|
+
const sortSchema = {
|
|
69
|
+
sort_by: z.nativeEnum(SortBy).default(SortBy.RELEVANCE).describe("Sort field: relevance | lastUpdatedDate | submittedDate"),
|
|
70
|
+
sort_order: z.nativeEnum(SortOrder).default(SortOrder.DESCENDING).describe("Sort order: ascending | descending"),
|
|
71
|
+
};
|
|
72
|
+
const responseFormatSchema = {
|
|
73
|
+
response_format: z
|
|
74
|
+
.nativeEnum(ResponseFormat)
|
|
75
|
+
.default(ResponseFormat.MARKDOWN)
|
|
76
|
+
.describe("Output format: markdown or json"),
|
|
77
|
+
};
|
|
78
|
+
// ─── Tool: arxiv_search ────────────────────────────────────────────────────────
|
|
79
|
+
server.registerTool("arxiv_search", {
|
|
80
|
+
title: "Search arXiv Papers",
|
|
81
|
+
description: "Search arXiv for academic papers using a free-text query. Supports boolean operators (AND, OR, NOT), " +
|
|
82
|
+
"field prefixes (ti: title, au: author, abs: abstract, cat: category, all:), " +
|
|
83
|
+
"e.g. 'ti:transformer AND cat:cs.LG'.",
|
|
84
|
+
inputSchema: z.object({
|
|
85
|
+
query: z.string().describe("Search query. May include arXiv field prefixes: ti:(title), au:(author), abs:(abstract), " +
|
|
86
|
+
"cat:(category), all:(any field). Supports AND/OR/NOT operators."),
|
|
87
|
+
...paginationSchema,
|
|
88
|
+
...sortSchema,
|
|
89
|
+
...responseFormatSchema,
|
|
90
|
+
}),
|
|
91
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
92
|
+
}, async (params) => {
|
|
93
|
+
const result = await api.search({
|
|
94
|
+
query: params.query,
|
|
95
|
+
start: params.offset,
|
|
96
|
+
maxResults: params.limit,
|
|
97
|
+
sortBy: params.sort_by,
|
|
98
|
+
sortOrder: params.sort_order,
|
|
99
|
+
});
|
|
100
|
+
if (params.response_format === ResponseFormat.JSON) {
|
|
101
|
+
return {
|
|
102
|
+
content: [{ type: "text", text: truncate(JSON.stringify(result, null, 2)) }],
|
|
103
|
+
structuredContent: result,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
content: [
|
|
108
|
+
{
|
|
109
|
+
type: "text",
|
|
110
|
+
text: truncate(formatPaperListMarkdown(result.papers, result.totalResults, result.startIndex)),
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
};
|
|
114
|
+
});
|
|
115
|
+
// ─── Tool: arxiv_get_paper ─────────────────────────────────────────────────────
|
|
116
|
+
server.registerTool("arxiv_get_paper", {
|
|
117
|
+
title: "Get arXiv Paper Details",
|
|
118
|
+
description: "Retrieve full details for one or more arXiv papers by their IDs (e.g. '2301.00001' or '2301.00001v2'). " +
|
|
119
|
+
"Returns title, authors, abstract, categories, PDF link, DOI, and journal reference.",
|
|
120
|
+
inputSchema: z.object({
|
|
121
|
+
ids: z
|
|
122
|
+
.array(z.string())
|
|
123
|
+
.min(1)
|
|
124
|
+
.max(20)
|
|
125
|
+
.describe("List of arXiv paper IDs (e.g. ['2301.00001', '1706.03762'])"),
|
|
126
|
+
...responseFormatSchema,
|
|
127
|
+
}),
|
|
128
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
129
|
+
}, async (params) => {
|
|
130
|
+
const result = await api.getById(params.ids);
|
|
131
|
+
if (result.papers.length === 0) {
|
|
132
|
+
return { content: [{ type: "text", text: "No papers found for the given IDs." }] };
|
|
133
|
+
}
|
|
134
|
+
if (params.response_format === ResponseFormat.JSON) {
|
|
135
|
+
return {
|
|
136
|
+
content: [{ type: "text", text: truncate(JSON.stringify(result.papers, null, 2)) }],
|
|
137
|
+
structuredContent: { papers: result.papers },
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const markdown = result.papers.map(formatPaperMarkdown).join("\n\n---\n\n");
|
|
141
|
+
return { content: [{ type: "text", text: truncate(markdown) }] };
|
|
142
|
+
});
|
|
143
|
+
// ─── Tool: arxiv_search_by_author ─────────────────────────────────────────────
|
|
144
|
+
server.registerTool("arxiv_search_by_author", {
|
|
145
|
+
title: "Search arXiv Papers by Author",
|
|
146
|
+
description: "Search arXiv for papers by a specific author name.",
|
|
147
|
+
inputSchema: z.object({
|
|
148
|
+
author: z.string().describe("Author name to search for (e.g. 'Yann LeCun', 'Hinton')"),
|
|
149
|
+
...paginationSchema,
|
|
150
|
+
...sortSchema,
|
|
151
|
+
...responseFormatSchema,
|
|
152
|
+
}),
|
|
153
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
154
|
+
}, async (params) => {
|
|
155
|
+
const result = await api.search({
|
|
156
|
+
query: `au:${params.author}`,
|
|
157
|
+
start: params.offset,
|
|
158
|
+
maxResults: params.limit,
|
|
159
|
+
sortBy: params.sort_by,
|
|
160
|
+
sortOrder: params.sort_order,
|
|
161
|
+
});
|
|
162
|
+
if (params.response_format === ResponseFormat.JSON) {
|
|
163
|
+
return {
|
|
164
|
+
content: [{ type: "text", text: truncate(JSON.stringify(result, null, 2)) }],
|
|
165
|
+
structuredContent: result,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
content: [
|
|
170
|
+
{
|
|
171
|
+
type: "text",
|
|
172
|
+
text: truncate(formatPaperListMarkdown(result.papers, result.totalResults, result.startIndex)),
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
// ─── Tool: arxiv_search_by_category ───────────────────────────────────────────
|
|
178
|
+
server.registerTool("arxiv_search_by_category", {
|
|
179
|
+
title: "Search arXiv Papers by Category",
|
|
180
|
+
description: "Browse or search papers within a specific arXiv subject category " +
|
|
181
|
+
"(e.g. cs.AI, cs.LG, cs.CV, stat.ML, quant-ph). Use arxiv_list_categories to see all available categories.",
|
|
182
|
+
inputSchema: z.object({
|
|
183
|
+
category: z
|
|
184
|
+
.string()
|
|
185
|
+
.describe("arXiv category code (e.g. 'cs.AI', 'cs.LG', 'stat.ML', 'quant-ph')"),
|
|
186
|
+
query: z
|
|
187
|
+
.string()
|
|
188
|
+
.optional()
|
|
189
|
+
.describe("Optional additional search query to filter within the category"),
|
|
190
|
+
...paginationSchema,
|
|
191
|
+
sort_by: z.nativeEnum(SortBy).default(SortBy.SUBMITTED).describe("Sort field: relevance | lastUpdatedDate | submittedDate"),
|
|
192
|
+
sort_order: z.nativeEnum(SortOrder).default(SortOrder.DESCENDING).describe("Sort order: ascending | descending"),
|
|
193
|
+
...responseFormatSchema,
|
|
194
|
+
}),
|
|
195
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
196
|
+
}, async (params) => {
|
|
197
|
+
const queryParts = [`cat:${params.category}`];
|
|
198
|
+
if (params.query)
|
|
199
|
+
queryParts.push(`AND all:${params.query}`);
|
|
200
|
+
const result = await api.search({
|
|
201
|
+
query: queryParts.join(" "),
|
|
202
|
+
start: params.offset,
|
|
203
|
+
maxResults: params.limit,
|
|
204
|
+
sortBy: params.sort_by,
|
|
205
|
+
sortOrder: params.sort_order,
|
|
206
|
+
});
|
|
207
|
+
if (params.response_format === ResponseFormat.JSON) {
|
|
208
|
+
return {
|
|
209
|
+
content: [{ type: "text", text: truncate(JSON.stringify(result, null, 2)) }],
|
|
210
|
+
structuredContent: result,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
content: [
|
|
215
|
+
{
|
|
216
|
+
type: "text",
|
|
217
|
+
text: truncate(formatPaperListMarkdown(result.papers, result.totalResults, result.startIndex)),
|
|
218
|
+
},
|
|
219
|
+
],
|
|
220
|
+
};
|
|
221
|
+
});
|
|
222
|
+
// ─── Tool: arxiv_list_categories ──────────────────────────────────────────────
|
|
223
|
+
server.registerTool("arxiv_list_categories", {
|
|
224
|
+
title: "List arXiv Subject Categories",
|
|
225
|
+
description: "List the commonly used arXiv subject categories with their descriptions.",
|
|
226
|
+
inputSchema: z.object({}),
|
|
227
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
|
|
228
|
+
}, async () => {
|
|
229
|
+
const lines = ["# arXiv Subject Categories\n"];
|
|
230
|
+
let currentGroup = "";
|
|
231
|
+
for (const [code, label] of Object.entries(ARXIV_CATEGORIES)) {
|
|
232
|
+
const group = code.split(".")[0];
|
|
233
|
+
if (group !== currentGroup) {
|
|
234
|
+
lines.push(`\n## ${group.toUpperCase()}\n`);
|
|
235
|
+
currentGroup = group;
|
|
236
|
+
}
|
|
237
|
+
lines.push(`- **${code}** — ${label}`);
|
|
238
|
+
}
|
|
239
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
240
|
+
});
|
|
241
|
+
// ─── Start server ──────────────────────────────────────────────────────────────
|
|
242
|
+
async function main() {
|
|
243
|
+
const transport = new StdioServerTransport();
|
|
244
|
+
await server.connect(transport);
|
|
245
|
+
console.error("arXiv MCP server running on stdio");
|
|
246
|
+
}
|
|
247
|
+
main().catch((err) => {
|
|
248
|
+
console.error("Fatal error:", err);
|
|
249
|
+
process.exit(1);
|
|
250
|
+
});
|
|
251
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface ArxivAuthor {
|
|
2
|
+
name: string;
|
|
3
|
+
}
|
|
4
|
+
export interface ArxivCategory {
|
|
5
|
+
term: string;
|
|
6
|
+
scheme?: string;
|
|
7
|
+
label?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ArxivLink {
|
|
10
|
+
href: string;
|
|
11
|
+
rel?: string;
|
|
12
|
+
type?: string;
|
|
13
|
+
title?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ArxivPaper {
|
|
16
|
+
id: string;
|
|
17
|
+
arxivId: string;
|
|
18
|
+
title: string;
|
|
19
|
+
summary: string;
|
|
20
|
+
authors: ArxivAuthor[];
|
|
21
|
+
categories: ArxivCategory[];
|
|
22
|
+
primaryCategory?: ArxivCategory;
|
|
23
|
+
published: string;
|
|
24
|
+
updated: string;
|
|
25
|
+
links: ArxivLink[];
|
|
26
|
+
pdfUrl?: string;
|
|
27
|
+
doi?: string;
|
|
28
|
+
journalRef?: string;
|
|
29
|
+
comment?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface ArxivSearchResult {
|
|
32
|
+
totalResults: number;
|
|
33
|
+
startIndex: number;
|
|
34
|
+
itemsPerPage: number;
|
|
35
|
+
papers: ArxivPaper[];
|
|
36
|
+
}
|
|
37
|
+
export declare enum SortBy {
|
|
38
|
+
RELEVANCE = "relevance",
|
|
39
|
+
LAST_UPDATED = "lastUpdatedDate",
|
|
40
|
+
SUBMITTED = "submittedDate"
|
|
41
|
+
}
|
|
42
|
+
export declare enum SortOrder {
|
|
43
|
+
ASCENDING = "ascending",
|
|
44
|
+
DESCENDING = "descending"
|
|
45
|
+
}
|
|
46
|
+
export declare enum ResponseFormat {
|
|
47
|
+
MARKDOWN = "markdown",
|
|
48
|
+
JSON = "json"
|
|
49
|
+
}
|
|
50
|
+
/** Major arXiv subject categories with friendly names */
|
|
51
|
+
export declare const ARXIV_CATEGORIES: Record<string, string>;
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,oBAAY,MAAM;IAChB,SAAS,cAAc;IACvB,YAAY,oBAAoB;IAChC,SAAS,kBAAkB;CAC5B;AAED,oBAAY,SAAS;IACnB,SAAS,cAAc;IACvB,UAAU,eAAe;CAC1B;AAED,oBAAY,cAAc;IACxB,QAAQ,aAAa;IACrB,IAAI,SAAS;CACd;AAED,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmCnD,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export var SortBy;
|
|
2
|
+
(function (SortBy) {
|
|
3
|
+
SortBy["RELEVANCE"] = "relevance";
|
|
4
|
+
SortBy["LAST_UPDATED"] = "lastUpdatedDate";
|
|
5
|
+
SortBy["SUBMITTED"] = "submittedDate";
|
|
6
|
+
})(SortBy || (SortBy = {}));
|
|
7
|
+
export var SortOrder;
|
|
8
|
+
(function (SortOrder) {
|
|
9
|
+
SortOrder["ASCENDING"] = "ascending";
|
|
10
|
+
SortOrder["DESCENDING"] = "descending";
|
|
11
|
+
})(SortOrder || (SortOrder = {}));
|
|
12
|
+
export var ResponseFormat;
|
|
13
|
+
(function (ResponseFormat) {
|
|
14
|
+
ResponseFormat["MARKDOWN"] = "markdown";
|
|
15
|
+
ResponseFormat["JSON"] = "json";
|
|
16
|
+
})(ResponseFormat || (ResponseFormat = {}));
|
|
17
|
+
/** Major arXiv subject categories with friendly names */
|
|
18
|
+
export const ARXIV_CATEGORIES = {
|
|
19
|
+
// Computer Science
|
|
20
|
+
"cs.AI": "Artificial Intelligence",
|
|
21
|
+
"cs.CL": "Computation and Language (NLP)",
|
|
22
|
+
"cs.CV": "Computer Vision and Pattern Recognition",
|
|
23
|
+
"cs.LG": "Machine Learning",
|
|
24
|
+
"cs.NE": "Neural and Evolutionary Computing",
|
|
25
|
+
"cs.RO": "Robotics",
|
|
26
|
+
"cs.CR": "Cryptography and Security",
|
|
27
|
+
"cs.DS": "Data Structures and Algorithms",
|
|
28
|
+
"cs.DC": "Distributed, Parallel, and Cluster Computing",
|
|
29
|
+
"cs.SE": "Software Engineering",
|
|
30
|
+
"cs.DB": "Databases",
|
|
31
|
+
"cs.IR": "Information Retrieval",
|
|
32
|
+
"cs.PL": "Programming Languages",
|
|
33
|
+
"cs.SY": "Systems and Control",
|
|
34
|
+
// Mathematics
|
|
35
|
+
"math.ST": "Statistics Theory",
|
|
36
|
+
"math.PR": "Probability",
|
|
37
|
+
"math.CO": "Combinatorics",
|
|
38
|
+
"math.OC": "Optimization and Control",
|
|
39
|
+
// Statistics
|
|
40
|
+
"stat.ML": "Machine Learning (Statistics)",
|
|
41
|
+
"stat.AP": "Applications",
|
|
42
|
+
"stat.CO": "Computation",
|
|
43
|
+
// Physics
|
|
44
|
+
"physics.comp-ph": "Computational Physics",
|
|
45
|
+
"quant-ph": "Quantum Physics",
|
|
46
|
+
"hep-th": "High Energy Physics (Theory)",
|
|
47
|
+
// Biology
|
|
48
|
+
"q-bio.NC": "Neurons and Cognition",
|
|
49
|
+
"q-bio.QM": "Quantitative Methods",
|
|
50
|
+
// Economics
|
|
51
|
+
"econ.ML": "Econometrics (ML)",
|
|
52
|
+
"econ.GN": "General Economics",
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAyCA,MAAM,CAAN,IAAY,MAIX;AAJD,WAAY,MAAM;IAChB,iCAAuB,CAAA;IACvB,0CAAgC,CAAA;IAChC,qCAA2B,CAAA;AAC7B,CAAC,EAJW,MAAM,KAAN,MAAM,QAIjB;AAED,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,oCAAuB,CAAA;IACvB,sCAAyB,CAAA;AAC3B,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAED,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,uCAAqB,CAAA;IACrB,+BAAa,CAAA;AACf,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AAED,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,mBAAmB;IACnB,OAAO,EAAE,yBAAyB;IAClC,OAAO,EAAE,gCAAgC;IACzC,OAAO,EAAE,yCAAyC;IAClD,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,mCAAmC;IAC5C,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,2BAA2B;IACpC,OAAO,EAAE,gCAAgC;IACzC,OAAO,EAAE,8CAA8C;IACvD,OAAO,EAAE,sBAAsB;IAC/B,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,uBAAuB;IAChC,OAAO,EAAE,uBAAuB;IAChC,OAAO,EAAE,qBAAqB;IAC9B,cAAc;IACd,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,aAAa;IACxB,SAAS,EAAE,eAAe;IAC1B,SAAS,EAAE,0BAA0B;IACrC,aAAa;IACb,SAAS,EAAE,+BAA+B;IAC1C,SAAS,EAAE,cAAc;IACzB,SAAS,EAAE,aAAa;IACxB,UAAU;IACV,iBAAiB,EAAE,uBAAuB;IAC1C,UAAU,EAAE,iBAAiB;IAC7B,QAAQ,EAAE,8BAA8B;IACxC,UAAU;IACV,UAAU,EAAE,uBAAuB;IACnC,UAAU,EAAE,sBAAsB;IAClC,YAAY;IACZ,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;CAC/B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@fre4x/arxiv",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "An arXiv MCP server for searching and retrieving academic papers.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"arxiv": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc",
|
|
15
|
+
"typecheck": "tsc --noEmit",
|
|
16
|
+
"prepublishOnly": "npm run build",
|
|
17
|
+
"start": "node dist/index.js",
|
|
18
|
+
"dev": "tsx src/index.ts",
|
|
19
|
+
"watch": "tsc -w"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"mcp",
|
|
23
|
+
"arxiv",
|
|
24
|
+
"mcp-server",
|
|
25
|
+
"research",
|
|
26
|
+
"papers",
|
|
27
|
+
"ai"
|
|
28
|
+
],
|
|
29
|
+
"author": "fritzprix",
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
33
|
+
"axios": "^1.13.5",
|
|
34
|
+
"fast-xml-parser": "^4.5.0",
|
|
35
|
+
"zod": "^4.3.6"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^25.3.0",
|
|
39
|
+
"tsx": "^4.21.0",
|
|
40
|
+
"typescript": "^5.9.3"
|
|
41
|
+
}
|
|
42
|
+
}
|