@cyanheads/openalex-mcp-server 0.6.10 → 0.6.12
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/README.md +16 -3
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/analyze-trends.tool.d.ts +2 -1
- package/dist/mcp-server/tools/definitions/analyze-trends.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/analyze-trends.tool.js +21 -3
- package/dist/mcp-server/tools/definitions/analyze-trends.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/citation-graph.tool.d.ts +62 -0
- package/dist/mcp-server/tools/definitions/citation-graph.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/citation-graph.tool.js +194 -0
- package/dist/mcp-server/tools/definitions/citation-graph.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/search-entities.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-entities.tool.js +2 -99
- package/dist/mcp-server/tools/definitions/search-entities.tool.js.map +1 -1
- package/dist/mcp-server/tools/render-entity-record.d.ts +15 -0
- package/dist/mcp-server/tools/render-entity-record.d.ts.map +1 -0
- package/dist/mcp-server/tools/render-entity-record.js +105 -0
- package/dist/mcp-server/tools/render-entity-record.js.map +1 -0
- package/dist/services/openalex/openalex-service.d.ts +10 -0
- package/dist/services/openalex/openalex-service.d.ts.map +1 -1
- package/dist/services/openalex/openalex-service.js +96 -11
- package/dist/services/openalex/openalex-service.js.map +1 -1
- package/dist/services/openalex/types.d.ts +1 -0
- package/dist/services/openalex/types.d.ts.map +1 -1
- package/dist/services/openalex/url-redaction.d.ts +15 -0
- package/dist/services/openalex/url-redaction.d.ts.map +1 -0
- package/dist/services/openalex/url-redaction.js +59 -0
- package/dist/services/openalex/url-redaction.js.map +1 -0
- package/package.json +4 -4
- package/server.json +3 -3
package/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
<h1>@cyanheads/openalex-mcp-server</h1>
|
|
3
3
|
<p><b>Access the OpenAlex academic research catalog - 270M+ publications through MCP. STDIO & Streamable HTTP.</b></p>
|
|
4
|
-
<p><b>
|
|
4
|
+
<p><b>4 Tools · 2 Prompts</b></p>
|
|
5
5
|
</div>
|
|
6
6
|
|
|
7
7
|
<div align="center">
|
|
8
8
|
|
|
9
|
-
[](./CHANGELOG.md) [](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) [](https://modelcontextprotocol.io/) [](./LICENSE) [](https://www.typescriptlang.org/)
|
|
10
10
|
|
|
11
11
|
</div>
|
|
12
12
|
|
|
@@ -20,13 +20,14 @@
|
|
|
20
20
|
|
|
21
21
|
## Tools
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Four tools for querying the [OpenAlex](https://openalex.org) academic research catalog:
|
|
24
24
|
|
|
25
25
|
| Tool Name | Description |
|
|
26
26
|
|:----------|:------------|
|
|
27
27
|
| `openalex_search_entities` | Search, filter, sort, or retrieve by ID across all 8 entity types. |
|
|
28
28
|
| `openalex_analyze_trends` | Group-by aggregation for trend and distribution analysis. |
|
|
29
29
|
| `openalex_resolve_name` | Resolve a name or partial name to an OpenAlex ID via autocomplete. |
|
|
30
|
+
| `openalex_get_citation_graph` | Walk the citation graph one hop from a seed work: cites, cited_by, or related_to. |
|
|
30
31
|
|
|
31
32
|
### `openalex_search_entities`
|
|
32
33
|
|
|
@@ -63,6 +64,18 @@ Name-to-ID resolution via autocomplete. **Always use this before filtering by en
|
|
|
63
64
|
- Optional entity type filter and field-level filters
|
|
64
65
|
- ~200ms response time
|
|
65
66
|
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### `openalex_get_citation_graph`
|
|
70
|
+
|
|
71
|
+
One-hop citation graph traversal from a seed work. Wraps the OpenAlex `cites`/`cited_by`/`related_to` filters behind an explicit `direction` argument so callers do not have to know the filter names.
|
|
72
|
+
|
|
73
|
+
- `cites`: works that cite the seed (incoming citations)
|
|
74
|
+
- `cited_by`: works the seed cites (its reference list)
|
|
75
|
+
- `related_to`: OpenAlex algorithmic "related works" (~8-30 typical, may be empty for less-cited seeds)
|
|
76
|
+
- Accepts OpenAlex IDs, DOIs, PMIDs, PMCIDs as `seed_id`; validates the seed via a singleton `/works/{id}` lookup before walking, so non-existent seeds surface as `NotFound`
|
|
77
|
+
- Stacks with `filters`/`sort`/`select` to narrow the graph (e.g., `publication_year=">2020"`, `is_oa="true"`)
|
|
78
|
+
|
|
66
79
|
## Prompts
|
|
67
80
|
|
|
68
81
|
| Prompt | Description |
|
package/dist/index.js
CHANGED
|
@@ -7,11 +7,12 @@ import { createApp } from '@cyanheads/mcp-ts-core';
|
|
|
7
7
|
import { literatureReviewPrompt } from './mcp-server/prompts/definitions/literature-review.prompt.js';
|
|
8
8
|
import { researchLandscapePrompt } from './mcp-server/prompts/definitions/research-landscape.prompt.js';
|
|
9
9
|
import { analyzeTrendsTool } from './mcp-server/tools/definitions/analyze-trends.tool.js';
|
|
10
|
+
import { getCitationGraphTool } from './mcp-server/tools/definitions/citation-graph.tool.js';
|
|
10
11
|
import { resolveNameTool } from './mcp-server/tools/definitions/resolve-name.tool.js';
|
|
11
12
|
import { searchEntitiesTool } from './mcp-server/tools/definitions/search-entities.tool.js';
|
|
12
13
|
import { initOpenAlexService } from './services/openalex/openalex-service.js';
|
|
13
14
|
await createApp({
|
|
14
|
-
tools: [resolveNameTool, searchEntitiesTool, analyzeTrendsTool],
|
|
15
|
+
tools: [resolveNameTool, searchEntitiesTool, analyzeTrendsTool, getCitationGraphTool],
|
|
15
16
|
prompts: [literatureReviewPrompt, researchLandscapePrompt],
|
|
16
17
|
instructions: 'Use the openalex_* tools to query the OpenAlex scholarly catalog (works, authors, sources, institutions, topics, keywords, publishers, funders): resolve names to IDs, search/filter/sort or fetch by ID, and group_by for trends. Names are ambiguous and IDs are not — call openalex_resolve_name before filtering by entity.',
|
|
17
18
|
landing: {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8DAA8D,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,+DAA+D,CAAC;AACxG,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAE9E,MAAM,SAAS,CAAC;IACd,KAAK,EAAE,CAAC,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8DAA8D,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,+DAA+D,CAAC;AACxG,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAE9E,MAAM,SAAS,CAAC;IACd,KAAK,EAAE,CAAC,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,oBAAoB,CAAC;IACrF,OAAO,EAAE,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;IAC1D,YAAY,EACV,iUAAiU;IACnU,OAAO,EAAE;QACP,OAAO,EAAE,yEAAyE;QAClF,QAAQ,EAAE,kDAAkD;QAC5D,UAAU,EAAE;YACV,gBAAgB,EAAE,uBAAuB;SAC1C;QACD,KAAK,EAAE;YACL,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,sBAAsB,EAAE;YACnD,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,2BAA2B,EAAE;SACzD;KACF;IACD,KAAK;QACH,mBAAmB,EAAE,CAAC;IACxB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -18,6 +18,7 @@ export declare const analyzeTrendsTool: import("@cyanheads/mcp-ts-core").ToolDef
|
|
|
18
18
|
group_by: z.ZodString;
|
|
19
19
|
filters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
20
20
|
include_unknown: z.ZodDefault<z.ZodBoolean>;
|
|
21
|
+
per_page: z.ZodDefault<z.ZodNumber>;
|
|
21
22
|
cursor: z.ZodOptional<z.ZodString>;
|
|
22
23
|
}, z.core.$strip>, z.ZodObject<{
|
|
23
24
|
meta: z.ZodObject<{
|
|
@@ -51,7 +52,7 @@ export declare const analyzeTrendsTool: import("@cyanheads/mcp-ts-core").ToolDef
|
|
|
51
52
|
readonly reason: "upstream_invalid_params";
|
|
52
53
|
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
53
54
|
readonly when: "OpenAlex rejected the group_by or filter as malformed (HTTP 400).";
|
|
54
|
-
readonly recovery: "
|
|
55
|
+
readonly recovery: "OpenAlex rejected a token in group_by or filters. The upstream message names the rejected key and lists valid alternatives — read it, then retry with a valid filter key (e.g. abstract.search, title.search, default.search for full-text inside filters) or a valid group_by field for the entity_type.";
|
|
55
56
|
}, {
|
|
56
57
|
readonly reason: "upstream_validation_failed";
|
|
57
58
|
readonly code: JsonRpcErrorCode.ValidationError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-trends.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/analyze-trends.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAIjE,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"analyze-trends.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/analyze-trends.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAIjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyK5B,CAAC"}
|
|
@@ -34,7 +34,7 @@ export const analyzeTrendsTool = tool('openalex_analyze_trends', {
|
|
|
34
34
|
reason: 'upstream_invalid_params',
|
|
35
35
|
code: JsonRpcErrorCode.InvalidParams,
|
|
36
36
|
when: 'OpenAlex rejected the group_by or filter as malformed (HTTP 400).',
|
|
37
|
-
recovery: '
|
|
37
|
+
recovery: 'OpenAlex rejected a token in group_by or filters. The upstream message names the rejected key and lists valid alternatives — read it, then retry with a valid filter key (e.g. abstract.search, title.search, default.search for full-text inside filters) or a valid group_by field for the entity_type.',
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
reason: 'upstream_validation_failed',
|
|
@@ -51,11 +51,18 @@ export const analyzeTrendsTool = tool('openalex_analyze_trends', {
|
|
|
51
51
|
filters: z
|
|
52
52
|
.record(z.string(), z.string())
|
|
53
53
|
.optional()
|
|
54
|
-
.describe(
|
|
54
|
+
.describe("Filter criteria (same syntax as openalex_search_entities filters). Narrows the population before aggregation. For full-text within filters, use abstract.search, title.search, or default.search — there is no bare 'search' filter key. Example: group works by year filtered to a specific topic."),
|
|
55
55
|
include_unknown: z
|
|
56
56
|
.boolean()
|
|
57
57
|
.default(false)
|
|
58
58
|
.describe('Include a group for entities with no value for the grouped field. Hidden by default.'),
|
|
59
|
+
per_page: z
|
|
60
|
+
.number()
|
|
61
|
+
.int()
|
|
62
|
+
.min(1)
|
|
63
|
+
.max(200)
|
|
64
|
+
.default(200)
|
|
65
|
+
.describe('Maximum groups per page (1-200). Default 200 (the upstream cap). Use lower values when only the top-N groups are relevant — reduces token spend without changing the underlying aggregation.'),
|
|
59
66
|
cursor: z
|
|
60
67
|
.string()
|
|
61
68
|
.optional()
|
|
@@ -92,6 +99,7 @@ export const analyzeTrendsTool = tool('openalex_analyze_trends', {
|
|
|
92
99
|
groupBy: input.group_by,
|
|
93
100
|
filters: input.filters,
|
|
94
101
|
includeUnknown: input.include_unknown,
|
|
102
|
+
perPage: input.per_page,
|
|
95
103
|
cursor: input.cursor,
|
|
96
104
|
}, ctx);
|
|
97
105
|
ctx.log.info('Trend analysis completed', {
|
|
@@ -115,7 +123,13 @@ export const analyzeTrendsTool = tool('openalex_analyze_trends', {
|
|
|
115
123
|
},
|
|
116
124
|
];
|
|
117
125
|
}
|
|
118
|
-
|
|
126
|
+
// Time-series groupings are returned upstream in count-desc — useful for "top N years"
|
|
127
|
+
// but jarring when reading a trend. Only the rendered text is reordered;
|
|
128
|
+
// structuredContent stays in upstream order for callers that want it.
|
|
129
|
+
const renderOrder = isTimeSeriesGrouping(result.groups)
|
|
130
|
+
? [...result.groups].sort((a, b) => a.key.localeCompare(b.key))
|
|
131
|
+
: result.groups;
|
|
132
|
+
const lines = renderOrder.map((g) => {
|
|
119
133
|
const label = g.key === g.key_display_name ? g.key_display_name : `${g.key_display_name} (${g.key})`;
|
|
120
134
|
return `${label}: ${g.count}`;
|
|
121
135
|
});
|
|
@@ -130,6 +144,10 @@ export const analyzeTrendsTool = tool('openalex_analyze_trends', {
|
|
|
130
144
|
];
|
|
131
145
|
},
|
|
132
146
|
});
|
|
147
|
+
const YEAR_OR_DATE_PATTERN = /^\d{4}(-\d{2}-\d{2})?$/;
|
|
148
|
+
function isTimeSeriesGrouping(groups) {
|
|
149
|
+
return groups.length > 1 && groups.every((g) => YEAR_OR_DATE_PATTERN.test(g.key));
|
|
150
|
+
}
|
|
133
151
|
function buildAnalyzeEcho(input) {
|
|
134
152
|
const parts = [`entity_type=${input.entity_type}`, `group_by=${input.group_by}`];
|
|
135
153
|
if (input.filters && Object.keys(input.filters).length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-trends.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/analyze-trends.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,EAAE;IAC/D,WAAW,EACT,oXAAoX;IACtX,SAAS,EACP,oHAAoH;IACtH,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAC9E,MAAM,EAAE;QACN;YACE,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,gBAAgB,CAAC,WAAW;YAClC,IAAI,EAAE,4CAA4C;YAClD,SAAS,EAAE,IAAI;YACf,QAAQ,EACN,sFAAsF;SACzF;QACD;YACE,MAAM,EAAE,uBAAuB;YAC/B,IAAI,EAAE,gBAAgB,CAAC,YAAY;YACnC,IAAI,EAAE,2CAA2C;YACjD,QAAQ,EACN,0FAA0F;SAC7F;QACD;YACE,MAAM,EAAE,oBAAoB;YAC5B,IAAI,EAAE,gBAAgB,CAAC,SAAS;YAChC,IAAI,EAAE,8DAA8D;YACpE,QAAQ,EACN,yFAAyF;SAC5F;QACD;YACE,MAAM,EAAE,yBAAyB;YACjC,IAAI,EAAE,gBAAgB,CAAC,aAAa;YACpC,IAAI,EAAE,mEAAmE;YACzE,QAAQ,EACN
|
|
1
|
+
{"version":3,"file":"analyze-trends.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/analyze-trends.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview One-hop citation graph traversal: cites / cited_by / related_to from a seed work.
|
|
3
|
+
* @module mcp-server/tools/definitions/citation-graph.tool
|
|
4
|
+
*/
|
|
5
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
export declare const getCitationGraphTool: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
|
+
seed_id: z.ZodString;
|
|
9
|
+
direction: z.ZodEnum<{
|
|
10
|
+
cites: "cites";
|
|
11
|
+
cited_by: "cited_by";
|
|
12
|
+
related_to: "related_to";
|
|
13
|
+
}>;
|
|
14
|
+
filters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
15
|
+
sort: z.ZodOptional<z.ZodString>;
|
|
16
|
+
select: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
17
|
+
per_page: z.ZodDefault<z.ZodNumber>;
|
|
18
|
+
cursor: z.ZodOptional<z.ZodString>;
|
|
19
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
20
|
+
meta: z.ZodObject<{
|
|
21
|
+
count: z.ZodNumber;
|
|
22
|
+
per_page: z.ZodNumber;
|
|
23
|
+
next_cursor: z.ZodNullable<z.ZodString>;
|
|
24
|
+
echo: z.ZodString;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
results: z.ZodArray<z.ZodObject<{
|
|
27
|
+
id: z.ZodString;
|
|
28
|
+
display_name: z.ZodString;
|
|
29
|
+
}, z.core.$loose>>;
|
|
30
|
+
}, z.core.$strip>, readonly [{
|
|
31
|
+
readonly reason: "rate_limited";
|
|
32
|
+
readonly code: JsonRpcErrorCode.RateLimited;
|
|
33
|
+
readonly when: "OpenAlex throttled the request (HTTP 429).";
|
|
34
|
+
readonly retryable: true;
|
|
35
|
+
readonly recovery: "Wait several seconds and retry; consider lowering request frequency for this caller.";
|
|
36
|
+
}, {
|
|
37
|
+
readonly reason: "upstream_unauthorized";
|
|
38
|
+
readonly code: JsonRpcErrorCode.Unauthorized;
|
|
39
|
+
readonly when: "OpenAlex rejected the API key (HTTP 401).";
|
|
40
|
+
readonly recovery: "Check that OPENALEX_API_KEY is set to a valid email-format key registered with OpenAlex.";
|
|
41
|
+
}, {
|
|
42
|
+
readonly reason: "upstream_forbidden";
|
|
43
|
+
readonly code: JsonRpcErrorCode.Forbidden;
|
|
44
|
+
readonly when: "OpenAlex denied access to the requested resource (HTTP 403).";
|
|
45
|
+
readonly recovery: "Confirm the API key has access to this entity type or endpoint, then retry the request.";
|
|
46
|
+
}, {
|
|
47
|
+
readonly reason: "upstream_invalid_params";
|
|
48
|
+
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
49
|
+
readonly when: "OpenAlex rejected the seed_id, filter, or sort as malformed (HTTP 400).";
|
|
50
|
+
readonly recovery: "Read the upstream message for the rejected token, then retry with a valid OpenAlex work ID (W…), DOI, or PMID for seed_id, or correct the filter/sort field name it names.";
|
|
51
|
+
}, {
|
|
52
|
+
readonly reason: "reserved_filter_key";
|
|
53
|
+
readonly code: JsonRpcErrorCode.InvalidParams;
|
|
54
|
+
readonly when: "filters contains cites/cited_by/related_to — the direction parameter reserves those keys.";
|
|
55
|
+
readonly recovery: "Remove the reserved key from filters, or restate the relationship through direction.";
|
|
56
|
+
}, {
|
|
57
|
+
readonly reason: "entity_not_found";
|
|
58
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
59
|
+
readonly when: "OpenAlex has no work matching the seed_id.";
|
|
60
|
+
readonly recovery: "Verify seed_id with openalex_resolve_name, or pass a known OpenAlex work ID (W…), DOI, PMID, or PMCID.";
|
|
61
|
+
}]>;
|
|
62
|
+
//# sourceMappingURL=citation-graph.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citation-graph.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/citation-graph.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA+CjE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuM/B,CAAC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview One-hop citation graph traversal: cites / cited_by / related_to from a seed work.
|
|
3
|
+
* @module mcp-server/tools/definitions/citation-graph.tool
|
|
4
|
+
*/
|
|
5
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { renderEntityRecord } from '../../../mcp-server/tools/render-entity-record.js';
|
|
8
|
+
import { getOpenAlexService } from '../../../services/openalex/openalex-service.js';
|
|
9
|
+
const OPENALEX_URL_PREFIX = 'https://openalex.org/';
|
|
10
|
+
/**
|
|
11
|
+
* Resolve any accepted seed identifier to a bare W-ID and confirm it exists. The graph
|
|
12
|
+
* filters (`cites`/`cited_by`/`related_to`) themselves don't validate the seed — passing
|
|
13
|
+
* a non-existent W-ID returns zero edges, indistinguishable from a valid seed with no
|
|
14
|
+
* citations yet. A singleton `/works/{id}` lookup gates the query so bad seeds surface
|
|
15
|
+
* as NotFound (bubbles via the service as `entity_not_found`) and good seeds with empty
|
|
16
|
+
* graphs return honest empty results.
|
|
17
|
+
*/
|
|
18
|
+
async function resolveSeedToWorkId(service, seedId, ctx) {
|
|
19
|
+
const lookup = await service.search({ entityType: 'works', id: seedId, select: ['id'] }, ctx);
|
|
20
|
+
const record = lookup.results[0];
|
|
21
|
+
if (!record?.id) {
|
|
22
|
+
throw new Error(`Could not resolve seed_id "${seedId}" to an OpenAlex work ID.`);
|
|
23
|
+
}
|
|
24
|
+
return record.id.replace(OPENALEX_URL_PREFIX, '');
|
|
25
|
+
}
|
|
26
|
+
const DIRECTIONS = ['cites', 'cited_by', 'related_to'];
|
|
27
|
+
const RESERVED_FILTER_KEYS = new Set(DIRECTIONS);
|
|
28
|
+
function buildCitationEcho(input) {
|
|
29
|
+
const parts = [`seed_id=${input.seed_id}`, `direction=${input.direction}`];
|
|
30
|
+
if (input.filters && Object.keys(input.filters).length > 0) {
|
|
31
|
+
parts.push(`filters=${JSON.stringify(input.filters)}`);
|
|
32
|
+
}
|
|
33
|
+
if (input.sort)
|
|
34
|
+
parts.push(`sort=${input.sort}`);
|
|
35
|
+
return parts.join(' | ');
|
|
36
|
+
}
|
|
37
|
+
export const getCitationGraphTool = tool('openalex_get_citation_graph', {
|
|
38
|
+
description: "Walk the citation graph one hop from a seed work. Direction picks the edge: incoming citations (`cites`), the seed's own references (`cited_by`), or OpenAlex's algorithmically-related works (`related_to`). Results use the works schema; combine with filters/sort to narrow further.",
|
|
39
|
+
sourceUrl: 'https://github.com/cyanheads/openalex-mcp-server/blob/main/src/mcp-server/tools/definitions/citation-graph.tool.ts',
|
|
40
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
41
|
+
errors: [
|
|
42
|
+
{
|
|
43
|
+
reason: 'rate_limited',
|
|
44
|
+
code: JsonRpcErrorCode.RateLimited,
|
|
45
|
+
when: 'OpenAlex throttled the request (HTTP 429).',
|
|
46
|
+
retryable: true,
|
|
47
|
+
recovery: 'Wait several seconds and retry; consider lowering request frequency for this caller.',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
reason: 'upstream_unauthorized',
|
|
51
|
+
code: JsonRpcErrorCode.Unauthorized,
|
|
52
|
+
when: 'OpenAlex rejected the API key (HTTP 401).',
|
|
53
|
+
recovery: 'Check that OPENALEX_API_KEY is set to a valid email-format key registered with OpenAlex.',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
reason: 'upstream_forbidden',
|
|
57
|
+
code: JsonRpcErrorCode.Forbidden,
|
|
58
|
+
when: 'OpenAlex denied access to the requested resource (HTTP 403).',
|
|
59
|
+
recovery: 'Confirm the API key has access to this entity type or endpoint, then retry the request.',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
reason: 'upstream_invalid_params',
|
|
63
|
+
code: JsonRpcErrorCode.InvalidParams,
|
|
64
|
+
when: 'OpenAlex rejected the seed_id, filter, or sort as malformed (HTTP 400).',
|
|
65
|
+
recovery: 'Read the upstream message for the rejected token, then retry with a valid OpenAlex work ID (W…), DOI, or PMID for seed_id, or correct the filter/sort field name it names.',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
reason: 'reserved_filter_key',
|
|
69
|
+
code: JsonRpcErrorCode.InvalidParams,
|
|
70
|
+
when: 'filters contains cites/cited_by/related_to — the direction parameter reserves those keys.',
|
|
71
|
+
recovery: 'Remove the reserved key from filters, or restate the relationship through direction.',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
reason: 'entity_not_found',
|
|
75
|
+
code: JsonRpcErrorCode.NotFound,
|
|
76
|
+
when: 'OpenAlex has no work matching the seed_id.',
|
|
77
|
+
recovery: 'Verify seed_id with openalex_resolve_name, or pass a known OpenAlex work ID (W…), DOI, PMID, or PMCID.',
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
input: z.object({
|
|
81
|
+
seed_id: z
|
|
82
|
+
.string()
|
|
83
|
+
.min(1)
|
|
84
|
+
.describe('Seed work identifier. Accepts OpenAlex ID ("W2741809807"), DOI ("10.1038/nature12373" or full URL), PMID, or PMCID. Use openalex_resolve_name first if you only have a title.'),
|
|
85
|
+
direction: z
|
|
86
|
+
.enum(DIRECTIONS)
|
|
87
|
+
.describe('"cites": works that cite seed_id (incoming citations). "cited_by": works that seed_id cites (its reference list). "related_to": OpenAlex algorithmically-related works (~8-30 typical, may be empty for less-cited seeds).'),
|
|
88
|
+
filters: z
|
|
89
|
+
.record(z.string(), z.string())
|
|
90
|
+
.optional()
|
|
91
|
+
.describe('Additional filters to narrow the graph, same syntax as openalex_search_entities. Example: publication_year=">2020", is_oa="true". Do not include cites/cited_by/related_to — those are set by the `direction` parameter.'),
|
|
92
|
+
sort: z
|
|
93
|
+
.string()
|
|
94
|
+
.optional()
|
|
95
|
+
.describe('Sort field. Prefix with "-" for descending. Common: "cited_by_count", "-publication_date". Default is OpenAlex relevance.'),
|
|
96
|
+
select: z
|
|
97
|
+
.array(z.string())
|
|
98
|
+
.optional()
|
|
99
|
+
.describe('OpenAlex work field names to return. Always returned: id, display_name. Defaults to the curated works select if omitted.'),
|
|
100
|
+
per_page: z
|
|
101
|
+
.number()
|
|
102
|
+
.int()
|
|
103
|
+
.min(1)
|
|
104
|
+
.max(100)
|
|
105
|
+
.default(25)
|
|
106
|
+
.describe('Results per page (1-100). Default 25.'),
|
|
107
|
+
cursor: z
|
|
108
|
+
.string()
|
|
109
|
+
.optional()
|
|
110
|
+
.describe('Pagination cursor from a previous response. Pass to get the next page.'),
|
|
111
|
+
}),
|
|
112
|
+
output: z.object({
|
|
113
|
+
meta: z
|
|
114
|
+
.object({
|
|
115
|
+
count: z
|
|
116
|
+
.number()
|
|
117
|
+
.describe('Total edges from seed_id in this direction (across all pages).'),
|
|
118
|
+
per_page: z.number().describe('Records on this page.'),
|
|
119
|
+
next_cursor: z
|
|
120
|
+
.string()
|
|
121
|
+
.nullable()
|
|
122
|
+
.describe('Cursor for next page. null if no more results.'),
|
|
123
|
+
echo: z
|
|
124
|
+
.string()
|
|
125
|
+
.describe('Compact echo of seed_id, direction, filters, sort — useful when empty.'),
|
|
126
|
+
})
|
|
127
|
+
.describe('Result metadata including pagination.'),
|
|
128
|
+
results: z
|
|
129
|
+
.array(z
|
|
130
|
+
.object({
|
|
131
|
+
id: z.string().describe('OpenAlex work ID.'),
|
|
132
|
+
display_name: z.string().describe('Work title.'),
|
|
133
|
+
})
|
|
134
|
+
.passthrough()
|
|
135
|
+
.describe('A single OpenAlex work record on the citation graph. Additional fields vary by `select`.'))
|
|
136
|
+
.describe('Works on the citation graph in this direction.'),
|
|
137
|
+
}),
|
|
138
|
+
async handler(input, ctx) {
|
|
139
|
+
if (input.filters) {
|
|
140
|
+
const reserved = Object.keys(input.filters).find((key) => RESERVED_FILTER_KEYS.has(key));
|
|
141
|
+
if (reserved !== undefined) {
|
|
142
|
+
throw ctx.fail('reserved_filter_key', `${reserved} cannot be passed in filters — direction reserves cites/cited_by/related_to.`, {
|
|
143
|
+
...ctx.recoveryFor('reserved_filter_key'),
|
|
144
|
+
reservedKey: reserved,
|
|
145
|
+
direction: input.direction,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const service = getOpenAlexService();
|
|
150
|
+
const workId = await resolveSeedToWorkId(service, input.seed_id, ctx);
|
|
151
|
+
const mergedFilters = {
|
|
152
|
+
...(input.filters ?? {}),
|
|
153
|
+
[input.direction]: workId,
|
|
154
|
+
};
|
|
155
|
+
const result = await service.search({
|
|
156
|
+
entityType: 'works',
|
|
157
|
+
filters: mergedFilters,
|
|
158
|
+
sort: input.sort,
|
|
159
|
+
select: input.select,
|
|
160
|
+
perPage: input.per_page,
|
|
161
|
+
cursor: input.cursor,
|
|
162
|
+
}, ctx);
|
|
163
|
+
ctx.log.info('Citation graph fetched', {
|
|
164
|
+
seedId: input.seed_id,
|
|
165
|
+
direction: input.direction,
|
|
166
|
+
resultCount: result.results.length,
|
|
167
|
+
totalCount: result.meta.count,
|
|
168
|
+
});
|
|
169
|
+
return {
|
|
170
|
+
meta: {
|
|
171
|
+
...result.meta,
|
|
172
|
+
echo: buildCitationEcho(input),
|
|
173
|
+
},
|
|
174
|
+
results: result.results,
|
|
175
|
+
};
|
|
176
|
+
},
|
|
177
|
+
format: (result) => {
|
|
178
|
+
const lines = [];
|
|
179
|
+
const countLabel = `${result.meta.count} edge(s) — ${result.meta.per_page} per page`;
|
|
180
|
+
const header = result.meta.next_cursor
|
|
181
|
+
? `**${countLabel}** — next cursor: \`${result.meta.next_cursor}\``
|
|
182
|
+
: `**${countLabel}**`;
|
|
183
|
+
lines.push(`${header} | ${result.meta.echo}`);
|
|
184
|
+
if (result.results.length === 0) {
|
|
185
|
+
lines.push('', `No edges for ${result.meta.echo}.`, 'Verify the seed_id (use openalex_resolve_name), broaden filters, or try a different direction.');
|
|
186
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
187
|
+
}
|
|
188
|
+
for (const record of result.results) {
|
|
189
|
+
lines.push(...renderEntityRecord(record));
|
|
190
|
+
}
|
|
191
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
//# sourceMappingURL=citation-graph.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citation-graph.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/citation-graph.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-entities.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-entities.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"search-entities.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-entities.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAiCjE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6P7B,CAAC"}
|
|
@@ -4,108 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { renderEntityRecord } from '../../../mcp-server/tools/render-entity-record.js';
|
|
7
8
|
import { getOpenAlexService } from '../../../services/openalex/openalex-service.js';
|
|
8
9
|
import { ENTITY_TYPES } from '../../../services/openalex/types.js';
|
|
9
10
|
const SEMANTIC_PER_PAGE_CAP = 50;
|
|
10
11
|
const SAMPLE_MAX = 100;
|
|
11
|
-
const ACRONYMS = new Set([
|
|
12
|
-
'apc',
|
|
13
|
-
'doi',
|
|
14
|
-
'fwci',
|
|
15
|
-
'id',
|
|
16
|
-
'issn',
|
|
17
|
-
'oa',
|
|
18
|
-
'orcid',
|
|
19
|
-
'pmcid',
|
|
20
|
-
'pmid',
|
|
21
|
-
'ror',
|
|
22
|
-
'url',
|
|
23
|
-
]);
|
|
24
|
-
function toFieldLabel(field) {
|
|
25
|
-
return field
|
|
26
|
-
.split(/[_\-.]/g)
|
|
27
|
-
.filter(Boolean)
|
|
28
|
-
.map((part) => ACRONYMS.has(part.toLowerCase())
|
|
29
|
-
? part.toUpperCase()
|
|
30
|
-
: part.charAt(0).toUpperCase() + part.slice(1))
|
|
31
|
-
.join(' ');
|
|
32
|
-
}
|
|
33
|
-
function isScalar(value) {
|
|
34
|
-
return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
|
|
35
|
-
}
|
|
36
|
-
function isScalarOrNull(value) {
|
|
37
|
-
return value === null || isScalar(value);
|
|
38
|
-
}
|
|
39
|
-
function isPlainObject(value) {
|
|
40
|
-
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
41
|
-
}
|
|
42
|
-
function formatScalar(value) {
|
|
43
|
-
return String(value);
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Flatten a value to "path: value" strings, one per scalar leaf. Nested objects use dot
|
|
47
|
-
* notation (`subfield.display_name`); arrays of scalars collapse to a single comma-joined
|
|
48
|
-
* pair (`countries: us, gb`); arrays of objects produce one entry per element with bracket
|
|
49
|
-
* indexing (`institutions[0].id`). All terminal values reach the output — `format()` and
|
|
50
|
-
* `structuredContent` stay in parity.
|
|
51
|
-
*/
|
|
52
|
-
function flattenLeaves(value, prefix = '') {
|
|
53
|
-
if (value === null || value === undefined) {
|
|
54
|
-
return prefix ? [`${prefix}: —`] : [];
|
|
55
|
-
}
|
|
56
|
-
if (isScalar(value)) {
|
|
57
|
-
return [prefix ? `${prefix}: ${formatScalar(value)}` : formatScalar(value)];
|
|
58
|
-
}
|
|
59
|
-
if (Array.isArray(value)) {
|
|
60
|
-
if (value.length === 0)
|
|
61
|
-
return [`${prefix || 'value'}: (empty)`];
|
|
62
|
-
if (value.every(isScalarOrNull)) {
|
|
63
|
-
const joined = value.map((item) => (item === null ? '—' : formatScalar(item))).join(', ');
|
|
64
|
-
return [prefix ? `${prefix}: ${joined}` : joined];
|
|
65
|
-
}
|
|
66
|
-
return value.flatMap((item, i) => flattenLeaves(item, `${prefix}[${i}]`));
|
|
67
|
-
}
|
|
68
|
-
if (isPlainObject(value)) {
|
|
69
|
-
const entries = Object.entries(value);
|
|
70
|
-
if (entries.length === 0)
|
|
71
|
-
return prefix ? [`${prefix}: (empty)`] : [];
|
|
72
|
-
return entries.flatMap(([k, v]) => flattenLeaves(v, prefix ? `${prefix}.${k}` : k));
|
|
73
|
-
}
|
|
74
|
-
return [prefix ? `${prefix}: ${String(value)}` : String(value)];
|
|
75
|
-
}
|
|
76
|
-
function compactPairs(value) {
|
|
77
|
-
return flattenLeaves(value).join(', ');
|
|
78
|
-
}
|
|
79
|
-
function renderField(field, value) {
|
|
80
|
-
const label = toFieldLabel(field);
|
|
81
|
-
if (value == null)
|
|
82
|
-
return `**${label}:** —`;
|
|
83
|
-
if (isScalar(value))
|
|
84
|
-
return `**${label}:** ${formatScalar(value)}`;
|
|
85
|
-
if (Array.isArray(value)) {
|
|
86
|
-
if (value.length === 0)
|
|
87
|
-
return `**${label}:** (empty)`;
|
|
88
|
-
if (value.every(isScalarOrNull)) {
|
|
89
|
-
return `**${label}:** ${value.map((item) => (item === null ? '—' : formatScalar(item))).join(', ')}`;
|
|
90
|
-
}
|
|
91
|
-
const items = value.map((item, i) => isPlainObject(item)
|
|
92
|
-
? `- [${i}] ${compactPairs(item)}`
|
|
93
|
-
: `- [${i}] ${flattenLeaves(item).join(', ') || '—'}`);
|
|
94
|
-
return `**${label}:**\n${items.join('\n')}`;
|
|
95
|
-
}
|
|
96
|
-
if (isPlainObject(value)) {
|
|
97
|
-
return `**${label}:** ${compactPairs(value)}`;
|
|
98
|
-
}
|
|
99
|
-
return `**${label}:** ${String(value)}`;
|
|
100
|
-
}
|
|
101
|
-
function renderRecord(record) {
|
|
102
|
-
const { id, display_name, ...rest } = record;
|
|
103
|
-
const lines = ['', `### ${display_name || id}`, `**ID:** ${id}`];
|
|
104
|
-
for (const [field, value] of Object.entries(rest)) {
|
|
105
|
-
lines.push(renderField(field, value));
|
|
106
|
-
}
|
|
107
|
-
return lines;
|
|
108
|
-
}
|
|
109
12
|
function buildSearchEcho(input) {
|
|
110
13
|
const parts = [`entity_type=${input.entity_type}`];
|
|
111
14
|
if (input.id)
|
|
@@ -313,7 +216,7 @@ export const searchEntitiesTool = tool('openalex_search_entities', {
|
|
|
313
216
|
return [{ type: 'text', text: lines.join('\n') }];
|
|
314
217
|
}
|
|
315
218
|
for (const record of result.results) {
|
|
316
|
-
lines.push(...
|
|
219
|
+
lines.push(...renderEntityRecord(record));
|
|
317
220
|
}
|
|
318
221
|
return [{ type: 'text', text: lines.join('\n') }];
|
|
319
222
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-entities.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-entities.tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search-entities.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-entities.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Markdown rendering for OpenAlex entity records — shared between
|
|
3
|
+
* tool `format()` callbacks that surface entity payloads to MCP clients. Flattens
|
|
4
|
+
* arbitrary upstream record shapes (works/authors/sources/etc.) to dot-pathed
|
|
5
|
+
* "label: value" lines that mirror `structuredContent` field-for-field.
|
|
6
|
+
* @module mcp-server/tools/render-entity-record
|
|
7
|
+
*/
|
|
8
|
+
import type { EntityRecord } from '../../services/openalex/types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Render an OpenAlex entity record as markdown lines: a `### display_name` header,
|
|
11
|
+
* the ID, then each remaining field as a labeled line. Caller joins the lines into
|
|
12
|
+
* the final text block.
|
|
13
|
+
*/
|
|
14
|
+
export declare function renderEntityRecord(record: EntityRecord): string[];
|
|
15
|
+
//# sourceMappingURL=render-entity-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-entity-record.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/render-entity-record.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AA4FjE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAOjE"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Markdown rendering for OpenAlex entity records — shared between
|
|
3
|
+
* tool `format()` callbacks that surface entity payloads to MCP clients. Flattens
|
|
4
|
+
* arbitrary upstream record shapes (works/authors/sources/etc.) to dot-pathed
|
|
5
|
+
* "label: value" lines that mirror `structuredContent` field-for-field.
|
|
6
|
+
* @module mcp-server/tools/render-entity-record
|
|
7
|
+
*/
|
|
8
|
+
const ACRONYMS = new Set([
|
|
9
|
+
'apc',
|
|
10
|
+
'doi',
|
|
11
|
+
'fwci',
|
|
12
|
+
'id',
|
|
13
|
+
'issn',
|
|
14
|
+
'oa',
|
|
15
|
+
'orcid',
|
|
16
|
+
'pmcid',
|
|
17
|
+
'pmid',
|
|
18
|
+
'ror',
|
|
19
|
+
'url',
|
|
20
|
+
]);
|
|
21
|
+
function toFieldLabel(field) {
|
|
22
|
+
return field
|
|
23
|
+
.split(/[_\-.]/g)
|
|
24
|
+
.filter(Boolean)
|
|
25
|
+
.map((part) => ACRONYMS.has(part.toLowerCase())
|
|
26
|
+
? part.toUpperCase()
|
|
27
|
+
: part.charAt(0).toUpperCase() + part.slice(1))
|
|
28
|
+
.join(' ');
|
|
29
|
+
}
|
|
30
|
+
function isScalar(value) {
|
|
31
|
+
return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
|
|
32
|
+
}
|
|
33
|
+
function isScalarOrNull(value) {
|
|
34
|
+
return value === null || isScalar(value);
|
|
35
|
+
}
|
|
36
|
+
function isPlainObject(value) {
|
|
37
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Flatten a value to "path: value" strings, one per scalar leaf. Nested objects use dot
|
|
41
|
+
* notation (`subfield.display_name`); arrays of scalars collapse to a single comma-joined
|
|
42
|
+
* pair (`countries: us, gb`); arrays of objects produce one entry per element with bracket
|
|
43
|
+
* indexing (`institutions[0].id`). All terminal values reach the output — `format()` and
|
|
44
|
+
* `structuredContent` stay in parity.
|
|
45
|
+
*/
|
|
46
|
+
function flattenLeaves(value, prefix = '') {
|
|
47
|
+
if (value === null || value === undefined)
|
|
48
|
+
return prefix ? [`${prefix}: —`] : [];
|
|
49
|
+
if (isScalar(value))
|
|
50
|
+
return [prefix ? `${prefix}: ${String(value)}` : String(value)];
|
|
51
|
+
if (Array.isArray(value)) {
|
|
52
|
+
if (value.length === 0)
|
|
53
|
+
return [`${prefix || 'value'}: (empty)`];
|
|
54
|
+
if (value.every(isScalarOrNull)) {
|
|
55
|
+
const joined = value.map((item) => (item === null ? '—' : String(item))).join(', ');
|
|
56
|
+
return [prefix ? `${prefix}: ${joined}` : joined];
|
|
57
|
+
}
|
|
58
|
+
return value.flatMap((item, i) => flattenLeaves(item, `${prefix}[${i}]`));
|
|
59
|
+
}
|
|
60
|
+
if (isPlainObject(value)) {
|
|
61
|
+
const entries = Object.entries(value);
|
|
62
|
+
if (entries.length === 0)
|
|
63
|
+
return prefix ? [`${prefix}: (empty)`] : [];
|
|
64
|
+
return entries.flatMap(([k, v]) => flattenLeaves(v, prefix ? `${prefix}.${k}` : k));
|
|
65
|
+
}
|
|
66
|
+
return [prefix ? `${prefix}: ${String(value)}` : String(value)];
|
|
67
|
+
}
|
|
68
|
+
function compactPairs(value) {
|
|
69
|
+
return flattenLeaves(value).join(', ');
|
|
70
|
+
}
|
|
71
|
+
function renderField(field, value) {
|
|
72
|
+
const label = toFieldLabel(field);
|
|
73
|
+
if (value == null)
|
|
74
|
+
return `**${label}:** —`;
|
|
75
|
+
if (isScalar(value))
|
|
76
|
+
return `**${label}:** ${String(value)}`;
|
|
77
|
+
if (Array.isArray(value)) {
|
|
78
|
+
if (value.length === 0)
|
|
79
|
+
return `**${label}:** (empty)`;
|
|
80
|
+
if (value.every(isScalarOrNull)) {
|
|
81
|
+
return `**${label}:** ${value.map((item) => (item === null ? '—' : String(item))).join(', ')}`;
|
|
82
|
+
}
|
|
83
|
+
const items = value.map((item, i) => isPlainObject(item)
|
|
84
|
+
? `- [${i}] ${compactPairs(item)}`
|
|
85
|
+
: `- [${i}] ${flattenLeaves(item).join(', ') || '—'}`);
|
|
86
|
+
return `**${label}:**\n${items.join('\n')}`;
|
|
87
|
+
}
|
|
88
|
+
if (isPlainObject(value))
|
|
89
|
+
return `**${label}:** ${compactPairs(value)}`;
|
|
90
|
+
return `**${label}:** ${String(value)}`;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Render an OpenAlex entity record as markdown lines: a `### display_name` header,
|
|
94
|
+
* the ID, then each remaining field as a labeled line. Caller joins the lines into
|
|
95
|
+
* the final text block.
|
|
96
|
+
*/
|
|
97
|
+
export function renderEntityRecord(record) {
|
|
98
|
+
const { id, display_name, ...rest } = record;
|
|
99
|
+
const lines = ['', `### ${display_name || id}`, `**ID:** ${id}`];
|
|
100
|
+
for (const [field, value] of Object.entries(rest)) {
|
|
101
|
+
lines.push(renderField(field, value));
|
|
102
|
+
}
|
|
103
|
+
return lines;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=render-entity-record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-entity-record.js","sourceRoot":"","sources":["../../../src/mcp-server/tools/render-entity-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { Context } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { type AnalyzeParams, type AnalyzeResult, type AutocompleteParams, type AutocompleteResult, type SearchParams, type SearchResult } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Detect ID format and return the API path segment.
|
|
9
|
+
* "10.1038/nature12373" → "doi:10.1038/nature12373"
|
|
10
|
+
* "https://doi.org/10.1038/nature12373" → "doi:10.1038/nature12373"
|
|
11
|
+
* "0000-0002-1825-0097" → "orcid:0000-0002-1825-0097"
|
|
12
|
+
* "https://ror.org/00hx57361" → "ror:https://ror.org/00hx57361"
|
|
13
|
+
* "PMC1234567" → "pmcid:PMC1234567"
|
|
14
|
+
* "W2741809807" → "W2741809807"
|
|
15
|
+
*/
|
|
16
|
+
export declare function normalizeId(id: string): string;
|
|
7
17
|
declare class OpenAlexService {
|
|
8
18
|
private readonly baseUrl;
|
|
9
19
|
private readonly apiKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openalex-service.d.ts","sourceRoot":"","sources":["../../../src/services/openalex/openalex-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAoBtD,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EAIvB,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"openalex-service.d.ts","sourceRoot":"","sources":["../../../src/services/openalex/openalex-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAoBtD,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EAIvB,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AAcpB;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CA6C9C;AA+UD,cAAM,eAAe;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;;IAQhC,yFAAyF;IACzF,OAAO,CAAC,OAAO;IAoCf,OAAO,CAAC,2BAA2B;IA4CnC,OAAO,CAAC,aAAa;IAqCrB,sEAAsE;IAChE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IA8FvE,4BAA4B;IACtB,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAoC1E,oCAAoC;IAC9B,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAuB1F;AAID,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAIpD"}
|
|
@@ -6,6 +6,7 @@ import { conflict, forbidden, invalidParams, invalidRequest, JsonRpcErrorCode, M
|
|
|
6
6
|
import { fetchWithTimeout, httpStatusToErrorCode, withRetry } from '@cyanheads/mcp-ts-core/utils';
|
|
7
7
|
import { getServerConfig } from '../../config/server-config.js';
|
|
8
8
|
import { DEFAULT_SELECT, ENTITY_TYPES, } from './types.js';
|
|
9
|
+
import { redactUrlsInMessage } from './url-redaction.js';
|
|
9
10
|
/**
|
|
10
11
|
* Build an OpenAlex filter string from a key-value record.
|
|
11
12
|
* Input: { "cited_by_count": ">100", "is_oa": "true" }
|
|
@@ -25,7 +26,7 @@ function buildFilterString(filters) {
|
|
|
25
26
|
* "PMC1234567" → "pmcid:PMC1234567"
|
|
26
27
|
* "W2741809807" → "W2741809807"
|
|
27
28
|
*/
|
|
28
|
-
function normalizeId(id) {
|
|
29
|
+
export function normalizeId(id) {
|
|
29
30
|
const trimmed = id.trim();
|
|
30
31
|
// Full OpenAlex URL
|
|
31
32
|
if (trimmed.startsWith('https://openalex.org/')) {
|
|
@@ -257,6 +258,45 @@ const NORMALIZED_THROW_BY_CODE = {
|
|
|
257
258
|
function hasEntries(record) {
|
|
258
259
|
return record !== undefined && Object.keys(record).length > 0;
|
|
259
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* Surface OpenAlex's per-request cost and DB latency at debug level. Both live in
|
|
263
|
+
* `meta` on every list/group/single-entity response and stay in the parsed payload
|
|
264
|
+
* — they aren't stripped on the way out because the per-tool output schemas don't
|
|
265
|
+
* declare them, so zod drops them at the MCP boundary regardless. Operators with
|
|
266
|
+
* debug logging on get per-request observability without changing the wire shape.
|
|
267
|
+
*/
|
|
268
|
+
function logResponseMetrics(parsed, path, ctx) {
|
|
269
|
+
if (!isRecord(parsed))
|
|
270
|
+
return;
|
|
271
|
+
const meta = parsed.meta;
|
|
272
|
+
if (!isRecord(meta))
|
|
273
|
+
return;
|
|
274
|
+
const cost = typeof meta.cost_usd === 'number' ? meta.cost_usd : undefined;
|
|
275
|
+
const db = typeof meta.db_response_time_ms === 'number' ? meta.db_response_time_ms : undefined;
|
|
276
|
+
if (cost === undefined && db === undefined)
|
|
277
|
+
return;
|
|
278
|
+
ctx.log.debug('OpenAlex response metrics', {
|
|
279
|
+
path,
|
|
280
|
+
...(cost !== undefined && { costUsd: cost }),
|
|
281
|
+
...(db !== undefined && { dbResponseTimeMs: db }),
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Permissive extractors for OpenAlex's `error` and `message` fields when the body
|
|
286
|
+
* is truncated mid-string (framework caps `responseBody` at 500 bytes; OpenAlex
|
|
287
|
+
* valid-fields listings exceed ~1 KB). The terminator `"|…|$` accepts a closing
|
|
288
|
+
* quote, the framework's truncation ellipsis, or end of string — so whatever
|
|
289
|
+
* survived the cap still gets extracted.
|
|
290
|
+
*/
|
|
291
|
+
const TRUNCATED_ERROR_FIELD_RE = /"error"\s*:\s*"((?:[^"\\]|\\.)*?)(?:"|…|$)/;
|
|
292
|
+
const TRUNCATED_MESSAGE_FIELD_RE = /"message"\s*:\s*"((?:[^"\\]|\\.)*?)(?:"|…|$)/;
|
|
293
|
+
/**
|
|
294
|
+
* Extract OpenAlex's `error` and `message` fields from a response body. JSON.parse
|
|
295
|
+
* works for un-truncated bodies; falls back to regex so the useful prefix of the
|
|
296
|
+
* upstream message still reaches the caller when the body was cut mid-string.
|
|
297
|
+
* `truncated` distinguishes the two paths so downstream sanitization can act only
|
|
298
|
+
* on bodies that were actually cut.
|
|
299
|
+
*/
|
|
260
300
|
function parseOpenAlexErrorBody(responseBody) {
|
|
261
301
|
if (typeof responseBody !== 'string')
|
|
262
302
|
return null;
|
|
@@ -267,12 +307,30 @@ function parseOpenAlexErrorBody(responseBody) {
|
|
|
267
307
|
return {
|
|
268
308
|
error: typeof parsed.error === 'string' ? parsed.error : undefined,
|
|
269
309
|
message: typeof parsed.message === 'string' ? parsed.message : undefined,
|
|
310
|
+
truncated: false,
|
|
270
311
|
};
|
|
271
312
|
}
|
|
272
313
|
catch {
|
|
273
|
-
|
|
314
|
+
const error = TRUNCATED_ERROR_FIELD_RE.exec(responseBody)?.[1];
|
|
315
|
+
const message = TRUNCATED_MESSAGE_FIELD_RE.exec(responseBody)?.[1];
|
|
316
|
+
if (error === undefined && message === undefined)
|
|
317
|
+
return null;
|
|
318
|
+
return { error, message, truncated: true };
|
|
274
319
|
}
|
|
275
320
|
}
|
|
321
|
+
/**
|
|
322
|
+
* OpenAlex 400 messages append an alphabetically-sorted enumeration of valid field
|
|
323
|
+
* names ("Valid fields are: a, b, c, ..."). When the response body was truncated
|
|
324
|
+
* mid-list the surviving prefix misleads agents into believing the early-alphabet
|
|
325
|
+
* fields are the complete set. Strip the list when truncation occurred — the raw
|
|
326
|
+
* upstream prefix stays available on `data.upstreamMessage` for debugging.
|
|
327
|
+
*/
|
|
328
|
+
const VALID_FIELDS_BOUNDARY_RE = /\s*Valid fields\b.*/is;
|
|
329
|
+
function stripTruncatedValidFieldsList(message) {
|
|
330
|
+
if (!VALID_FIELDS_BOUNDARY_RE.test(message))
|
|
331
|
+
return message;
|
|
332
|
+
return `${message.replace(VALID_FIELDS_BOUNDARY_RE, '').trim()} (list of valid fields omitted — was truncated upstream; see OpenAlex docs)`;
|
|
333
|
+
}
|
|
276
334
|
function getSearchParamKey(searchMode) {
|
|
277
335
|
switch (searchMode) {
|
|
278
336
|
case 'exact':
|
|
@@ -329,7 +387,9 @@ class OpenAlexService {
|
|
|
329
387
|
signal: ctx.signal,
|
|
330
388
|
});
|
|
331
389
|
const text = await response.text();
|
|
332
|
-
|
|
390
|
+
const parsed = this.parseResponse(text, path);
|
|
391
|
+
logResponseMetrics(parsed, path, ctx);
|
|
392
|
+
return parsed;
|
|
333
393
|
}
|
|
334
394
|
catch (error) {
|
|
335
395
|
this.throwNormalizedRequestError(error, path, ctx);
|
|
@@ -343,19 +403,30 @@ class OpenAlexService {
|
|
|
343
403
|
});
|
|
344
404
|
}
|
|
345
405
|
throwNormalizedRequestError(error, path, ctx) {
|
|
346
|
-
if (!(error instanceof McpError)
|
|
406
|
+
if (!(error instanceof McpError)) {
|
|
347
407
|
throw error;
|
|
348
408
|
}
|
|
349
|
-
const
|
|
409
|
+
const statusCode = typeof error.data?.statusCode === 'number' ? error.data.statusCode : undefined;
|
|
410
|
+
const code = statusCode === undefined ? undefined : httpStatusToErrorCode(statusCode);
|
|
350
411
|
const normalized = code === undefined ? undefined : NORMALIZED_THROW_BY_CODE[code];
|
|
351
412
|
if (normalized === undefined) {
|
|
352
|
-
|
|
413
|
+
// Framework fetch errors (network, timeout, unmapped status) format the message as
|
|
414
|
+
// `Fetch failed for <URL>. Status: …` — the URL carries the polite-pool `mailto`
|
|
415
|
+
// and any future internal params. Redact before bubbling.
|
|
416
|
+
throw new McpError(error.code, redactUrlsInMessage(error.message), error.data, {
|
|
417
|
+
cause: error,
|
|
418
|
+
});
|
|
353
419
|
}
|
|
354
420
|
const { factory, reason } = normalized;
|
|
355
|
-
const upstream = parseOpenAlexErrorBody(error.data
|
|
356
|
-
const
|
|
357
|
-
|
|
358
|
-
|
|
421
|
+
const upstream = parseOpenAlexErrorBody(error.data?.responseBody);
|
|
422
|
+
const rawMessage = upstream?.message ?? upstream?.error;
|
|
423
|
+
const sanitizedMessage = rawMessage !== undefined && upstream?.truncated
|
|
424
|
+
? stripTruncatedValidFieldsList(rawMessage)
|
|
425
|
+
: rawMessage;
|
|
426
|
+
const message = sanitizedMessage ??
|
|
427
|
+
(code === JsonRpcErrorCode.NotFound
|
|
428
|
+
? `Entity not found at ${path}`
|
|
429
|
+
: redactUrlsInMessage(error.message));
|
|
359
430
|
const data = {
|
|
360
431
|
...error.data,
|
|
361
432
|
path,
|
|
@@ -445,10 +516,21 @@ class OpenAlexService {
|
|
|
445
516
|
if (params.searchMode !== 'semantic' && params.sample === undefined) {
|
|
446
517
|
queryParams.cursor = params.cursor ?? '*';
|
|
447
518
|
}
|
|
448
|
-
const
|
|
519
|
+
const searchRequest = this.request(`/${params.entityType}`, queryParams, ctx);
|
|
520
|
+
// Sampling: OpenAlex returns the sample size in `meta.count`, not the population
|
|
521
|
+
// matching the filters. The output schema documents `count` as "Total results
|
|
522
|
+
// matching the query/filters" — issue a parallel per_page=1 lookup without
|
|
523
|
+
// `sample` to recover the true population and overwrite `count` with it.
|
|
524
|
+
let populationRequest;
|
|
525
|
+
if (params.sample !== undefined) {
|
|
526
|
+
const { sample: _sample, seed: _seed, ...filterParams } = queryParams;
|
|
527
|
+
populationRequest = this.request(`/${params.entityType}`, { ...filterParams, per_page: '1', cursor: '*' }, ctx);
|
|
528
|
+
}
|
|
529
|
+
const [data, populationData] = await Promise.all([searchRequest, populationRequest]);
|
|
449
530
|
return {
|
|
450
531
|
meta: {
|
|
451
532
|
...data.meta,
|
|
533
|
+
...(populationData !== undefined && { count: populationData.meta.count }),
|
|
452
534
|
next_cursor: data.meta.next_cursor ?? null,
|
|
453
535
|
},
|
|
454
536
|
results: normalizeEntityRecords(data.results),
|
|
@@ -463,6 +545,9 @@ class OpenAlexService {
|
|
|
463
545
|
if (hasEntries(params.filters)) {
|
|
464
546
|
queryParams.filter = buildFilterString(translateFilters(params.entityType, params.filters));
|
|
465
547
|
}
|
|
548
|
+
if (params.perPage !== undefined) {
|
|
549
|
+
queryParams.per_page = String(params.perPage);
|
|
550
|
+
}
|
|
466
551
|
// Only send cursor when explicitly provided — boolean group_by fields
|
|
467
552
|
// (is_retracted, has_orcid, etc.) reject cursor pagination entirely.
|
|
468
553
|
if (params.cursor) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openalex-service.js","sourceRoot":"","sources":["../../../src/services/openalex/openalex-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openalex-service.js","sourceRoot":"","sources":["../../../src/services/openalex/openalex-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/openalex/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,YAAY,yGASf,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAuDvD,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;IACF,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/openalex/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,YAAY,yGASf,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAuDvD,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;IACF,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview URL sanitization for error messages. Strips operator-injected query params
|
|
3
|
+
* (currently `mailto`; future-proofed against any new internal additions) so they never
|
|
4
|
+
* reach MCP clients via thrown error text.
|
|
5
|
+
* @module services/openalex/url-redaction
|
|
6
|
+
*/
|
|
7
|
+
/** Drop every query param except the caller-controlled allowlist. */
|
|
8
|
+
export declare function redactUrl(url: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Scan a string for embedded URLs and redact each one. Used at the error-formatting site
|
|
11
|
+
* because the framework's fetch helper formats messages as `Fetch failed for <URL>. Status: …`
|
|
12
|
+
* — the URL chunk has to be sanitized in place.
|
|
13
|
+
*/
|
|
14
|
+
export declare function redactUrlsInMessage(message: string): string;
|
|
15
|
+
//# sourceMappingURL=url-redaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-redaction.d.ts","sourceRoot":"","sources":["../../../src/services/openalex/url-redaction.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwBH,qEAAqE;AACrE,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAW7C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAS3D"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview URL sanitization for error messages. Strips operator-injected query params
|
|
3
|
+
* (currently `mailto`; future-proofed against any new internal additions) so they never
|
|
4
|
+
* reach MCP clients via thrown error text.
|
|
5
|
+
* @module services/openalex/url-redaction
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Query params the caller actually controls. Anything else on the URL (operator email
|
|
9
|
+
* for the polite pool, future auth tokens, identifiers) is dropped before the URL is
|
|
10
|
+
* surfaced in an error message. Allowlist over denylist — a future internal param won't
|
|
11
|
+
* silently leak because nobody remembered to add it to a blocklist.
|
|
12
|
+
*/
|
|
13
|
+
const CALLER_PARAMS = new Set([
|
|
14
|
+
'q',
|
|
15
|
+
'search',
|
|
16
|
+
'search.exact',
|
|
17
|
+
'search.semantic',
|
|
18
|
+
'filter',
|
|
19
|
+
'sort',
|
|
20
|
+
'select',
|
|
21
|
+
'per_page',
|
|
22
|
+
'page',
|
|
23
|
+
'cursor',
|
|
24
|
+
'sample',
|
|
25
|
+
'seed',
|
|
26
|
+
'group_by',
|
|
27
|
+
]);
|
|
28
|
+
/** Drop every query param except the caller-controlled allowlist. */
|
|
29
|
+
export function redactUrl(url) {
|
|
30
|
+
let parsed;
|
|
31
|
+
try {
|
|
32
|
+
parsed = new URL(url);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return url;
|
|
36
|
+
}
|
|
37
|
+
for (const key of [...parsed.searchParams.keys()]) {
|
|
38
|
+
if (!CALLER_PARAMS.has(key))
|
|
39
|
+
parsed.searchParams.delete(key);
|
|
40
|
+
}
|
|
41
|
+
return parsed.toString();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Scan a string for embedded URLs and redact each one. Used at the error-formatting site
|
|
45
|
+
* because the framework's fetch helper formats messages as `Fetch failed for <URL>. Status: …`
|
|
46
|
+
* — the URL chunk has to be sanitized in place.
|
|
47
|
+
*/
|
|
48
|
+
export function redactUrlsInMessage(message) {
|
|
49
|
+
return message.replace(/https?:\/\/\S+/g, (match) => {
|
|
50
|
+
// Greedy match may slurp sentence punctuation (the trailing `.` in "URL. Status: …").
|
|
51
|
+
// Peel it off, sanitize the body, restore the trailing chars outside the URL.
|
|
52
|
+
const split = /^(.+?)([.,;)\]!]*)$/.exec(match);
|
|
53
|
+
if (!split)
|
|
54
|
+
return match;
|
|
55
|
+
const [, body, trailing] = split;
|
|
56
|
+
return redactUrl(body ?? match) + (trailing ?? '');
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=url-redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-redaction.js","sourceRoot":"","sources":["../../../src/services/openalex/url-redaction.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,GAAG;IACH,QAAQ;IACR,cAAc;IACd,iBAAiB;IACjB,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,UAAU;IACV,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,UAAU;CACX,CAAC,CAAC;AAEH,qEAAqE;AACrE,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,sFAAsF;QACtF,8EAA8E;QAC9E,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;QACjC,OAAO,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/openalex-mcp-server",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.12",
|
|
4
4
|
"description": "Access the OpenAlex academic research catalog - 270M+ publications through MCP. STDIO & Streamable HTTP.",
|
|
5
5
|
"mcpName": "io.github.cyanheads/openalex-mcp-server",
|
|
6
6
|
"type": "module",
|
|
@@ -73,12 +73,12 @@
|
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
75
|
"@biomejs/biome": "^2.4.15",
|
|
76
|
-
"@types/node": "^25.
|
|
76
|
+
"@types/node": "^25.9.1",
|
|
77
77
|
"depcheck": "^1.4.7",
|
|
78
78
|
"ignore": "^7.0.5",
|
|
79
79
|
"tsc-alias": "^1.8.17",
|
|
80
|
-
"tsx": "^4.22.
|
|
80
|
+
"tsx": "^4.22.3",
|
|
81
81
|
"typescript": "^6.0.3",
|
|
82
|
-
"vitest": "^4.1.
|
|
82
|
+
"vitest": "^4.1.7"
|
|
83
83
|
}
|
|
84
84
|
}
|
package/server.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/openalex-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.6.
|
|
9
|
+
"version": "0.6.12",
|
|
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/openalex-mcp-server",
|
|
21
21
|
"runtimeHint": "node",
|
|
22
|
-
"version": "0.6.
|
|
22
|
+
"version": "0.6.12",
|
|
23
23
|
"packageArguments": [
|
|
24
24
|
{
|
|
25
25
|
"type": "positional",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
62
62
|
"identifier": "@cyanheads/openalex-mcp-server",
|
|
63
63
|
"runtimeHint": "node",
|
|
64
|
-
"version": "0.6.
|
|
64
|
+
"version": "0.6.12",
|
|
65
65
|
"packageArguments": [
|
|
66
66
|
{
|
|
67
67
|
"type": "positional",
|