orcid-mcp-server
Researcher profiles, works, affiliations, funding, and peer reviews from the ORCID registry.
Should I use this
Quality & Safety
Findings (2)
- HIGH
- MEDIUMin orcid_get_profile
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"orcid-mcp-server": {
"command": "npx",
"args": [
"@cyanheads/orcid-mcp-server"
]
}
}
}Runnable packages
0.4.0streamable-httpRemote endpoints
https://orcid.caseyjhand.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (9)
🟢orcid_get_profile(orcid_id)
Fetch a researcher's public profile from ORCID: name, other names, biography, keywords, researcher URLs, and external identifiers such as Scopus Author ID, ResearcherID, and Loop profile. This is the entry point for building a researcher dossier. Pass a bare ORCID iD (0000-0001-2345-6789) or a full URI (https://orcid.org/0000-0001-2345-6789). The profile contains only publicly visible data — researchers control visibility per field.
Input Schema
{
"type": "object",
"properties": {
"orcid_id": {
"type": "string",
"pattern": "^(?:(?:https?:\\/\\/)?(?:www\\.)?orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dXx]\\/?$",
"description": "ORCID iD — bare (0000-0001-2345-6789) or as an orcid.org URI (https://orcid.org/0000-0001-2345-6789). The check digit may be X or x."
}
},
"required": [
"orcid_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format without URI prefix)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI (https://orcid.org/{id})."
},
"givenNames": {
"description": "Given (first) name, if publicly visible.",
"type": "string"
},
"familyName": {
"description": "Family (last) name, if publicly visible.",
"type": "string"
},
"creditName": {
"description": "Published credit name, if set.",
"type": "string"
},
"otherNames": {
"type": "array",
"items": {
"type": "string",
"description": "Alternative name."
},
"description": "Other names listed on the ORCID record."
},
"biography": {
"description": "Researcher biography, if publicly visible.",
"type": "string"
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"description": "Keyword term."
},
"description": "Research keywords set by the researcher."
},
"researcherUrls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"description": "Label for this URL.",
"type": "string"
},
"url": {
"type": "string",
"description": "URL value."
}
},
"required": [
"url"
],
"additionalProperties": false,
"description": "Researcher URL entry."
},
"description": "Researcher-provided URLs (personal site, lab page, blog, etc.)."
},
"externalIdentifiers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Identifier type (e.g. Scopus Author ID, ResearcherID, Loop)."
},
"value": {
"type": "string",
"description": "Identifier value."
},
"url": {
"description": "Resolver URL for this identifier, if provided.",
"type": "string"
},
"relationship": {
"description": "Relationship type (self or part-of).",
"type": "string"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "External identifier linking to another scholarly system."
},
"description": "External identifiers from scholarly systems (Scopus, Web of Science, Loop, etc.)."
},
"emails": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "Email address."
},
"primary": {
"description": "True when this is the primary email address.",
"type": "boolean"
}
},
"required": [
"email"
],
"additionalProperties": false,
"description": "Email address entry."
},
"description": "Publicly visible email addresses."
},
"countries": {
"type": "array",
"items": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code."
},
"description": "Countries listed in the researcher's address section."
},
"notice": {
"description": "Names the profile sections with no public data — ORCID visibility is set per field, so an empty section may be private.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `profile_not_found`: The ORCID iD does not correspond to a registered researcher. Other values are possible when a failure originates below the handler.",
"examples": [
"profile_not_found"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"otherNames",
"keywords",
"researcherUrls",
"externalIdentifiers",
"emails",
"countries"
]
},
{
"required": [
"error"
]
}
]
}🟢orcid_search_researchers(given_name, family_name, affiliation, keyword, ror_id, ...)
Search the ORCID registry using structured field parameters or raw Solr syntax. Provide at least one non-blank search field; all provided structured params are ANDed together. The `query` field adds raw Solr syntax, ANDed with the structured params as one group. Returns ORCID iDs with inline name and institution data — no follow-up profile fetches needed for basic disambiguation. For ranked disambiguation of an ambiguous author name, use orcid_resolve_researcher instead. The ORCID Public API caps results at 10,000 — use pagination for large result sets. Each response also stops at 64,000 bytes; continue a cut page from nextStart.
Input Schema
{
"type": "object",
"properties": {
"given_name": {
"description": "Researcher's given (first) name. Phrase match; a value of only initials (J. or J. A.) matches given names starting with each letter.",
"type": "string"
},
"family_name": {
"description": "Researcher's family (last) name.",
"type": "string"
},
"affiliation": {
"description": "Organization name to filter by. Phrase match.",
"type": "string"
},
"keyword": {
"description": "Keyword to search in the researcher's keyword fields. Phrase match.",
"type": "string"
},
"ror_id": {
"description": "ROR organization ID to filter by, bare (00f54p054) or as a ror.org URL (https://ror.org/00f54p054). Returns researchers affiliated with this organization.",
"type": "string",
"pattern": "^\\s*(?:(?:(?:https?:\\/\\/)?(?:www\\.)?ror\\.org\\/)?0[0-9a-hjkmnp-tv-zA-HJKMNP-TV-Z]{6}[0-9]{2}\\/?)?\\s*$"
},
"doi": {
"description": "DOI to anchor the search, bare (10.1126/science.1225829) or as a https://doi.org/, https://dx.doi.org/, or doi: form. Returns researchers who have linked this DOI to their ORCID record.",
"type": "string"
},
"pmid": {
"description": "PubMed ID to anchor the search, bare (22745249), as PMID:22745249, or as a pubmed.ncbi.nlm.nih.gov or ncbi.nlm.nih.gov/pubmed URL. Returns researchers who have linked this PMID to their ORCID record.",
"type": "string"
},
"grant_number": {
"description": "Grant or award number on a funding item in the researcher record (e.g. 5F31MH010500-03). Matched as a case-insensitive phrase over the parts between separators such as hyphens and slashes: 5F31MH010500 also matches 5F31MH010500-03, but a number cut mid-part (5F31MH0105) matches nothing. Not an exact identifier lookup.",
"type": "string"
},
"query": {
"description": "Raw Solr query string. Sent as written when it is the only field; beside structured params it is ANDed as one parenthesized group, so a top-level OR keeps its alternatives (an exclusion-only query such as -keyword:x is ANDed ungrouped). Supports all ORCID Solr fields and boolean operators.",
"type": "string"
},
"rows": {
"default": 20,
"description": "Maximum results to return (1–1000). A page also stops before its structured output or its text would pass 64,000 bytes, so fewer can come back; continue from nextStart.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"start": {
"default": 0,
"description": "Pagination offset (0-based), 0–10,000. The ORCID Public API rejects start > 10,000 for unauthenticated requests.",
"type": "integer",
"minimum": 0,
"maximum": 10000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"orcidId": {
"type": "string",
"description": "ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"givenNames": {
"description": "Given names from the ORCID record.",
"type": "string"
},
"familyNames": {
"description": "Family name from the ORCID record.",
"type": "string"
},
"creditName": {
"description": "Published credit name, if set.",
"type": "string"
},
"otherNames": {
"type": "array",
"items": {
"type": "string",
"description": "Alternative name."
},
"description": "Other names listed on the ORCID record."
},
"institutionNames": {
"type": "array",
"items": {
"type": "string",
"description": "Institution name."
},
"description": "Affiliated institution names returned inline with each search result."
}
},
"required": [
"orcidId",
"orcidUri",
"otherNames",
"institutionNames"
],
"additionalProperties": false,
"description": "Expanded search result for one researcher."
},
"description": "Matching researchers with inline name and institution data."
},
"rows": {
"type": "number",
"description": "Number of results returned in this response. Below the requested rows when the 64,000-byte response budget cut the page; nextStart then continues from the first result left out."
},
"start": {
"type": "number",
"description": "Pagination offset used for this response."
},
"nextStart": {
"description": "Offset to pass as start on the next call to continue paging. Present only when more matches remain below the ORCID Public API 10,000-offset ceiling; omitted at the final reachable page and when this response already includes the last match.",
"type": "number"
},
"effectiveQuery": {
"type": "string",
"description": "Solr query sent to the ORCID API."
},
"numFound": {
"type": "number",
"description": "Total number of matching records in ORCID (before pagination)."
},
"truncated": {
"type": "boolean",
"description": "True when numFound exceeds the ORCID Public API's 10,000-offset retrieval ceiling, so some matches cannot be paged to with the current query. Narrow or partition the query to reach them."
},
"notice": {
"description": "Recovery hint when results are empty, pagination overshoots the total, or matches exceed the 10,000-offset ceiling. Absent on fully retrievable pages.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `query_failed`: ORCID rejects the compiled Solr query — most often malformed raw query syntax. Other values are possible when a failure originates below the handler.",
"examples": [
"query_failed"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"results",
"rows",
"start",
"effectiveQuery",
"numFound",
"truncated"
]
},
{
"required": [
"error"
]
}
]
}🟢orcid_get_works(orcid_id, limit, offset, include_external_ids)
Retrieve works associated with an ORCID iD — publications, datasets, software, preprints, and more. Returns work summaries with put-codes, titles, types, publication dates, journal names, and all external identifiers (DOIs, PMIDs, arXiv IDs, ISBNs). The first 50 works are returned by default; workCount reports the total available, and prolific records are paged with offset and the returned nextOffset (or raise limit). A page also stops early once the response reaches its 64,000-byte budget, so returnedCount can come in below limit; truncated and nextOffset then carry the continuation. Set include_external_ids to false to omit identifier lists for a lighter payload. Pass the putCode from each work to orcid_get_work_detail to retrieve the full record including abstract and contributors. External IDs are ready for chaining to Crossref, PubMed, or arXiv servers. Works come from the researcher or from member organizations such as Crossref or a university system; each work lists its sources and whether the researcher asserted it (selfAsserted). A researcher may not have linked all their publications.
Input Schema
{
"type": "object",
"properties": {
"orcid_id": {
"type": "string",
"pattern": "^(?:(?:https?:\\/\\/)?(?:www\\.)?orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dXx]\\/?$",
"description": "ORCID iD — bare (0000-0001-2345-6789) or as an orcid.org URI (https://orcid.org/0000-0001-2345-6789). The check digit may be X or x."
},
"limit": {
"default": 50,
"description": "Maximum works to return in this response (default 50, max 1000). The full list is sliced locally — page prolific records with offset and the returned nextOffset. A page stops early at the 64,000-byte response budget, so a large limit may return fewer works.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"offset": {
"default": 0,
"description": "Zero-based index of the first work to return (default 0). Combine with limit to page through the full works list.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"include_external_ids": {
"default": true,
"description": "When true (default), each work carries its external identifiers (DOIs, PMIDs, arXiv IDs, ISBNs). Set false to omit them for a lighter payload when only titles, types, and dates are needed.",
"type": "boolean"
}
},
"required": [
"orcid_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"workCount": {
"type": "number",
"description": "Total works available for this ORCID iD, before offset and limit are applied."
},
"returnedCount": {
"type": "number",
"description": "Number of works returned in this response, after applying offset, limit, and the 64,000-byte response budget."
},
"offset": {
"type": "number",
"description": "Zero-based offset applied to the full works list for this response."
},
"nextOffset": {
"description": "Offset to pass on the next call to continue paging. Omitted when this response includes the final work.",
"type": "number"
},
"truncated": {
"type": "boolean",
"description": "True when more works are available beyond this response, whether limit or the response budget ended the page — fetch them with nextOffset."
},
"works": {
"type": "array",
"items": {
"type": "object",
"properties": {
"putCode": {
"description": "Work put-code — pass to orcid_get_work_detail to fetch the full record including abstract and contributors.",
"type": "number"
},
"title": {
"description": "Work title.",
"type": "string"
},
"workType": {
"description": "Work type (e.g. journal-article, dataset, software, preprint).",
"type": "string"
},
"publicationDate": {
"description": "Publication date (YYYY, YYYY-MM, or YYYY-MM-DD).",
"type": "string"
},
"journalTitle": {
"description": "Journal or container title.",
"type": "string"
},
"url": {
"description": "URL for the work, if available.",
"type": "string"
},
"externalIds": {
"description": "External identifiers of the whole ORCID work group (DOIs, PMIDs, arXiv IDs, ISBNs, etc.): the preferred version's own, part-of IDs such as an ISSN included, then each identifier only another source in the group holds. Omitted when include_external_ids is false.",
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Identifier type (e.g. doi, pmid, arxiv, isbn)."
},
"value": {
"type": "string",
"description": "Identifier value."
},
"url": {
"description": "Resolver URL for this identifier, if available.",
"type": "string"
},
"relationship": {
"description": "Relationship to the work (self or part-of).",
"type": "string"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "External identifier for a work."
}
},
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"description": "Name of the person or member organization system that added the item (e.g. a university research information system, Crossref, Scopus - Elsevier). Absent when ORCID records no name.",
"type": "string"
},
"assertionOriginName": {
"description": "Party the source added the item on behalf of, when ORCID records one — usually the researcher, for an item added through a search-and-link tool.",
"type": "string"
},
"selfAsserted": {
"type": "boolean",
"description": "True when the asserting party (the assertion origin when recorded, otherwise the source) is the requested ORCID iD; false when a member organization or another ORCID user asserted the item."
}
},
"required": [
"selfAsserted"
],
"additionalProperties": false,
"description": "A party that asserted this item on the ORCID record."
},
"description": "Every party that added this work to the ORCID record, one entry per distinct source in the work group, the preferred version's first. Empty when ORCID records no source."
}
},
"required": [
"sources"
],
"additionalProperties": false,
"description": "Work summary record — one ORCID work group, built from its preferred version."
},
"description": "Works for this ORCID iD, sliced to the requested offset and limit and to the response budget."
},
"notice": {
"description": "Note when the works list is empty — neither the researcher nor a member organization may have added works, or they may be private.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `profile_not_found`: The ORCID iD does not correspond to a registered researcher. Other values are possible when a failure originates below the handler.",
"examples": [
"profile_not_found"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"workCount",
"returnedCount",
"offset",
"truncated",
"works"
]
},
{
"required": [
"error"
]
}
]
}🟢orcid_get_work_detail(orcid_id, put_codes)
Fetch full detail records for 1–100 works by their put-codes in a single request. Put-codes are returned by orcid_get_works in the putCode field of each work entry. Returns the abstract (short-description), contributors with CRediT roles, the external IDs on that record (DOI, PMID, arXiv, ISBN, etc.), citation metadata (BibTeX or other formats when provided), journal title, URL, and the source that added it for each work. A record listing more than 100 contributors keeps the first 100 plus the requested researcher's own entries, with contributorCount giving the total and contributorsTruncated set; a citation over 8,192 bytes is left out and flagged by citationOmitted. Per-record errors (not-found or inaccessible put-codes) are surfaced as error entries rather than failing the whole call. Records are added while the response stays within its 64,000-byte budget; put-codes left out are returned in deferredPutCodes to pass back in a follow-up call. A repeated put-code is fetched once.
Input Schema
{
"type": "object",
"properties": {
"orcid_id": {
"type": "string",
"pattern": "^(?:(?:https?:\\/\\/)?(?:www\\.)?orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dXx]\\/?$",
"description": "ORCID iD — bare (0000-0001-2345-6789) or as an orcid.org URI (https://orcid.org/0000-0001-2345-6789). The check digit may be X or x."
},
"put_codes": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Work put-code (positive integer)."
},
"description": "Array of 1–100 work put-codes to fetch. Put-codes are available in the putCode field returned by orcid_get_works. A repeated put-code is fetched once. Any the 64,000-byte response budget leaves out come back in deferredPutCodes."
}
},
"required": [
"orcid_id",
"put_codes"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"works": {
"type": "array",
"items": {
"type": "object",
"properties": {
"putCode": {
"type": "number",
"description": "Put-code of this work record."
},
"title": {
"description": "Work title.",
"type": "string"
},
"subtitle": {
"description": "Work subtitle, when provided.",
"type": "string"
},
"workType": {
"description": "Work type (e.g. journal-article, dataset, software, preprint).",
"type": "string"
},
"publicationDate": {
"description": "Publication date (YYYY, YYYY-MM, or YYYY-MM-DD).",
"type": "string"
},
"journalTitle": {
"description": "Journal or container title, when provided.",
"type": "string"
},
"abstract": {
"description": "Abstract or short description, when provided.",
"type": "string"
},
"citation": {
"description": "Citation metadata, when provided by the depositing system and no longer than 8,192 bytes.",
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Citation format (e.g. bibtex, formatted-unspecified)."
},
"value": {
"type": "string",
"description": "Citation string in the specified format."
}
},
"required": [
"type",
"value"
],
"additionalProperties": false
},
"citationOmitted": {
"description": "True when the deposited citation exceeded 8,192 bytes and was left out; the DOI in externalIds still resolves the work. Omitted otherwise.",
"type": "boolean"
},
"url": {
"description": "URL for the work, when available.",
"type": "string"
},
"externalIds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Identifier type (e.g. doi, pmid, arxiv, isbn, ppr)."
},
"value": {
"type": "string",
"description": "Identifier value."
},
"url": {
"description": "Resolver URL for this identifier, if available.",
"type": "string"
},
"relationship": {
"description": "Relationship to the work (self or part-of).",
"type": "string"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "External identifier for the work."
},
"description": "External identifiers on this put-code's own record (DOIs, PMIDs, arXiv IDs, ISBNs, etc.). One source's version of the work, so it can hold fewer identifiers than orcid_get_works lists for the whole work group."
},
"contributors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"description": "Contributor display name or credit name.",
"type": "string"
},
"orcidId": {
"description": "Contributor ORCID iD (bare format), if linked.",
"type": "string"
},
"role": {
"description": "Contributor role (e.g. author, editor, conceptualization, data-curation). May be a CRediT taxonomy term.",
"type": "string"
},
"sequence": {
"description": "Contributor sequence position (first or additional).",
"type": "string"
}
},
"additionalProperties": false,
"description": "Work contributor with optional role and ORCID iD."
},
"description": "Work contributors with optional roles, in upstream order. May be empty if not deposited. When contributorsTruncated is true, holds the first 100 followed by every later entry carrying the requested researcher's iD."
},
"contributorCount": {
"description": "Total contributors on the ORCID record. Present only when contributorsTruncated is true.",
"type": "number"
},
"contributorsTruncated": {
"description": "True when the record lists more than 100 contributors and the list was cut. Omitted when the list is complete.",
"type": "boolean"
},
"languageCode": {
"description": "Language code of the work, when provided.",
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"description": "Name of the person or member organization system that added the item (e.g. a university research information system, Crossref, Scopus - Elsevier). Absent when ORCID records no name.",
"type": "string"
},
"assertionOriginName": {
"description": "Party the source added the item on behalf of, when ORCID records one — usually the researcher, for an item added through a search-and-link tool.",
"type": "string"
},
"selfAsserted": {
"type": "boolean",
"description": "True when the asserting party (the assertion origin when recorded, otherwise the source) is the requested ORCID iD; false when a member organization or another ORCID user asserted the item."
}
},
"required": [
"selfAsserted"
],
"additionalProperties": false,
"description": "A party that asserted this item on the ORCID record."
},
"description": "The party that added this put-code to the ORCID record. Empty when ORCID records no source; orcid_get_works lists every source of the work group."
}
},
"required": [
"putCode",
"externalIds",
"contributors",
"sources"
],
"additionalProperties": false,
"description": "Full detail record for one work."
},
"description": "Successfully resolved work detail records."
},
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"putCode": {
"description": "Put-code that produced this error, when identifiable.",
"type": "number"
},
"message": {
"type": "string",
"description": "Error message from ORCID (e.g. not found or access denied)."
}
},
"required": [
"message"
],
"additionalProperties": false,
"description": "Error entry for a put-code that could not be resolved."
},
"description": "Per-record errors for put-codes that could not be resolved (not found or inaccessible). Empty when all put-codes resolved successfully."
},
"deferredPutCodes": {
"description": "Requested put-codes left out because adding them would exceed the 64,000-byte response budget. Pass them as put_codes in another call to fetch them. Omitted when every put-code was fetched.",
"type": "array",
"items": {
"type": "number",
"description": "Deferred work put-code."
}
},
"notice": {
"description": "Note when the response budget deferred some put-codes — call again with deferredPutCodes.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `profile_not_found`: The ORCID iD does not correspond to a registered researcher. `fetch_failed`: The ORCID bulk works endpoint returns an unexpected error. Other values are possible when a failure originates below the handler.",
"examples": [
"profile_not_found",
"fetch_failed"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"works",
"errors"
]
},
{
"required": [
"error"
]
}
]
}🟢orcid_get_affiliations(orcid_id, types)
Fetch affiliation records for an ORCID researcher. The `types` parameter controls which affiliation sections to return: employment, education, invited-positions, distinctions, memberships, qualifications, services, or all. Default is employment and education. Returns organization names, disambiguated organization identifiers (ROR/GRID/Ringgold), departments, roles, date ranges, and sources. Affiliations come from the researcher or from member organizations such as a university research information system; sources names who added each, and selfAsserted tells the two apart. Absence does not mean no affiliation.
Input Schema
{
"type": "object",
"properties": {
"orcid_id": {
"type": "string",
"pattern": "^(?:(?:https?:\\/\\/)?(?:www\\.)?orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dXx]\\/?$",
"description": "ORCID iD — bare (0000-0001-2345-6789) or as an orcid.org URI (https://orcid.org/0000-0001-2345-6789). The check digit may be X or x."
},
"types": {
"default": [
"employment",
"education"
],
"description": "Which affiliation types to return. Defaults to employment and education. Use [\"all\"] to get every section.",
"minItems": 1,
"type": "array",
"items": {
"type": "string",
"enum": [
"employment",
"education",
"invited-positions",
"distinctions",
"memberships",
"qualifications",
"services",
"all"
],
"description": "Affiliation section type. Use \"all\" to include all section types."
}
}
},
"required": [
"orcid_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"affiliationCount": {
"type": "number",
"description": "Total number of affiliation records returned."
},
"affiliations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Affiliation section type (employment, education, invited-positions, etc.)."
},
"organization": {
"description": "Organization details.",
"type": "object",
"properties": {
"name": {
"description": "Organization name.",
"type": "string"
},
"city": {
"description": "City of the organization.",
"type": "string"
},
"country": {
"description": "Country of the organization.",
"type": "string"
},
"disambiguatedId": {
"description": "Disambiguated organization identifier (ROR URL, GRID ID, or Ringgold ID).",
"type": "string"
},
"disambiguationSource": {
"description": "Source of the disambiguation (ROR, GRID, or RINGGOLD).",
"type": "string"
}
},
"additionalProperties": false
},
"department": {
"description": "Department or unit within the organization.",
"type": "string"
},
"role": {
"description": "Job title or role.",
"type": "string"
},
"startDate": {
"description": "Start date (YYYY, YYYY-MM, or YYYY-MM-DD).",
"type": "string"
},
"endDate": {
"description": "End date (YYYY, YYYY-MM, or YYYY-MM-DD). Absent if current.",
"type": "string"
},
"url": {
"description": "URL for the affiliation record, if provided.",
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"description": "Name of the person or member organization system that added the item (e.g. a university research information system, Crossref, Scopus - Elsevier). Absent when ORCID records no name.",
"type": "string"
},
"assertionOriginName": {
"description": "Party the source added the item on behalf of, when ORCID records one — usually the researcher, for an item added through a search-and-link tool.",
"type": "string"
},
"selfAsserted": {
"type": "boolean",
"description": "True when the asserting party (the assertion origin when recorded, otherwise the source) is the requested ORCID iD; false when a member organization or another ORCID user asserted the item."
}
},
"required": [
"selfAsserted"
],
"additionalProperties": false,
"description": "A party that asserted this item on the ORCID record."
},
"description": "The party that added this affiliation to the ORCID record — the researcher, or a member organization such as a university research information system. Empty when ORCID records no source."
}
},
"required": [
"type",
"sources"
],
"additionalProperties": false,
"description": "Affiliation record."
},
"description": "Affiliation records for the requested types."
},
"requestedTypes": {
"type": "array",
"items": {
"type": "string",
"description": "Affiliation type."
},
"description": "Affiliation types that were requested."
},
"notice": {
"description": "Note when no affiliations were found — they may be private, or neither the researcher nor a member organization added any.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `profile_not_found`: The ORCID iD does not correspond to a registered researcher. Other values are possible when a failure originates below the handler.",
"examples": [
"profile_not_found"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"affiliationCount",
"affiliations",
"requestedTypes"
]
},
{
"required": [
"error"
]
}
]
}🟢orcid_get_funding(orcid_id)
Fetch funding records for an ORCID researcher: grants, contracts, awards, and salary awards. Returns funder names, funder organization identifiers, grant numbers, funding periods, and sources. Funding items come from the researcher or from member organizations such as funders, institutions, and search-and-link tools; sources names who added each. Most researchers have no funding entries even when they hold grants, so absence of funding records does not imply absence of funding. When records exist they are high-value for grant tracking and funder analysis.
Input Schema
{
"type": "object",
"properties": {
"orcid_id": {
"type": "string",
"pattern": "^(?:(?:https?:\\/\\/)?(?:www\\.)?orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dXx]\\/?$",
"description": "ORCID iD — bare (0000-0001-2345-6789) or as an orcid.org URI (https://orcid.org/0000-0001-2345-6789). The check digit may be X or x."
}
},
"required": [
"orcid_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"fundingCount": {
"type": "number",
"description": "Number of funding items returned, one per ORCID funding group — versions of one grant added by different sources or deposited twice count once."
},
"funding": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"description": "Funding title or project name.",
"type": "string"
},
"type": {
"description": "Funding type (e.g. grant, contract, award, salary-award).",
"type": "string"
},
"funder": {
"description": "Funder organization details.",
"type": "object",
"properties": {
"name": {
"description": "Funder organization name.",
"type": "string"
},
"city": {
"description": "Funder city.",
"type": "string"
},
"country": {
"description": "Funder country.",
"type": "string"
},
"disambiguatedId": {
"description": "Disambiguated funder identifier (e.g. Crossref Funder ID URL or ROR URL).",
"type": "string"
},
"disambiguationSource": {
"description": "Source of funder disambiguation (FUNDREF, ROR, GRID, etc.).",
"type": "string"
}
},
"additionalProperties": false
},
"startDate": {
"description": "Funding start date (YYYY, YYYY-MM, or YYYY-MM-DD).",
"type": "string"
},
"endDate": {
"description": "Funding end date (YYYY, YYYY-MM, or YYYY-MM-DD).",
"type": "string"
},
"grantNumbers": {
"type": "array",
"items": {
"type": "string",
"description": "Grant or award number."
},
"description": "Grant numbers or award identifiers for this funding record."
},
"url": {
"description": "URL for the funding record, if available.",
"type": "string"
},
"periods": {
"description": "Every distinct award period the funding item's versions record, ordered by start date — present only when there are two or more, such as renewals under one grant number. The other fields come from ORCID's preferred version.",
"type": "array",
"items": {
"type": "object",
"properties": {
"startDate": {
"description": "Period start date (YYYY, YYYY-MM, or YYYY-MM-DD).",
"type": "string"
},
"endDate": {
"description": "Period end date (YYYY, YYYY-MM, or YYYY-MM-DD).",
"type": "string"
}
},
"additionalProperties": false,
"description": "Award period one version of this funding item records."
}
},
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"description": "Name of the person or member organization system that added the item (e.g. a university research information system, Crossref, Scopus - Elsevier). Absent when ORCID records no name.",
"type": "string"
},
"assertionOriginName": {
"description": "Party the source added the item on behalf of, when ORCID records one — usually the researcher, for an item added through a search-and-link tool.",
"type": "string"
},
"selfAsserted": {
"type": "boolean",
"description": "True when the asserting party (the assertion origin when recorded, otherwise the source) is the requested ORCID iD; false when a member organization or another ORCID user asserted the item."
}
},
"required": [
"selfAsserted"
],
"additionalProperties": false,
"description": "A party that asserted this item on the ORCID record."
},
"description": "Every party that added this funding item to the ORCID record — the researcher, a funder or institution, or a search-and-link tool — one entry per distinct source in the funding group, the preferred version's first. Empty when ORCID records no source."
}
},
"required": [
"grantNumbers",
"sources"
],
"additionalProperties": false,
"description": "Funding item: one ORCID funding group, built from its preferred version."
},
"description": "Funding items associated with this ORCID iD, one per ORCID funding group."
},
"notice": {
"description": "Note when no funding is found — absence of records does not mean absence of funding.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `profile_not_found`: The ORCID iD does not correspond to a registered researcher. Other values are possible when a failure originates below the handler.",
"examples": [
"profile_not_found"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"fundingCount",
"funding"
]
},
{
"required": [
"error"
]
}
]
}🟢orcid_get_peer_reviews(orcid_id)
Fetch peer review activity for an ORCID researcher: reviewer role (reviewer, editor, chair, etc.), review type, completion dates, ISSN-keyed group identifiers, and the convening organization as ORCID records it — often the service that imported the review (e.g. Publons, Clarivate). ORCID returns no journal name; groupIssn is the key to the journal, and a review that has one is headed by it. Use to assess editorial activity, journal affiliations, and the scope of a researcher's peer review contributions. Reviews come from the researcher or from member organizations that import them; sources names who added each, and coverage varies by researcher.
Input Schema
{
"type": "object",
"properties": {
"orcid_id": {
"type": "string",
"pattern": "^(?:(?:https?:\\/\\/)?(?:www\\.)?orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dXx]\\/?$",
"description": "ORCID iD — bare (0000-0001-2345-6789) or as an orcid.org URI (https://orcid.org/0000-0001-2345-6789). The check digit may be X or x."
}
},
"required": [
"orcid_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"reviewCount": {
"type": "number",
"description": "Total number of peer review records returned."
},
"peerReviews": {
"type": "array",
"items": {
"type": "object",
"properties": {
"reviewerRole": {
"description": "Reviewer role (e.g. reviewer, editor, chair, organizer, co-investigator, co-reviewer).",
"type": "string"
},
"reviewType": {
"description": "Review type (e.g. review, evaluation, grant-review, editor-report).",
"type": "string"
},
"completionDate": {
"description": "Completion date of the review (YYYY, YYYY-MM, or YYYY-MM-DD).",
"type": "string"
},
"conveningOrganization": {
"description": "Organization ORCID records as convening the review, often the importing service. Identify the journal by groupIssn.",
"type": "object",
"properties": {
"name": {
"description": "Convening organization name as ORCID records it — often the service that imported the review (e.g. Publons).",
"type": "string"
},
"city": {
"description": "Convening organization city.",
"type": "string"
},
"country": {
"description": "Convening organization country.",
"type": "string"
},
"disambiguatedId": {
"description": "Disambiguated organization identifier.",
"type": "string"
},
"disambiguationSource": {
"description": "Source of disambiguation (ROR, GRID, RINGGOLD, etc.).",
"type": "string"
}
},
"additionalProperties": false
},
"reviewUrl": {
"description": "URL for the review record, if available.",
"type": "string"
},
"groupIssn": {
"description": "ISSN of the journal group this review belongs to, if available — the key to the journal name, which ORCID does not return.",
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"description": "Name of the person or member organization system that added the item (e.g. a university research information system, Crossref, Scopus - Elsevier). Absent when ORCID records no name.",
"type": "string"
},
"assertionOriginName": {
"description": "Party the source added the item on behalf of, when ORCID records one — usually the researcher, for an item added through a search-and-link tool.",
"type": "string"
},
"selfAsserted": {
"type": "boolean",
"description": "True when the asserting party (the assertion origin when recorded, otherwise the source) is the requested ORCID iD; false when a member organization or another ORCID user asserted the item."
}
},
"required": [
"selfAsserted"
],
"additionalProperties": false,
"description": "A party that asserted this item on the ORCID record."
},
"description": "The party that added this review to the ORCID record — the researcher, or a member organization such as a review-import service or publisher. Empty when ORCID records no source."
}
},
"required": [
"sources"
],
"additionalProperties": false,
"description": "Peer review record."
},
"description": "Peer review records for this ORCID iD."
},
"notice": {
"description": "Note when no peer reviews are found — coverage varies by researcher and publisher participation.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `profile_not_found`: The ORCID iD does not correspond to a registered researcher. Other values are possible when a failure originates below the handler.",
"examples": [
"profile_not_found"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"reviewCount",
"peerReviews"
]
},
{
"required": [
"error"
]
}
]
}🟢orcid_get_research_resources(orcid_id)
List research resources associated with an ORCID researcher — compute allocations, equipment access, lab facilities, data resources, and clinical study registrations. This is a newer ORCID section; most researchers have no entries. Returns the resource title, hosting organization, external identifiers (often a URI to the allocation portal), access period, and the source that added each entry. Most entries are deposited by resource-allocation systems (e.g. ACCESS, XSEDE) rather than researchers themselves.
Input Schema
{
"type": "object",
"properties": {
"orcid_id": {
"type": "string",
"pattern": "^(?:(?:https?:\\/\\/)?(?:www\\.)?orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dXx]\\/?$",
"description": "ORCID iD — bare (0000-0001-2345-6789) or as an orcid.org URI (https://orcid.org/0000-0001-2345-6789). The check digit may be X or x."
}
},
"required": [
"orcid_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"resourceCount": {
"type": "number",
"description": "Total number of research resources returned."
},
"resources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"putCode": {
"type": "number",
"description": "Put-code of this research resource record."
},
"title": {
"description": "Resource or proposal title.",
"type": "string"
},
"hostOrganization": {
"description": "Organization that hosts or manages the resource.",
"type": "object",
"properties": {
"name": {
"description": "Organization name.",
"type": "string"
},
"city": {
"description": "City of the organization.",
"type": "string"
},
"country": {
"description": "Country code of the organization.",
"type": "string"
},
"disambiguatedId": {
"description": "Disambiguated organization ID (e.g. ROR or GRID identifier).",
"type": "string"
},
"disambiguationSource": {
"description": "Source of the disambiguation ID (e.g. ROR, GRID, RINGGOLD).",
"type": "string"
}
},
"additionalProperties": false
},
"externalIds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Identifier type (e.g. uri, doi, grant_number)."
},
"value": {
"type": "string",
"description": "Identifier value."
},
"url": {
"description": "Resolver URL for this identifier, if available.",
"type": "string"
},
"relationship": {
"description": "Relationship to the resource (self or part-of).",
"type": "string"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "External identifier for the research resource."
},
"description": "External identifiers for the resource (often a portal URI)."
},
"startDate": {
"description": "Access or allocation start date (YYYY, YYYY-MM, or YYYY-MM-DD).",
"type": "string"
},
"endDate": {
"description": "Access or allocation end date (YYYY, YYYY-MM, or YYYY-MM-DD).",
"type": "string"
},
"url": {
"description": "URL for the resource or allocation record.",
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"description": "Name of the person or member organization system that added the item (e.g. a university research information system, Crossref, Scopus - Elsevier). Absent when ORCID records no name.",
"type": "string"
},
"assertionOriginName": {
"description": "Party the source added the item on behalf of, when ORCID records one — usually the researcher, for an item added through a search-and-link tool.",
"type": "string"
},
"selfAsserted": {
"type": "boolean",
"description": "True when the asserting party (the assertion origin when recorded, otherwise the source) is the requested ORCID iD; false when a member organization or another ORCID user asserted the item."
}
},
"required": [
"selfAsserted"
],
"additionalProperties": false,
"description": "A party that asserted this item on the ORCID record."
},
"description": "The party that added this resource to the ORCID record — usually the allocation system that granted it. Empty when ORCID records no source."
}
},
"required": [
"putCode",
"externalIds",
"sources"
],
"additionalProperties": false,
"description": "Research resource record."
},
"description": "Research resources associated with this ORCID iD."
},
"notice": {
"description": "Note when no research resources are found — this section is sparsely populated across ORCID profiles.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `profile_not_found`: The ORCID iD does not correspond to a registered researcher. Other values are possible when a failure originates below the handler.",
"examples": [
"profile_not_found"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"resourceCount",
"resources"
]
},
{
"required": [
"error"
]
}
]
}🟢orcid_resolve_researcher(name, affiliation, doi, pmid, rows)
Disambiguate an author name to a verified ORCID iD. Returns ranked candidates (5 by default, up to 20 via the rows parameter) with transparent disambiguation signals: name match type (exact/partial/other-name/none), institution overlap flag, and whether a DOI or PMID anchor was used in the query. The name is searched as an exact phrase first; when that finds nothing, byline initials (J. Doudna, Jennifer A. Doudna) and then the other names listed on ORCID records are tried. A DOI or PMID anchor is near-deterministic — it filters to researchers who have linked that specific work to their ORCID record. Use this tool (not orcid_search_researchers) when the input is an ambiguous name that needs ranked disambiguation. No synthetic scores are used — raw signals only.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Author name to disambiguate: a full name (\"Jennifer Doudna\"), a byline with initials (\"J. Doudna\", \"Jennifer A. Doudna\"), or \"Family, Given\" (\"Doudna, Jennifer\", read as Jennifer Doudna). The exact phrase is tried first; initials and other names listed on a record are fallbacks, so a full name gives the most precise candidates."
},
"affiliation": {
"description": "Researcher's institution or organization name. Used for institution overlap scoring and optionally as a search constraint.",
"type": "string"
},
"doi": {
"description": "DOI of a work authored by this researcher, bare (10.1126/science.1225829) or as a https://doi.org/, https://dx.doi.org/, or doi: form. Acts as a near-deterministic anchor — filters to researchers who linked this DOI to their ORCID record.",
"type": "string"
},
"pmid": {
"description": "PubMed ID of a work authored by this researcher, bare (22745249), as PMID:22745249, or as a pubmed.ncbi.nlm.nih.gov or ncbi.nlm.nih.gov/pubmed URL. Acts as a near-deterministic anchor — filters to researchers who linked this PMID to their ORCID record.",
"type": "string"
},
"rows": {
"default": 5,
"description": "Maximum candidate count to return (1–20). Defaults to 5.",
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"candidates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"orcidId": {
"type": "string",
"description": "Candidate ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"givenNames": {
"description": "Given names from the ORCID record.",
"type": "string"
},
"familyNames": {
"description": "Family name from the ORCID record.",
"type": "string"
},
"creditName": {
"description": "Published credit name, if set.",
"type": "string"
},
"institutionNames": {
"type": "array",
"items": {
"type": "string",
"description": "Institution name."
},
"description": "Affiliated institutions from the ORCID record."
},
"nameMatchType": {
"type": "string",
"enum": [
"exact",
"partial",
"other-name",
"none"
],
"description": "How closely the candidate name matches the input name, compared case- and accent-insensitively (José = Jose): exact (full match), partial (token overlap, where an initial such as J. matches a first given name starting with J), other-name (match on alternate name), or none."
},
"institutionOverlap": {
"type": "boolean",
"description": "True when the provided affiliation and one of the candidate's institutions are the same name, or one appears inside the other as a contiguous run of words (so an abbreviated form still matches its full name). A single shared word such as a city or surname is not enough."
},
"anchorType": {
"type": "string",
"enum": [
"doi",
"pmid",
"none"
],
"description": "Type of identifier anchor used in the query: doi, pmid, or none. A doi or pmid anchor means the candidate has linked that work to their ORCID record."
}
},
"required": [
"orcidId",
"orcidUri",
"institutionNames",
"nameMatchType",
"institutionOverlap",
"anchorType"
],
"additionalProperties": false,
"description": "Disambiguation candidate with transparency signals."
},
"description": "Ranked candidates, ordered by name match quality then institution overlap."
},
"queryUsed": {
"type": "string",
"description": "The Solr query that produced the returned candidates — the primary query, or the last fallback stage run when the primary found nothing. Paired with totalFound."
},
"relaxedQuery": {
"description": "The last fallback stage run (byline initials, affiliation dropped, other names, or an anchor alone), present only when the primary query found nothing.",
"type": "string"
},
"totalFound": {
"type": "number",
"description": "Total ORCID records matching queryUsed (the query that produced the returned candidates)."
},
"primaryQuery": {
"type": "string",
"description": "The primary, most-constrained Solr query attempted first (exact name phrase + optional anchor + optional affiliation). Always populated; equals queryUsed when no fallback ran."
},
"primaryTotalFound": {
"type": "number",
"description": "Total ORCID records matching primaryQuery. Zero when the primary query found nothing and a relaxed fallback produced the returned candidates."
},
"notice": {
"description": "Recovery hint when no candidates are found or when the anchor query failed to match.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `query_failed`: ORCID rejects a search built from the supplied name, affiliation, or identifier anchor. Other values are possible when a failure originates below the handler.",
"examples": [
"query_failed"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"candidates",
"queryUsed",
"totalFound",
"primaryQuery",
"primaryTotalFound"
]
},
{
"required": [
"error"
]
}
]
}Community
Evidence