Pipe library / arxiv-keyword
arxiv-keyword
New arXiv papers matching a keyword, from the official Atom API.
News and research
export.arxiv.org
CLI
pipes run examples/arxiv-keyword.pipe.yaml
MCP call
{
"name": "pipe__arxiv-keyword",
"arguments": {}
}
Pipe file
examples/arxiv-keyword.pipe.yaml
pipes: 0
name: arxiv-keyword
version: 0.1.0
description: New arXiv papers matching a keyword, from the official Atom API.
permissions:
network: [export.arxiv.org]
inputs:
type: object
properties:
keyword:
type: string
description: Search text sent to the arXiv Atom API.
minLength: 2
default: wasm
max_results:
type: integer
description: How many papers to fetch, newest submission first.
minimum: 1
maximum: 10
default: 5
mode:
type: string
description: new returns only papers since the last call in this workspace. all returns every paper in this response.
enum: [new, all]
default: new
required: [keyword]
outputs:
type: object
properties:
text: { type: string }
count: { type: integer }
required: [text, count]
output:
text: "${steps.format.text}"
count: "${steps.format.count}"
steps:
- id: fetch
block: fetch_http
with:
url: https://export.arxiv.org/api/query
query:
search_query: "all:${inputs.keyword}"
start: "0"
max_results: "${inputs.max_results}"
sortBy: submittedDate
sortOrder: descending
max_bytes: 500000
retry: { max: 0 }
timeout_ms: 12000
- id: papers
block: parse_rss
in: "${steps.fetch}"
- id: new
block: diff_since_last
in: "${steps.papers}"
with:
key: [id]
compare: [id]
emit: [added]
first_run: all
- id: format
block: format
in: "${steps.new}"
with:
header: "arXiv:\n"
item_template: "- ${item.title} ${item.link}"
separator: "\n"
- id: print
block: emit_stdout
in: "${steps.format.text}"
with: { format: text }