@cyanheads/gbif-biodiversity-mcp-server 0.2.4 → 0.2.6
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/CLAUDE.md +2 -2
- package/README.md +4 -4
- package/dist/mcp-server/tools/definitions/gbif-get-species-children.tool.d.ts +7 -1
- package/dist/mcp-server/tools/definitions/gbif-get-species-children.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/gbif-get-species-children.tool.js +24 -2
- package/dist/mcp-server/tools/definitions/gbif-get-species-children.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/gbif-get-species-classification.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/gbif-get-species-classification.tool.js +13 -2
- package/dist/mcp-server/tools/definitions/gbif-get-species-classification.tool.js.map +1 -1
- package/package.json +4 -3
- package/server.json +3 -3
package/CLAUDE.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** @cyanheads/gbif-biodiversity-mcp-server
|
|
4
|
-
**Version:** 0.2.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.
|
|
4
|
+
**Version:** 0.2.6
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.21`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
|
8
8
|
**Zod:** ^4.4.3
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/gbif-biodiversity-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/gbif-biodiversity-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -216,7 +216,7 @@ Add the following to your MCP client configuration file.
|
|
|
216
216
|
```json
|
|
217
217
|
{
|
|
218
218
|
"mcpServers": {
|
|
219
|
-
"gbif": {
|
|
219
|
+
"gbif-biodiversity-mcp-server": {
|
|
220
220
|
"type": "stdio",
|
|
221
221
|
"command": "bunx",
|
|
222
222
|
"args": ["@cyanheads/gbif-biodiversity-mcp-server@latest"],
|
|
@@ -234,7 +234,7 @@ Or with npx (no Bun required):
|
|
|
234
234
|
```json
|
|
235
235
|
{
|
|
236
236
|
"mcpServers": {
|
|
237
|
-
"gbif": {
|
|
237
|
+
"gbif-biodiversity-mcp-server": {
|
|
238
238
|
"type": "stdio",
|
|
239
239
|
"command": "npx",
|
|
240
240
|
"args": ["-y", "@cyanheads/gbif-biodiversity-mcp-server@latest"],
|
|
@@ -252,7 +252,7 @@ Or with Docker:
|
|
|
252
252
|
```json
|
|
253
253
|
{
|
|
254
254
|
"mcpServers": {
|
|
255
|
-
"gbif": {
|
|
255
|
+
"gbif-biodiversity-mcp-server": {
|
|
256
256
|
"type": "stdio",
|
|
257
257
|
"command": "docker",
|
|
258
258
|
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/gbif-biodiversity-mcp-server:latest"]
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* @module mcp-server/tools/definitions/gbif-get-species-children
|
|
4
4
|
*/
|
|
5
5
|
import { z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
6
7
|
export declare const gbifGetSpeciesChildren: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
7
8
|
taxonKey: z.ZodNumber;
|
|
8
9
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
@@ -18,7 +19,12 @@ export declare const gbifGetSpeciesChildren: import("@cyanheads/mcp-ts-core").To
|
|
|
18
19
|
numOccurrences: z.ZodOptional<z.ZodNumber>;
|
|
19
20
|
numDescendants: z.ZodOptional<z.ZodNumber>;
|
|
20
21
|
}, z.core.$strip>>;
|
|
21
|
-
}, z.core.$strip>,
|
|
22
|
+
}, z.core.$strip>, readonly [{
|
|
23
|
+
readonly reason: "not_found";
|
|
24
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
25
|
+
readonly when: "The taxonKey does not exist in the GBIF backbone.";
|
|
26
|
+
readonly recovery: "Use gbif_match_species to resolve a name to a valid backbone taxon key.";
|
|
27
|
+
}], {
|
|
22
28
|
readonly offset: z.ZodNumber;
|
|
23
29
|
readonly limit: z.ZodNumber;
|
|
24
30
|
readonly endOfRecords: z.ZodBoolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gbif-get-species-children.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/gbif-get-species-children.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"gbif-get-species-children.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/gbif-get-species-children.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAY3E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;EA2HjC,CAAC"}
|
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
* @module mcp-server/tools/definitions/gbif-get-species-children
|
|
4
4
|
*/
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
6
7
|
import { getGbifService } from '../../../services/gbif/gbif-service.js';
|
|
7
8
|
/** Pagination guidance when end of records is reached. */
|
|
8
9
|
function buildNotice(args) {
|
|
9
10
|
const { childCount, endOfRecords } = args;
|
|
10
11
|
if (childCount === 0 && endOfRecords) {
|
|
11
|
-
return 'This taxon has no direct children in the GBIF backbone at this rank
|
|
12
|
+
return 'This taxon has no direct children in the GBIF backbone at this rank.';
|
|
12
13
|
}
|
|
13
14
|
return;
|
|
14
15
|
}
|
|
@@ -54,8 +55,16 @@ export const gbifGetSpeciesChildren = tool('gbif_get_species_children', {
|
|
|
54
55
|
notice: z
|
|
55
56
|
.string()
|
|
56
57
|
.optional()
|
|
57
|
-
.describe('Guidance when no children are found
|
|
58
|
+
.describe('Guidance when no children are found for a valid taxon. Absent on successful result pages.'),
|
|
58
59
|
},
|
|
60
|
+
errors: [
|
|
61
|
+
{
|
|
62
|
+
reason: 'not_found',
|
|
63
|
+
code: JsonRpcErrorCode.NotFound,
|
|
64
|
+
when: 'The taxonKey does not exist in the GBIF backbone.',
|
|
65
|
+
recovery: 'Use gbif_match_species to resolve a name to a valid backbone taxon key.',
|
|
66
|
+
},
|
|
67
|
+
],
|
|
59
68
|
async handler(input, ctx) {
|
|
60
69
|
ctx.log.info('Fetching species children', { taxonKey: input.taxonKey });
|
|
61
70
|
const raw = await getGbifService().getSpeciesChildren(input.taxonKey, { limit: input.limit, offset: input.offset }, ctx);
|
|
@@ -72,6 +81,19 @@ export const gbifGetSpeciesChildren = tool('gbif_get_species_children', {
|
|
|
72
81
|
const offset = raw.offset ?? input.offset;
|
|
73
82
|
const limit = raw.limit ?? input.limit;
|
|
74
83
|
const endOfRecords = raw.endOfRecords ?? true;
|
|
84
|
+
// GBIF /species/{key}/children returns [] for both nonexistent keys and taxa with no children.
|
|
85
|
+
// When empty and end of records, verify the taxon exists to distinguish the two cases.
|
|
86
|
+
if (children.length === 0 && endOfRecords) {
|
|
87
|
+
try {
|
|
88
|
+
await getGbifService().getSpecies(input.taxonKey, ctx);
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
if (err instanceof McpError && err.code === JsonRpcErrorCode.NotFound) {
|
|
92
|
+
throw ctx.fail('not_found', `Taxon key ${input.taxonKey} not found in the GBIF backbone.`, { ...ctx.recoveryFor('not_found') });
|
|
93
|
+
}
|
|
94
|
+
throw err;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
75
97
|
ctx.enrich({ offset, limit, endOfRecords });
|
|
76
98
|
const notice = buildNotice({ childCount: children.length, endOfRecords });
|
|
77
99
|
if (notice)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gbif-get-species-children.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/gbif-get-species-children.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,0DAA0D;AAC1D,SAAS,WAAW,CAAC,IAAmD;IACtE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC1C,IAAI,UAAU,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"gbif-get-species-children.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/gbif-get-species-children.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gbif-get-species-classification.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/gbif-get-species-classification.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"gbif-get-species-classification.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/gbif-get-species-classification.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAI3E,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;cAoGvC,CAAC"}
|
|
@@ -39,7 +39,18 @@ export const gbifGetSpeciesClassification = tool('gbif_get_species_classificatio
|
|
|
39
39
|
],
|
|
40
40
|
async handler(input, ctx) {
|
|
41
41
|
ctx.log.info('Fetching species classification', { taxonKey: input.taxonKey });
|
|
42
|
-
|
|
42
|
+
let raw;
|
|
43
|
+
try {
|
|
44
|
+
raw = await getGbifService().getSpeciesParents(input.taxonKey, ctx);
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
if (err instanceof McpError && err.code === JsonRpcErrorCode.NotFound) {
|
|
48
|
+
throw ctx.fail('not_found', `Taxon key ${input.taxonKey} not found in the GBIF backbone.`, {
|
|
49
|
+
...ctx.recoveryFor('not_found'),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
43
54
|
if (!Array.isArray(raw)) {
|
|
44
55
|
throw ctx.fail('not_found', `Taxon key ${input.taxonKey} not found in the GBIF backbone.`, {
|
|
45
56
|
...ctx.recoveryFor('not_found'),
|
|
@@ -52,7 +63,7 @@ export const gbifGetSpeciesClassification = tool('gbif_get_species_classificatio
|
|
|
52
63
|
await getGbifService().getSpecies(input.taxonKey, ctx);
|
|
53
64
|
}
|
|
54
65
|
catch (err) {
|
|
55
|
-
if (err instanceof McpError && err.code ===
|
|
66
|
+
if (err instanceof McpError && err.code === JsonRpcErrorCode.NotFound) {
|
|
56
67
|
throw ctx.fail('not_found', `Taxon key ${input.taxonKey} not found in the GBIF backbone.`, { ...ctx.recoveryFor('not_found') });
|
|
57
68
|
}
|
|
58
69
|
throw err;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gbif-get-species-classification.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/gbif-get-species-classification.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"gbif-get-species-classification.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/gbif-get-species-classification.tool.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/gbif-biodiversity-mcp-server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"mcpName": "io.github.cyanheads/gbif-biodiversity-mcp-server",
|
|
5
5
|
"description": "Search GBIF species taxonomy, occurrence records, datasets, and publishers via MCP. STDIO or Streamable HTTP.",
|
|
6
6
|
"type": "module",
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"bundle": "bun run build && npx -y @anthropic-ai/mcpb pack . dist/gbif-biodiversity-mcp-server.mcpb",
|
|
26
26
|
"changelog:build": "bun run scripts/build-changelog.ts",
|
|
27
27
|
"changelog:check": "bun run scripts/build-changelog.ts --check",
|
|
28
|
+
"release:github": "bun run scripts/release-github.ts",
|
|
28
29
|
"publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish",
|
|
29
30
|
"publish:compat": "cd dist && jq '.name = \"@cyanheads/gbif-mcp-server\"' package.json > tmp.json && mv tmp.json package.json && npm publish --access public && jq '.name = \"@cyanheads/gbif-biodiversity-mcp-server\"' package.json > tmp.json && mv tmp.json package.json",
|
|
30
31
|
"start:stdio": "MCP_TRANSPORT_TYPE=stdio bun ./dist/index.js",
|
|
@@ -75,7 +76,7 @@
|
|
|
75
76
|
"access": "public"
|
|
76
77
|
},
|
|
77
78
|
"dependencies": {
|
|
78
|
-
"@cyanheads/mcp-ts-core": "^0.9.
|
|
79
|
+
"@cyanheads/mcp-ts-core": "^0.9.21",
|
|
79
80
|
"pino-pretty": "^13.1.3",
|
|
80
81
|
"zod": "^4.4.3"
|
|
81
82
|
},
|
|
@@ -86,6 +87,6 @@
|
|
|
86
87
|
"ignore": "^7.0.5",
|
|
87
88
|
"tsc-alias": "^1.8.17",
|
|
88
89
|
"typescript": "^6.0.3",
|
|
89
|
-
"vitest": "^4.1.
|
|
90
|
+
"vitest": "^4.1.8"
|
|
90
91
|
}
|
|
91
92
|
}
|
package/server.json
CHANGED
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
"url": "https://gbif-biodiversity.caseyjhand.com/mcp"
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
|
-
"version": "0.2.
|
|
15
|
+
"version": "0.2.6",
|
|
16
16
|
"packages": [
|
|
17
17
|
{
|
|
18
18
|
"registryType": "npm",
|
|
19
19
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
20
20
|
"identifier": "@cyanheads/gbif-biodiversity-mcp-server",
|
|
21
21
|
"runtimeHint": "bun",
|
|
22
|
-
"version": "0.2.
|
|
22
|
+
"version": "0.2.6",
|
|
23
23
|
"packageArguments": [
|
|
24
24
|
{
|
|
25
25
|
"type": "positional",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
49
49
|
"identifier": "@cyanheads/gbif-biodiversity-mcp-server",
|
|
50
50
|
"runtimeHint": "bun",
|
|
51
|
-
"version": "0.2.
|
|
51
|
+
"version": "0.2.6",
|
|
52
52
|
"packageArguments": [
|
|
53
53
|
{
|
|
54
54
|
"type": "positional",
|