orcid-mcp-server
An MCP server that allows agents to search the ORCID registry, fetch public researcher profiles, retrieve works, affiliations, funding, and peer review records, and disambiguate author names using structured parameters or raw Solr syntax.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://orcid.caseyjhand.com/mcpWhat its tools do
9 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search the ORCID registry using structured field parameters or raw Solr syntax
- Fetch a researcher's public profile including name, biography, and external identifiers
- Retrieve works, affiliations, funding, and peer review records for a specific researcher
- Disambiguate an ambiguous author name to a ranked list of verified ORCID iD candidates
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- orcid-mcp-server 0.4.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 9 advertised
- Resources
- 1 advertised
- Resource templates
- 3 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": true
},
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"subscribe": true,
"listChanged": true
},
"extensions": {
"io.modelcontextprotocol/skills": {
"directoryRead": true
}
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
9 advertised
orcid_get_profile — Get ORCID Researcher Profile
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"orcid_id"
],
"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."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"otherNames",
"keywords",
"researcherUrls",
"externalIdentifiers",
"emails",
"countries"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"profile_not_found"
],
"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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"emails": {
"type": "array",
"items": {
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Email address."
},
"primary": {
"type": "boolean",
"description": "True when this is the primary email address."
}
},
"description": "Email address entry.",
"additionalProperties": false
},
"description": "Publicly visible email addresses."
},
"notice": {
"type": "string",
"description": "Names the profile sections with no public data — ORCID visibility is set per field, so an empty section may be private — and, for a deprecated iD, the primary iD it was merged into."
},
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format without URI prefix)."
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"description": "Keyword term."
},
"description": "Research keywords set by the researcher."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI (https://orcid.org/{id})."
},
"biography": {
"type": "string",
"description": "Researcher biography, if publicly visible."
},
"countries": {
"type": "array",
"items": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code."
},
"description": "Countries listed in the researcher's address section."
},
"creditName": {
"type": "string",
"description": "Published credit name, if set."
},
"familyName": {
"type": "string",
"description": "Family (last) name, if publicly visible."
},
"givenNames": {
"type": "string",
"description": "Given (first) name, if publicly visible."
},
"otherNames": {
"type": "array",
"items": {
"type": "string",
"description": "Alternative name."
},
"description": "Other names listed on the ORCID record."
},
"researcherUrls": {
"type": "array",
"items": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "URL value."
},
"name": {
"type": "string",
"description": "Label for this URL."
}
},
"description": "Researcher URL entry.",
"additionalProperties": false
},
"description": "Researcher-provided URLs (personal site, lab page, blog, etc.)."
},
"externalIdentifiers": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"url": {
"type": "string",
"description": "Resolver URL for this identifier, if provided."
},
"type": {
"type": "string",
"description": "Identifier type (e.g. Scopus Author ID, ResearcherID, Loop)."
},
"value": {
"type": "string",
"description": "Identifier value."
},
"relationship": {
"type": "string",
"description": "Relationship type (self or part-of)."
}
},
"description": "External identifier linking to another scholarly system.",
"additionalProperties": false
},
"description": "External identifiers from scholarly systems (Scopus, Web of Science, Loop, etc.)."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}orcid_search_researchers — Search ORCID Researchers
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. Continue a page from nextStart; the ORCID Public API pages only the first 10,000 matches, so narrow the query to reach the rest.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"doi": {
"type": "string",
"pattern": "^(?:\\s*|\\s*(?:(?:(?:[hH][tT][tT][pP][sS]?:\\/\\/)?(?:[dD][xX]\\.)?[dD][oO][iI]\\.[oO][rR][gG]\\/|[dD][oO][iI]:)\\s*)?10\\.[0-9]+\\/\\S+\\s*)$",
"description": "Complete DOI to anchor the search, bare (10.1126/science.1225829) or as a https://doi.org/, https://dx.doi.org/, or doi: form. Requires 10., digits, a slash, and a non-whitespace suffix; blank means unset. Returns researchers who have linked this DOI to their ORCID record."
},
"pmid": {
"type": "string",
"pattern": "^(?:\\s*|\\s*(?:(?:(?:[hH][tT][tT][pP][sS]?:\\/\\/)?(?:(?:[wW][wW][wW]\\.)?[nN][cC][bB][iI]\\.[nN][lL][mM]\\.[nN][iI][hH]\\.[gG][oO][vV]\\/[pP][uU][bB][mM][eE][dD]\\/|[pP][uU][bB][mM][eE][dD]\\.[nN][cC][bB][iI]\\.[nN][lL][mM]\\.[nN][iI][hH]\\.[gG][oO][vV]\\/)|[pP][mM][iI][dD]:)\\s*)?[0-9]+\\s*(?:\\/(?:[?#][\\s\\S]*|\\s*)|[?#][\\s\\S]*|$))$",
"description": "Numeric 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. Blank means unset; a label or URL without digits is invalid. Returns researchers who have linked this PMID to their ORCID record."
},
"rows": {
"type": "integer",
"default": 20,
"maximum": 10000,
"minimum": 1,
"description": "Results per page. Default 20; a larger value returns at most 1,000 (the most ORCID serves per request) and says so."
},
"query": {
"type": "string",
"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."
},
"start": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Pagination offset (0-based), 0–10,000. The ORCID Public API rejects start > 10,000 for unauthenticated requests."
},
"ror_id": {
"type": "string",
"pattern": "^\\s*(?:(?:(?:https?:\\/\\/)?(?:www\\.)?ror\\.org\\/)?0[0-9a-hjkmnp-tv-zA-HJKMNP-TV-Z]{6}[0-9]{2}\\/?)?\\s*$",
"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."
},
"keyword": {
"type": "string",
"description": "Keyword to search in the researcher's keyword fields. Phrase match."
},
"given_name": {
"type": "string",
"description": "Researcher's given (first) name. Phrase match; a value of only initials (J. or J. A.) matches given names starting with each letter."
},
"affiliation": {
"type": "string",
"description": "Organization name to filter by. Phrase match."
},
"family_name": {
"type": "string",
"description": "Researcher's family (last) name."
},
"grant_number": {
"type": "string",
"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."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"results",
"rows",
"start",
"effectiveQuery",
"numFound",
"truncated"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"rows": {
"type": "number",
"description": "Number of results returned in this response: the requested rows, fewer only on the last page."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"query_failed"
],
"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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"start": {
"type": "number",
"description": "Pagination offset used for this response."
},
"notice": {
"type": "string",
"description": "Requested/effective rows disclosure and recovery guidance for empty results, past-end pagination, or the 10,000-offset retrieval ceiling."
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"orcidId",
"orcidUri",
"otherNames",
"institutionNames"
],
"properties": {
"orcidId": {
"type": "string",
"description": "ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"creditName": {
"type": "string",
"description": "Published credit name, if set."
},
"givenNames": {
"type": "string",
"description": "Given names from the ORCID record."
},
"otherNames": {
"type": "array",
"items": {
"type": "string",
"description": "Alternative name."
},
"description": "Other names listed on the ORCID record."
},
"familyNames": {
"type": "string",
"description": "Family name from the ORCID record."
},
"institutionNames": {
"type": "array",
"items": {
"type": "string",
"description": "Institution name."
},
"description": "Affiliated institution names returned inline with each search result."
}
},
"description": "Expanded search result for one researcher.",
"additionalProperties": false
},
"description": "Matching researchers with inline name and institution data."
},
"numFound": {
"type": "number",
"description": "Total number of matching records in ORCID (before pagination)."
},
"nextStart": {
"type": "number",
"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."
},
"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."
},
"effectiveQuery": {
"type": "string",
"description": "Solr query sent to the ORCID API."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}orcid_get_works — Get ORCID Researcher Works
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). Narrow the list with work_types and year_from/year_to; the filters run over the whole record before paging, so matchedCount counts every match and workCount the whole record. The first 25 matching works are returned by default; page with offset and the returned nextOffset, or raise limit. 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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"orcid_id"
],
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 10000,
"minimum": 1,
"description": "Works per page. Default 25; a larger value returns at most 1,000 and says so."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based index of the first matching work to return (default 0). Continue with nextOffset."
},
"year_to": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Keep only works published in or before this year; not before year_from."
},
"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."
},
"year_from": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Keep only works published in or after this year, read from the first four digits of publicationDate. Under either year bound, works with no publication date are left out and counted in the notice."
},
"work_types": {
"type": "array",
"items": {
"enum": [
"annotation",
"artistic-performance",
"blog-post",
"book-chapter",
"book-review",
"book",
"cartographic-material",
"clinical-study",
"conference-abstract",
"conference-output",
"conference-paper",
"conference-poster",
"conference-presentation",
"conference-proceedings",
"data-management-plan",
"data-set",
"design",
"dictionary-entry",
"disclosure",
"dissertation-thesis",
"edited-book",
"encyclopedia-entry",
"image",
"invention",
"journal-article",
"journal-issue",
"learning-object",
"lecture-speech",
"license",
"magazine-article",
"manual",
"moving-image",
"musical-composition",
"newsletter-article",
"newspaper-article",
"online-resource",
"other",
"patent",
"physical-object",
"preprint",
"registered-copyright",
"report",
"research-technique",
"research-tool",
"review",
"software",
"sound",
"spin-off-company",
"standards-and-policy",
"supervised-student-publication",
"technical-standard",
"test",
"trademark",
"transcription",
"translation",
"website",
"working-paper",
"undefined"
],
"type": "string",
"description": "A work type in ORCID's vocabulary."
},
"description": "Keep only works of these types, matched against each workType (e.g. [\"journal-article\", \"preprint\"]; ORCID spells datasets data-set). Any listed type matches; an empty list keeps every type."
},
"include_external_ids": {
"type": "boolean",
"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."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"workCount",
"matchedCount",
"returnedCount",
"offset",
"truncated",
"works"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"profile_not_found"
],
"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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"works": {
"type": "array",
"items": {
"type": "object",
"required": [
"sources"
],
"properties": {
"url": {
"type": "string",
"description": "URL for the work, if available."
},
"title": {
"type": "string",
"description": "Work title."
},
"putCode": {
"type": "number",
"description": "Work put-code — pass to orcid_get_work_detail to fetch the full record including abstract and contributors."
},
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"selfAsserted"
],
"properties": {
"name": {
"type": "string",
"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."
},
"selfAsserted": {
"type": "boolean",
"description": "True when the asserting party (the assertion origin when recorded, otherwise the source) is the record's ORCID iD (orcidId); false when a member organization or another ORCID user asserted the item."
},
"assertionOriginName": {
"type": "string",
"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."
}
},
"description": "A party that asserted this item on the ORCID record.",
"additionalProperties": false
},
"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."
},
"workType": {
"type": "string",
"description": "Work type in ORCID's vocabulary (e.g. journal-article, data-set, software, preprint), taken from the preferred version."
},
"externalIds": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"url": {
"type": "string",
"description": "Resolver URL for this identifier, if available."
},
"type": {
"type": "string",
"description": "Identifier type (e.g. doi, pmid, arxiv, isbn)."
},
"value": {
"type": "string",
"description": "Identifier value."
},
"relationship": {
"type": "string",
"description": "Relationship to the work (self or part-of)."
}
},
"description": "External identifier for a work.",
"additionalProperties": false
},
"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."
},
"journalTitle": {
"type": "string",
"description": "Journal or container title."
},
"publicationDate": {
"type": "string",
"description": "Publication date (YYYY, YYYY-MM, or YYYY-MM-DD)."
}
},
"description": "Work summary record — one ORCID work group, built from its preferred version.",
"additionalProperties": false
},
"description": "Matching works in ORCID order, sliced to the requested offset and limit."
},
"notice": {
"type": "string",
"description": "Deprecated-iD disclosure naming the primary iD, requested/effective limit disclosure, the count of undated works a year filter left out, no-match or past-end guidance, or empty-record guidance: works may be private or not yet added."
},
"offset": {
"type": "number",
"description": "Zero-based offset into the matching works applied for this response."
},
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"truncated": {
"type": "boolean",
"description": "True when more matching works follow this page — fetch them with nextOffset."
},
"workCount": {
"type": "number",
"description": "Total works on this ORCID record, before filters, offset, and limit."
},
"nextOffset": {
"type": "number",
"description": "Offset to pass on the next call, with the same filters, to continue paging. Omitted when this response includes the last matching work."
},
"matchedCount": {
"type": "number",
"description": "Works matching work_types and the year range, before offset and limit; equals workCount when no filter is set."
},
"returnedCount": {
"type": "number",
"description": "Number of works returned in this response."
},
"appliedFilters": {
"type": "object",
"properties": {
"yearTo": {
"type": "number",
"description": "Latest publication year kept (year_to)."
},
"yearFrom": {
"type": "number",
"description": "Earliest publication year kept (year_from)."
},
"workTypes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Work types kept (work_types)."
}
},
"description": "The filters applied before paging, present only when one is set.",
"additionalProperties": false
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}orcid_get_work_detail — Get ORCID Work Details (Bulk)
Fetch full work details by put-code from orcid_get_works. Accepts 1–1,000 raw codes, deduplicates in first-occurrence order, and fetches the first 100 distinct codes in one request, returning every record ORCID sends. Returns abstracts, contributors with CRediT roles, the record's external IDs (DOI, PMID, arXiv, ISBN, etc.), citation metadata, journal title, URL, and source provenance. A record listing more than 100 contributors keeps the first 100 plus the requested researcher's own entries, with contributorCount and contributorsTruncated; a citation over 8,192 bytes is left out and flagged by citationOmitted. Per-record errors are returned alongside successful works. deferredPutCodes lists, in request order, the codes past the 100-code fetch cap and any ORCID returned no result for; pass them as put_codes in another call.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"orcid_id",
"put_codes"
],
"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": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Work put-code (positive integer).",
"exclusiveMinimum": 0
},
"maxItems": 1000,
"minItems": 1,
"description": "Array of 1–1,000 raw work put-codes from orcid_get_works. Deduplicated in first-occurrence order; the first 100 distinct codes are fetched and the rest return in deferredPutCodes. A record costs what its fields hold: 100 large-collaboration records, even with contributor lists cut to 100, exceed 1 MB."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"works",
"errors"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"profile_not_found",
"fetch_failed"
],
"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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"works": {
"type": "array",
"items": {
"type": "object",
"required": [
"putCode",
"externalIds",
"contributors",
"sources"
],
"properties": {
"url": {
"type": "string",
"description": "URL for the work, when available."
},
"title": {
"type": "string",
"description": "Work title."
},
"putCode": {
"type": "number",
"description": "Put-code of this work record."
},
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"selfAsserted"
],
"properties": {
"name": {
"type": "string",
"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."
},
"selfAsserted": {
"type": "boolean",
"description": "True when the asserting party (the assertion origin when recorded, otherwise the source) is the record's ORCID iD (orcidId); false when a member organization or another ORCID user asserted the item."
},
"assertionOriginName": {
"type": "string",
"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."
}
},
"description": "A party that asserted this item on the ORCID record.",
"additionalProperties": false
},
"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."
},
"abstract": {
"type": "string",
"description": "Abstract or short description, when provided."
},
"citation": {
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"description": "Citation format (e.g. bibtex, formatted-unspecified)."
},
"value": {
"type": "string",
"description": "Citation string in the specified format."
}
},
"description": "Citation metadata, when provided by the depositing system and no longer than 8,192 bytes.",
"additionalProperties": false
},
"subtitle": {
"type": "string",
"description": "Work subtitle, when provided."
},
"workType": {
"type": "string",
"description": "Work type (e.g. journal-article, data-set, software, preprint)."
},
"externalIds": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"url": {
"type": "string",
"description": "Resolver URL for this identifier, if available."
},
"type": {
"type": "string",
"description": "Identifier type (e.g. doi, pmid, arxiv, isbn, ppr)."
},
"value": {
"type": "string",
"description": "Identifier value."
},
"relationship": {
"type": "string",
"description": "Relationship to the work (self or part-of)."
}
},
"description": "External identifier for the work.",
"additionalProperties": false
},
"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": {
"type": "string",
"description": "Contributor display name or credit name."
},
"role": {
"type": "string",
"description": "Contributor role (e.g. author, editor, conceptualization, data-curation). May be a CRediT taxonomy term."
},
"orcidId": {
"type": "string",
"description": "Contributor ORCID iD (bare format), if linked."
},
"sequence": {
"type": "string",
"description": "Contributor sequence position (first or additional)."
}
},
"description": "Work contributor with optional role and ORCID iD.",
"additionalProperties": false
},
"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."
},
"journalTitle": {
"type": "string",
"description": "Journal or container title, when provided."
},
"languageCode": {
"type": "string",
"description": "Language code of the work, when provided."
},
"citationOmitted": {
"type": "boolean",
"description": "True when the deposited citation exceeded 8,192 bytes and was left out; the DOI in externalIds still resolves the work. Omitted otherwise."
},
"publicationDate": {
"type": "string",
"description": "Publication date (YYYY, YYYY-MM, or YYYY-MM-DD)."
},
"contributorCount": {
"type": "number",
"description": "Total contributors on the ORCID record. Present only when contributorsTruncated is true."
},
"contributorsTruncated": {
"type": "boolean",
"description": "True when the record lists more than 100 contributors and the list was cut. Omitted when the list is complete."
}
},
"description": "Full detail record for one work.",
"additionalProperties": false
},
"description": "Successfully resolved work detail records."
},
"errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"message"
],
"properties": {
"message": {
"type": "string",
"description": "Error message from ORCID (e.g. not found or access denied)."
},
"putCode": {
"type": "number",
"description": "Put-code that produced this error, when identifiable."
}
},
"description": "Error entry for a put-code that could not be resolved.",
"additionalProperties": false
},
"description": "Per-record errors for put-codes that could not be resolved (not found or inaccessible). Empty when all put-codes resolved successfully."
},
"notice": {
"type": "string",
"description": "Deprecated-iD disclosure naming the primary iD, then separate notices for put-codes past the 100-code fetch cap and put-codes ORCID returned no result for; call again with deferredPutCodes."
},
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"deferredPutCodes": {
"type": "array",
"items": {
"type": "number",
"description": "Deferred work put-code."
},
"description": "Requested distinct put-codes no returned work or error settled, in request order: those past the 100-code fetch cap and any ORCID returned no result for. Pass as put_codes in another call. Omitted when all are settled."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}orcid_get_affiliations — Get ORCID Researcher Affiliations
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"orcid_id"
],
"properties": {
"types": {
"type": "array",
"items": {
"enum": [
"employment",
"education",
"invited-positions",
"distinctions",
"memberships",
"qualifications",
"services",
"all"
],
"type": "string",
"description": "Affiliation section type. Use \"all\" to include all section types."
},
"default": [
"employment",
"education"
],
"minItems": 1,
"description": "Which affiliation types to return. Defaults to employment and education. Use [\"all\"] to get every section."
},
"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."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"affiliationCount",
"affiliations",
"requestedTypes"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"profile_not_found"
],
"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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "Note when no affiliations were found — they may be private, or neither the researcher nor a member organization added any — or when a deprecated iD was served from its primary iD."
},
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"affiliations": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"sources"
],
"properties": {
"url": {
"type": "string",
"description": "URL for the affiliation record, if provided."
},
"role": {
"type": "string",
"description": "Job title or role."
},
"type": {
"type": "string",
"description": "Affiliation section type (employment, education, invited-positions, etc.)."
},
"endDate": {
"type": "string",
"description": "End date (YYYY, YYYY-MM, or YYYY-MM-DD). Absent if current."
},
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"selfAsserted"
],
"properties": {
"name": {
"type": "string",
"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."
},
"selfAsserted": {
"type": "boolean",
"description": "True when the asserting party (the assertion origin when recorded, otherwise the source) is the record's ORCID iD (orcidId); false when a member organization or another ORCID user asserted the item."
},
"assertionOriginName": {
"type": "string",
"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."
}
},
"description": "A party that asserted this item on the ORCID record.",
"additionalProperties": false
},
"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."
},
"startDate": {
"type": "string",
"description": "Start date (YYYY, YYYY-MM, or YYYY-MM-DD)."
},
"department": {
"type": "string",
"description": "Department or unit within the organization."
},
"organization": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City of the organization."
},
"name": {
"type": "string",
"description": "Organization name."
},
"country": {
"type": "string",
"description": "Country of the organization."
},
"disambiguatedId": {
"type": "string",
"description": "Disambiguated organization identifier (ROR URL, GRID ID, or Ringgold ID)."
},
"disambiguationSource": {
"type": "string",
"description": "Source of the disambiguation (ROR, GRID, or RINGGOLD)."
}
},
"description": "Organization details.",
"additionalProperties": false
}
},
"description": "Affiliation record.",
"additionalProperties": false
},
"description": "Affiliation records for the requested types."
},
"requestedTypes": {
"type": "array",
"items": {
"type": "string",
"description": "Affiliation type."
},
"description": "Unique caller affiliation selectors in first-occurrence order, retaining all when requested."
},
"affiliationCount": {
"type": "number",
"description": "Total number of affiliation records returned."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}orcid_get_funding — Get ORCID Researcher Funding
List funding for an ORCID researcher, or supply a summary putCode as put_code to fetch one deposited award. Summary returns one preferred record per grant group with all sources and distinct periods. Detail returns that deposit alone with its own source, optional exact decimal amount and currency, URL, and its whole deposited description (ORCID caps it at 5,000 characters). Funding records are sparse; absence does not imply no funding.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"orcid_id"
],
"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_code": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Selected deposit putCode from a funding summary. Omit to list grouped summaries.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"fundingCount",
"funding"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"view": {
"enum": [
"summary",
"detail"
],
"type": "string",
"default": "summary",
"description": "Grouped summaries or one selected deposit."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"funding_not_found",
"funding_inaccessible",
"profile_not_found"
],
"description": "Machine-readable failure mode. Declared by this tool: `funding_not_found`: The selected funding deposit is unavailable at this ORCID iD. `funding_inaccessible`: ORCID denies public access to the selected funding deposit. `profile_not_found`: The ORCID iD does not correspond to a registered researcher. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "Note when no funding is found — absence of records does not mean absence of funding — or when a deprecated iD was served from its primary iD."
},
"funding": {
"type": "array",
"items": {
"type": "object",
"required": [
"grantNumbers",
"sources"
],
"properties": {
"url": {
"type": "string",
"description": "URL for the funding record, if available."
},
"type": {
"type": "string",
"description": "Funding type (e.g. grant, contract, award, salary-award)."
},
"title": {
"type": "string",
"description": "Funding title or project name."
},
"amount": {
"type": "object",
"properties": {
"value": {
"type": "string",
"description": "Exact deposited decimal text; no numeric conversion."
},
"currency": {
"type": "string",
"description": "Deposited currency code, when present."
}
},
"description": "Deposited amount and currency; missing values are not inferred.",
"additionalProperties": false
},
"funder": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Funder city."
},
"name": {
"type": "string",
"description": "Funder organization name."
},
"country": {
"type": "string",
"description": "Funder country."
},
"disambiguatedId": {
"type": "string",
"description": "Disambiguated funder identifier (e.g. Crossref Funder ID URL or ROR URL)."
},
"disambiguationSource": {
"type": "string",
"description": "Source of funder disambiguation (FUNDREF, ROR, GRID, etc.)."
}
},
"description": "Funder organization details.",
"additionalProperties": false
},
"endDate": {
"type": "string",
"description": "Funding end date (YYYY, YYYY-MM, or YYYY-MM-DD)."
},
"periods": {
"type": "array",
"items": {
"type": "object",
"properties": {
"endDate": {
"type": "string",
"description": "Period end date (YYYY, YYYY-MM, or YYYY-MM-DD)."
},
"startDate": {
"type": "string",
"description": "Period start date (YYYY, YYYY-MM, or YYYY-MM-DD)."
}
},
"description": "Award period one version of this funding item records.",
"additionalProperties": false
},
"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."
},
"putCode": {
"type": "number",
"description": "Preferred summary or selected deposit put-code; pass as put_code for detail."
},
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"selfAsserted"
],
"properties": {
"name": {
"type": "string",
"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."
},
"selfAsserted": {
"type": "boolean",
"description": "True when the asserting party (the assertion origin when recorded, otherwise the source) is the record's ORCID iD (orcidId); false when a member organization or another ORCID user asserted the item."
},
"assertionOriginName": {
"type": "string",
"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."
}
},
"description": "A party that asserted this item on the ORCID record.",
"additionalProperties": false
},
"description": "The parties that added the funding item: every distinct group source in summary, the selected deposit's own source in detail. Empty when ORCID records no source."
},
"startDate": {
"type": "string",
"description": "Funding start date (YYYY, YYYY-MM, or YYYY-MM-DD)."
},
"description": {
"type": "string",
"description": "Deposited description, whole and exact, including its original line endings. Detail view only."
},
"grantNumbers": {
"type": "array",
"items": {
"type": "string",
"description": "Grant or award number."
},
"description": "Grant numbers or award identifiers for this funding record."
}
},
"description": "One preferred funding group summary or the selected deposit detail.",
"additionalProperties": false
},
"description": "Funding group summaries or one selected funding deposit."
},
"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 group in summary, one deposit in detail."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}orcid_get_peer_reviews — Get ORCID Researcher Peer Reviews
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"orcid_id"
],
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 10000,
"minimum": 1,
"description": "Reviews per page. Default 25; a larger value returns at most 1,000 and says so."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based review offset; continue with nextOffset."
},
"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."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"reviewCount",
"totalCount",
"offset",
"truncated",
"peerReviews"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"profile_not_found"
],
"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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "Deprecated-iD disclosure naming the primary iD, requested/effective limit disclosure, past-end guidance, or empty-history guidance."
},
"offset": {
"type": "number",
"description": "Zero-based offset applied to this page."
},
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"truncated": {
"type": "boolean",
"description": "True when more reviews remain after this page."
},
"nextOffset": {
"type": "number",
"description": "First omitted review offset; absent on final, empty, or past-end pages."
},
"totalCount": {
"type": "number",
"description": "Total reviews before pagination."
},
"peerReviews": {
"type": "array",
"items": {
"type": "object",
"required": [
"sources"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"selfAsserted"
],
"properties": {
"name": {
"type": "string",
"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."
},
"selfAsserted": {
"type": "boolean",
"description": "True when the asserting party (the assertion origin when recorded, otherwise the source) is the record's ORCID iD (orcidId); false when a member organization or another ORCID user asserted the item."
},
"assertionOriginName": {
"type": "string",
"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."
}
},
"description": "A party that asserted this item on the ORCID record.",
"additionalProperties": false
},
"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."
},
"groupIssn": {
"type": "string",
"description": "ISSN of the journal group this review belongs to, if available — the key to the journal name, which ORCID does not return."
},
"reviewUrl": {
"type": "string",
"description": "URL for the review record, if available."
},
"reviewType": {
"type": "string",
"description": "Review type (e.g. review, evaluation, grant-review, editor-report)."
},
"reviewerRole": {
"type": "string",
"description": "Reviewer role (e.g. reviewer, editor, chair, organizer, co-investigator, co-reviewer)."
},
"completionDate": {
"type": "string",
"description": "Completion date of the review (YYYY, YYYY-MM, or YYYY-MM-DD)."
},
"conveningOrganization": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Convening organization city."
},
"name": {
"type": "string",
"description": "Convening organization name as ORCID records it — often the service that imported the review (e.g. Publons)."
},
"country": {
"type": "string",
"description": "Convening organization country."
},
"disambiguatedId": {
"type": "string",
"description": "Disambiguated organization identifier."
},
"disambiguationSource": {
"type": "string",
"description": "Source of disambiguation (ROR, GRID, RINGGOLD, etc.)."
}
},
"description": "Organization ORCID records as convening the review, often the importing service. Identify the journal by groupIssn.",
"additionalProperties": false
}
},
"description": "Peer review record.",
"additionalProperties": false
},
"description": "Peer review records for this ORCID iD."
},
"reviewCount": {
"type": "number",
"description": "Total number of peer review records returned."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}orcid_get_research_resources — Get ORCID Research Resources
List allocation proposals for an ORCID researcher, or supply put_code from a summary record to retrieve its actual resource items. Summary is the default view and includes every proposal host, identifiers, access period, and source provenance; hostOrganization remains the first proposal host. Detail adds item names, types, all operators, identifiers, and URLs, paged by item_offset and item_limit (both require put_code); continue at nextItemOffset with the same put_code. Most researchers have no entries; allocation systems such as ACCESS deposit these records.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"orcid_id"
],
"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_code": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Proposal put-code from summary mode; selects the full allocation detail.",
"exclusiveMinimum": 0
},
"item_limit": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Items per detail page. Default 25; a larger value returns at most 100 and says so. Requires put_code."
},
"item_offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Detail item offset. Default 0; requires put_code."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"orcidId",
"orcidUri",
"view",
"resourceCount",
"resources"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"view": {
"enum": [
"summary",
"detail"
],
"type": "string",
"description": "Summary list or selected allocation detail."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"detail_required",
"resource_not_found",
"profile_not_found"
],
"description": "Machine-readable failure mode. Declared by this tool: `detail_required`: Item paging arguments are supplied without put_code. `resource_not_found`: The selected allocation detail does not exist or is not public. `profile_not_found`: The ORCID iD does not correspond to a registered researcher. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "Note when no research resources are found — this section is sparsely populated across ORCID profiles — or when a deprecated iD was served from its primary iD."
},
"orcidId": {
"type": "string",
"description": "Normalized ORCID iD (bare format)."
},
"putCode": {
"type": "number",
"description": "Selected proposal put-code in detail mode."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"resources": {
"type": "array",
"items": {
"type": "object",
"required": [
"putCode",
"externalIds",
"sources"
],
"properties": {
"url": {
"type": "string",
"description": "URL for the resource or allocation record."
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"hosts",
"externalIds"
],
"properties": {
"url": {
"type": "string",
"description": "Deposited item URL."
},
"name": {
"type": "string",
"description": "Allocated resource name."
},
"type": {
"type": "string",
"description": "Allocated resource type."
},
"hosts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City of the organization."
},
"name": {
"type": "string",
"description": "Organization name."
},
"country": {
"type": "string",
"description": "Country code of the organization."
},
"disambiguatedId": {
"type": "string",
"description": "Disambiguated organization ID (e.g. ROR or GRID identifier)."
},
"disambiguationSource": {
"type": "string",
"description": "Source of the disambiguation ID (e.g. ROR, GRID, RINGGOLD)."
}
},
"description": "Hosting organization for the research resource.",
"additionalProperties": false
},
"description": "All item operators in upstream order; missing host details remain unknown."
},
"externalIds": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"url": {
"type": "string",
"description": "Resolver URL for this identifier, if available."
},
"type": {
"type": "string",
"description": "Identifier type (e.g. uri, doi, grant_number)."
},
"value": {
"type": "string",
"description": "Identifier value."
},
"relationship": {
"type": "string",
"description": "Relationship to the resource (self or part-of)."
}
},
"description": "External identifier for the research resource.",
"additionalProperties": false
},
"description": "Deposited item identifiers."
}
},
"description": "One deposited allocation item.",
"additionalProperties": false
},
"description": "Selected page of allocation items in detail mode."
},
"title": {
"type": "string",
"description": "Resource or proposal title."
},
"endDate": {
"type": "string",
"description": "Access or allocation end date (YYYY, YYYY-MM, or YYYY-MM-DD)."
},
"putCode": {
"type": "number",
"description": "Put-code of this research resource record."
},
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"selfAsserted"
],
"properties": {
"name": {
"type": "string",
"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."
},
"selfAsserted": {
"type": "boolean",
"description": "True when the asserting party (the assertion origin when recorded, otherwise the source) is the record's ORCID iD (orcidId); false when a member organization or another ORCID user asserted the item."
},
"assertionOriginName": {
"type": "string",
"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."
}
},
"description": "A party that asserted this item on the ORCID record.",
"additionalProperties": false
},
"description": "The party that added this resource to the ORCID record — usually the allocation system that granted it. Empty when ORCID records no source."
},
"itemCount": {
"type": "number",
"description": "Total deposited allocation items."
},
"startDate": {
"type": "string",
"description": "Access or allocation start date (YYYY, YYYY-MM, or YYYY-MM-DD)."
},
"itemOffset": {
"type": "number",
"description": "Requested detail item offset."
},
"externalIds": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"url": {
"type": "string",
"description": "Resolver URL for this identifier, if available."
},
"type": {
"type": "string",
"description": "Identifier type (e.g. uri, doi, grant_number)."
},
"value": {
"type": "string",
"description": "Identifier value."
},
"relationship": {
"type": "string",
"description": "Relationship to the resource (self or part-of)."
}
},
"description": "External identifier for the research resource.",
"additionalProperties": false
},
"description": "External identifiers for the resource (often a portal URI)."
},
"proposalHosts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City of the organization."
},
"name": {
"type": "string",
"description": "Organization name."
},
"country": {
"type": "string",
"description": "Country code of the organization."
},
"disambiguatedId": {
"type": "string",
"description": "Disambiguated organization ID (e.g. ROR or GRID identifier)."
},
"disambiguationSource": {
"type": "string",
"description": "Source of the disambiguation ID (e.g. ROR, GRID, RINGGOLD)."
}
},
"description": "Hosting organization for the research resource.",
"additionalProperties": false
},
"description": "All proposal hosts in upstream order; separate from item operators."
},
"itemsTruncated": {
"type": "boolean",
"description": "Whether more allocation items remain after this page."
},
"nextItemOffset": {
"type": "number",
"description": "First omitted item offset; absent when no items remain."
},
"hostOrganization": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City of the organization."
},
"name": {
"type": "string",
"description": "Organization name."
},
"country": {
"type": "string",
"description": "Country code of the organization."
},
"disambiguatedId": {
"type": "string",
"description": "Disambiguated organization ID (e.g. ROR or GRID identifier)."
},
"disambiguationSource": {
"type": "string",
"description": "Source of the disambiguation ID (e.g. ROR, GRID, RINGGOLD)."
}
},
"description": "Organization that hosts or manages the resource.",
"additionalProperties": false
},
"returnedItemCount": {
"type": "number",
"description": "Items returned on this page."
}
},
"description": "Research resource record.",
"additionalProperties": false
},
"description": "Research resources associated with this ORCID iD."
},
"truncated": {
"type": "boolean",
"description": "Detail-page indicator: true exactly when the selected resource has allocation items remaining after this page; mirrors itemsTruncated. Absent in summary mode."
},
"resourceCount": {
"type": "number",
"description": "Total number of research resources returned."
},
"itemLimitNotice": {
"type": "string",
"description": "Notice when the requested item limit is reduced to the effective maximum of 100."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}orcid_resolve_researcher — Resolve ORCID Researcher
Disambiguate an author name to a verified ORCID iD. Returns ranked candidates (5 by default, at most 20 per search stage) 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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"doi": {
"type": "string",
"pattern": "^(?:\\s*|\\s*(?:(?:(?:[hH][tT][tT][pP][sS]?:\\/\\/)?(?:[dD][xX]\\.)?[dD][oO][iI]\\.[oO][rR][gG]\\/|[dD][oO][iI]:)\\s*)?10\\.[0-9]+\\/\\S+\\s*)$",
"description": "Complete 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. Requires 10., digits, a slash, and a non-whitespace suffix; blank means unset. Acts as a near-deterministic anchor — filters to researchers who linked this DOI to their ORCID record."
},
"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."
},
"pmid": {
"type": "string",
"pattern": "^(?:\\s*|\\s*(?:(?:(?:[hH][tT][tT][pP][sS]?:\\/\\/)?(?:(?:[wW][wW][wW]\\.)?[nN][cC][bB][iI]\\.[nN][lL][mM]\\.[nN][iI][hH]\\.[gG][oO][vV]\\/[pP][uU][bB][mM][eE][dD]\\/|[pP][uU][bB][mM][eE][dD]\\.[nN][cC][bB][iI]\\.[nN][lL][mM]\\.[nN][iI][hH]\\.[gG][oO][vV]\\/)|[pP][mM][iI][dD]:)\\s*)?[0-9]+\\s*(?:\\/(?:[?#][\\s\\S]*|\\s*)|[?#][\\s\\S]*|$))$",
"description": "Numeric 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. Blank means unset; a label or URL without digits is invalid. Acts as a near-deterministic anchor — filters to researchers who linked this PMID to their ORCID record."
},
"rows": {
"type": "integer",
"default": 5,
"maximum": 10000,
"minimum": 1,
"description": "Candidates to return. Default 5; a larger value returns at most 20 per search stage and says so."
},
"affiliation": {
"type": "string",
"description": "Researcher's institution or organization name. Used for institution overlap scoring and optionally as a search constraint."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"candidates",
"queryUsed",
"totalFound",
"primaryQuery",
"primaryTotalFound"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"query_failed"
],
"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."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"notice": {
"type": "string",
"description": "Requested/effective candidate cap notice, composed with recovery guidance when no candidates are found or the anchor query failed to match."
},
"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."
},
"candidates": {
"type": "array",
"items": {
"type": "object",
"required": [
"orcidId",
"orcidUri",
"institutionNames",
"nameMatchType",
"institutionOverlap",
"anchorType"
],
"properties": {
"orcidId": {
"type": "string",
"description": "Candidate ORCID iD (bare format)."
},
"orcidUri": {
"type": "string",
"description": "Full ORCID URI."
},
"anchorType": {
"enum": [
"doi",
"pmid",
"none"
],
"type": "string",
"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."
},
"creditName": {
"type": "string",
"description": "Published credit name, if set."
},
"givenNames": {
"type": "string",
"description": "Given names from the ORCID record."
},
"familyNames": {
"type": "string",
"description": "Family name from the ORCID record."
},
"nameMatchType": {
"enum": [
"exact",
"partial",
"other-name",
"none"
],
"type": "string",
"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."
},
"institutionNames": {
"type": "array",
"items": {
"type": "string",
"description": "Institution name."
},
"description": "Affiliated institutions from the ORCID record."
},
"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."
}
},
"description": "Disambiguation candidate with transparency signals.",
"additionalProperties": false
},
"description": "Ranked candidates, ordered by name match quality then institution overlap."
},
"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."
},
"relaxedQuery": {
"type": "string",
"description": "The last fallback stage run (byline initials, affiliation dropped, other names, or an anchor alone), present only when the primary query found nothing."
},
"primaryTotalFound": {
"type": "number",
"description": "Total ORCID records matching primaryQuery. Zero when the primary query found nothing and a relaxed fallback produced the returned candidates."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}Prompts
0 advertised
Resources
1 advertised
orcid-guide
Gates, identifier chains, and Solr query syntax for the orcid_* tools. Use when pinning an author name, DOI, grant number, or institution to an ORCID iD, building a researcher dossier, filtering works by type or year, following put-codes to abstracts and contributors, or writing a raw ORCID query.
skill://orcid-guide/SKILL.mdorcid-researcher-profile — orcid-researcher-profile
Researcher profile (person section) from ORCID: name, other names, biography, keywords, researcher URLs, and external identifiers. Use when injecting researcher identity context into a prompt or checking for a specific external ID (e.g., Scopus ID for cross-server chaining). Prefer the orcid_get_profile tool when the response needs to flow into conditional logic.
orcid://researcher/{orcid_id}/profileorcid-researcher-works — orcid-researcher-works
Works list for an ORCID researcher: titles, types, publication dates, journal names, and external identifiers (DOIs, PMIDs, arXiv IDs). Use when providing a researcher's publication list as background context for summarizing or reviewing a body of work. Returns the first 25 works plus workCount (the total available) — call the orcid_get_works tool to page through the full list or filter results. DOIs and PMIDs in the response are ready for Crossref or PubMed chaining. Prefer the orcid_get_works tool when filtering or processing results is needed.
orcid://researcher/{orcid_id}/worksio.modelcontextprotocol/skills
skill://{+path}90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 2 of 2 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 691 ms
- 95th percentile latency
- 691 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 691 ms · metadata changed · 9 tool(s), 1 resource(s), 3 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http orcid-mcp-server-caseyjhand https://orcid.caseyjhand.com/mcpCodex
codex mcp add orcid-mcp-server-caseyjhand --url https://orcid.caseyjhand.com/mcpCursor
{
"mcpServers": {
"orcid-mcp-server-caseyjhand": {
"url": "https://orcid.caseyjhand.com/mcp"
}
}
}Cline
{
"mcpServers": {
"orcid-mcp-server-caseyjhand": {
"type": "streamableHttp",
"url": "https://orcid.caseyjhand.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"orcid-mcp-server-caseyjhand": {
"type": "http",
"url": "https://orcid.caseyjhand.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http orcid-mcp-server-caseyjhand https://orcid.caseyjhand.com/mcpClaude Desktop
https://orcid.caseyjhand.com/mcpWindsurf
{
"mcpServers": {
"orcid-mcp-server-caseyjhand": {
"serverUrl": "https://orcid.caseyjhand.com/mcp"
}
}
}Let your agent find its tools
Find servers like orcid-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.