# io.github.cyanheads/orcid-mcp-server (remote · orcid.caseyjhand.com)

Researcher profiles, works, affiliations, funding, and peer reviews from the ORCID registry.

- Trust score: 69/100 (medium)
- Change this week: +5
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `orcid.caseyjhand.com`: 69/100 (this document), [markdown](https://verifymcp.io/servers/cyanheads-orcid-mcp-server/orcid.md), [page](https://verifymcp.io/servers/cyanheads-orcid-mcp-server/orcid)
- npm · `@cyanheads/orcid-mcp-server`: 35/100, [markdown](https://verifymcp.io/servers/cyanheads-orcid-mcp-server/cyanheads-orcid-mcp-server.md), [page](https://verifymcp.io/servers/cyanheads-orcid-mcp-server/cyanheads-orcid-mcp-server)

## Channel facts

- Endpoint: `https://orcid.caseyjhand.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.2.13`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 66/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 9 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 66/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2147 tokens (~238/item across 9 items; 9 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http cyanheads-orcid-mcp-server https://orcid.caseyjhand.com/mcp
```

### Codex

```toml
[mcp_servers.cyanheads-orcid-mcp-server]
url = "https://orcid.caseyjhand.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cyanheads-orcid-mcp-server": {
      "type": "remote",
      "url": "https://orcid.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add cyanheads-orcid-mcp-server --url https://orcid.caseyjhand.com/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  cyanheads-orcid-mcp-server:
    url: "https://orcid.caseyjhand.com/mcp"
```

### Other

```json
{
  "mcpServers": {
    "cyanheads-orcid-mcp-server": {
      "type": "http",
      "url": "https://orcid.caseyjhand.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-01 (score 68, +2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 66, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-29 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 64, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 63)

First indexed and scored.

## MCP tools (9)

### `orcid_get_profile` (~165 tokens)

Get ORCID Researcher 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.

Input parameters:

- `orcid_id` (string, required): ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).

Output parameters:

- `biography` (string): Researcher biography, if publicly visible.
- `countries` (array): Countries listed in the researcher's address section.
- `creditName` (string): Published credit name, if set.
- `emails` (array): Publicly visible email addresses.
- `externalIdentifiers` (array): External identifiers from scholarly systems (Scopus, Web of Science, Loop, etc.).
- `familyName` (string): Family (last) name, if publicly visible.
- `givenNames` (string): Given (first) name, if publicly visible.
- `keywords` (array): Research keywords set by the researcher.
- `orcidId` (string): Normalized ORCID iD (bare format without URI prefix).
- `orcidUri` (string): Full ORCID URI (https://orcid.org/{id}).
- `researcherUrls` (array): Researcher-provided URLs (personal site, lab page, blog, etc.).

### `orcid_search_researchers` (~358 tokens)

Search ORCID Researchers

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.

Input parameters:

- `affiliation` (string): Organization name to filter by. Phrase match.
- `doi` (string): DOI to anchor the search. Returns researchers who have linked this DOI to their ORCID record.
- `family_name` (string): Researcher's family (last) name.
- `given_name` (string): Researcher's given (first) name.
- `keyword` (string): Keyword to search in the researcher's keyword fields. Phrase match.
- `pmid` (string): PubMed ID to anchor the search. Returns researchers who have linked this PMID to their ORCID record.
- `query` (string): Raw Solr query string appended to the generated clause with AND. Supports all ORCID Solr fields and boolean operators.
- `ror_id` (string): ROR organization ID to filter by (full URL, e.g. https://ror.org/00f54p054). Returns researchers affiliated with this organization.
- `rows` (integer): Maximum results to return (1–1000).
- `start` (integer): Pagination offset (0-based), 0–10,000. The ORCID Public API rejects start > 10,000 for unauthenticated requests.

Output parameters:

- `effectiveQuery` (string): Solr query sent to the ORCID API.
- `nextStart` (number): 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…
- `notice` (string): Recovery hint when results are empty, pagination overshoots the total, or matches exceed the 10,000-offset ceiling. Absent on fully retrievable pages.
- `numFound` (number): Total number of matching records in ORCID (before pagination).
- `results` (array): Matching researchers with inline name and institution data.
- `rows` (number): Number of results returned in this response.
- `start` (number): Pagination offset used for this response.
- `truncated` (boolean): 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.

### `orcid_get_works` (~354 tokens)

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). The first 50 works are returned by default; workCount reports the total available, and prolific records are paged with offset and the returned nextOffset (or raise limit). 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 are self-reported; a researcher may not have linked all their publications.

Input parameters:

- `include_external_ids` (boolean): 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.
- `limit` (integer): Maximum works to return in this response (default 50, max 1000). The full list is sliced locally — page prolific records with offset and the returned nextOffset.
- `offset` (integer): Zero-based index of the first work to return (default 0). Combine with limit to page through the full works list.
- `orcid_id` (string, required): ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).

Output parameters:

- `nextOffset` (number): Offset to pass on the next call to continue paging. Omitted when this response includes the final work.
- `notice` (string): Note when the works list is empty — may indicate no self-reported works or private visibility settings.
- `offset` (number): Zero-based offset applied to the full works list for this response.
- `orcidId` (string): Normalized ORCID iD (bare format).
- `orcidUri` (string): Full ORCID URI.
- `returnedCount` (number): Number of works returned in this response, after applying offset and limit.
- `truncated` (boolean): True when more works are available beyond this response — fetch them with nextOffset.
- `workCount` (number): Total works available for this ORCID iD, before offset and limit are applied.
- `works` (array): Works for this ORCID iD, sliced to the requested offset and limit.

### `orcid_get_work_detail` (~220 tokens)

Get ORCID Work Details (Bulk)

Fetch full detail records for 1–100 works by their put-codes in a single request. Put-codes are returned by orcid_get_works in the putCode field of each work entry. Returns the abstract (short-description), all contributors with CRediT roles, the complete external ID list (DOI, PMID, arXiv, ISBN, etc.), citation metadata (BibTeX or other formats when provided), journal title, and URL for each work. Per-record errors (not-found or inaccessible put-codes) are surfaced as error entries rather than failing the whole call.

Input parameters:

- `orcid_id` (string, required): ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).
- `put_codes` (array, required): Array of 1–100 work put-codes to fetch. Put-codes are available in the putCode field returned by orcid_get_works.

Output parameters:

- `errors` (array): Per-record errors for put-codes that could not be resolved (not found or inaccessible). Empty when all put-codes resolved successfully.
- `orcidId` (string): Normalized ORCID iD (bare format).
- `orcidUri` (string): Full ORCID URI.
- `works` (array): Successfully resolved work detail records.

### `orcid_get_affiliations` (~175 tokens)

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

Input parameters:

- `orcid_id` (string, required): ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).
- `types` (array): Which affiliation types to return. Defaults to employment and education. Use ["all"] to get every section.

Output parameters:

- `affiliationCount` (number): Total number of affiliation records returned.
- `affiliations` (array): Affiliation records for the requested types.
- `notice` (string): Note when no affiliations were found — may indicate private visibility or no self-reported affiliations.
- `orcidId` (string): Normalized ORCID iD (bare format).
- `orcidUri` (string): Full ORCID URI.
- `requestedTypes` (array): Affiliation types that were requested.

### `orcid_get_funding` (~144 tokens)

Get ORCID Researcher 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.

Input parameters:

- `orcid_id` (string, required): ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).

Output parameters:

- `funding` (array): Funding records associated with this ORCID iD.
- `fundingCount` (number): Total number of funding records returned.
- `notice` (string): Note when no funding is found — absence of records does not mean absence of funding.
- `orcidId` (string): Normalized ORCID iD (bare format).
- `orcidUri` (string): Full ORCID URI.

### `orcid_get_peer_reviews` (~144 tokens)

Get ORCID Researcher 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.

Input parameters:

- `orcid_id` (string, required): ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).

Output parameters:

- `notice` (string): Note when no peer reviews are found — coverage varies by researcher and publisher participation.
- `orcidId` (string): Normalized ORCID iD (bare format).
- `orcidUri` (string): Full ORCID URI.
- `peerReviews` (array): Peer review records for this ORCID iD.
- `reviewCount` (number): Total number of peer review records returned.

### `orcid_get_research_resources` (~150 tokens)

Get ORCID Research Resources

List research resources associated with an ORCID researcher — compute allocations, equipment access, lab facilities, data resources, and clinical study registrations. This is a newer ORCID section; most researchers have no entries. Returns the resource title, hosting organization, external identifiers (often a URI to the allocation portal), and access period. Most entries are deposited by resource-allocation systems (e.g. ACCESS, XSEDE) rather than researchers themselves.

Input parameters:

- `orcid_id` (string, required): ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).

Output parameters:

- `notice` (string): Note when no research resources are found — this section is sparsely populated across ORCID profiles.
- `orcidId` (string): Normalized ORCID iD (bare format).
- `orcidUri` (string): Full ORCID URI.
- `resourceCount` (number): Total number of research resources returned.
- `resources` (array): Research resources associated with this ORCID iD.

### `orcid_resolve_researcher` (~301 tokens)

Resolve ORCID Researcher

Disambiguate an author name to a verified ORCID iD. Returns ranked candidates (5 by default, up to 20 via the rows parameter) with transparent disambiguation signals: name match type (exact/partial/other-name/none), institution overlap flag, and whether a DOI or PMID anchor was used in the query. 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 parameters:

- `affiliation` (string): Researcher's institution or organization name. Used for institution overlap scoring and optionally as a search constraint.
- `doi` (string): 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.
- `name` (string, required): Author name to disambiguate (full name preferred, e.g. "Jennifer Doudna" or "J. Doudna").
- `pmid` (string): 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.
- `rows` (integer): Maximum candidate count to return (1–20). Defaults to 5.

Output parameters:

- `candidates` (array): Ranked candidates, ordered by name match quality then institution overlap.
- `notice` (string): Recovery hint when no candidates are found or when the anchor query failed to match.
- `primaryQuery` (string): The primary, most-constrained Solr query attempted first (name + optional anchor + optional affiliation). Always populated; equals queryUsed when no relaxed fallback ran.
- `primaryTotalFound` (number): Total ORCID records matching primaryQuery. Zero when the primary query found nothing and a relaxed fallback produced the returned candidates.
- `queryUsed` (string): The Solr query that produced the returned candidates — the primary query, or the final relaxed query when a fallback ran. Paired with totalFound.
- `relaxedQuery` (string): Solr query used in a secondary relaxed search, if the primary returned no results.
- `totalFound` (number): Total ORCID records matching queryUsed (the query that produced the returned candidates).

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/cyanheads-orcid-mcp-server/orcid#diagnostics

## Score history

- 2026-08-03: 69
- 2026-08-02: 68
- 2026-08-01: 68
- 2026-07-31: 66
- 2026-07-30: 66
- 2026-07-29: 65
- 2026-07-28: 64
- 2026-07-27: 64
- 2026-07-26: 63

## Links

- Remote endpoint: https://orcid.caseyjhand.com/mcp
- Repository: https://github.com/cyanheads/orcid-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/cyanheads-orcid-mcp-server/orcid/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/cyanheads-orcid-mcp-server/orcid/changelog.json
- HTML version of this page: https://verifymcp.io/servers/cyanheads-orcid-mcp-server/orcid
