@cyanheads/zenodo-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.
- package/AGENTS.md +435 -0
- package/CLAUDE.md +435 -0
- package/Dockerfile +140 -0
- package/LICENSE +201 -0
- package/README.md +292 -0
- package/changelog/0.1.x/0.1.1.md +21 -0
- package/changelog/template.md +151 -0
- package/dist/config/server-config.d.ts +13 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +19 -0
- package/dist/config/server-config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-record.tool.d.ts +186 -0
- package/dist/mcp-server/tools/definitions/get-record.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-record.tool.js +568 -0
- package/dist/mcp-server/tools/definitions/get-record.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +721 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +21 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-files.tool.d.ts +108 -0
- package/dist/mcp-server/tools/definitions/list-files.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-files.tool.js +348 -0
- package/dist/mcp-server/tools/definitions/list-files.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-versions.tool.d.ts +92 -0
- package/dist/mcp-server/tools/definitions/list-versions.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-versions.tool.js +268 -0
- package/dist/mcp-server/tools/definitions/list-versions.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/lookup-vocabulary.tool.d.ts +99 -0
- package/dist/mcp-server/tools/definitions/lookup-vocabulary.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/lookup-vocabulary.tool.js +324 -0
- package/dist/mcp-server/tools/definitions/lookup-vocabulary.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/read-file.tool.d.ts +104 -0
- package/dist/mcp-server/tools/definitions/read-file.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/read-file.tool.js +370 -0
- package/dist/mcp-server/tools/definitions/read-file.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/search-records.tool.d.ts +181 -0
- package/dist/mcp-server/tools/definitions/search-records.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/search-records.tool.js +531 -0
- package/dist/mcp-server/tools/definitions/search-records.tool.js.map +1 -0
- package/dist/mcp-server/tools/record-miss.d.ts +37 -0
- package/dist/mcp-server/tools/record-miss.d.ts.map +1 -0
- package/dist/mcp-server/tools/record-miss.js +51 -0
- package/dist/mcp-server/tools/record-miss.js.map +1 -0
- package/dist/mcp-server/tools/render.d.ts +31 -0
- package/dist/mcp-server/tools/render.d.ts.map +1 -0
- package/dist/mcp-server/tools/render.js +53 -0
- package/dist/mcp-server/tools/render.js.map +1 -0
- package/dist/mcp-server/tools/schema-helpers.d.ts +20 -0
- package/dist/mcp-server/tools/schema-helpers.d.ts.map +1 -0
- package/dist/mcp-server/tools/schema-helpers.js +44 -0
- package/dist/mcp-server/tools/schema-helpers.js.map +1 -0
- package/dist/services/zenodo/cache.d.ts +25 -0
- package/dist/services/zenodo/cache.d.ts.map +1 -0
- package/dist/services/zenodo/cache.js +58 -0
- package/dist/services/zenodo/cache.js.map +1 -0
- package/dist/services/zenodo/html-to-text.d.ts +23 -0
- package/dist/services/zenodo/html-to-text.d.ts.map +1 -0
- package/dist/services/zenodo/html-to-text.js +148 -0
- package/dist/services/zenodo/html-to-text.js.map +1 -0
- package/dist/services/zenodo/http.d.ts +73 -0
- package/dist/services/zenodo/http.d.ts.map +1 -0
- package/dist/services/zenodo/http.js +378 -0
- package/dist/services/zenodo/http.js.map +1 -0
- package/dist/services/zenodo/identifiers.d.ts +104 -0
- package/dist/services/zenodo/identifiers.d.ts.map +1 -0
- package/dist/services/zenodo/identifiers.js +261 -0
- package/dist/services/zenodo/identifiers.js.map +1 -0
- package/dist/services/zenodo/normalize.d.ts +29 -0
- package/dist/services/zenodo/normalize.d.ts.map +1 -0
- package/dist/services/zenodo/normalize.js +324 -0
- package/dist/services/zenodo/normalize.js.map +1 -0
- package/dist/services/zenodo/query-builder.d.ts +87 -0
- package/dist/services/zenodo/query-builder.d.ts.map +1 -0
- package/dist/services/zenodo/query-builder.js +221 -0
- package/dist/services/zenodo/query-builder.js.map +1 -0
- package/dist/services/zenodo/resource-types.d.ts +34 -0
- package/dist/services/zenodo/resource-types.d.ts.map +1 -0
- package/dist/services/zenodo/resource-types.js +97 -0
- package/dist/services/zenodo/resource-types.js.map +1 -0
- package/dist/services/zenodo/text-preview.d.ts +56 -0
- package/dist/services/zenodo/text-preview.d.ts.map +1 -0
- package/dist/services/zenodo/text-preview.js +151 -0
- package/dist/services/zenodo/text-preview.js.map +1 -0
- package/dist/services/zenodo/types.d.ts +517 -0
- package/dist/services/zenodo/types.d.ts.map +1 -0
- package/dist/services/zenodo/types.js +8 -0
- package/dist/services/zenodo/types.js.map +1 -0
- package/dist/services/zenodo/zenodo-service.d.ts +98 -0
- package/dist/services/zenodo/zenodo-service.d.ts.map +1 -0
- package/dist/services/zenodo/zenodo-service.js +392 -0
- package/dist/services/zenodo/zenodo-service.js.map +1 -0
- package/package.json +110 -0
- package/server.json +113 -0
|
@@ -0,0 +1,568 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview zenodo_get_record — resolves one Zenodo deposit from a record id,
|
|
3
|
+
* Zenodo or external DOI, or zenodo.org/doi.org URL and returns its full metadata,
|
|
4
|
+
* the first 25 files, and optionally a formatted citation. A miss (unknown id,
|
|
5
|
+
* deleted record, restricted metadata, DOI not on Zenodo) is a result, not an error.
|
|
6
|
+
* @module mcp-server/tools/definitions/get-record
|
|
7
|
+
*/
|
|
8
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
9
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
10
|
+
import { parseRecordRef, recordUrl } from '../../../services/zenodo/identifiers.js';
|
|
11
|
+
import { getZenodoService } from '../../../services/zenodo/zenodo-service.js';
|
|
12
|
+
import { notOnZenodoMiss, recordMiss, TombstoneSchema } from '../record-miss.js';
|
|
13
|
+
import { hasLineBreak, inline, quoteBlock } from '../render.js';
|
|
14
|
+
import { enumPreprocess } from '../schema-helpers.js';
|
|
15
|
+
const CITATION_STYLES = [
|
|
16
|
+
'bibtex',
|
|
17
|
+
'csl-json',
|
|
18
|
+
'apa',
|
|
19
|
+
'chicago-author-date',
|
|
20
|
+
'harvard-cite-them-right',
|
|
21
|
+
'ieee',
|
|
22
|
+
'modern-language-association',
|
|
23
|
+
'nature',
|
|
24
|
+
];
|
|
25
|
+
const FILES_CAP = 25;
|
|
26
|
+
const PEOPLE_CAP = 25;
|
|
27
|
+
const LIST_CAP = 50;
|
|
28
|
+
const COMMUNITIES_CAP = 25;
|
|
29
|
+
const DESCRIPTION_CAP = 4_000;
|
|
30
|
+
const ADDITIONAL_DESCRIPTIONS_CAP = 5;
|
|
31
|
+
const ADDITIONAL_DESCRIPTION_TEXT_CAP = 1_000;
|
|
32
|
+
const PersonSchema = z
|
|
33
|
+
.object({
|
|
34
|
+
name: z.string().describe('Display name as deposited.'),
|
|
35
|
+
type: z.string().optional().describe('personal or organizational.'),
|
|
36
|
+
orcid: z.string().optional().describe('ORCID iD, when the depositor supplied one.'),
|
|
37
|
+
role: z.string().optional().describe('Contributor role, e.g. Editor (contributors only).'),
|
|
38
|
+
affiliations: z
|
|
39
|
+
.array(z
|
|
40
|
+
.object({
|
|
41
|
+
name: z.string().optional().describe('Affiliation name.'),
|
|
42
|
+
ror: z.string().optional().describe('Affiliation ROR id, when linked.'),
|
|
43
|
+
})
|
|
44
|
+
.describe('One affiliation.'))
|
|
45
|
+
.describe('Affiliations as deposited.'),
|
|
46
|
+
})
|
|
47
|
+
.describe('A creator or contributor.');
|
|
48
|
+
const UsageSchema = z
|
|
49
|
+
.object({
|
|
50
|
+
views: z
|
|
51
|
+
.number()
|
|
52
|
+
.optional()
|
|
53
|
+
.describe('Unique views, as zenodo.org displays them; absent when not reported.'),
|
|
54
|
+
downloads: z
|
|
55
|
+
.number()
|
|
56
|
+
.optional()
|
|
57
|
+
.describe('Unique downloads, as zenodo.org displays them; absent when not reported.'),
|
|
58
|
+
})
|
|
59
|
+
.describe('Usage counts.');
|
|
60
|
+
const RecordSchema = z
|
|
61
|
+
.object({
|
|
62
|
+
recid: z.string().describe('Record id of this version.'),
|
|
63
|
+
concept_recid: z
|
|
64
|
+
.string()
|
|
65
|
+
.optional()
|
|
66
|
+
.describe('Concept record id naming the whole version series; absent if Zenodo omits it.'),
|
|
67
|
+
doi: z.string().optional().describe('DOI of this version; absent on some old records.'),
|
|
68
|
+
doi_provider: z
|
|
69
|
+
.string()
|
|
70
|
+
.optional()
|
|
71
|
+
.describe('datacite (minted by Zenodo) or external (publisher-minted).'),
|
|
72
|
+
concept_doi: z
|
|
73
|
+
.string()
|
|
74
|
+
.optional()
|
|
75
|
+
.describe('Concept DOI of the version series; absent for external DOIs.'),
|
|
76
|
+
oai_id: z.string().optional().describe('OAI-PMH identifier; absent when not assigned.'),
|
|
77
|
+
title: z.string().describe('Title as deposited.'),
|
|
78
|
+
publication_date: z
|
|
79
|
+
.string()
|
|
80
|
+
.optional()
|
|
81
|
+
.describe('Publication date (EDTF as given: 2026-09-11, 2020, 2020-05); absent when not recorded.'),
|
|
82
|
+
version: z
|
|
83
|
+
.string()
|
|
84
|
+
.optional()
|
|
85
|
+
.describe('Version label as deposited; absent when the depositor set none.'),
|
|
86
|
+
publisher: z
|
|
87
|
+
.string()
|
|
88
|
+
.optional()
|
|
89
|
+
.describe('Publisher as deposited (usually Zenodo); absent when not set.'),
|
|
90
|
+
resource_type: z
|
|
91
|
+
.object({
|
|
92
|
+
id: z.string().describe('Resource type id, e.g. dataset or publication-article.'),
|
|
93
|
+
title: z.string().optional().describe('Resource type label, when Zenodo supplies one.'),
|
|
94
|
+
})
|
|
95
|
+
.optional()
|
|
96
|
+
.describe('Resource type; absent when not recorded.'),
|
|
97
|
+
description: z
|
|
98
|
+
.string()
|
|
99
|
+
.optional()
|
|
100
|
+
.describe('Description converted from HTML to plain text, capped at 4,000 characters; absent when the record has none.'),
|
|
101
|
+
description_truncated: z
|
|
102
|
+
.boolean()
|
|
103
|
+
.optional()
|
|
104
|
+
.describe('True when the description was cut at 4,000 characters. Present with description.'),
|
|
105
|
+
description_length: z
|
|
106
|
+
.number()
|
|
107
|
+
.optional()
|
|
108
|
+
.describe('Full plain-text length of the description in characters. Present with description.'),
|
|
109
|
+
additional_descriptions: z
|
|
110
|
+
.array(z
|
|
111
|
+
.object({
|
|
112
|
+
type: z.string().optional().describe('Description type, e.g. Notes or Methods.'),
|
|
113
|
+
text: z.string().describe('Plain text, capped at 1,000 characters.'),
|
|
114
|
+
})
|
|
115
|
+
.describe('One additional description.'))
|
|
116
|
+
.describe('Up to 5 additional descriptions.'),
|
|
117
|
+
creators: z.array(PersonSchema).describe('First 25 creators.'),
|
|
118
|
+
creator_count: z.number().describe('Total creators.'),
|
|
119
|
+
contributors: z.array(PersonSchema).describe('First 25 contributors.'),
|
|
120
|
+
contributor_count: z.number().describe('Total contributors.'),
|
|
121
|
+
keywords: z.array(z.string()).describe('Up to 50 subject keywords.'),
|
|
122
|
+
rights: z
|
|
123
|
+
.array(z
|
|
124
|
+
.object({
|
|
125
|
+
id: z.string().optional().describe('License id (custom rights may lack one).'),
|
|
126
|
+
title: z.string().describe('License or rights title.'),
|
|
127
|
+
url: z.string().optional().describe('License URL.'),
|
|
128
|
+
})
|
|
129
|
+
.describe('One license or rights statement.'))
|
|
130
|
+
.describe('Licenses and rights. Files carry the deposit’s license.'),
|
|
131
|
+
access: z
|
|
132
|
+
.object({
|
|
133
|
+
status: z
|
|
134
|
+
.string()
|
|
135
|
+
.describe('open, restricted, embargoed, or metadata-only (unknown if Zenodo omits it).'),
|
|
136
|
+
record: z
|
|
137
|
+
.string()
|
|
138
|
+
.optional()
|
|
139
|
+
.describe('Record (metadata) access: public or restricted; absent when not reported.'),
|
|
140
|
+
files: z
|
|
141
|
+
.string()
|
|
142
|
+
.optional()
|
|
143
|
+
.describe('File access: public or restricted; absent when not reported.'),
|
|
144
|
+
embargo_active: z.boolean().describe('True while an embargo is in force.'),
|
|
145
|
+
embargo_until: z.string().optional().describe('Embargo end date, when active.'),
|
|
146
|
+
embargo_reason: z.string().optional().describe('Embargo reason, when active.'),
|
|
147
|
+
})
|
|
148
|
+
.describe('Access status and embargo.'),
|
|
149
|
+
funding: z
|
|
150
|
+
.array(z
|
|
151
|
+
.object({
|
|
152
|
+
funder_id: z.string().optional().describe('Funder ROR id.'),
|
|
153
|
+
funder_name: z.string().optional().describe('Funder name.'),
|
|
154
|
+
award_id: z
|
|
155
|
+
.string()
|
|
156
|
+
.optional()
|
|
157
|
+
.describe('Award id (<funder-ror>::<number>) — feeds zenodo_search_records award.'),
|
|
158
|
+
award_number: z.string().optional().describe('Grant number.'),
|
|
159
|
+
award_acronym: z.string().optional().describe('Award acronym.'),
|
|
160
|
+
award_title: z.string().optional().describe('Award title.'),
|
|
161
|
+
award_program: z.string().optional().describe('Funding program.'),
|
|
162
|
+
award_doi: z.string().optional().describe('Award DOI, e.g. 10.3030/101135562.'),
|
|
163
|
+
award_url: z.string().optional().describe('Award landing page URL.'),
|
|
164
|
+
})
|
|
165
|
+
.describe('One funding entry.'))
|
|
166
|
+
.describe('Up to 50 funding entries (funders and grants).'),
|
|
167
|
+
related_identifiers: z
|
|
168
|
+
.array(z
|
|
169
|
+
.object({
|
|
170
|
+
identifier: z
|
|
171
|
+
.string()
|
|
172
|
+
.describe('The related identifier (DOI, arXiv id, URL, PMID, …).'),
|
|
173
|
+
scheme: z.string().optional().describe('Identifier scheme, e.g. doi, arxiv, url.'),
|
|
174
|
+
relation: z
|
|
175
|
+
.string()
|
|
176
|
+
.optional()
|
|
177
|
+
.describe('Relation type id, e.g. issupplementto or cites.'),
|
|
178
|
+
resource_type: z.string().optional().describe('Resource type id of the related item.'),
|
|
179
|
+
})
|
|
180
|
+
.describe('One related identifier.'))
|
|
181
|
+
.describe('First 50 related identifiers.'),
|
|
182
|
+
related_identifier_count: z.number().describe('Total related identifiers.'),
|
|
183
|
+
code_repository: z
|
|
184
|
+
.string()
|
|
185
|
+
.optional()
|
|
186
|
+
.describe('Source code repository URL; absent when none is linked.'),
|
|
187
|
+
communities: z
|
|
188
|
+
.array(z
|
|
189
|
+
.object({
|
|
190
|
+
slug: z.string().describe('Community slug — feeds zenodo_search_records community.'),
|
|
191
|
+
title: z.string().optional().describe('Community title.'),
|
|
192
|
+
})
|
|
193
|
+
.describe('One community.'))
|
|
194
|
+
.describe('Up to 25 communities holding this record.'),
|
|
195
|
+
versions: z
|
|
196
|
+
.object({
|
|
197
|
+
index: z
|
|
198
|
+
.number()
|
|
199
|
+
.optional()
|
|
200
|
+
.describe('Position of this version in its series (1 = first); absent if Zenodo omits version data.'),
|
|
201
|
+
is_latest: z
|
|
202
|
+
.boolean()
|
|
203
|
+
.optional()
|
|
204
|
+
.describe('True when this is the newest version; absent if Zenodo omits version data.'),
|
|
205
|
+
latest_recid: z
|
|
206
|
+
.string()
|
|
207
|
+
.optional()
|
|
208
|
+
.describe('Record id of the newest version, when this one is not it.'),
|
|
209
|
+
})
|
|
210
|
+
.describe('Version position.'),
|
|
211
|
+
stats: z
|
|
212
|
+
.object({
|
|
213
|
+
this_version: UsageSchema,
|
|
214
|
+
all_versions: UsageSchema,
|
|
215
|
+
})
|
|
216
|
+
.optional()
|
|
217
|
+
.describe('Unique views and downloads for this version and for the whole series; absent when Zenodo reports no usage counts.'),
|
|
218
|
+
files: z
|
|
219
|
+
.object({
|
|
220
|
+
enabled: z.boolean().describe('False for a metadata-only deposit.'),
|
|
221
|
+
count: z
|
|
222
|
+
.number()
|
|
223
|
+
.optional()
|
|
224
|
+
.describe('Total files; absent when files are restricted or embargoed.'),
|
|
225
|
+
total_bytes: z
|
|
226
|
+
.number()
|
|
227
|
+
.optional()
|
|
228
|
+
.describe('Total file size in bytes; absent when files are restricted or embargoed.'),
|
|
229
|
+
shown: z.number().describe('File entries included below.'),
|
|
230
|
+
entries: z
|
|
231
|
+
.array(z
|
|
232
|
+
.object({
|
|
233
|
+
key: z.string().describe('File key (path within the deposit).'),
|
|
234
|
+
size: z.number().optional().describe('Size in bytes.'),
|
|
235
|
+
mimetype: z.string().optional().describe('MIME type.'),
|
|
236
|
+
md5: z.string().optional().describe('MD5 checksum (hex).'),
|
|
237
|
+
download_url: z.string().describe('Direct download URL.'),
|
|
238
|
+
})
|
|
239
|
+
.describe('One file.'))
|
|
240
|
+
.describe('First 25 files in upstream order.'),
|
|
241
|
+
})
|
|
242
|
+
.describe('File manifest summary.'),
|
|
243
|
+
revision: z.number().optional().describe('Record revision id; absent when not reported.'),
|
|
244
|
+
zenodo_url: z.string().describe('Record landing page on zenodo.org.'),
|
|
245
|
+
})
|
|
246
|
+
.describe('The deposit’s metadata.');
|
|
247
|
+
/** Applies get_record's display caps to a normalized record. */
|
|
248
|
+
function toRecordView(record, latestRecid) {
|
|
249
|
+
const description = record.description;
|
|
250
|
+
const entries = record.files.entries.slice(0, FILES_CAP);
|
|
251
|
+
return {
|
|
252
|
+
recid: record.recid,
|
|
253
|
+
...(record.concept_recid ? { concept_recid: record.concept_recid } : {}),
|
|
254
|
+
...(record.doi ? { doi: record.doi } : {}),
|
|
255
|
+
...(record.doi_provider ? { doi_provider: record.doi_provider } : {}),
|
|
256
|
+
...(record.concept_doi ? { concept_doi: record.concept_doi } : {}),
|
|
257
|
+
...(record.oai_id ? { oai_id: record.oai_id } : {}),
|
|
258
|
+
title: record.title,
|
|
259
|
+
...(record.publication_date ? { publication_date: record.publication_date } : {}),
|
|
260
|
+
...(record.version ? { version: record.version } : {}),
|
|
261
|
+
...(record.publisher ? { publisher: record.publisher } : {}),
|
|
262
|
+
...(record.resource_type ? { resource_type: record.resource_type } : {}),
|
|
263
|
+
...(description
|
|
264
|
+
? {
|
|
265
|
+
description: description.slice(0, DESCRIPTION_CAP),
|
|
266
|
+
description_truncated: description.length > DESCRIPTION_CAP,
|
|
267
|
+
description_length: description.length,
|
|
268
|
+
}
|
|
269
|
+
: {}),
|
|
270
|
+
additional_descriptions: record.additional_descriptions
|
|
271
|
+
.slice(0, ADDITIONAL_DESCRIPTIONS_CAP)
|
|
272
|
+
.map((d) => ({
|
|
273
|
+
...(d.type ? { type: d.type } : {}),
|
|
274
|
+
text: d.text.slice(0, ADDITIONAL_DESCRIPTION_TEXT_CAP),
|
|
275
|
+
})),
|
|
276
|
+
creators: record.creators.slice(0, PEOPLE_CAP),
|
|
277
|
+
creator_count: record.creators.length,
|
|
278
|
+
contributors: record.contributors.slice(0, PEOPLE_CAP),
|
|
279
|
+
contributor_count: record.contributors.length,
|
|
280
|
+
keywords: record.keywords.slice(0, LIST_CAP),
|
|
281
|
+
rights: record.rights,
|
|
282
|
+
access: record.access,
|
|
283
|
+
funding: record.funding.slice(0, LIST_CAP),
|
|
284
|
+
related_identifiers: record.related_identifiers.slice(0, LIST_CAP),
|
|
285
|
+
related_identifier_count: record.related_identifiers.length,
|
|
286
|
+
...(record.code_repository ? { code_repository: record.code_repository } : {}),
|
|
287
|
+
communities: record.communities.slice(0, COMMUNITIES_CAP),
|
|
288
|
+
versions: { ...record.versions, ...(latestRecid ? { latest_recid: latestRecid } : {}) },
|
|
289
|
+
...(record.stats ? { stats: record.stats } : {}),
|
|
290
|
+
files: {
|
|
291
|
+
enabled: record.files.enabled,
|
|
292
|
+
...(record.files.count !== undefined ? { count: record.files.count } : {}),
|
|
293
|
+
...(record.files.total_bytes !== undefined ? { total_bytes: record.files.total_bytes } : {}),
|
|
294
|
+
shown: entries.length,
|
|
295
|
+
entries,
|
|
296
|
+
},
|
|
297
|
+
...(record.revision !== undefined ? { revision: record.revision } : {}),
|
|
298
|
+
zenodo_url: recordUrl(record.recid),
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
function renderPerson(p) {
|
|
302
|
+
const parts = [inline(p.name)];
|
|
303
|
+
if (p.type)
|
|
304
|
+
parts.push(`[${inline(p.type)}]`);
|
|
305
|
+
if (p.orcid)
|
|
306
|
+
parts.push(`ORCID ${inline(p.orcid)}`);
|
|
307
|
+
if (p.role)
|
|
308
|
+
parts.push(`role: ${inline(p.role)}`);
|
|
309
|
+
const affiliations = p.affiliations
|
|
310
|
+
.map((a) => [a.name ? inline(a.name) : undefined, a.ror ? `ROR ${inline(a.ror)}` : undefined]
|
|
311
|
+
.filter(Boolean)
|
|
312
|
+
.join(' '))
|
|
313
|
+
.filter(Boolean);
|
|
314
|
+
if (affiliations.length)
|
|
315
|
+
parts.push(`— ${affiliations.join('; ')}`);
|
|
316
|
+
return `- ${parts.join(' ')}`;
|
|
317
|
+
}
|
|
318
|
+
export const getRecord = tool('zenodo_get_record', {
|
|
319
|
+
title: 'Get a Zenodo record',
|
|
320
|
+
description: 'Resolve one Zenodo deposit from a record id, a Zenodo DOI (10.5281/zenodo.N), a concept DOI or concept record id (resolves to the latest version), another DOI deposited on Zenodo, or a zenodo.org or doi.org URL, and return its full metadata: description, creators with ORCIDs and ROR affiliations, license, access and embargo, funding and grants, related identifiers, communities, version position, usage counts, and the first 25 files. Optionally includes a formatted citation. A miss (an unknown id, a deleted record with its removal tombstone, restricted metadata, or a DOI not registered on Zenodo) returns found: false with guidance instead of an error.',
|
|
321
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
322
|
+
input: z.object({
|
|
323
|
+
id: z
|
|
324
|
+
.string()
|
|
325
|
+
.trim()
|
|
326
|
+
.min(1)
|
|
327
|
+
.max(500)
|
|
328
|
+
.describe('The deposit to resolve: a record id (22705923), a Zenodo DOI (10.5281/zenodo.22705923, doi: prefix and any case accepted), a concept DOI or concept record id such as 10.5281/zenodo.591564 (resolves to the latest version), another DOI registered to a Zenodo record, or a zenodo.org/records or doi.org URL.'),
|
|
329
|
+
citation_style: z
|
|
330
|
+
.preprocess(enumPreprocess(CITATION_STYLES), z.enum(CITATION_STYLES).optional())
|
|
331
|
+
.describe('Include a formatted citation of the resolved version: bibtex, csl-json, or a text style (apa, chicago-author-date, harvard-cite-them-right, ieee, modern-language-association, nature). Case, spaces, hyphens, and underscores are ignored when matching (BibTeX, APA, CSL JSON). Omit for none.'),
|
|
332
|
+
}),
|
|
333
|
+
output: z.object({
|
|
334
|
+
found: z.boolean().describe('True when the record resolved.'),
|
|
335
|
+
input_kind: z
|
|
336
|
+
.enum(['record_id', 'zenodo_doi', 'external_doi', 'url'])
|
|
337
|
+
.describe('How id was parsed: record_id (digits), zenodo_doi (10.5281/zenodo.N or zenodo.N), external_doi (another DOI), or url (a zenodo.org or doi.org link).'),
|
|
338
|
+
resolved_from: z
|
|
339
|
+
.enum(['version', 'concept_to_latest', 'external_doi'])
|
|
340
|
+
.optional()
|
|
341
|
+
.describe('How the record was reached: a version id, a concept id resolved to the latest version, or a non-Zenodo DOI. Present when found.'),
|
|
342
|
+
miss_kind: z
|
|
343
|
+
.enum(['not_found', 'deleted', 'restricted', 'not_on_zenodo'])
|
|
344
|
+
.optional()
|
|
345
|
+
.describe('Why nothing resolved. Present when not found.'),
|
|
346
|
+
guidance: z.string().optional().describe('What to do next. Present when not found.'),
|
|
347
|
+
tombstone: TombstoneSchema.optional().describe('Removal tombstone. Present when miss_kind is deleted.'),
|
|
348
|
+
record: RecordSchema.optional().describe('The record. Present when found.'),
|
|
349
|
+
citation: z
|
|
350
|
+
.string()
|
|
351
|
+
.optional()
|
|
352
|
+
.describe('The formatted citation. Present when requested and found.'),
|
|
353
|
+
citation_style: z
|
|
354
|
+
.string()
|
|
355
|
+
.optional()
|
|
356
|
+
.describe('The citation style used. Present with citation.'),
|
|
357
|
+
}),
|
|
358
|
+
enrichment: {
|
|
359
|
+
truncated: z.boolean().describe('True when the record has more files than the 25 shown.'),
|
|
360
|
+
shown: z.number().describe('File entries shown.'),
|
|
361
|
+
cap: z.number().describe('Maximum file entries shown (25).'),
|
|
362
|
+
notice: z.string().optional().describe('File access notes or a pointer to zenodo_list_files.'),
|
|
363
|
+
},
|
|
364
|
+
errors: [
|
|
365
|
+
{
|
|
366
|
+
reason: 'invalid_identifier',
|
|
367
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
368
|
+
when: 'id matches no accepted form, or is a GitHub-badge latestdoi id or a non-zenodo.org host',
|
|
369
|
+
recovery: 'Pass a Zenodo record id (22705923), a DOI (10.5281/zenodo.22705923), or a zenodo.org/records URL as id; for a title or keyword, use zenodo_search_records.',
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
reason: 'record_unavailable',
|
|
373
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
374
|
+
when: 'Zenodo could not serve this record: HTTP 500 after one retry, HTTP 500 while resolving a non-Zenodo DOI, or no complete response within the time budget (its gateway cuts off near 30 s, which deposits with about 10,000 or more files hit)',
|
|
375
|
+
thrownBy: 'service',
|
|
376
|
+
recovery: 'Look the record up with zenodo_search_records using query doi:"<its DOI>" (all_versions true) or its title; withdrawn legacy records and deposits with more than about 10,000 files fail on the record endpoint, and if a keyword search also fails, Zenodo is degraded.',
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
reason: 'rate_limited',
|
|
380
|
+
code: JsonRpcErrorCode.RateLimited,
|
|
381
|
+
when: "Zenodo answered HTTP 429, or this server's shared Zenodo request budget is spent for the current window",
|
|
382
|
+
retryable: true,
|
|
383
|
+
thrownBy: 'service',
|
|
384
|
+
recovery: 'Wait for the retryAfter seconds in the error data, then call zenodo_get_record again with the same arguments.',
|
|
385
|
+
},
|
|
386
|
+
],
|
|
387
|
+
async handler(input, ctx) {
|
|
388
|
+
ctx.enrich({ truncated: false, shown: 0, cap: FILES_CAP });
|
|
389
|
+
const ref = parseRecordRef(input.id);
|
|
390
|
+
if (ref.kind === 'invalid') {
|
|
391
|
+
throw ctx.fail('invalid_identifier', ref.message, ctx.recoveryFor('invalid_identifier'));
|
|
392
|
+
}
|
|
393
|
+
const service = getZenodoService();
|
|
394
|
+
const inputKind = ref.inputKind;
|
|
395
|
+
let record;
|
|
396
|
+
let resolvedFrom;
|
|
397
|
+
if (ref.kind === 'external_doi') {
|
|
398
|
+
const resolution = await service.resolveDoi(ref.doi, ref.strippedDoi, ctx);
|
|
399
|
+
if (resolution.status === 'not_on_zenodo') {
|
|
400
|
+
return {
|
|
401
|
+
found: false,
|
|
402
|
+
input_kind: inputKind,
|
|
403
|
+
...notOnZenodoMiss(ref.strippedDoi ?? ref.doi),
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
record = resolution.record;
|
|
407
|
+
resolvedFrom = 'external_doi';
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
const lookup = await service.getRecord(ref.recid, ctx);
|
|
411
|
+
if (lookup.status !== 'found') {
|
|
412
|
+
return { found: false, input_kind: inputKind, ...recordMiss(ref.recid, lookup) };
|
|
413
|
+
}
|
|
414
|
+
record = lookup.record;
|
|
415
|
+
resolvedFrom = record.concept_recid === ref.recid ? 'concept_to_latest' : 'version';
|
|
416
|
+
}
|
|
417
|
+
const [latestRecid, citation] = await Promise.all([
|
|
418
|
+
record.versions.is_latest === false ? service.latestRecid(record.recid, ctx) : undefined,
|
|
419
|
+
input.citation_style
|
|
420
|
+
? service.getCitation(record.recid, input.citation_style, ctx)
|
|
421
|
+
: undefined,
|
|
422
|
+
]);
|
|
423
|
+
const view = toRecordView(record, latestRecid);
|
|
424
|
+
ctx.enrich({ shown: view.files.shown });
|
|
425
|
+
const fileCount = record.files.count ?? record.files.entries.length;
|
|
426
|
+
if (record.files.enabled && record.access.files === 'restricted') {
|
|
427
|
+
const until = record.access.embargo_until ? ` until ${record.access.embargo_until}` : '';
|
|
428
|
+
ctx.enrich.notice(`Files are ${record.access.status}${until}; metadata only.`);
|
|
429
|
+
}
|
|
430
|
+
else if (record.files.entries.length > FILES_CAP) {
|
|
431
|
+
ctx.enrich.truncated({
|
|
432
|
+
shown: view.files.shown,
|
|
433
|
+
cap: FILES_CAP,
|
|
434
|
+
guidance: `Showing ${FILES_CAP} of ${fileCount} files; page the rest with zenodo_list_files.`,
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
return {
|
|
438
|
+
found: true,
|
|
439
|
+
input_kind: inputKind,
|
|
440
|
+
resolved_from: resolvedFrom,
|
|
441
|
+
record: view,
|
|
442
|
+
...(citation !== undefined && input.citation_style
|
|
443
|
+
? { citation, citation_style: input.citation_style }
|
|
444
|
+
: {}),
|
|
445
|
+
};
|
|
446
|
+
},
|
|
447
|
+
format: (result) => {
|
|
448
|
+
const lines = [
|
|
449
|
+
`**Found:** ${result.found} | **Input kind:** ${result.input_kind}${result.resolved_from ? ` | **Resolved from:** ${result.resolved_from}` : ''}`,
|
|
450
|
+
];
|
|
451
|
+
if (result.miss_kind)
|
|
452
|
+
lines.push(`**Miss kind:** ${result.miss_kind}`);
|
|
453
|
+
if (result.guidance)
|
|
454
|
+
lines.push(`**Guidance:** ${inline(result.guidance)}`);
|
|
455
|
+
const t = result.tombstone;
|
|
456
|
+
if (t) {
|
|
457
|
+
lines.push(`**Tombstone:** removed ${inline(t.removal_date ?? 'on an unrecorded date')}; reason: ${t.removal_reason ? inline(t.removal_reason) : 'not given'}`);
|
|
458
|
+
if (t.note)
|
|
459
|
+
lines.push(quoteBlock(t.note, 'Removal note (untrusted):'));
|
|
460
|
+
if (t.citation_text)
|
|
461
|
+
lines.push(quoteBlock(t.citation_text, 'Tombstone citation (untrusted):'));
|
|
462
|
+
}
|
|
463
|
+
const r = result.record;
|
|
464
|
+
if (r) {
|
|
465
|
+
lines.push('', `# ${inline(r.title)}`);
|
|
466
|
+
lines.push(`**Record:** ${r.recid}${r.concept_recid ? ` | **Concept record:** ${r.concept_recid}` : ''} | **URL:** ${r.zenodo_url}`);
|
|
467
|
+
const ids = [
|
|
468
|
+
r.doi
|
|
469
|
+
? `**DOI:** ${inline(r.doi)}${r.doi_provider ? ` (${inline(r.doi_provider)})` : ''}`
|
|
470
|
+
: undefined,
|
|
471
|
+
r.concept_doi ? `**Concept DOI:** ${inline(r.concept_doi)}` : undefined,
|
|
472
|
+
r.oai_id ? `**OAI:** ${inline(r.oai_id)}` : undefined,
|
|
473
|
+
].filter(Boolean);
|
|
474
|
+
if (ids.length)
|
|
475
|
+
lines.push(ids.join(' | '));
|
|
476
|
+
const facts = [
|
|
477
|
+
r.resource_type
|
|
478
|
+
? `**Type:** ${r.resource_type.title ? `${inline(r.resource_type.title)} ` : ''}(${inline(r.resource_type.id)})`
|
|
479
|
+
: undefined,
|
|
480
|
+
r.publication_date ? `**Published:** ${inline(r.publication_date)}` : undefined,
|
|
481
|
+
r.version ? `**Version:** ${inline(r.version)}` : undefined,
|
|
482
|
+
r.publisher ? `**Publisher:** ${inline(r.publisher)}` : undefined,
|
|
483
|
+
r.revision !== undefined ? `**Revision:** ${r.revision}` : undefined,
|
|
484
|
+
].filter(Boolean);
|
|
485
|
+
if (facts.length)
|
|
486
|
+
lines.push(facts.join(' | '));
|
|
487
|
+
const v = r.versions;
|
|
488
|
+
lines.push(`**Version position:** index ${v.index ?? 'unknown'}, latest: ${v.is_latest ?? 'unknown'}${v.latest_recid ? `, latest version is record ${v.latest_recid}` : ''}`);
|
|
489
|
+
const a = r.access;
|
|
490
|
+
lines.push(`**Access:** ${inline(a.status)}${a.record ? `, record ${inline(a.record)}` : ''}${a.files ? `, files ${inline(a.files)}` : ''}; embargo active: ${a.embargo_active}${a.embargo_until ? `, until ${inline(a.embargo_until)}` : ''}${a.embargo_reason ? `, reason: ${inline(a.embargo_reason)}` : ''}`);
|
|
491
|
+
if (r.rights.length) {
|
|
492
|
+
lines.push(`**Rights:** ${r.rights
|
|
493
|
+
.map((x) => `${inline(x.title)}${x.id ? ` (${inline(x.id)})` : ''}${x.url ? ` ${inline(x.url)}` : ''}`)
|
|
494
|
+
.join('; ')}`);
|
|
495
|
+
}
|
|
496
|
+
if (r.stats) {
|
|
497
|
+
const s = r.stats;
|
|
498
|
+
lines.push(`**Usage:** this version ${s.this_version.views ?? '?'} views / ${s.this_version.downloads ?? '?'} downloads; all versions ${s.all_versions.views ?? '?'} views / ${s.all_versions.downloads ?? '?'} downloads`);
|
|
499
|
+
}
|
|
500
|
+
if (r.code_repository)
|
|
501
|
+
lines.push(`**Code repository:** ${inline(r.code_repository)}`);
|
|
502
|
+
lines.push('', `### Creators (${r.creator_count})`, ...r.creators.map(renderPerson));
|
|
503
|
+
if (r.contributors.length || r.contributor_count) {
|
|
504
|
+
lines.push('', `### Contributors (${r.contributor_count})`, ...r.contributors.map(renderPerson));
|
|
505
|
+
}
|
|
506
|
+
if (r.keywords.length)
|
|
507
|
+
lines.push('', `**Keywords:** ${r.keywords.map(inline).join('; ')}`);
|
|
508
|
+
if (r.communities.length) {
|
|
509
|
+
lines.push(`**Communities:** ${r.communities.map((c) => `${inline(c.slug)}${c.title ? ` (${inline(c.title)})` : ''}`).join('; ')}`);
|
|
510
|
+
}
|
|
511
|
+
if (r.funding.length) {
|
|
512
|
+
lines.push('', '### Funding');
|
|
513
|
+
for (const f of r.funding) {
|
|
514
|
+
const funder = [
|
|
515
|
+
f.funder_name ? inline(f.funder_name) : undefined,
|
|
516
|
+
f.funder_id ? `(${inline(f.funder_id)})` : undefined,
|
|
517
|
+
]
|
|
518
|
+
.filter(Boolean)
|
|
519
|
+
.join(' ');
|
|
520
|
+
const award = [
|
|
521
|
+
f.award_acronym ? inline(f.award_acronym) : undefined,
|
|
522
|
+
f.award_number ? `no. ${inline(f.award_number)}` : undefined,
|
|
523
|
+
f.award_id ? `[award id ${inline(f.award_id)}]` : undefined,
|
|
524
|
+
f.award_program ? `program ${inline(f.award_program)}` : undefined,
|
|
525
|
+
f.award_doi ? `DOI ${inline(f.award_doi)}` : undefined,
|
|
526
|
+
f.award_url ? inline(f.award_url) : undefined,
|
|
527
|
+
]
|
|
528
|
+
.filter(Boolean)
|
|
529
|
+
.join(', ');
|
|
530
|
+
lines.push(`- ${funder || 'Unnamed funder'}${award ? ` — ${award}` : ''}`);
|
|
531
|
+
if (f.award_title) {
|
|
532
|
+
lines.push(hasLineBreak(f.award_title)
|
|
533
|
+
? quoteBlock(f.award_title, ' Award title (untrusted):')
|
|
534
|
+
: ` Award title: ${f.award_title}`);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
if (r.related_identifiers.length || r.related_identifier_count) {
|
|
539
|
+
lines.push('', `### Related identifiers (${r.related_identifier_count})`);
|
|
540
|
+
for (const x of r.related_identifiers) {
|
|
541
|
+
lines.push(`- ${inline(x.relation ?? 'related')}: ${inline(x.identifier)}${x.scheme ? ` (${inline(x.scheme)})` : ''}${x.resource_type ? ` [${inline(x.resource_type)}]` : ''}`);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
if (r.description) {
|
|
545
|
+
lines.push('', `### Description (${r.description_length ?? r.description.length} chars${r.description_truncated ? ', truncated to 4,000' : ''})`, quoteBlock(r.description));
|
|
546
|
+
}
|
|
547
|
+
else if (r.description_length !== undefined || r.description_truncated !== undefined) {
|
|
548
|
+
lines.push(`Description length: ${r.description_length}, truncated: ${r.description_truncated}`);
|
|
549
|
+
}
|
|
550
|
+
for (const d of r.additional_descriptions) {
|
|
551
|
+
lines.push('', `### Additional description${d.type ? ` — ${inline(d.type)}` : ''}`, quoteBlock(d.text));
|
|
552
|
+
}
|
|
553
|
+
const files = r.files;
|
|
554
|
+
lines.push('', `### Files (enabled: ${files.enabled}, count: ${files.count ?? 'not disclosed'}, total bytes: ${files.total_bytes ?? 'not disclosed'}, shown: ${files.shown})`);
|
|
555
|
+
for (const f of files.entries) {
|
|
556
|
+
lines.push(`- ${inline(f.key)} — ${f.size ?? '?'} bytes${f.mimetype ? `, ${inline(f.mimetype)}` : ''}${f.md5 ? `, md5 ${inline(f.md5)}` : ''} — ${f.download_url}`);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
if (result.citation) {
|
|
560
|
+
lines.push('', quoteBlock(result.citation, `Citation (${result.citation_style ?? 'requested style'}, untrusted):`));
|
|
561
|
+
}
|
|
562
|
+
else if (result.citation_style) {
|
|
563
|
+
lines.push(`Citation style: ${result.citation_style}`);
|
|
564
|
+
}
|
|
565
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
566
|
+
},
|
|
567
|
+
});
|
|
568
|
+
//# sourceMappingURL=get-record.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-record.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-record.tool.ts"],"names":[],"mappings":"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"}
|