/** * @fileoverview crossref_get_work — resolves a DOI to its full Crossref metadata record. * The deposited author list is paged by offset/limit the way crossref_get_references pages * references: the slice happens once in the handler, so structuredContent and content[] carry * the identical page, and authorCount reports the full deposited total. * A funder and an affiliation are the two organizations a record names, and a publisher may * assert either through the ROR registry instead of by name — so both are projected with the * identifier standing in for the name they lack, on both surfaces, rather than as a blank entry. * Editors, update links, and related identifiers are returned whole: none approaches the author * tail, and each is relayed entry for entry as deposited. Update links also feed the notice, * which shares its one string with the author-paging guidance. * @module mcp-server/tools/definitions/get-work.tool */ import { z } from '@cyanheads/mcp-ts-core'; import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors'; export declare const getWorkTool: import("@cyanheads/mcp-ts-core").ToolDefinition; limit: z.ZodDefault; }, z.core.$strip>, z.ZodObject<{ volume: z.ZodOptional; issue: z.ZodOptional; page: z.ZodOptional; articleNumber: z.ZodOptional; updatedBy: z.ZodOptional; updated: z.ZodOptional; month: z.ZodOptional; day: z.ZodOptional; }, z.core.$strip>>; }, z.core.$strip>>>; updateTo: z.ZodOptional; updated: z.ZodOptional; month: z.ZodOptional; day: z.ZodOptional; }, z.core.$strip>>; }, z.core.$strip>>>; doi: z.ZodString; title: z.ZodOptional; subtitle: z.ZodOptional; type: z.ZodOptional; authors: z.ZodOptional; family: z.ZodOptional; name: z.ZodOptional; orcid: z.ZodOptional; affiliation: z.ZodOptional; ror: z.ZodOptional; }, z.core.$strip>>>; sequence: z.ZodOptional; }, z.core.$strip>>>; authorCount: z.ZodOptional; offset: z.ZodOptional; editors: z.ZodOptional; family: z.ZodOptional; name: z.ZodOptional; orcid: z.ZodOptional; affiliation: z.ZodOptional; ror: z.ZodOptional; }, z.core.$strip>>>; sequence: z.ZodOptional; }, z.core.$strip>>>; relations: z.ZodOptional; }, z.core.$strip>>>; abstract: z.ZodOptional; isReferencedByCount: z.ZodOptional; referencesCount: z.ZodOptional; containerTitle: z.ZodOptional; issn: z.ZodOptional>; isbn: z.ZodOptional>; publisher: z.ZodOptional; published: z.ZodOptional; month: z.ZodOptional; day: z.ZodOptional; }, z.core.$strip>>; funders: z.ZodOptional; doi: z.ZodOptional; ror: z.ZodOptional; award: z.ZodOptional>; }, z.core.$strip>>>; licenses: z.ZodOptional; delayInDays: z.ZodOptional; start: z.ZodOptional; }, z.core.$strip>>>; links: z.ZodOptional; contentVersion: z.ZodOptional; intendedApplication: z.ZodOptional; }, z.core.$strip>>>; url: z.ZodOptional; subject: z.ZodOptional>; language: z.ZodOptional; }, z.core.$strip>, readonly [{ readonly reason: 'rate_limited'; readonly code: JsonRpcErrorCode.RateLimited; readonly thrownBy: 'service'; readonly when: 'Crossref answered HTTP 429 and the limit did not clear inside the retry budget.'; readonly recovery: 'Crossref named no wait interval, so back off at least a minute before reissuing the same call, and lower the request rate. Setting CROSSREF_MAILTO on the server moves requests into the polite pool, which has higher limits.'; }, { readonly reason: 'upstream_unavailable'; readonly code: JsonRpcErrorCode.ServiceUnavailable; readonly thrownBy: 'service'; readonly when: 'Crossref was unreachable, returned a 5xx status, or served an HTML error page instead of JSON.'; readonly recovery: 'The request was accepted as well-formed and Crossref failed to serve it — retry the same call in a minute rather than rewriting the query, and check https://status.crossref.org if it keeps failing.'; }, { readonly reason: 'malformed_response'; readonly code: JsonRpcErrorCode.SerializationError; readonly thrownBy: 'service'; readonly retryable: false; readonly when: 'Crossref returned HTTP 200 with a body that is not valid JSON.'; readonly recovery: 'Do not repeat the call unchanged — the body is corrupt rather than transient. Request less of the record (fewer rows, a narrower select) so a smaller response is serialized, or report the query that reproduces it.'; }, { readonly reason: 'request_timeout'; readonly code: JsonRpcErrorCode.Timeout; readonly thrownBy: 'service'; readonly when: 'Crossref did not respond within CROSSREF_TIMEOUT_MS, or answered HTTP 408/504.'; readonly recovery: 'Ask for less work per call — lower rows, drop select fields, or split a broad query — or raise CROSSREF_TIMEOUT_MS on the server, then retry.'; }, { readonly reason: "doi_not_found"; readonly code: JsonRpcErrorCode.NotFound; readonly when: "Valid DOI format but no Crossref record exists."; readonly recovery: "Verify the DOI is correct or use crossref_search_works to find similar works by title or author."; }], { readonly nextOffset: z.ZodOptional; readonly truncated: z.ZodOptional; readonly shown: z.ZodOptional; readonly cap: z.ZodOptional; readonly notice: z.ZodOptional; }>; //# sourceMappingURL=get-work.tool.d.ts.map