@cyanheads/orcid-mcp-server 0.2.6 → 0.2.7

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 (45) hide show
  1. package/CLAUDE.md +49 -42
  2. package/Dockerfile +10 -6
  3. package/LICENSE +201 -0
  4. package/README.md +5 -3
  5. package/changelog/0.2.x/0.2.7.md +34 -0
  6. package/changelog/template.md +5 -3
  7. package/dist/mcp-server/resources/definitions/researcher-profile.resource.d.ts.map +1 -1
  8. package/dist/mcp-server/resources/definitions/researcher-profile.resource.js +9 -5
  9. package/dist/mcp-server/resources/definitions/researcher-profile.resource.js.map +1 -1
  10. package/dist/mcp-server/resources/definitions/researcher-works.resource.d.ts +3 -1
  11. package/dist/mcp-server/resources/definitions/researcher-works.resource.d.ts.map +1 -1
  12. package/dist/mcp-server/resources/definitions/researcher-works.resource.js +27 -10
  13. package/dist/mcp-server/resources/definitions/researcher-works.resource.js.map +1 -1
  14. package/dist/mcp-server/tools/definitions/get-affiliations.tool.d.ts.map +1 -1
  15. package/dist/mcp-server/tools/definitions/get-affiliations.tool.js +2 -4
  16. package/dist/mcp-server/tools/definitions/get-affiliations.tool.js.map +1 -1
  17. package/dist/mcp-server/tools/definitions/get-funding.tool.d.ts.map +1 -1
  18. package/dist/mcp-server/tools/definitions/get-funding.tool.js +2 -4
  19. package/dist/mcp-server/tools/definitions/get-funding.tool.js.map +1 -1
  20. package/dist/mcp-server/tools/definitions/get-peer-reviews.tool.d.ts.map +1 -1
  21. package/dist/mcp-server/tools/definitions/get-peer-reviews.tool.js +2 -4
  22. package/dist/mcp-server/tools/definitions/get-peer-reviews.tool.js.map +1 -1
  23. package/dist/mcp-server/tools/definitions/get-profile.tool.d.ts.map +1 -1
  24. package/dist/mcp-server/tools/definitions/get-profile.tool.js +2 -4
  25. package/dist/mcp-server/tools/definitions/get-profile.tool.js.map +1 -1
  26. package/dist/mcp-server/tools/definitions/get-research-resources.tool.d.ts.map +1 -1
  27. package/dist/mcp-server/tools/definitions/get-research-resources.tool.js +2 -4
  28. package/dist/mcp-server/tools/definitions/get-research-resources.tool.js.map +1 -1
  29. package/dist/mcp-server/tools/definitions/get-work-detail.tool.d.ts.map +1 -1
  30. package/dist/mcp-server/tools/definitions/get-work-detail.tool.js +2 -4
  31. package/dist/mcp-server/tools/definitions/get-work-detail.tool.js.map +1 -1
  32. package/dist/mcp-server/tools/definitions/get-works.tool.d.ts +11 -3
  33. package/dist/mcp-server/tools/definitions/get-works.tool.d.ts.map +1 -1
  34. package/dist/mcp-server/tools/definitions/get-works.tool.js +73 -16
  35. package/dist/mcp-server/tools/definitions/get-works.tool.js.map +1 -1
  36. package/dist/services/orcid/orcid-id.d.ts +33 -0
  37. package/dist/services/orcid/orcid-id.d.ts.map +1 -0
  38. package/dist/services/orcid/orcid-id.js +64 -0
  39. package/dist/services/orcid/orcid-id.js.map +1 -0
  40. package/dist/services/orcid/orcid-service.d.ts +3 -2
  41. package/dist/services/orcid/orcid-service.d.ts.map +1 -1
  42. package/dist/services/orcid/orcid-service.js +3 -4
  43. package/dist/services/orcid/orcid-service.js.map +1 -1
  44. package/package.json +11 -9
  45. package/server.json +3 -3
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * @fileoverview Retrieve works (publications, datasets, software, preprints, etc.)
3
3
  * associated with an ORCID iD. Returns titles, types, dates, journal names, and
4
- * external identifiers ready for chaining to Crossref, PubMed, or arXiv.
4
+ * external identifiers ready for chaining to Crossref, PubMed, or arXiv. Prolific
5
+ * records are sliced locally via offset/limit so default payloads stay compact.
5
6
  * @module mcp-server/tools/definitions/get-works.tool
6
7
  */
7
8
  import { tool, z } from '@cyanheads/mcp-ts-core';
8
9
  import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
10
+ import { orcidIdSchema } from '../../../services/orcid/orcid-id.js';
9
11
  import { getOrcidService, normalizeOrcidId } from '../../../services/orcid/orcid-service.js';
10
12
  const ExternalIdSchema = z
11
13
  .object({
@@ -17,18 +19,47 @@ const ExternalIdSchema = z
17
19
  .describe('External identifier for a work.');
18
20
  export const orcidGetWorks = tool('orcid_get_works', {
19
21
  title: 'Get ORCID Researcher Works',
20
- description: '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). Pass the put_code 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.',
22
+ description: '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 put_code 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.',
21
23
  annotations: { readOnlyHint: true, openWorldHint: false, idempotentHint: true },
22
24
  input: z.object({
23
- orcid_id: z
24
- .string()
25
- .regex(/^(https?:\/\/orcid\.org\/)?\d{4}-\d{4}-\d{4}-\d{3}[\dX]$/, 'Must be a valid ORCID iD (e.g. 0000-0001-2345-6789) or full ORCID URI.')
26
- .describe('ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).'),
25
+ orcid_id: orcidIdSchema,
26
+ limit: z
27
+ .number()
28
+ .int()
29
+ .min(1)
30
+ .max(1000)
31
+ .default(50)
32
+ .describe('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.'),
33
+ offset: z
34
+ .number()
35
+ .int()
36
+ .min(0)
37
+ .default(0)
38
+ .describe('Zero-based index of the first work to return (default 0). Combine with limit to page through the full works list.'),
39
+ include_external_ids: z
40
+ .boolean()
41
+ .default(true)
42
+ .describe('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.'),
27
43
  }),
28
44
  output: z.object({
29
45
  orcidId: z.string().describe('Normalized ORCID iD (bare format).'),
30
46
  orcidUri: z.string().describe('Full ORCID URI.'),
31
- workCount: z.number().describe('Total number of works returned.'),
47
+ workCount: z
48
+ .number()
49
+ .describe('Total works available for this ORCID iD, before offset and limit are applied.'),
50
+ returnedCount: z
51
+ .number()
52
+ .describe('Number of works returned in this response, after applying offset and limit.'),
53
+ offset: z
54
+ .number()
55
+ .describe('Zero-based offset applied to the full works list for this response.'),
56
+ nextOffset: z
57
+ .number()
58
+ .optional()
59
+ .describe('Offset to pass on the next call to continue paging. Omitted when this response includes the final work.'),
60
+ truncated: z
61
+ .boolean()
62
+ .describe('True when more works are available beyond this response — fetch them with nextOffset.'),
32
63
  works: z
33
64
  .array(z
34
65
  .object({
@@ -49,10 +80,11 @@ export const orcidGetWorks = tool('orcid_get_works', {
49
80
  url: z.string().optional().describe('URL for the work, if available.'),
50
81
  externalIds: z
51
82
  .array(ExternalIdSchema)
52
- .describe('External identifiers (DOIs, PMIDs, arXiv IDs, ISBNs, etc.).'),
83
+ .optional()
84
+ .describe('External identifiers (DOIs, PMIDs, arXiv IDs, ISBNs, etc.). Omitted when include_external_ids is false.'),
53
85
  })
54
86
  .describe('Work summary record.'))
55
- .describe('Works associated with this ORCID iD.'),
87
+ .describe('Works for this ORCID iD, sliced to the requested offset and limit.'),
56
88
  }),
57
89
  // Agent-facing context: empty-result notice surfaces in structuredContent and content[]
58
90
  // without occupying the domain return.
@@ -72,10 +104,14 @@ export const orcidGetWorks = tool('orcid_get_works', {
72
104
  ],
73
105
  async handler(input, ctx) {
74
106
  const service = getOrcidService();
75
- ctx.log.info('orcid_get_works', { orcidId: input.orcid_id });
76
- let works;
107
+ ctx.log.info('orcid_get_works', {
108
+ orcidId: input.orcid_id,
109
+ limit: input.limit,
110
+ offset: input.offset,
111
+ });
112
+ let allWorks;
77
113
  try {
78
- works = await service.getWorks(input.orcid_id, ctx);
114
+ allWorks = await service.getWorks(input.orcid_id, ctx);
79
115
  }
80
116
  catch (err) {
81
117
  if (err instanceof McpError && err.code === JsonRpcErrorCode.NotFound) {
@@ -84,14 +120,31 @@ export const orcidGetWorks = tool('orcid_get_works', {
84
120
  throw err;
85
121
  }
86
122
  const bareId = normalizeOrcidId(input.orcid_id);
87
- ctx.log.info('orcid_get_works completed', { orcidId: bareId, workCount: works.length });
88
- if (works.length === 0) {
123
+ const workCount = allWorks.length;
124
+ const works = allWorks.slice(input.offset, input.offset + input.limit).map((w) => {
125
+ const { externalIds, ...rest } = w;
126
+ return input.include_external_ids ? { ...rest, externalIds } : rest;
127
+ });
128
+ const returnedCount = works.length;
129
+ const endOffset = input.offset + returnedCount;
130
+ const truncated = endOffset < workCount;
131
+ ctx.log.info('orcid_get_works completed', {
132
+ orcidId: bareId,
133
+ workCount,
134
+ returnedCount,
135
+ truncated,
136
+ });
137
+ if (workCount === 0) {
89
138
  ctx.enrich.notice('No works found. The researcher may not have linked works to their ORCID record, or works may be set to private visibility.');
90
139
  }
91
140
  return {
92
141
  orcidId: bareId,
93
142
  orcidUri: `https://orcid.org/${bareId}`,
94
- workCount: works.length,
143
+ workCount,
144
+ returnedCount,
145
+ offset: input.offset,
146
+ ...(truncated && { nextOffset: endOffset }),
147
+ truncated,
95
148
  works,
96
149
  };
97
150
  },
@@ -100,7 +153,11 @@ export const orcidGetWorks = tool('orcid_get_works', {
100
153
  `## Works for ORCID ${result.orcidId}`,
101
154
  `**URI:** ${result.orcidUri}`,
102
155
  `**Total Works:** ${result.workCount}`,
156
+ `**Returned:** ${result.returnedCount} (offset ${result.offset})`,
157
+ `**Truncated:** ${result.truncated ? 'Yes' : 'No'}`,
103
158
  ];
159
+ if (result.nextOffset != null)
160
+ lines.push(`**Next Offset:** ${result.nextOffset}`);
104
161
  if (result.works.length === 0) {
105
162
  return [{ type: 'text', text: lines.join('\n') }];
106
163
  }
@@ -117,7 +174,7 @@ export const orcidGetWorks = tool('orcid_get_works', {
117
174
  lines.push(`**Journal:** ${w.journalTitle}`);
118
175
  if (w.url)
119
176
  lines.push(`**URL:** ${w.url}`);
120
- if (w.externalIds.length) {
177
+ if (w.externalIds?.length) {
121
178
  const idParts = w.externalIds.map((id) => {
122
179
  const rel = id.relationship ? ` [${id.relationship}]` : '';
123
180
  const urlPart = id.url ? ` (${id.url})` : '';
@@ -1 +1 @@
1
- {"version":3,"file":"get-works.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-works.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-works.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-works.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @fileoverview Shared ORCID iD parsing and validation. Combines the visible-shape
3
+ * regex, ISO/IEC 7064:2003 MOD 11-2 check-digit verification, and URI-prefix
4
+ * normalization in one place so every tool and resource validates an ORCID iD
5
+ * identically — and rejects a checksum-invalid iD locally, before any upstream call.
6
+ * @module services/orcid/orcid-id
7
+ */
8
+ import { z } from '@cyanheads/mcp-ts-core';
9
+ /** Strip the https://orcid.org/ prefix to get the bare 0000-0000-0000-0000 form. */
10
+ export declare function normalizeOrcidId(id: string): string;
11
+ /**
12
+ * True when `id` is a well-shaped ORCID iD (bare or full URI) whose ISO 7064
13
+ * check digit matches. Rejects checksum-invalid iDs such as `0000-0000-0000-0000`.
14
+ */
15
+ export declare function isValidOrcidId(id: string): boolean;
16
+ /**
17
+ * Reusable Zod schema for an `orcid_id` input/param. The regex rejects malformed
18
+ * strings (and emits a JSON-Schema `pattern`); the refine rejects well-shaped iDs
19
+ * with an invalid ISO 7064 check digit. Both run at parse time, so a bad iD fails
20
+ * local validation before any handler or upstream request.
21
+ */
22
+ export declare const orcidIdSchema: z.ZodString;
23
+ /**
24
+ * Regex-only variant of {@link orcidIdSchema} for resource URI params: validates the
25
+ * visible shape (and emits a JSON-Schema `pattern`) but omits the check-digit refine.
26
+ * A resource param carries no place to attach the refine's custom message — so handlers
27
+ * pair this with an explicit `isValidOrcidId(params.orcid_id)` check that throws a clear
28
+ * `InvalidParams` naming the iD, matching the tool route and running before any upstream
29
+ * call. Tools keep {@link orcidIdSchema}: the SDK validates their full schema (refine
30
+ * included) and rejects a bad check digit as `InvalidParams` before the handler runs.
31
+ */
32
+ export declare const orcidIdParamSchema: z.ZodString;
33
+ //# sourceMappingURL=orcid-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orcid-id.d.ts","sourceRoot":"","sources":["../../../src/services/orcid/orcid-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAK3C,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAgBD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAIlD;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,aASvB,CAAC;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,aAK5B,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @fileoverview Shared ORCID iD parsing and validation. Combines the visible-shape
3
+ * regex, ISO/IEC 7064:2003 MOD 11-2 check-digit verification, and URI-prefix
4
+ * normalization in one place so every tool and resource validates an ORCID iD
5
+ * identically — and rejects a checksum-invalid iD locally, before any upstream call.
6
+ * @module services/orcid/orcid-id
7
+ */
8
+ import { z } from '@cyanheads/mcp-ts-core';
9
+ /** Bare or full-URI ORCID iD shape. Check digit is verified separately. */
10
+ const ORCID_ID_PATTERN = /^(https?:\/\/orcid\.org\/)?\d{4}-\d{4}-\d{4}-\d{3}[\dX]$/;
11
+ /** Strip the https://orcid.org/ prefix to get the bare 0000-0000-0000-0000 form. */
12
+ export function normalizeOrcidId(id) {
13
+ return id.replace(/^https?:\/\/orcid\.org\//, '').trim();
14
+ }
15
+ /**
16
+ * Compute the ISO/IEC 7064:2003 MOD 11-2 check character over the first 15 digits
17
+ * of a bare ORCID iD. Returns the expected final character ('0'–'9', or 'X' for 10).
18
+ */
19
+ function computeCheckDigit(bareId) {
20
+ const base = bareId.replace(/-/g, '').slice(0, 15);
21
+ let total = 0;
22
+ for (const char of base) {
23
+ total = (total + Number(char)) * 2;
24
+ }
25
+ const result = (12 - (total % 11)) % 11;
26
+ return result === 10 ? 'X' : String(result);
27
+ }
28
+ /**
29
+ * True when `id` is a well-shaped ORCID iD (bare or full URI) whose ISO 7064
30
+ * check digit matches. Rejects checksum-invalid iDs such as `0000-0000-0000-0000`.
31
+ */
32
+ export function isValidOrcidId(id) {
33
+ if (!ORCID_ID_PATTERN.test(id))
34
+ return false;
35
+ const bare = normalizeOrcidId(id);
36
+ return bare.slice(-1) === computeCheckDigit(bare);
37
+ }
38
+ /**
39
+ * Reusable Zod schema for an `orcid_id` input/param. The regex rejects malformed
40
+ * strings (and emits a JSON-Schema `pattern`); the refine rejects well-shaped iDs
41
+ * with an invalid ISO 7064 check digit. Both run at parse time, so a bad iD fails
42
+ * local validation before any handler or upstream request.
43
+ */
44
+ export const orcidIdSchema = z
45
+ .string()
46
+ .regex(ORCID_ID_PATTERN, 'Must be a valid ORCID iD (e.g. 0000-0001-2345-6789) or full ORCID URI.')
47
+ .refine(isValidOrcidId, {
48
+ message: 'The ORCID iD is invalid — its ISO 7064 check digit does not match. Verify the iD and try again.',
49
+ })
50
+ .describe('ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).');
51
+ /**
52
+ * Regex-only variant of {@link orcidIdSchema} for resource URI params: validates the
53
+ * visible shape (and emits a JSON-Schema `pattern`) but omits the check-digit refine.
54
+ * A resource param carries no place to attach the refine's custom message — so handlers
55
+ * pair this with an explicit `isValidOrcidId(params.orcid_id)` check that throws a clear
56
+ * `InvalidParams` naming the iD, matching the tool route and running before any upstream
57
+ * call. Tools keep {@link orcidIdSchema}: the SDK validates their full schema (refine
58
+ * included) and rejects a bad check digit as `InvalidParams` before the handler runs.
59
+ */
60
+ export const orcidIdParamSchema = z
61
+ .string()
62
+ .regex(ORCID_ID_PATTERN, 'Must be a valid ORCID iD (e.g. 0000-0001-2345-6789) or full ORCID URI.')
63
+ .describe('ORCID iD — bare format (0000-0001-2345-6789) or full URI (https://orcid.org/0000-0001-2345-6789).');
64
+ //# sourceMappingURL=orcid-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orcid-id.js","sourceRoot":"","sources":["../../../src/services/orcid/orcid-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,2EAA2E;AAC3E,MAAM,gBAAgB,GAAG,0DAA0D,CAAC;AAEpF,oFAAoF;AACpF,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,OAAO,EAAE,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,MAAc;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,KAAK,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IACxC,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,MAAM,IAAI,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,KAAK,CAAC,gBAAgB,EAAE,wEAAwE,CAAC;KACjG,MAAM,CAAC,cAAc,EAAE;IACtB,OAAO,EACL,iGAAiG;CACpG,CAAC;KACD,QAAQ,CACP,mGAAmG,CACpG,CAAC;AAEJ;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,EAAE;KACR,KAAK,CAAC,gBAAgB,EAAE,wEAAwE,CAAC;KACjG,QAAQ,CACP,mGAAmG,CACpG,CAAC"}
@@ -7,9 +7,10 @@ import type { Context } from '@cyanheads/mcp-ts-core';
7
7
  import type { AppConfig } from '@cyanheads/mcp-ts-core/config';
8
8
  import type { StorageService } from '@cyanheads/mcp-ts-core/storage';
9
9
  import type { NormalizedPerson } from './normalizers.js';
10
+ import { normalizeOrcidId } from './orcid-id.js';
10
11
  import type { Affiliation, BulkWorkResult, ExpandedSearchResponse, FundingRecord, PeerReview, ResearchResource, Work, WorkDetail } from './types.js';
11
- /** Strip https://orcid.org/ prefix to get the bare 0000-XXXX-XXXX-XXXX form. */
12
- export declare function normalizeOrcidId(id: string): string;
12
+ /** Re-exported from the shared ORCID iD parser/validator (`./orcid-id.js`). */
13
+ export { normalizeOrcidId };
13
14
  /** The accepted affiliation types as a union for type-safety. */
14
15
  export type AffiliationType = 'employment' | 'education' | 'invited-positions' | 'distinctions' | 'memberships' | 'qualifications' | 'services' | 'all';
15
16
  /** Common fetch options forwarded to network layer. */
@@ -1 +1 @@
1
- {"version":3,"file":"orcid-service.d.ts","sourceRoot":"","sources":["../../../src/services/orcid/orcid-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAOrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAYzD,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,UAAU,EAUV,gBAAgB,EAChB,IAAI,EACJ,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,iEAAiE;AACjE,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,WAAW,GACX,mBAAmB,GACnB,cAAc,GACd,aAAa,GACb,gBAAgB,GAChB,UAAU,GACV,KAAK,CAAC;AAEV,uDAAuD;AACvD,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,sDAAsD;AACtD,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc;IAIxD,mEAAmE;IACnE,OAAO,CAAC,OAAO;IAOf,gGAAgG;IAChG,OAAO,CAAC,aAAa;IAQrB,iEAAiE;IACjE,OAAO,CAAC,SAAS;IA6BjB;;;OAGG;IACG,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAUzF;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQzE;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAQ9D;;;OAGG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EAAE,EACxB,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,WAAW,EAAE,CAAC;IAQzB;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAQ1E;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAQ1E;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAQxF;;;;;OAKG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,cAAc,EAAE,CAAC;IAS5B;;;OAGG;IACG,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAOvF;AAQD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAEjF;AAED,wBAAgB,eAAe,IAAI,YAAY,CAK9C"}
1
+ {"version":3,"file":"orcid-service.d.ts","sourceRoot":"","sources":["../../../src/services/orcid/orcid-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAOrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAYzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,UAAU,EAUV,gBAAgB,EAChB,IAAI,EACJ,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,iEAAiE;AACjE,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,WAAW,GACX,mBAAmB,GACnB,cAAc,GACd,aAAa,GACb,gBAAgB,GAChB,UAAU,GACV,KAAK,CAAC;AAEV,uDAAuD;AACvD,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,sDAAsD;AACtD,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc;IAIxD,mEAAmE;IACnE,OAAO,CAAC,OAAO;IAOf,gGAAgG;IAChG,OAAO,CAAC,aAAa;IAQrB,iEAAiE;IACjE,OAAO,CAAC,SAAS;IA6BjB;;;OAGG;IACG,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAUzF;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQzE;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAQ9D;;;OAGG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EAAE,EACxB,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,WAAW,EAAE,CAAC;IAQzB;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAQ1E;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAQ1E;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAQxF;;;;;OAKG;IACG,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,cAAc,EAAE,CAAC;IAS5B;;;OAGG;IACG,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;CAOvF;AAQD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAEjF;AAED,wBAAgB,eAAe,IAAI,YAAY,CAK9C"}
@@ -7,10 +7,9 @@ import { serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
7
7
  import { httpErrorFromResponse, requestContextService, withRetry, } from '@cyanheads/mcp-ts-core/utils';
8
8
  import { getServerConfig } from '../../config/server-config.js';
9
9
  import { normalizeActivities, normalizeBulkWorks, normalizeExpandedSearch, normalizeFundings, normalizePeerReviews, normalizePerson, normalizeResearchResources, normalizeWorkDetail, normalizeWorks, } from './normalizers.js';
10
- /** Strip https://orcid.org/ prefix to get the bare 0000-XXXX-XXXX-XXXX form. */
11
- export function normalizeOrcidId(id) {
12
- return id.replace(/^https?:\/\/orcid\.org\//, '').trim();
13
- }
10
+ import { normalizeOrcidId } from './orcid-id.js';
11
+ /** Re-exported from the shared ORCID iD parser/validator (`./orcid-id.js`). */
12
+ export { normalizeOrcidId };
14
13
  export class OrcidService {
15
14
  baseUrl;
16
15
  constructor(_config, _storage) {
@@ -1 +1 @@
1
- {"version":3,"file":"orcid-service.js","sourceRoot":"","sources":["../../../src/services/orcid/orcid-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orcid-service.js","sourceRoot":"","sources":["../../../src/services/orcid/orcid-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/orcid-mcp-server",
3
- "version": "0.2.6",
3
+ "version": "0.2.7",
4
4
  "mcpName": "io.github.cyanheads/orcid-mcp-server",
5
5
  "description": "Search and retrieve researcher profiles, works, affiliations, funding, and peer review records from the ORCID registry via MCP. STDIO or Streamable HTTP.",
6
6
  "type": "module",
@@ -64,7 +64,7 @@
64
64
  "url": "https://github.com/cyanheads/orcid-mcp-server/issues"
65
65
  },
66
66
  "homepage": "https://github.com/cyanheads/orcid-mcp-server#readme",
67
- "author": "cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/orcid-mcp-server#readme)",
67
+ "author": "Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)",
68
68
  "funding": [
69
69
  {
70
70
  "type": "github",
@@ -76,7 +76,7 @@
76
76
  }
77
77
  ],
78
78
  "license": "Apache-2.0",
79
- "packageManager": "bun@1.3.2",
79
+ "packageManager": "bun@1.3.14",
80
80
  "engines": {
81
81
  "bun": ">=1.3.0",
82
82
  "node": ">=24.0.0"
@@ -84,18 +84,20 @@
84
84
  "publishConfig": {
85
85
  "access": "public"
86
86
  },
87
+ "trustedDependencies": ["@socketsecurity/bun-security-scanner"],
87
88
  "dependencies": {
88
- "@cyanheads/mcp-ts-core": "^0.10.9",
89
+ "@cyanheads/mcp-ts-core": "^0.10.14",
89
90
  "pino-pretty": "^13.1.3",
90
91
  "zod": "^4.4.3"
91
92
  },
92
93
  "devDependencies": {
93
- "@biomejs/biome": "^2.5.0",
94
- "@types/node": "^26.0.0",
94
+ "@biomejs/biome": "^2.5.3",
95
+ "@socketsecurity/bun-security-scanner": "^1.1.2",
96
+ "@types/node": "^26.1.1",
95
97
  "depcheck": "^1.4.7",
96
- "ignore": "^7.0.5",
97
- "tsc-alias": "^1.8.17",
98
+ "ignore": "^7.0.6",
99
+ "tsc-alias": "^1.9.0",
98
100
  "typescript": "^6.0.3",
99
- "vitest": "^4.1.9"
101
+ "vitest": "^4.1.10"
100
102
  }
101
103
  }
package/server.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/cyanheads/orcid-mcp-server",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.2.6",
9
+ "version": "0.2.7",
10
10
  "remotes": [
11
11
  {
12
12
  "type": "streamable-http",
@@ -19,7 +19,7 @@
19
19
  "registryBaseUrl": "https://registry.npmjs.org",
20
20
  "identifier": "@cyanheads/orcid-mcp-server",
21
21
  "runtimeHint": "node",
22
- "version": "0.2.6",
22
+ "version": "0.2.7",
23
23
  "packageArguments": [
24
24
  {
25
25
  "type": "positional",
@@ -48,7 +48,7 @@
48
48
  "registryBaseUrl": "https://registry.npmjs.org",
49
49
  "identifier": "@cyanheads/orcid-mcp-server",
50
50
  "runtimeHint": "node",
51
- "version": "0.2.6",
51
+ "version": "0.2.7",
52
52
  "packageArguments": [
53
53
  {
54
54
  "type": "positional",