Skip to main content
Glama

Resolve ORCID Researcher

orcid_resolve_researcher
Read-onlyIdempotent

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.

Input Schema

NameRequiredDescriptionDefault
doiNoComplete 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.
nameYesAuthor 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.
pmidNoNumeric 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.
rowsNoCandidates to return. Default 5; a larger value returns at most 20 per search stage and says so.
affiliationNoResearcher's institution or organization name. Used for institution overlap scoring and optionally as a search constraint.

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoRequested/effective candidate cap notice, composed with recovery guidance when no candidates are found or the anchor query failed to match.
queryUsedNoThe Solr query that produced the returned candidates — the primary query, or the last fallback stage run when the primary found nothing. Paired with totalFound.
candidatesNoRanked candidates, ordered by name match quality then institution overlap.
totalFoundNoTotal ORCID records matching queryUsed (the query that produced the returned candidates).
primaryQueryNoThe primary, most-constrained Solr query attempted first (exact name phrase + optional anchor + optional affiliation). Always populated; equals queryUsed when no fallback ran.
relaxedQueryNoThe last fallback stage run (byline initials, affiliation dropped, other names, or an anchor alone), present only when the primary query found nothing.
primaryTotalFoundNoTotal ORCID records matching primaryQuery. Zero when the primary query found nothing and a relaxed fallback produced the returned candidates.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / rows / description
      Previous value: -"Requested candidate count (1–10000), capped at 20 per search stage with a notice when clamped. Defaults to 5."New value: +"Candidates to return. Default 5; a larger value returns at most 20 per search stage and says so."
  2. Changed3 schema fields changed
    • changedInput schema / properties / rows / description
      Previous value: -"Maximum candidate count to return (1–20). Defaults to 5."New value: +"Requested candidate count (1–10000), capped at 20 per search stage with a notice when clamped. Defaults to 5."
    • changedInput schema / properties / rows / maximum
      Previous value: -20New value: +10000
    • changedOutput schema / properties / notice / description
      Previous value: -"Recovery hint when no candidates are found or when the anchor query failed to match."New value: +"Requested/effective candidate cap notice, composed with recovery guidance when no candidates are found or the anchor query failed to match."
  3. Changed4 schema fields changed
    • changedInput schema / properties / doi / description
      Previous value: -"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."New value: +"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."
    • addedInput schema / properties / doi / pattern
      Added value: +"^(?:\\s*|\\s*(?:(?:(?:[hH][tT][tT][pP][sS]?:\\/\\/)?(?:[dD][xX]\\.)?[dD][oO][iI]\\.[oO][rR][gG]\\/|[dD][oO][iI]:)\\s*)?10\\.[0-9]+\\/\\S+\\s*)$"
    • changedInput schema / properties / pmid / description
      Previous value: -"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."New value: +"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."
    • addedInput schema / properties / pmid / pattern
      Added value: +"^(?:\\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]*|$))$"
  4. Changed5 schema fields changed
    • changedInput schema / properties / name / description
      Previous value: -"Author name to disambiguate (full name preferred, e.g. \"Jennifer Doudna\" or \"J. Doudna\")."New value: +"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."
    • changedOutput schema / properties / candidates / items / properties / nameMatchType / description
      Previous value: -"How closely the candidate name matches the input name, compared case- and accent-insensitively (José = Jose): exact (full match), partial (token overlap), other-name (match on alternate name), or none."New value: +"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."
    • changedOutput schema / properties / primaryQuery / description
      Previous value: -"The primary, most-constrained Solr query attempted first (name + optional anchor + optional affiliation). Always populated; equals queryUsed when no relaxed fallback ran."New value: +"The primary, most-constrained Solr query attempted first (exact name phrase + optional anchor + optional affiliation). Always populated; equals queryUsed when no fallback ran."
    • changedOutput schema / properties / queryUsed / description
      Previous value: -"The Solr query that produced the returned candidates — the primary query, or the final relaxed query when a fallback ran. Paired with totalFound."New value: +"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."
    • changedOutput schema / properties / relaxedQuery / description
      Previous value: -"Solr query used in a secondary relaxed search, if the primary returned no results."New value: +"The last fallback stage run (byline initials, affiliation dropped, other names, or an anchor alone), present only when the primary query found nothing."
  5. Changed3 schema fields changed
    • changedInput schema / properties / doi / description
      Previous value: -"DOI of a work authored by this researcher. Acts as a near-deterministic anchor — filters to researchers who linked this DOI to their ORCID record."New value: +"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."
    • changedInput schema / properties / pmid / description
      Previous value: -"PubMed ID of a work authored by this researcher. Acts as a near-deterministic anchor — filters to researchers who linked this PMID to their ORCID record."New value: +"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."
    • changedOutput schema / properties / candidates / items / properties / nameMatchType / description
      Previous value: -"How closely the candidate name matches the input name: exact (full match), partial (token overlap), other-name (match on alternate name), or none."New value: +"How closely the candidate name matches the input name, compared case- and accent-insensitively (José = Jose): exact (full match), partial (token overlap), other-name (match on alternate name), or none."
  6. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "candidates",
      +      "queryUsed",
      +      "totalFound",
      +      "primaryQuery",
      +      "primaryTotalFound"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "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"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "candidates",
      -  "queryUsed",
      -  "totalFound",
      -  "primaryQuery",
      -  "primaryTotalFound"
      -]
  7. Changed1 schema field changed
    • changedOutput schema / properties / candidates / items / properties / institutionOverlap / description
      Previous value: -"True when at least one of the candidate's institutions matches tokens from the provided affiliation parameter."New value: +"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."
  8. Changed5 schema fields changed
    • addedOutput schema / properties / primaryQuery
      Added value: +{
      +  "description": "The primary, most-constrained Solr query attempted first (name + optional anchor + optional affiliation). Always populated; equals queryUsed when no relaxed fallback ran.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / primaryTotalFound
      Added value: +{
      +  "description": "Total ORCID records matching primaryQuery. Zero when the primary query found nothing and a relaxed fallback produced the returned candidates.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / queryUsed / description
      Previous value: -"Solr query sent to ORCID for the primary search."New value: +"The Solr query that produced the returned candidates — the primary query, or the final relaxed query when a fallback ran. Paired with totalFound."
    • changedOutput schema / properties / totalFound / description
      Previous value: -"Total ORCID records matching the primary query."New value: +"Total ORCID records matching queryUsed (the query that produced the returned candidates)."
    • changedOutput schema / required
      Previous value: -[
      -  "candidates",
      -  "queryUsed",
      -  "totalFound"
      -]New value: +[
      +  "candidates",
      +  "queryUsed",
      +  "totalFound",
      +  "primaryQuery",
      +  "primaryTotalFound"
      +]
  9. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, but the description adds substantial behavior the annotations do not: the staged search (exact phrase, then byline initials, then other names), the 20-per-stage cap even when rows is larger, and the fact that no synthetic scores are produced. Its only real gap is what a candidate object looks like and how the ranking is ordered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is five sentences, all dense and front-loaded with the purpose before the fallback mechanics. Some of the signal enumeration could be tightened, but every sentence adds information an agent would otherwise have to infer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be re-explained, and the description still summarizes the returned disambiguation signals. The choice of parameters, fallback behavior, and limits are complete for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description does more than repeat the schema by explaining why name formats matter (a full name gives the most precise candidates) and why a DOI or PMID is a near-deterministic anchor. The rows ceiling and affiliation's dual role are described in the schema but only partly reinforced in prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: disambiguate an author name to a verified ORCID iD. It also immediately contrasts with the sibling tool by name, so an agent can choose between orcid_resolve_researcher and orcid_search_researchers without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative explicitly ('Use this tool (not orcid_search_researchers)') and the condition that selects it: an ambiguous name needing ranked disambiguation. The fallback search order and the near-deterministic DOI/PMID anchor give extra routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.