@cyanheads/orcid-mcp-server

v0.1.5 pre-1.0

Search and retrieve researcher profiles, works, affiliations, funding, and peer review records from the ORCID registry via MCP. STDIO or Streamable HTTP.

@cyanheads/orcid-mcp-server
claude mcp add --transport http orcid-mcp-server https://orcid.caseyjhand.com/mcp
codex mcp add orcid-mcp-server --url https://orcid.caseyjhand.com/mcp
{
  "mcpServers": {
    "orcid-mcp-server": {
      "url": "https://orcid.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http orcid-mcp-server https://orcid.caseyjhand.com/mcp
{
  "mcpServers": {
    "orcid-mcp-server": {
      "command": "bunx",
      "args": [
        "@cyanheads/orcid-mcp-server@latest"
      ]
    }
  }
}
{
  "mcpServers": {
    "orcid-mcp-server": {
      "type": "http",
      "url": "https://orcid.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://orcid.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

7

orcid_get_profile

Fetch a researcher's public profile from ORCID: name, 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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orcid_get_profile",
    "arguments": {
      "orcid_id": "<orcid_id>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "orcid_id": {
      "type": "string",
      "pattern": "^(https?:\\/\\/orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dX]$",
      "description": "ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789)."
    }
  },
  "required": [
    "orcid_id"
  ],
  "additionalProperties": false
}
view source ↗

orcid_search_researchers

open-world

Search the ORCID registry using structured field parameters or raw Solr syntax. All provided structured params are ANDed together. The `query` field appends raw Solr syntax to the generated clause. Returns ORCID iDs with inline name and institution data — no follow-up profile fetches needed for basic disambiguation. For ranked disambiguation of an ambiguous author name, use orcid_resolve_researcher instead. The ORCID Public API caps results at 10,000 — use pagination for large result sets.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orcid_search_researchers",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "given_name": {
      "description": "Researcher's given (first) name.",
      "type": "string"
    },
    "family_name": {
      "description": "Researcher's family (last) name.",
      "type": "string"
    },
    "affiliation": {
      "description": "Organization name to filter by. Phrase match.",
      "type": "string"
    },
    "keyword": {
      "description": "Keyword to search in the researcher's keyword fields. Phrase match.",
      "type": "string"
    },
    "ror_id": {
      "description": "ROR organization ID to filter by (full URL, e.g. https://ror.org/00f54p054). Returns researchers affiliated with this organization.",
      "type": "string"
    },
    "doi": {
      "description": "DOI to anchor the search. Returns researchers who have linked this DOI to their ORCID record.",
      "type": "string"
    },
    "pmid": {
      "description": "PubMed ID to anchor the search. Returns researchers who have linked this PMID to their ORCID record.",
      "type": "string"
    },
    "query": {
      "description": "Raw Solr query string appended to the generated clause with AND. Supports all ORCID Solr fields and boolean operators.",
      "type": "string"
    },
    "rows": {
      "default": 20,
      "description": "Maximum results to return (1–1000).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "start": {
      "default": 0,
      "description": "Pagination offset (0-based). ORCID Public API caps at 10,000 total results.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "rows",
    "start"
  ],
  "additionalProperties": false
}
view source ↗

orcid_get_works

Retrieve works associated with an ORCID iD — publications, datasets, software, preprints, and more. Returns work summaries with titles, types, publication dates, journal names, and all external identifiers (DOIs, PMIDs, arXiv IDs, ISBNs). External IDs are ready for chaining to Crossref, PubMed, or arXiv servers. The /works endpoint returns summaries only — pass DOIs to Crossref or PMIDs to PubMed to retrieve full metadata or abstracts. Works are self-reported; a researcher may not have linked all their publications.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orcid_get_works",
    "arguments": {
      "orcid_id": "<orcid_id>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "orcid_id": {
      "type": "string",
      "pattern": "^(https?:\\/\\/orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dX]$",
      "description": "ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789)."
    }
  },
  "required": [
    "orcid_id"
  ],
  "additionalProperties": false
}
view source ↗

orcid_get_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, and date ranges. Affiliation data is self-reported; absence does not mean no affiliation.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orcid_get_affiliations",
    "arguments": {
      "orcid_id": "<orcid_id>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "orcid_id": {
      "type": "string",
      "pattern": "^(https?:\\/\\/orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dX]$",
      "description": "ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789)."
    },
    "types": {
      "default": [
        "employment",
        "education"
      ],
      "description": "Which affiliation types to return. Defaults to employment and education. Use [\"all\"] to get every section.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "employment",
          "education",
          "invited-positions",
          "distinctions",
          "memberships",
          "qualifications",
          "services",
          "all"
        ],
        "description": "Affiliation section type. Use \"all\" to include all section types."
      }
    }
  },
  "required": [
    "orcid_id",
    "types"
  ],
  "additionalProperties": false
}
view source ↗

orcid_get_funding

Fetch funding records for an ORCID researcher: grants, contracts, awards, and salary awards. Returns funder names, funder organization identifiers, grant numbers, and funding periods. Funding data is entirely self-reported — most researchers do not enter funding even when they have grants. Absence of funding records does not imply absence of funding. When records exist they are high-value for grant tracking and funder analysis.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orcid_get_funding",
    "arguments": {
      "orcid_id": "<orcid_id>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "orcid_id": {
      "type": "string",
      "pattern": "^(https?:\\/\\/orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dX]$",
      "description": "ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789)."
    }
  },
  "required": [
    "orcid_id"
  ],
  "additionalProperties": false
}
view source ↗

orcid_get_peer_reviews

Fetch peer review activity for an ORCID researcher: convening organizations (journals and publishers), reviewer role (reviewer, editor, chair, etc.), review type, completion dates, and ISSN-keyed group identifiers. Use to assess editorial activity, journal affiliations, and the scope of a researcher's peer review contributions. Peer review records are self-reported or imported by participating publishers — coverage varies by researcher.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orcid_get_peer_reviews",
    "arguments": {
      "orcid_id": "<orcid_id>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "orcid_id": {
      "type": "string",
      "pattern": "^(https?:\\/\\/orcid\\.org\\/)?\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dX]$",
      "description": "ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789)."
    }
  },
  "required": [
    "orcid_id"
  ],
  "additionalProperties": false
}
view source ↗

orcid_resolve_researcher

open-world

Disambiguate an author name to a verified ORCID iD. Returns up to 5 ranked candidates 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. 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.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "orcid_resolve_researcher",
    "arguments": {
      "name": "<name>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Author name to disambiguate (full name preferred, e.g. \"Jennifer Doudna\" or \"J. Doudna\")."
    },
    "affiliation": {
      "description": "Researcher's institution or organization name. Used for institution overlap scoring and optionally as a search constraint.",
      "type": "string"
    },
    "doi": {
      "description": "DOI of a work authored by this researcher. Acts as a near-deterministic anchor — filters to researchers who linked this DOI to their ORCID record.",
      "type": "string"
    },
    "pmid": {
      "description": "PubMed ID of a work authored by this researcher. Acts as a near-deterministic anchor — filters to researchers who linked this PMID to their ORCID record.",
      "type": "string"
    },
    "rows": {
      "default": 5,
      "description": "Maximum candidate count to return (1–20). Defaults to 5.",
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    }
  },
  "required": [
    "name",
    "rows"
  ],
  "additionalProperties": false
}
view source ↗

Resources

2

Researcher profile (person section) from ORCID: name, 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.

uri orcid://researcher/{orcid_id}/profile mime application/json

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, e.g., before asking an LLM to summarize a body of work. 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.

uri orcid://researcher/{orcid_id}/works mime application/json