Crossref Works Search (Papers, Books and Datasets by Text, Author or Filter)
crossref/work-search
Searches Crossref, the scholarly DOI registry, for papers, books, chapters, proceedings, datasets and preprints. Give free text (a title or a reference string), an author name, an exact filter (publication date window, work type, journal ISSN, ORCID, funder id, publisher prefix, member id), or any mix. Each hit returns its DOI, URL, title, authors (with ORCID where deposited), journal or book title, publisher, type, issued date, volume, issue, pages, ISSN and Crossref's own citation count (is-referenced-by-count: citations from other Crossref-registered works only, not Google Scholar's). Optionally ranks an exact filter set by citation count. Abstracts are never returned. Free text matches any of its words, so use relevance order and check the titles. Metadata from Crossref (api.crossref.org); bibliographic metadata is facts reusable without restriction.
Price
$0.0026 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 $5.
Data source
Metadata from Crossref (api.crossref.org). Crossref's bibliographic metadata is facts, not subject to copyright, and its own data is released as CC0; abstracts are publisher or author copyright and are never returned. Served by Eden Engine; not an official Crossref product.
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: "crossref/work-search" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "crossref/work-search" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "crossref/work-search", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "crossref/work-search", 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.0026 |
- Updated
- Oct 20, 2026
Input and output schemas
Input schema
{
"not": {
"anyOf": [
{
"required": [
"query"
]
},
{
"required": [
"author"
]
}
],
"required": [
"sort"
]
},
"type": "object",
"anyOf": [
{
"required": [
"query"
]
},
{
"required": [
"author"
]
},
{
"required": [
"filter"
]
}
],
"properties": {
"rows": {
"type": "integer",
"default": 10,
"maximum": 100,
"minimum": 1,
"description": "How many works to return, 1 to 100."
},
"sort": {
"enum": [
"is-referenced-by-count"
],
"type": "string",
"description": "Rank the matches by Crossref citation count, highest first. Only allowed with filter alone, with no query and no author, because a ranked free-text match set is mostly off-topic (see query). Leave out for relevance order."
},
"query": {
"type": "string",
"maxLength": 300,
"minLength": 2,
"description": "Free text matched against title, authors, journal and year, for example a paper title or a pasted reference. Matches works containing ANY of the words, ranked by relevance, so a long specific string finds a specific work and a short vague one returns millions (total-results says how many). Relevance order is the only order available with this field."
},
"author": {
"type": "string",
"maxLength": 100,
"minLength": 2,
"description": "An author name, for example Yoshua Bengio. Matches ANY word of the name, ranked by relevance (1,470 matches for Yoshua Bengio, most with another author), so the best hits are the person and the tail is not; check each hit's author list. For one exact person use an orcid filter instead. Relevance order is the only order available with this field."
},
"filter": {
"type": "string",
"pattern": "^((from|until)-pub-date:\\d{4}(-\\d{2}(-\\d{2})?)?|type:[a-z-]+|issn:\\d{4}-\\d{3}[\\dXx]|orcid:(https://orcid\\.org/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dXx]|has-(orcid|references|funder):(true|false)|funder:10\\.13039/\\d+|prefix:10\\.\\d{4,9}|member:\\d+)(,((from|until)-pub-date:\\d{4}(-\\d{2}(-\\d{2})?)?|type:[a-z-]+|issn:\\d{4}-\\d{3}[\\dXx]|orcid:(https://orcid\\.org/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dXx]|has-(orcid|references|funder):(true|false)|funder:10\\.13039/\\d+|prefix:10\\.\\d{4,9}|member:\\d+))*$",
"maxLength": 400,
"description": "Exact filters, comma-separated name:value terms. Different names must all hold; the same name repeated means either. Names: from-pub-date and until-pub-date (yyyy, yyyy-MM or yyyy-MM-dd; inclusive, and a year runs to the end of that year; until-pub-date is what excludes records dated in the future), type (a Crossref type id such as journal-article, book-chapter, proceedings-article, posted-content, dataset, book, monograph), issn (hyphenated, print or electronic), orcid (0000-0002-1825-0097 or its https://orcid.org/ URL; the value publishers deposited, not verified identity), has-orcid, has-references, has-funder (true or false), funder (a funder DOI such as 10.13039/100000001), prefix (a DOI prefix such as 10.1038, the registrant at deposit time), member (a Crossref member id such as 297). Example: type:journal-article,from-pub-date:2024-01,until-pub-date:2024-12,issn:0028-0836."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9900,
"minimum": 0,
"description": "How many matches to skip, for paging. Crossref refuses offset plus rows above 10,000; split a larger pull into date windows with the filter instead."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"required": [
"status",
"message"
],
"properties": {
"status": {
"type": "string",
"description": "ok on success."
},
"message": {
"type": "object",
"required": [
"total-results",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"DOI"
],
"properties": {
"DOI": {
"type": "string",
"description": "The DOI, lowercased."
},
"URL": {
"type": "string",
"description": "https://doi.org/ plus the DOI."
},
"ISSN": {
"type": "array",
"items": {
"type": "string"
},
"description": "The container's ISSNs, print and electronic."
},
"page": {
"type": "string",
"description": "A page range (436-444) or an article number (100030)."
},
"type": {
"type": "string",
"description": "Crossref work type id, for example journal-article or book-chapter."
},
"issue": {
"type": "string",
"description": "Issue, where deposited."
},
"title": {
"type": "array",
"items": {
"type": "string"
},
"description": "The title as a one-element array."
},
"author": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"description": "Authors in order: given, family, sequence (first or additional), affiliation list, and ORCID with authenticated-orcid where the publisher deposited one. An organisation has name instead of given and family. Absent when none is deposited."
},
"issued": {
"type": "object",
"description": "Earliest known publication date as date-parts: [[year, month, day]], with month and day absent when not deposited, and [[null]] when the work has no date.",
"additionalProperties": true
},
"volume": {
"type": "string",
"description": "Volume, where deposited."
},
"publisher": {
"type": "string",
"description": "The publisher as deposited."
},
"container-title": {
"type": "array",
"items": {
"type": "string"
},
"description": "Journal, proceedings or book title as an array. Absent for standalone works."
},
"published-print": {
"type": "object",
"description": "Print publication date, same date-parts shape. Absent when none.",
"additionalProperties": true
},
"published-online": {
"type": "object",
"description": "Online publication date, same date-parts shape. Absent when none.",
"additionalProperties": true
},
"references-count": {
"type": "integer",
"description": "Entries in this work's own reference list, not citations received."
},
"is-referenced-by-count": {
"type": "integer",
"description": "Citations from other Crossref-registered works that deposited their references. Crossref's own count, not a global one."
}
},
"additionalProperties": true
},
"description": "The matching works, best first. Empty when nothing matches."
},
"total-results": {
"type": "integer",
"description": "How many works match in all, not how many are returned. For free text it counts works matching any word."
},
"items-per-page": {
"type": "integer",
"description": "The rows applied."
}
},
"additionalProperties": true
},
"message-type": {
"type": "string",
"description": "work-list."
}
},
"description": "Crossref's work-list response: status ok, message-type work-list, and message holding total-results (size of the whole matched set), items-per-page and items.",
"additionalProperties": true
}