Academic Paper Search (by Keyword)
omnial/papers
Given a search query, returns up to 50 matching research papers pulled from arXiv, PubMed, OpenAlex, Crossref, and Semantic Scholar and deduplicated into one ranked list: title, authors, publication year and venue, abstract, citation count, DOI, and links to the paper page and (when available) a direct PDF.
Price
$0.0301 per call
You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $0.50.
Data source
arXiv, PubMed, OpenAlex, Crossref and Semantic Scholar
Data from arXiv, PubMed, OpenAlex, Crossref and Semantic Scholar.
Use it
Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.
Connect once and your AI can find and run this tool, and any other it needs.
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "omnial/papers" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "omnial/papers" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "omnial/papers", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "omnial/papers", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.
Pricing
Every charge this tool can incur.
| Charge | Price |
|---|---|
Per call | $0.0301 |
- Updated
- Oct 25, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "search query / keywords"
},
"sort": {
"enum": [
"relevance",
"recency",
"citations"
],
"type": "string",
"default": "relevance"
},
"source": {
"enum": [
"all",
"arxiv",
"pubmed",
"openalex",
"crossref",
"semanticscholar"
],
"type": "string",
"default": "all"
},
"year_to": {
"type": "string",
"description": "latest publication year (inclusive)"
},
"maxItems": {
"type": "string",
"default": "20",
"description": "1-50"
},
"year_from": {
"type": "string",
"description": "earliest publication year (inclusive)"
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"required": [
"count",
"items"
],
"properties": {
"count": {
"type": "number",
"description": "Number of items returned by this call, e.g. 20 for a broad query or 0 for no match."
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"source",
"sources",
"title",
"abstract",
"authors",
"year",
"published",
"venue",
"url",
"pdfUrl",
"doi",
"citationCount",
"citedByCount"
],
"properties": {
"doi": {
"type": [
"string",
"null"
],
"description": "Observed null on several real arxiv preprints that have not been assigned a DOI."
},
"url": {
"type": "string",
"description": "Link to the paper's page on its source site."
},
"type": {
"type": "string",
"description": "Observed as the literal string 'paper' on every real item."
},
"year": {
"type": [
"number",
"null"
],
"description": "Null when the source carries no year."
},
"title": {
"type": "string"
},
"venue": {
"type": [
"string",
"null"
],
"description": "Journal, conference, or repository name, e.g. 'arXiv', 'Nature', 'New England Journal of Medicine'. Null when the source lists none."
},
"pdfUrl": {
"type": [
"string",
"null"
],
"description": "Direct PDF link when the source offers one; observed null for several real openalex items with no open PDF."
},
"source": {
"type": "string",
"description": "Which upstream index this specific result came from, e.g. 'arxiv', 'openalex'."
},
"authors": {
"type": "array",
"items": {
"type": "string"
},
"description": "Author full names, in order as returned by the source index."
},
"sources": {
"type": "array",
"items": {
"type": "string"
},
"description": "Same value as `source`, wrapped in a single-element array on every real item observed."
},
"abstract": {
"type": [
"string",
"null"
],
"description": "Observed null on several real openalex items (abstract not available from that index), a full paragraph otherwise."
},
"published": {
"type": [
"string",
"null"
],
"description": "Publication date/time. Null when the source carries none. Observed as a full ISO 8601 timestamp for arxiv items and a bare YYYY-MM-DD date for openalex items -- format varies by source, not a fixed pattern."
},
"citedByCount": {
"type": [
"number",
"null"
],
"description": "Same value as `citationCount` on every real item observed (openalex-sourced items only) -- null wherever citationCount is null."
},
"citationCount": {
"type": [
"number",
"null"
],
"description": "Observed null for every real arxiv item (arxiv's own index does not track citation counts) and a real integer for every real openalex item."
},
"openAccessUrl": {
"type": [
"string",
"null"
],
"description": "Open-access copy link when one exists; observed null for several real openalex items with no open-access version."
}
},
"additionalProperties": true
},
"description": "Empty array on a genuinely no-match query (confirmed real, not inferred)."
}
},
"description": "The paper-search result.",
"additionalProperties": true
}