@cyanheads/gbif-biodiversity-mcp-server 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CLAUDE.md +393 -0
  2. package/Dockerfile +99 -0
  3. package/LICENSE +201 -0
  4. package/README.md +367 -0
  5. package/dist/config/server-config.d.ts +14 -0
  6. package/dist/config/server-config.d.ts.map +1 -0
  7. package/dist/config/server-config.js +27 -0
  8. package/dist/config/server-config.js.map +1 -0
  9. package/dist/index.d.ts +7 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +53 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/mcp-server/resources/definitions/gbif-dataset.resource.d.ts +20 -0
  14. package/dist/mcp-server/resources/definitions/gbif-dataset.resource.d.ts.map +1 -0
  15. package/dist/mcp-server/resources/definitions/gbif-dataset.resource.js +50 -0
  16. package/dist/mcp-server/resources/definitions/gbif-dataset.resource.js.map +1 -0
  17. package/dist/mcp-server/resources/definitions/gbif-species.resource.d.ts +27 -0
  18. package/dist/mcp-server/resources/definitions/gbif-species.resource.d.ts.map +1 -0
  19. package/dist/mcp-server/resources/definitions/gbif-species.resource.js +67 -0
  20. package/dist/mcp-server/resources/definitions/gbif-species.resource.js.map +1 -0
  21. package/dist/mcp-server/tools/definitions/gbif-count-occurrences.tool.d.ts +15 -0
  22. package/dist/mcp-server/tools/definitions/gbif-count-occurrences.tool.d.ts.map +1 -0
  23. package/dist/mcp-server/tools/definitions/gbif-count-occurrences.tool.js +42 -0
  24. package/dist/mcp-server/tools/definitions/gbif-count-occurrences.tool.js.map +1 -0
  25. package/dist/mcp-server/tools/definitions/gbif-get-dataset.tool.d.ts +33 -0
  26. package/dist/mcp-server/tools/definitions/gbif-get-dataset.tool.d.ts.map +1 -0
  27. package/dist/mcp-server/tools/definitions/gbif-get-dataset.tool.js +143 -0
  28. package/dist/mcp-server/tools/definitions/gbif-get-dataset.tool.js.map +1 -0
  29. package/dist/mcp-server/tools/definitions/gbif-get-occurrence.tool.d.ts +58 -0
  30. package/dist/mcp-server/tools/definitions/gbif-get-occurrence.tool.d.ts.map +1 -0
  31. package/dist/mcp-server/tools/definitions/gbif-get-occurrence.tool.js +264 -0
  32. package/dist/mcp-server/tools/definitions/gbif-get-occurrence.tool.js.map +1 -0
  33. package/dist/mcp-server/tools/definitions/gbif-get-species-children.tool.d.ts +25 -0
  34. package/dist/mcp-server/tools/definitions/gbif-get-species-children.tool.d.ts.map +1 -0
  35. package/dist/mcp-server/tools/definitions/gbif-get-species-children.tool.js +91 -0
  36. package/dist/mcp-server/tools/definitions/gbif-get-species-children.tool.js.map +1 -0
  37. package/dist/mcp-server/tools/definitions/gbif-get-species-classification.tool.d.ts +22 -0
  38. package/dist/mcp-server/tools/definitions/gbif-get-species-classification.tool.d.ts.map +1 -0
  39. package/dist/mcp-server/tools/definitions/gbif-get-species-classification.tool.js +82 -0
  40. package/dist/mcp-server/tools/definitions/gbif-get-species-classification.tool.js.map +1 -0
  41. package/dist/mcp-server/tools/definitions/gbif-get-species.tool.d.ts +45 -0
  42. package/dist/mcp-server/tools/definitions/gbif-get-species.tool.d.ts.map +1 -0
  43. package/dist/mcp-server/tools/definitions/gbif-get-species.tool.js +182 -0
  44. package/dist/mcp-server/tools/definitions/gbif-get-species.tool.js.map +1 -0
  45. package/dist/mcp-server/tools/definitions/gbif-match-species.tool.d.ts +49 -0
  46. package/dist/mcp-server/tools/definitions/gbif-match-species.tool.d.ts.map +1 -0
  47. package/dist/mcp-server/tools/definitions/gbif-match-species.tool.js +148 -0
  48. package/dist/mcp-server/tools/definitions/gbif-match-species.tool.js.map +1 -0
  49. package/dist/mcp-server/tools/definitions/gbif-occurrence-facets.tool.d.ts +45 -0
  50. package/dist/mcp-server/tools/definitions/gbif-occurrence-facets.tool.d.ts.map +1 -0
  51. package/dist/mcp-server/tools/definitions/gbif-occurrence-facets.tool.js +116 -0
  52. package/dist/mcp-server/tools/definitions/gbif-occurrence-facets.tool.js.map +1 -0
  53. package/dist/mcp-server/tools/definitions/gbif-search-datasets.tool.d.ts +34 -0
  54. package/dist/mcp-server/tools/definitions/gbif-search-datasets.tool.d.ts.map +1 -0
  55. package/dist/mcp-server/tools/definitions/gbif-search-datasets.tool.js +112 -0
  56. package/dist/mcp-server/tools/definitions/gbif-search-datasets.tool.js.map +1 -0
  57. package/dist/mcp-server/tools/definitions/gbif-search-occurrences.tool.d.ts +66 -0
  58. package/dist/mcp-server/tools/definitions/gbif-search-occurrences.tool.d.ts.map +1 -0
  59. package/dist/mcp-server/tools/definitions/gbif-search-occurrences.tool.js +278 -0
  60. package/dist/mcp-server/tools/definitions/gbif-search-occurrences.tool.js.map +1 -0
  61. package/dist/mcp-server/tools/definitions/gbif-search-publishers.tool.d.ts +23 -0
  62. package/dist/mcp-server/tools/definitions/gbif-search-publishers.tool.d.ts.map +1 -0
  63. package/dist/mcp-server/tools/definitions/gbif-search-publishers.tool.js +90 -0
  64. package/dist/mcp-server/tools/definitions/gbif-search-publishers.tool.js.map +1 -0
  65. package/dist/mcp-server/tools/definitions/gbif-search-species.tool.d.ts +48 -0
  66. package/dist/mcp-server/tools/definitions/gbif-search-species.tool.d.ts.map +1 -0
  67. package/dist/mcp-server/tools/definitions/gbif-search-species.tool.js +151 -0
  68. package/dist/mcp-server/tools/definitions/gbif-search-species.tool.js.map +1 -0
  69. package/dist/mcp-server/tools/utils.d.ts +7 -0
  70. package/dist/mcp-server/tools/utils.d.ts.map +1 -0
  71. package/dist/mcp-server/tools/utils.js +20 -0
  72. package/dist/mcp-server/tools/utils.js.map +1 -0
  73. package/dist/services/gbif/gbif-service.d.ts +99 -0
  74. package/dist/services/gbif/gbif-service.d.ts.map +1 -0
  75. package/dist/services/gbif/gbif-service.js +255 -0
  76. package/dist/services/gbif/gbif-service.js.map +1 -0
  77. package/dist/services/gbif/types.d.ts +254 -0
  78. package/dist/services/gbif/types.d.ts.map +1 -0
  79. package/dist/services/gbif/types.js +6 -0
  80. package/dist/services/gbif/types.js.map +1 -0
  81. package/package.json +91 -0
  82. package/server.json +117 -0
@@ -0,0 +1,254 @@
1
+ /**
2
+ * @fileoverview Domain types for the GBIF API service.
3
+ * @module services/gbif/types
4
+ */
5
+ export type TaxonomicRank = 'KINGDOM' | 'PHYLUM' | 'CLASS' | 'ORDER' | 'FAMILY' | 'GENUS' | 'SPECIES' | 'SUBSPECIES' | 'VARIETY' | 'FORM' | 'UNRANKED';
6
+ export type TaxonomicStatus = 'ACCEPTED' | 'SYNONYM' | 'HOMOTYPIC_SYNONYM' | 'HETEROTYPIC_SYNONYM' | 'DOUBTFUL' | 'MISAPPLIED' | 'PROPARTE_SYNONYM';
7
+ export type MatchType = 'EXACT' | 'FUZZY' | 'HIGHERORDER' | 'NONE';
8
+ /** Raw response from /species/match */
9
+ export type RawSpeciesMatch = {
10
+ usageKey?: number;
11
+ scientificName?: string;
12
+ canonicalName?: string;
13
+ rank?: string;
14
+ status?: string;
15
+ confidence?: number;
16
+ matchType?: string;
17
+ note?: string;
18
+ synonym?: boolean;
19
+ kingdom?: string;
20
+ phylum?: string;
21
+ class?: string;
22
+ order?: string;
23
+ family?: string;
24
+ genus?: string;
25
+ species?: string;
26
+ kingdomKey?: number;
27
+ phylumKey?: number;
28
+ classKey?: number;
29
+ orderKey?: number;
30
+ familyKey?: number;
31
+ genusKey?: number;
32
+ speciesKey?: number;
33
+ };
34
+ /** Raw response from /species/{key} */
35
+ export type RawSpeciesRecord = {
36
+ key?: number;
37
+ nubKey?: number;
38
+ nameKey?: number;
39
+ scientificName?: string;
40
+ canonicalName?: string;
41
+ vernacularName?: string;
42
+ authorship?: string;
43
+ nameType?: string;
44
+ rank?: string;
45
+ origin?: string;
46
+ taxonomicStatus?: string;
47
+ nomenclaturalStatus?: string[];
48
+ numDescendants?: number;
49
+ numOccurrences?: number;
50
+ publishedIn?: string;
51
+ kingdom?: string;
52
+ phylum?: string;
53
+ clazz?: string;
54
+ order?: string;
55
+ family?: string;
56
+ genus?: string;
57
+ species?: string;
58
+ kingdomKey?: number;
59
+ phylumKey?: number;
60
+ classKey?: number;
61
+ orderKey?: number;
62
+ familyKey?: number;
63
+ genusKey?: number;
64
+ speciesKey?: number;
65
+ acceptedKey?: number;
66
+ accepted?: string;
67
+ parentKey?: number;
68
+ parent?: string;
69
+ basionymKey?: number;
70
+ basionym?: string;
71
+ extinct?: boolean;
72
+ marine?: boolean;
73
+ freshwater?: boolean;
74
+ terrestrial?: boolean;
75
+ };
76
+ /** Raw paginated response from /species/search */
77
+ export type RawSpeciesSearchResponse = {
78
+ offset?: number;
79
+ limit?: number;
80
+ endOfRecords?: boolean;
81
+ count?: number;
82
+ results?: RawSpeciesRecord[];
83
+ };
84
+ /** Raw parent node from /species/{key}/parents */
85
+ export type RawParentNode = {
86
+ key?: number;
87
+ rank?: string;
88
+ canonicalName?: string;
89
+ scientificName?: string;
90
+ nameKey?: number;
91
+ };
92
+ /** Raw children response from /species/{key}/children */
93
+ export type RawChildrenResponse = {
94
+ offset?: number;
95
+ limit?: number;
96
+ endOfRecords?: boolean;
97
+ count?: number;
98
+ results?: RawSpeciesRecord[];
99
+ };
100
+ export type BasisOfRecord = 'HUMAN_OBSERVATION' | 'MACHINE_OBSERVATION' | 'PRESERVED_SPECIMEN' | 'LIVING_SPECIMEN' | 'MATERIAL_SAMPLE' | 'MATERIAL_CITATION' | 'OCCURRENCE' | 'LITERATURE';
101
+ /** Raw occurrence record from /occurrence/search or /occurrence/{key} */
102
+ export type RawOccurrenceRecord = {
103
+ key?: number;
104
+ datasetKey?: string;
105
+ occurrenceID?: string;
106
+ kingdomKey?: number;
107
+ phylumKey?: number;
108
+ classKey?: number;
109
+ orderKey?: number;
110
+ familyKey?: number;
111
+ genusKey?: number;
112
+ speciesKey?: number;
113
+ taxonKey?: number;
114
+ scientificName?: string;
115
+ canonicalName?: string;
116
+ kingdom?: string;
117
+ phylum?: string;
118
+ order?: string;
119
+ family?: string;
120
+ genus?: string;
121
+ species?: string;
122
+ genericName?: string;
123
+ specificEpithet?: string;
124
+ taxonRank?: string;
125
+ taxonomicStatus?: string;
126
+ decimalLatitude?: number;
127
+ decimalLongitude?: number;
128
+ coordinateUncertaintyInMeters?: number;
129
+ coordinatePrecision?: number;
130
+ continent?: string;
131
+ stateProvince?: string;
132
+ country?: string;
133
+ countryCode?: string;
134
+ locality?: string;
135
+ publishingCountry?: string;
136
+ elevation?: number;
137
+ elevationAccuracy?: number;
138
+ depth?: number;
139
+ eventDate?: string;
140
+ eventTime?: string;
141
+ year?: number;
142
+ month?: number;
143
+ day?: number;
144
+ basisOfRecord?: string;
145
+ institutionCode?: string;
146
+ collectionCode?: string;
147
+ catalogNumber?: string;
148
+ recordNumber?: string;
149
+ identifiedBy?: string;
150
+ recordedBy?: string;
151
+ individualCount?: number;
152
+ sex?: string;
153
+ lifeStage?: string;
154
+ establishmentMeans?: string;
155
+ iucnRedListCategory?: string;
156
+ datasetName?: string;
157
+ issues?: string[];
158
+ media?: RawMedia[];
159
+ identifiers?: RawIdentifier[];
160
+ gadm?: unknown;
161
+ };
162
+ export type RawMedia = {
163
+ type?: string;
164
+ format?: string;
165
+ identifier?: string;
166
+ title?: string;
167
+ description?: string;
168
+ license?: string;
169
+ rightsHolder?: string;
170
+ publisher?: string;
171
+ references?: string;
172
+ created?: string;
173
+ };
174
+ export type RawIdentifier = {
175
+ type?: string;
176
+ identifier?: string;
177
+ };
178
+ /** Raw search response from /occurrence/search */
179
+ export type RawOccurrenceSearchResponse = {
180
+ offset?: number;
181
+ limit?: number;
182
+ endOfRecords?: boolean;
183
+ count?: number;
184
+ results?: RawOccurrenceRecord[];
185
+ facets?: RawFacet[];
186
+ };
187
+ export type RawFacet = {
188
+ field?: string;
189
+ counts?: Array<{
190
+ name?: string;
191
+ count?: number;
192
+ }>;
193
+ };
194
+ export type RawDatasetRecord = {
195
+ key?: string;
196
+ doi?: string;
197
+ type?: string;
198
+ title?: string;
199
+ description?: string;
200
+ citation?: {
201
+ text?: string;
202
+ identifier?: string;
203
+ };
204
+ license?: string;
205
+ publishingOrganizationKey?: string;
206
+ publishingCountry?: string;
207
+ hostingOrganizationKey?: string;
208
+ installationKey?: string;
209
+ numConstituents?: number;
210
+ numRecords?: number;
211
+ recordCount?: number;
212
+ createdBy?: string;
213
+ modifiedBy?: string;
214
+ created?: string;
215
+ modified?: string;
216
+ deleted?: string;
217
+ contacts?: RawContact[];
218
+ temporalCoverages?: unknown[];
219
+ geographicCoverages?: unknown[];
220
+ };
221
+ export type RawContact = {
222
+ type?: string;
223
+ firstName?: string;
224
+ lastName?: string;
225
+ email?: string[];
226
+ organization?: string;
227
+ };
228
+ export type RawDatasetSearchResponse = {
229
+ offset?: number;
230
+ limit?: number;
231
+ endOfRecords?: boolean;
232
+ count?: number;
233
+ results?: RawDatasetRecord[];
234
+ };
235
+ export type RawOrganizationRecord = {
236
+ key?: string;
237
+ title?: string;
238
+ description?: string;
239
+ country?: string;
240
+ city?: string;
241
+ latitude?: number;
242
+ longitude?: number;
243
+ endorsingNodeKey?: string;
244
+ endorsementApproved?: boolean;
245
+ contacts?: RawContact[];
246
+ };
247
+ export type RawOrganizationSearchResponse = {
248
+ offset?: number;
249
+ limit?: number;
250
+ endOfRecords?: boolean;
251
+ count?: number;
252
+ results?: RawOrganizationRecord[];
253
+ };
254
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/gbif/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Domain types for the GBIF API service.
3
+ * @module services/gbif/types
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/gbif/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/package.json ADDED
@@ -0,0 +1,91 @@
1
+ {
2
+ "name": "@cyanheads/gbif-biodiversity-mcp-server",
3
+ "version": "0.2.0",
4
+ "mcpName": "io.github.cyanheads/gbif-biodiversity-mcp-server",
5
+ "description": "Search GBIF species taxonomy, occurrence records, datasets, and publishers via MCP. STDIO or Streamable HTTP.",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "bin": {
10
+ "gbif-biodiversity-mcp-server": "dist/index.js"
11
+ },
12
+ "files": ["dist/", "README.md", "LICENSE", "CLAUDE.md", "Dockerfile", "server.json"],
13
+ "scripts": {
14
+ "build": "bun run scripts/build.ts",
15
+ "rebuild": "bun run scripts/clean.ts && bun run build",
16
+ "clean": "bun run scripts/clean.ts",
17
+ "devcheck": "bun run scripts/devcheck.ts",
18
+ "tree": "bun run scripts/tree.ts",
19
+ "format": "biome check --write --unsafe",
20
+ "test": "bunx vitest run",
21
+ "audit:refresh": "rm -f bun.lock && bun install && bun audit",
22
+ "list-skills": "bun run scripts/list-skills.ts",
23
+ "lint:mcp": "bun run scripts/lint-mcp.ts",
24
+ "lint:packaging": "bun run scripts/lint-packaging.ts",
25
+ "bundle": "bun run build && npx -y @anthropic-ai/mcpb pack . dist/gbif-biodiversity-mcp-server.mcpb",
26
+ "changelog:build": "bun run scripts/build-changelog.ts",
27
+ "changelog:check": "bun run scripts/build-changelog.ts --check",
28
+ "publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish",
29
+ "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
+ "start:stdio": "MCP_TRANSPORT_TYPE=stdio bun ./dist/index.js",
31
+ "start:http": "MCP_TRANSPORT_TYPE=http bun ./dist/index.js"
32
+ },
33
+ "keywords": [
34
+ "mcp",
35
+ "mcp-server",
36
+ "model-context-protocol",
37
+ "typescript",
38
+ "bun",
39
+ "stdio",
40
+ "streamable-http",
41
+ "gbif",
42
+ "biodiversity",
43
+ "species",
44
+ "taxonomy",
45
+ "occurrences",
46
+ "darwin-core",
47
+ "natural-history"
48
+ ],
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "git+https://github.com/cyanheads/gbif-biodiversity-mcp-server.git"
52
+ },
53
+ "bugs": {
54
+ "url": "https://github.com/cyanheads/gbif-biodiversity-mcp-server/issues"
55
+ },
56
+ "homepage": "https://github.com/cyanheads/gbif-biodiversity-mcp-server#readme",
57
+ "author": "cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/gbif-biodiversity-mcp-server#readme)",
58
+ "funding": [
59
+ {
60
+ "type": "github",
61
+ "url": "https://github.com/sponsors/cyanheads"
62
+ },
63
+ {
64
+ "type": "buy_me_a_coffee",
65
+ "url": "https://www.buymeacoffee.com/cyanheads"
66
+ }
67
+ ],
68
+ "license": "Apache-2.0",
69
+ "packageManager": "bun@1.3.2",
70
+ "engines": {
71
+ "bun": ">=1.3.2",
72
+ "node": ">=24.0.0"
73
+ },
74
+ "publishConfig": {
75
+ "access": "public"
76
+ },
77
+ "dependencies": {
78
+ "@cyanheads/mcp-ts-core": "^0.9.9",
79
+ "pino-pretty": "^13.1.3",
80
+ "zod": "^4.4.3"
81
+ },
82
+ "devDependencies": {
83
+ "@biomejs/biome": "^2.4.15",
84
+ "@types/node": "^25.9.1",
85
+ "depcheck": "^1.4.7",
86
+ "ignore": "^7.0.5",
87
+ "tsc-alias": "^1.8.17",
88
+ "typescript": "^6.0.3",
89
+ "vitest": "^4.1.7"
90
+ }
91
+ }
package/server.json ADDED
@@ -0,0 +1,117 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.cyanheads/gbif-biodiversity-mcp-server",
4
+ "description": "Search GBIF species taxonomy, occurrence records, datasets, and publishers.",
5
+ "repository": {
6
+ "url": "https://github.com/cyanheads/gbif-biodiversity-mcp-server",
7
+ "source": "github"
8
+ },
9
+ "remotes": [
10
+ {
11
+ "type": "streamable-http",
12
+ "url": "https://gbif-biodiversity.caseyjhand.com/mcp"
13
+ }
14
+ ],
15
+ "version": "0.2.0",
16
+ "packages": [
17
+ {
18
+ "registryType": "npm",
19
+ "registryBaseUrl": "https://registry.npmjs.org",
20
+ "identifier": "@cyanheads/gbif-biodiversity-mcp-server",
21
+ "runtimeHint": "bun",
22
+ "version": "0.2.0",
23
+ "packageArguments": [
24
+ {
25
+ "type": "positional",
26
+ "value": "run"
27
+ },
28
+ {
29
+ "type": "positional",
30
+ "value": "start:stdio"
31
+ }
32
+ ],
33
+ "environmentVariables": [
34
+ {
35
+ "name": "GBIF_API_KEY",
36
+ "description": "GBIF API key for higher rate limits. Sent as HTTP Basic Auth username.",
37
+ "format": "string",
38
+ "isRequired": false
39
+ },
40
+ {
41
+ "name": "MCP_LOG_LEVEL",
42
+ "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').",
43
+ "format": "string",
44
+ "isRequired": false,
45
+ "default": "info"
46
+ }
47
+ ],
48
+ "transport": {
49
+ "type": "stdio"
50
+ }
51
+ },
52
+ {
53
+ "registryType": "npm",
54
+ "registryBaseUrl": "https://registry.npmjs.org",
55
+ "identifier": "@cyanheads/gbif-biodiversity-mcp-server",
56
+ "runtimeHint": "bun",
57
+ "version": "0.2.0",
58
+ "packageArguments": [
59
+ {
60
+ "type": "positional",
61
+ "value": "run"
62
+ },
63
+ {
64
+ "type": "positional",
65
+ "value": "start:http"
66
+ }
67
+ ],
68
+ "environmentVariables": [
69
+ {
70
+ "name": "GBIF_API_KEY",
71
+ "description": "GBIF API key for higher rate limits. Sent as HTTP Basic Auth username.",
72
+ "format": "string",
73
+ "isRequired": false
74
+ },
75
+ {
76
+ "name": "MCP_HTTP_HOST",
77
+ "description": "The hostname for the HTTP server.",
78
+ "format": "string",
79
+ "isRequired": false,
80
+ "default": "127.0.0.1"
81
+ },
82
+ {
83
+ "name": "MCP_HTTP_PORT",
84
+ "description": "The port to run the HTTP server on.",
85
+ "format": "string",
86
+ "isRequired": false,
87
+ "default": "3010"
88
+ },
89
+ {
90
+ "name": "MCP_HTTP_ENDPOINT_PATH",
91
+ "description": "The endpoint path for the MCP server.",
92
+ "format": "string",
93
+ "isRequired": false,
94
+ "default": "/mcp"
95
+ },
96
+ {
97
+ "name": "MCP_AUTH_MODE",
98
+ "description": "Authentication mode to use: 'none', 'jwt', or 'oauth'.",
99
+ "format": "string",
100
+ "isRequired": false,
101
+ "default": "none"
102
+ },
103
+ {
104
+ "name": "MCP_LOG_LEVEL",
105
+ "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').",
106
+ "format": "string",
107
+ "isRequired": false,
108
+ "default": "info"
109
+ }
110
+ ],
111
+ "transport": {
112
+ "type": "streamable-http",
113
+ "url": "http://localhost:3010/mcp"
114
+ }
115
+ }
116
+ ]
117
+ }