/** * @fileoverview crossref_get_references — returns a page of the outgoing reference list for a DOI. * Fetches the full /works/{doi} record and extracts the reference[] array client-side, then slices * it by offset/limit so structuredContent and content[] carry the identical page. The entry's * free-text fields are entity-decoded, whitespace-collapsed, and stripped of the markup a * publisher deposits into a citation string — see normalizeReferenceText in the service, whose * bounded rule is what keeps a bracketed URL or a Miller index from being read as a tag. What * that rule keeps is escaped again by mdText on its way into content[], or the client's * Markdown renderer consumes the bracket the strip just protected. * Incoming citations are not available through Crossref; use OpenAlex for those. * @module mcp-server/tools/definitions/get-references.tool */ import { z } from '@cyanheads/mcp-ts-core'; import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors'; export declare const getReferencesTool: import("@cyanheads/mcp-ts-core").ToolDefinition; limit: z.ZodDefault; }, z.core.$strip>, z.ZodObject<{ doi: z.ZodString; referenceCount: z.ZodNumber; offset: z.ZodNumber; references: z.ZodArray; doi: z.ZodOptional; unstructured: z.ZodOptional; author: z.ZodOptional; year: z.ZodOptional; journalTitle: z.ZodOptional; articleTitle: z.ZodOptional; volumeTitle: z.ZodOptional; seriesTitle: z.ZodOptional; volume: z.ZodOptional; issue: z.ZodOptional; firstPage: z.ZodOptional; edition: z.ZodOptional; issn: z.ZodOptional; doiAssertedBy: z.ZodOptional; }, z.core.$strip>>; }, 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 the work 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-references.tool.d.ts.map