Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.cyanheads/orcid-mcp-server

REMOTE · ORCID.CASEYJHAND.COM · 2 COMPONENTS · SCANNED SEP 20

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

0 this week 81 Trust /100
Trust breakdown (7 categories)

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. How we score → Why this is hard to score →

Endpoint Security66
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • 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. See how to fix → View diagnostics → Unverified
  • HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
Schema Quality & AI Usability68
  • AI-judged instruction clarity (excellent).Pass
  • 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. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 9 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 10 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the io.github.cyanheads/orcid-mcp-server server?

io.github.cyanheads/orcid-mcp-server is a hosted endpoint at https://orcid.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · orcid.caseyjhand.com

# add to Claude Code
claude mcp add --transport http cyanheads-orcid-mcp-server 'https://orcid.caseyjhand.com/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "cyanheads-orcid-mcp-server": {
      "url": "https://orcid.caseyjhand.com/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "cyanheads-orcid-mcp-server": {
      "type": "http",
      "url": "https://orcid.caseyjhand.com/mcp"
    }
  }
}
# ~/.codex/config.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
    }
  }
}
# add to OpenClaw
openclaw mcp add cyanheads-orcid-mcp-server --url 'https://orcid.caseyjhand.com/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  cyanheads-orcid-mcp-server:
    url: "https://orcid.caseyjhand.com/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "cyanheads-orcid-mcp-server": {
      "Transport": "http",
      "Url": "https://orcid.caseyjhand.com/mcp"
    }
  }
}
# add to Vellum
assistant mcp add cyanheads-orcid-mcp-server -t streamable-http -u 'https://orcid.caseyjhand.com/mcp'
// mcp.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 we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 16 Sept 26 0
    • Server version: 0.2.15 → 0.2.16 functional
  • 9 Sept 26 +1
    • Stability: 0.97 → pass security
  • 7 Sept 26 −1
    • Stability: pass → 0.93 functional
  • 26 Aug 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Aug 26 0
    • Stability: 0.97 → pass security
    • MCP protocol: Implements a current MCP spec version (2026-07-28). functional
    • MCP protocol version: 2025-11-25 → 2026-07-28 functional
    • Server version: 0.2.13 → 0.2.15 functional
  • 24 Aug 26 +1

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

  • 11 Aug 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 10 Aug 26 0
    • Transport: fail → pass security
    • HSTS header: fail → pass security
    • Authorization: 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. security
    • Endpoint reachability: not serving MCP → reachable functional
    • MCP protocol: unverified → pass functional
    • Stability: unverified → 0.50 functional
    • Tool coverage: unverified → 100 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Probed https://orcid.caseyjhand.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=caseyjhand.com CN=WE1,O=Google Trust Services,C=US 4 Sept 2026 3 Dec 2026 ECDSA 256 ECDSA-SHA256 a6985204ed51ae050e7738aa6be668e9
SANs: caseyjhand.com, *.caseyjhand.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of orcid.caseyjhand.com. Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
caseyjhand.com. present 2371 13 Verified
orcid.caseyjhand.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
x-content-type-options nosniff

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://orcid.caseyjhand.com/mcp Verified 200
http (plaintext) http://orcid.caseyjhand.com/mcp HTTPS enforced 301 https://orcid.caseyjhand.com/mcp
MCP tools · 9 exposed · ~2,011 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
orcid_get_affiliations ~175

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.

NameTypeReqDescription
orcid_idstringyesORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).
typesarrayWhich affiliation types to return. Defaults to employment and education. Use ["all"] to get every section.
NameTypeReqDescription
affiliationCountnumberTotal number of affiliation records returned.
affiliationsarrayAffiliation records for the requested types.
errorobjectPresent when the call failed. Absent on success.
noticestringNote when no affiliations were found — may indicate private visibility or no self-reported affiliations.
orcidIdstringNormalized ORCID iD (bare format).
orcidUristringFull ORCID URI.
requestedTypesarrayAffiliation types that were requested.

No examples provided.

orcid_get_funding ~144

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.

NameTypeReqDescription
orcid_idstringyesORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).
NameTypeReqDescription
errorobjectPresent when the call failed. Absent on success.
fundingarrayFunding records associated with this ORCID iD.
fundingCountnumberTotal number of funding records returned.
noticestringNote when no funding is found — absence of records does not mean absence of funding.
orcidIdstringNormalized ORCID iD (bare format).
orcidUristringFull ORCID URI.

No examples provided.

orcid_get_peer_reviews ~144

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.

NameTypeReqDescription
orcid_idstringyesORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).
NameTypeReqDescription
errorobjectPresent when the call failed. Absent on success.
noticestringNote when no peer reviews are found — coverage varies by researcher and publisher participation.
orcidIdstringNormalized ORCID iD (bare format).
orcidUristringFull ORCID URI.
peerReviewsarrayPeer review records for this ORCID iD.
reviewCountnumberTotal number of peer review records returned.

No examples provided.

orcid_get_profile ~165

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.

NameTypeReqDescription
orcid_idstringyesORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).
NameTypeReqDescription
biographystringResearcher biography, if publicly visible.
countriesarrayCountries listed in the researcher's address section.
creditNamestringPublished credit name, if set.
emailsarrayPublicly visible email addresses.
errorobjectPresent when the call failed. Absent on success.
externalIdentifiersarrayExternal identifiers from scholarly systems (Scopus, Web of Science, Loop, etc.).
familyNamestringFamily (last) name, if publicly visible.
givenNamesstringGiven (first) name, if publicly visible.
keywordsarrayResearch keywords set by the researcher.
orcidIdstringNormalized ORCID iD (bare format without URI prefix).
orcidUristringFull ORCID URI (https://orcid.org/{id}).
researcherUrlsarrayResearcher-provided URLs (personal site, lab page, blog, etc.).

No examples provided.

orcid_get_research_resources ~150

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.

NameTypeReqDescription
orcid_idstringyesORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).
NameTypeReqDescription
errorobjectPresent when the call failed. Absent on success.
noticestringNote when no research resources are found — this section is sparsely populated across ORCID profiles.
orcidIdstringNormalized ORCID iD (bare format).
orcidUristringFull ORCID URI.
resourceCountnumberTotal number of research resources returned.
resourcesarrayResearch resources associated with this ORCID iD.

No examples provided.

orcid_get_work_detail ~220

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.

NameTypeReqDescription
orcid_idstringyesORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).
put_codesarrayyesArray of 1–100 work put-codes to fetch. Put-codes are available in the putCode field returned by orcid_get_works.
NameTypeReqDescription
errorobjectPresent when the call failed. Absent on success.
errorsarrayPer-record errors for put-codes that could not be resolved (not found or inaccessible). Empty when all put-codes resolved successfully.
orcidIdstringNormalized ORCID iD (bare format).
orcidUristringFull ORCID URI.
worksarraySuccessfully resolved work detail records.

No examples provided.

orcid_get_works ~354

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.

NameTypeReqDescription
include_external_idsbooleanWhen 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.
limitintegerMaximum 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.
offsetintegerZero-based index of the first work to return (default 0). Combine with limit to page through the full works list.
orcid_idstringyesORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).
NameTypeReqDescription
errorobjectPresent when the call failed. Absent on success.
nextOffsetnumberOffset to pass on the next call to continue paging. Omitted when this response includes the final work.
noticestringNote when the works list is empty — may indicate no self-reported works or private visibility settings.
offsetnumberZero-based offset applied to the full works list for this response.
orcidIdstringNormalized ORCID iD (bare format).
orcidUristringFull ORCID URI.
returnedCountnumberNumber of works returned in this response, after applying offset and limit.
truncatedbooleanTrue when more works are available beyond this response — fetch them with nextOffset.
workCountnumberTotal works available for this ORCID iD, before offset and limit are applied.
worksarrayWorks for this ORCID iD, sliced to the requested offset and limit.

No examples provided.

orcid_resolve_researcher ~301

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.

NameTypeReqDescription
affiliationstringResearcher's institution or organization name. Used for institution overlap scoring and optionally as a search constraint.
doistringDOI of a work authored by this researcher. Acts as a near-deterministic anchor — filters to researchers who linked this DOI to their ORCID record.
namestringyesAuthor name to disambiguate (full name preferred, e.g. "Jennifer Doudna" or "J. Doudna").
pmidstringPubMed 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.
rowsintegerMaximum candidate count to return (1–20). Defaults to 5.
NameTypeReqDescription
candidatesarrayRanked candidates, ordered by name match quality then institution overlap.
errorobjectPresent when the call failed. Absent on success.
noticestringRecovery hint when no candidates are found or when the anchor query failed to match.
primaryQuerystringThe primary, most-constrained Solr query attempted first (name + optional anchor + optional affiliation). Always populated; equals queryUsed when no relaxed fallback ran.
primaryTotalFoundnumberTotal ORCID records matching primaryQuery. Zero when the primary query found nothing and a relaxed fallback produced the returned candidates.
queryUsedstringThe Solr query that produced the returned candidates — the primary query, or the final relaxed query when a fallback ran. Paired with totalFound.
relaxedQuerystringSolr query used in a secondary relaxed search, if the primary returned no results.
totalFoundnumberTotal ORCID records matching queryUsed (the query that produced the returned candidates).

No examples provided.

orcid_search_researchers ~358

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.

NameTypeReqDescription
affiliationstringOrganization name to filter by. Phrase match.
doistringDOI to anchor the search. Returns researchers who have linked this DOI to their ORCID record.
family_namestringResearcher's family (last) name.
given_namestringResearcher's given (first) name.
keywordstringKeyword to search in the researcher's keyword fields. Phrase match.
pmidstringPubMed ID to anchor the search. Returns researchers who have linked this PMID to their ORCID record.
querystringRaw Solr query string appended to the generated clause with AND. Supports all ORCID Solr fields and boolean operators.
ror_idstringROR organization ID to filter by (full URL, e.g. https://ror.org/00f54p054). Returns researchers affiliated with this organization.
rowsintegerMaximum results to return (1–1000).
startintegerPagination offset (0-based), 0–10,000. The ORCID Public API rejects start > 10,000 for unauthenticated requests.
NameTypeReqDescription
effectiveQuerystringSolr query sent to the ORCID API.
errorobjectPresent when the call failed. Absent on success.
nextStartnumberOffset 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…
noticestringRecovery hint when results are empty, pagination overshoots the total, or matches exceed the 10,000-offset ceiling. Absent on fully retrievable pages.
numFoundnumberTotal number of matching records in ORCID (before pagination).
resultsarrayMatching researchers with inline name and institution data.
rowsnumberNumber of results returned in this response.
startnumberPagination offset used for this response.
truncatedbooleanTrue 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.

No examples provided.

Common questions

What is the io.github.cyanheads/orcid-mcp-server server?

io.github.cyanheads/orcid-mcp-server is listed in the public MCP registry as io.github.cyanheads/orcid-mcp-server. Researcher profiles, works, affiliations, funding, and peer reviews from the ORCID registry. This page covers its hosted endpoint (https://orcid.caseyjhand.com/mcp).

Is the io.github.cyanheads/orcid-mcp-server server safe to use?

io.github.cyanheads/orcid-mcp-server scores 81 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.cyanheads/orcid-mcp-server server expose?

io.github.cyanheads/orcid-mcp-server exposes 9 tools: orcid_get_profile, orcid_search_researchers, orcid_get_works, orcid_get_work_detail, orcid_get_affiliations, and 4 more. Their descriptions and schemas cost roughly 2,011 tokens of context every time the server is loaded.

Does the io.github.cyanheads/orcid-mcp-server server require authentication?

No. We connected to io.github.cyanheads/orcid-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.cyanheads/orcid-mcp-server server still maintained?

io.github.cyanheads/orcid-mcp-server is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.