# arxiv-keyword

New arXiv papers matching a keyword, from the official Atom API.

Category: News and research. Allow `export.arxiv.org`.

Updated 2026-10-17. HTML: https://asipipes.com/pipes-library/arxiv-keyword

## CLI

```
pipes run examples/arxiv-keyword.pipe.yaml
```

## MCP call

```json
{
  "name": "pipe__arxiv-keyword",
  "arguments": {}
}
```

## Pipe file

`examples/arxiv-keyword.pipe.yaml`

```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 }
```
