@cyanheads/orcid-mcp-server 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CLAUDE.md +405 -0
  2. package/Dockerfile +98 -0
  3. package/README.md +321 -0
  4. package/changelog/0.1.x/0.1.0.md +20 -0
  5. package/changelog/0.1.x/0.1.1.md +13 -0
  6. package/changelog/template.md +119 -0
  7. package/dist/config/server-config.d.ts +12 -0
  8. package/dist/config/server-config.d.ts.map +1 -0
  9. package/dist/config/server-config.js +22 -0
  10. package/dist/config/server-config.js.map +1 -0
  11. package/dist/index.d.ts +8 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +35 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/mcp-server/resources/definitions/researcher-profile.resource.d.ts +24 -0
  16. package/dist/mcp-server/resources/definitions/researcher-profile.resource.d.ts.map +1 -0
  17. package/dist/mcp-server/resources/definitions/researcher-profile.resource.js +62 -0
  18. package/dist/mcp-server/resources/definitions/researcher-profile.resource.js.map +1 -0
  19. package/dist/mcp-server/resources/definitions/researcher-works.resource.d.ts +24 -0
  20. package/dist/mcp-server/resources/definitions/researcher-works.resource.d.ts.map +1 -0
  21. package/dist/mcp-server/resources/definitions/researcher-works.resource.js +60 -0
  22. package/dist/mcp-server/resources/definitions/researcher-works.resource.js.map +1 -0
  23. package/dist/mcp-server/tools/definitions/get-affiliations.tool.d.ts +47 -0
  24. package/dist/mcp-server/tools/definitions/get-affiliations.tool.d.ts.map +1 -0
  25. package/dist/mcp-server/tools/definitions/get-affiliations.tool.js +170 -0
  26. package/dist/mcp-server/tools/definitions/get-affiliations.tool.js.map +1 -0
  27. package/dist/mcp-server/tools/definitions/get-funding.tool.d.ts +36 -0
  28. package/dist/mcp-server/tools/definitions/get-funding.tool.d.ts.map +1 -0
  29. package/dist/mcp-server/tools/definitions/get-funding.tool.js +140 -0
  30. package/dist/mcp-server/tools/definitions/get-funding.tool.js.map +1 -0
  31. package/dist/mcp-server/tools/definitions/get-peer-reviews.tool.d.ts +35 -0
  32. package/dist/mcp-server/tools/definitions/get-peer-reviews.tool.d.ts.map +1 -0
  33. package/dist/mcp-server/tools/definitions/get-peer-reviews.tool.js +146 -0
  34. package/dist/mcp-server/tools/definitions/get-peer-reviews.tool.js.map +1 -0
  35. package/dist/mcp-server/tools/definitions/get-profile.tool.d.ts +39 -0
  36. package/dist/mcp-server/tools/definitions/get-profile.tool.d.ts.map +1 -0
  37. package/dist/mcp-server/tools/definitions/get-profile.tool.js +146 -0
  38. package/dist/mcp-server/tools/definitions/get-profile.tool.js.map +1 -0
  39. package/dist/mcp-server/tools/definitions/get-works.tool.d.ts +35 -0
  40. package/dist/mcp-server/tools/definitions/get-works.tool.d.ts.map +1 -0
  41. package/dist/mcp-server/tools/definitions/get-works.tool.js +127 -0
  42. package/dist/mcp-server/tools/definitions/get-works.tool.js.map +1 -0
  43. package/dist/mcp-server/tools/definitions/resolve-researcher.tool.d.ts +46 -0
  44. package/dist/mcp-server/tools/definitions/resolve-researcher.tool.d.ts.map +1 -0
  45. package/dist/mcp-server/tools/definitions/resolve-researcher.tool.js +250 -0
  46. package/dist/mcp-server/tools/definitions/resolve-researcher.tool.js.map +1 -0
  47. package/dist/mcp-server/tools/definitions/search-researchers.tool.d.ts +40 -0
  48. package/dist/mcp-server/tools/definitions/search-researchers.tool.d.ts.map +1 -0
  49. package/dist/mcp-server/tools/definitions/search-researchers.tool.js +192 -0
  50. package/dist/mcp-server/tools/definitions/search-researchers.tool.js.map +1 -0
  51. package/dist/services/orcid/normalizers.d.ts +32 -0
  52. package/dist/services/orcid/normalizers.d.ts.map +1 -0
  53. package/dist/services/orcid/normalizers.js +256 -0
  54. package/dist/services/orcid/normalizers.js.map +1 -0
  55. package/dist/services/orcid/orcid-service.d.ts +65 -0
  56. package/dist/services/orcid/orcid-service.d.ts.map +1 -0
  57. package/dist/services/orcid/orcid-service.js +140 -0
  58. package/dist/services/orcid/orcid-service.js.map +1 -0
  59. package/dist/services/orcid/types.d.ts +335 -0
  60. package/dist/services/orcid/types.d.ts.map +1 -0
  61. package/dist/services/orcid/types.js +6 -0
  62. package/dist/services/orcid/types.js.map +1 -0
  63. package/package.json +79 -0
  64. package/server.json +99 -0
@@ -0,0 +1,335 @@
1
+ /**
2
+ * @fileoverview Raw ORCID API response types and normalized domain types for orcid-mcp-server.
3
+ * @module services/orcid/types
4
+ */
5
+ /** A date value returned by ORCID (year, month, day all optional). */
6
+ export type OrcidDate = {
7
+ year?: {
8
+ value?: string;
9
+ };
10
+ month?: {
11
+ value?: string;
12
+ };
13
+ day?: {
14
+ value?: string;
15
+ };
16
+ };
17
+ /** Disambiguated organization (may carry GRID, ROR, or Ringgold ID). */
18
+ export type RawDisambiguatedOrg = {
19
+ 'disambiguated-organization-identifier'?: string;
20
+ 'disambiguation-source'?: string;
21
+ };
22
+ /** Organization as returned in affiliation records. */
23
+ export type RawOrganization = {
24
+ name?: string;
25
+ address?: {
26
+ city?: string;
27
+ region?: string;
28
+ country?: string;
29
+ };
30
+ 'disambiguated-organization'?: RawDisambiguatedOrg;
31
+ };
32
+ /** Affiliation entry (employment, education, etc.). */
33
+ export type RawAffiliationSummary = {
34
+ 'put-code'?: number;
35
+ 'department-name'?: string;
36
+ 'role-title'?: string;
37
+ 'start-date'?: OrcidDate;
38
+ 'end-date'?: OrcidDate;
39
+ organization?: RawOrganization;
40
+ url?: {
41
+ value?: string;
42
+ };
43
+ };
44
+ /** Container for a group of affiliation summaries. */
45
+ export type RawAffiliationGroup = {
46
+ 'affiliation-summary'?: RawAffiliationSummary[];
47
+ summaries?: RawAffiliationSummary[];
48
+ };
49
+ /** Activities response sections. */
50
+ export type RawActivities = {
51
+ 'last-modified-date'?: {
52
+ value?: number;
53
+ };
54
+ employments?: {
55
+ 'affiliation-group'?: RawAffiliationGroup[];
56
+ 'last-modified-date'?: {
57
+ value?: number;
58
+ };
59
+ };
60
+ educations?: {
61
+ 'affiliation-group'?: RawAffiliationGroup[];
62
+ 'last-modified-date'?: {
63
+ value?: number;
64
+ };
65
+ };
66
+ 'invited-positions'?: {
67
+ 'affiliation-group'?: RawAffiliationGroup[];
68
+ 'last-modified-date'?: {
69
+ value?: number;
70
+ };
71
+ };
72
+ distinctions?: {
73
+ 'affiliation-group'?: RawAffiliationGroup[];
74
+ 'last-modified-date'?: {
75
+ value?: number;
76
+ };
77
+ };
78
+ memberships?: {
79
+ 'affiliation-group'?: RawAffiliationGroup[];
80
+ 'last-modified-date'?: {
81
+ value?: number;
82
+ };
83
+ };
84
+ qualifications?: {
85
+ 'affiliation-group'?: RawAffiliationGroup[];
86
+ 'last-modified-date'?: {
87
+ value?: number;
88
+ };
89
+ };
90
+ services?: {
91
+ 'affiliation-group'?: RawAffiliationGroup[];
92
+ 'last-modified-date'?: {
93
+ value?: number;
94
+ };
95
+ };
96
+ };
97
+ /** External identifier (used in both person and work records). */
98
+ export type RawWorkExternalId = {
99
+ 'external-id-type'?: string;
100
+ 'external-id-value'?: string;
101
+ 'external-id-url'?: {
102
+ value?: string;
103
+ };
104
+ 'external-id-relationship'?: string;
105
+ };
106
+ /** Alias for RawWorkExternalId — same shape, used in person records. */
107
+ export type RawExternalId = RawWorkExternalId;
108
+ /** Person section from ORCID. */
109
+ export type RawPerson = {
110
+ name?: {
111
+ 'given-names'?: {
112
+ value?: string;
113
+ };
114
+ 'family-name'?: {
115
+ value?: string;
116
+ };
117
+ 'credit-name'?: {
118
+ value?: string;
119
+ };
120
+ };
121
+ biography?: {
122
+ content?: string;
123
+ };
124
+ keywords?: {
125
+ keyword?: Array<{
126
+ content?: string;
127
+ }>;
128
+ };
129
+ 'researcher-urls'?: {
130
+ 'researcher-url'?: Array<{
131
+ 'url-name'?: string;
132
+ url?: {
133
+ value?: string;
134
+ };
135
+ }>;
136
+ };
137
+ 'external-identifiers'?: {
138
+ 'external-identifier'?: RawExternalId[];
139
+ };
140
+ emails?: {
141
+ email?: Array<{
142
+ email?: string;
143
+ primary?: boolean;
144
+ verified?: boolean;
145
+ }>;
146
+ };
147
+ addresses?: {
148
+ address?: Array<{
149
+ country?: {
150
+ value?: string;
151
+ };
152
+ primary?: boolean;
153
+ }>;
154
+ };
155
+ };
156
+ /** Work summary as returned by /works. */
157
+ export type RawWorkSummary = {
158
+ 'put-code'?: number;
159
+ title?: {
160
+ title?: {
161
+ value?: string;
162
+ };
163
+ subtitle?: {
164
+ value?: string;
165
+ };
166
+ };
167
+ 'work-type'?: string;
168
+ 'publication-date'?: OrcidDate;
169
+ 'journal-title'?: {
170
+ value?: string;
171
+ };
172
+ url?: {
173
+ value?: string;
174
+ };
175
+ 'external-ids'?: {
176
+ 'external-id'?: RawWorkExternalId[];
177
+ };
178
+ source?: {
179
+ 'source-name'?: {
180
+ value?: string;
181
+ };
182
+ };
183
+ visibility?: string;
184
+ };
185
+ /** Works group (works are grouped by external ID intersection). */
186
+ export type RawWorksGroup = {
187
+ 'external-ids'?: {
188
+ 'external-id'?: RawWorkExternalId[];
189
+ };
190
+ 'work-summary'?: RawWorkSummary[];
191
+ };
192
+ /** Top-level works response. */
193
+ export type RawWorksResponse = {
194
+ group?: RawWorksGroup[];
195
+ 'last-modified-date'?: {
196
+ value?: number;
197
+ };
198
+ };
199
+ /** Funding summary. */
200
+ export type RawFundingSummary = {
201
+ 'put-code'?: number;
202
+ title?: {
203
+ title?: {
204
+ value?: string;
205
+ };
206
+ };
207
+ type?: string;
208
+ 'start-date'?: OrcidDate;
209
+ 'end-date'?: OrcidDate;
210
+ organization?: RawOrganization;
211
+ 'external-ids'?: {
212
+ 'external-id'?: RawWorkExternalId[];
213
+ };
214
+ url?: {
215
+ value?: string;
216
+ };
217
+ };
218
+ /** Funding group. */
219
+ export type RawFundingGroup = {
220
+ 'funding-summary'?: RawFundingSummary[];
221
+ };
222
+ /** Top-level fundings response. */
223
+ export type RawFundingsResponse = {
224
+ group?: RawFundingGroup[];
225
+ };
226
+ /** Peer review summary. */
227
+ export type RawPeerReviewSummary = {
228
+ 'put-code'?: number;
229
+ 'reviewer-role'?: string;
230
+ 'review-type'?: string;
231
+ 'completion-date'?: OrcidDate;
232
+ 'convening-organization'?: RawOrganization;
233
+ 'review-url'?: {
234
+ value?: string;
235
+ };
236
+ };
237
+ /** Peer review group (keyed by ISSN). */
238
+ export type RawPeerReviewGroup = {
239
+ 'peer-review-group'?: Array<{
240
+ 'peer-review-summary'?: RawPeerReviewSummary[];
241
+ }>;
242
+ 'external-ids'?: {
243
+ 'external-id'?: RawWorkExternalId[];
244
+ };
245
+ };
246
+ /** Top-level peer-reviews response. */
247
+ export type RawPeerReviewsResponse = {
248
+ group?: RawPeerReviewGroup[];
249
+ };
250
+ /** Expanded search result entry. */
251
+ export type RawExpandedSearchResult = {
252
+ 'orcid-id'?: string;
253
+ 'given-names'?: string;
254
+ 'family-names'?: string;
255
+ 'credit-name'?: string;
256
+ 'other-name'?: string[];
257
+ email?: string[];
258
+ 'institution-name'?: string[];
259
+ };
260
+ /** Expanded search response. */
261
+ export type RawExpandedSearchResponse = {
262
+ 'expanded-result'?: RawExpandedSearchResult[];
263
+ 'num-found'?: number;
264
+ };
265
+ /** Normalized date string (YYYY, YYYY-MM, or YYYY-MM-DD). */
266
+ export type NormalizedDate = string;
267
+ /** Normalized external identifier. */
268
+ export type ExternalIdentifier = {
269
+ type: string;
270
+ value: string;
271
+ url?: string;
272
+ relationship?: string;
273
+ };
274
+ /** Normalized organization with optional disambiguator. */
275
+ export type Organization = {
276
+ name?: string;
277
+ city?: string;
278
+ country?: string;
279
+ disambiguatedId?: string;
280
+ disambiguationSource?: string;
281
+ };
282
+ /** Normalized affiliation record. */
283
+ export type Affiliation = {
284
+ type: string;
285
+ organization?: Organization;
286
+ department?: string;
287
+ role?: string;
288
+ startDate?: NormalizedDate;
289
+ endDate?: NormalizedDate;
290
+ url?: string;
291
+ };
292
+ /** Normalized work record. */
293
+ export type Work = {
294
+ title?: string;
295
+ workType?: string;
296
+ publicationDate?: NormalizedDate;
297
+ journalTitle?: string;
298
+ url?: string;
299
+ externalIds: ExternalIdentifier[];
300
+ };
301
+ /** Normalized funding record. */
302
+ export type FundingRecord = {
303
+ title?: string;
304
+ type?: string;
305
+ funder?: Organization;
306
+ startDate?: NormalizedDate;
307
+ endDate?: NormalizedDate;
308
+ grantNumbers: string[];
309
+ url?: string;
310
+ };
311
+ /** Normalized peer review record. */
312
+ export type PeerReview = {
313
+ reviewerRole?: string;
314
+ reviewType?: string;
315
+ completionDate?: NormalizedDate;
316
+ conveningOrganization?: Organization;
317
+ reviewUrl?: string;
318
+ groupIssn?: string;
319
+ };
320
+ /** Normalized expanded search result. */
321
+ export type ExpandedSearchResult = {
322
+ orcidId: string;
323
+ givenNames?: string;
324
+ familyNames?: string;
325
+ creditName?: string;
326
+ otherNames: string[];
327
+ emails: string[];
328
+ institutionNames: string[];
329
+ };
330
+ /** Expanded search response normalized. */
331
+ export type ExpandedSearchResponse = {
332
+ results: ExpandedSearchResult[];
333
+ numFound: number;
334
+ };
335
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/orcid/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Raw ORCID API response types and normalized domain types for orcid-mcp-server.
3
+ * @module services/orcid/types
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/orcid/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/package.json ADDED
@@ -0,0 +1,79 @@
1
+ {
2
+ "name": "@cyanheads/orcid-mcp-server",
3
+ "version": "0.1.1",
4
+ "description": "Search and retrieve researcher profiles, works, affiliations, funding, and peer review records from the ORCID registry via MCP. STDIO or Streamable HTTP.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "orcid-mcp-server": "dist/index.js"
10
+ },
11
+ "files": [
12
+ "changelog/",
13
+ "dist/",
14
+ "README.md",
15
+ "LICENSE",
16
+ "CLAUDE.md",
17
+ "Dockerfile",
18
+ "server.json"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsx scripts/build.ts",
22
+ "rebuild": "tsx scripts/clean.ts && tsx scripts/build.ts",
23
+ "clean": "tsx scripts/clean.ts",
24
+ "devcheck": "tsx scripts/devcheck.ts",
25
+ "audit:refresh": "rm -f bun.lock && bun install && bun audit",
26
+ "tree": "tsx scripts/tree.ts",
27
+ "list-skills": "tsx scripts/list-skills.ts",
28
+ "format": "biome check --write --unsafe .",
29
+ "lint:mcp": "tsx scripts/lint-mcp.ts",
30
+ "lint:packaging": "tsx scripts/lint-packaging.ts",
31
+ "bundle": "npm run build && npx -y @anthropic-ai/mcpb pack . dist/orcid-mcp-server.mcpb",
32
+ "changelog:build": "tsx scripts/build-changelog.ts",
33
+ "changelog:check": "tsx scripts/build-changelog.ts --check",
34
+ "test": "vitest run",
35
+ "start": "node dist/index.js",
36
+ "start:stdio": "MCP_TRANSPORT_TYPE=stdio node dist/index.js",
37
+ "start:http": "MCP_TRANSPORT_TYPE=http node dist/index.js"
38
+ },
39
+ "keywords": [
40
+ "mcp",
41
+ "mcp-server",
42
+ "model-context-protocol",
43
+ "orcid",
44
+ "researcher-identity",
45
+ "scholarly",
46
+ "academic",
47
+ "author-disambiguation",
48
+ "research-profiles",
49
+ "scientific-publishing",
50
+ "affiliations"
51
+ ],
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "git+https://github.com/cyanheads/orcid-mcp-server.git"
55
+ },
56
+ "license": "Apache-2.0",
57
+ "engines": {
58
+ "bun": ">=1.3.0",
59
+ "node": ">=24.0.0"
60
+ },
61
+ "publishConfig": {
62
+ "access": "public"
63
+ },
64
+ "dependencies": {
65
+ "@cyanheads/mcp-ts-core": "^0.9.9",
66
+ "pino-pretty": "^13.1.3",
67
+ "zod": "^4.4.3"
68
+ },
69
+ "devDependencies": {
70
+ "@biomejs/biome": "^2.4.15",
71
+ "@types/node": "^25.9.1",
72
+ "depcheck": "^1.4.7",
73
+ "ignore": "^7.0.5",
74
+ "tsc-alias": "^1.8.17",
75
+ "tsx": "^4.22.3",
76
+ "typescript": "^6.0.3",
77
+ "vitest": "^4.1.7"
78
+ }
79
+ }
package/server.json ADDED
@@ -0,0 +1,99 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.cyanheads/orcid-mcp-server",
4
+ "description": "Search and retrieve researcher profiles, works, affiliations, funding, and peer review records from the ORCID registry.",
5
+ "repository": {
6
+ "url": "https://github.com/cyanheads/orcid-mcp-server",
7
+ "source": "github"
8
+ },
9
+ "version": "0.1.1",
10
+ "packages": [
11
+ {
12
+ "registryType": "npm",
13
+ "registryBaseUrl": "https://registry.npmjs.org",
14
+ "identifier": "@cyanheads/orcid-mcp-server",
15
+ "runtimeHint": "node",
16
+ "version": "0.1.1",
17
+ "packageArguments": [
18
+ {
19
+ "type": "positional",
20
+ "value": "run"
21
+ },
22
+ {
23
+ "type": "positional",
24
+ "value": "start:stdio"
25
+ }
26
+ ],
27
+ "environmentVariables": [
28
+ {
29
+ "name": "MCP_LOG_LEVEL",
30
+ "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').",
31
+ "format": "string",
32
+ "isRequired": false,
33
+ "default": "info"
34
+ }
35
+ ],
36
+ "transport": {
37
+ "type": "stdio"
38
+ }
39
+ },
40
+ {
41
+ "registryType": "npm",
42
+ "registryBaseUrl": "https://registry.npmjs.org",
43
+ "identifier": "@cyanheads/orcid-mcp-server",
44
+ "runtimeHint": "node",
45
+ "version": "0.1.1",
46
+ "packageArguments": [
47
+ {
48
+ "type": "positional",
49
+ "value": "run"
50
+ },
51
+ {
52
+ "type": "positional",
53
+ "value": "start:http"
54
+ }
55
+ ],
56
+ "environmentVariables": [
57
+ {
58
+ "name": "MCP_HTTP_HOST",
59
+ "description": "The hostname for the HTTP server.",
60
+ "format": "string",
61
+ "isRequired": false,
62
+ "default": "127.0.0.1"
63
+ },
64
+ {
65
+ "name": "MCP_HTTP_PORT",
66
+ "description": "The port to run the HTTP server on.",
67
+ "format": "string",
68
+ "isRequired": false,
69
+ "default": "3010"
70
+ },
71
+ {
72
+ "name": "MCP_HTTP_ENDPOINT_PATH",
73
+ "description": "The endpoint path for the MCP server.",
74
+ "format": "string",
75
+ "isRequired": false,
76
+ "default": "/mcp"
77
+ },
78
+ {
79
+ "name": "MCP_AUTH_MODE",
80
+ "description": "Authentication mode to use: 'none', 'jwt', or 'oauth'.",
81
+ "format": "string",
82
+ "isRequired": false,
83
+ "default": "none"
84
+ },
85
+ {
86
+ "name": "MCP_LOG_LEVEL",
87
+ "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').",
88
+ "format": "string",
89
+ "isRequired": false,
90
+ "default": "info"
91
+ }
92
+ ],
93
+ "transport": {
94
+ "type": "streamable-http",
95
+ "url": "http://localhost:3010/mcp"
96
+ }
97
+ }
98
+ ]
99
+ }