@cyanheads/cdc-health-mcp-server 0.6.2 → 0.6.4
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 +1 -1
- package/README.md +2 -2
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/prompts/definitions/analyze-health-trend.prompt.js +2 -2
- package/dist/mcp-server/prompts/definitions/analyze-health-trend.prompt.js.map +1 -1
- package/dist/mcp-server/resources/definitions/dataset-detail.resource.d.ts +1 -1
- package/dist/mcp-server/resources/definitions/dataset-detail.resource.js +2 -2
- package/dist/mcp-server/resources/definitions/dataset-detail.resource.js.map +1 -1
- package/dist/mcp-server/resources/definitions/datasets.resource.d.ts +14 -1
- package/dist/mcp-server/resources/definitions/datasets.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/datasets.resource.js +17 -0
- package/dist/mcp-server/resources/definitions/datasets.resource.js.map +1 -1
- package/dist/mcp-server/tools/definitions/discover-datasets.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/discover-datasets.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/discover-datasets.tool.js +7 -5
- package/dist/mcp-server/tools/definitions/discover-datasets.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-dataset-schema.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/get-dataset-schema.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-dataset-schema.tool.js +5 -3
- package/dist/mcp-server/tools/definitions/get-dataset-schema.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/query-dataset.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/query-dataset.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/query-dataset.tool.js +7 -11
- package/dist/mcp-server/tools/definitions/query-dataset.tool.js.map +1 -1
- package/dist/services/socrata/socrata-service.d.ts +0 -1
- package/dist/services/socrata/socrata-service.d.ts.map +1 -1
- package/dist/services/socrata/socrata-service.js +5 -12
- package/dist/services/socrata/socrata-service.js.map +1 -1
- package/package.json +6 -6
- package/server.json +3 -3
package/CLAUDE.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Agent Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** cdc-health-statistics-mcp-server
|
|
4
|
-
**Version:** 0.6.
|
|
4
|
+
**Version:** 0.6.4
|
|
5
5
|
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)
|
|
6
6
|
|
|
7
7
|
> **Read the framework docs first:** `node_modules/@cyanheads/mcp-ts-core/CLAUDE.md` contains the full API reference — builders, Context, error codes, exports, patterns. This file covers server-specific conventions only.
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](https://www.npmjs.com/package/@cyanheads/cdc-health-mcp-server) [](https://www.npmjs.com/package/@cyanheads/cdc-health-mcp-server) [](./CHANGELOG.md) [](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) [](https://modelcontextprotocol.io/)
|
|
11
11
|
|
|
12
12
|
[](./LICENSE) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
13
13
|
|
|
@@ -206,7 +206,7 @@ All configuration is validated at startup via Zod schemas in `src/config/server-
|
|
|
206
206
|
| `CDC_APP_TOKEN` | Socrata app token for higher rate limits | none |
|
|
207
207
|
| `CDC_BASE_URL` | Base URL for SODA API requests | `https://data.cdc.gov` |
|
|
208
208
|
| `CDC_CATALOG_URL` | Base URL for Socrata Discovery API | `https://api.us.socrata.com/api/catalog/v1` |
|
|
209
|
-
| `OTEL_ENABLED` | Enable OpenTelemetry | `false` |
|
|
209
|
+
| `OTEL_ENABLED` | Enable [OpenTelemetry instrumentation](https://github.com/cyanheads/mcp-ts-core/tree/main/docs/telemetry) (spans, metrics, completion logs) | `false` |
|
|
210
210
|
|
|
211
211
|
## Running the server
|
|
212
212
|
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ import { getDatasetSchema } from './mcp-server/tools/definitions/get-dataset-sch
|
|
|
12
12
|
import { queryDataset } from './mcp-server/tools/definitions/query-dataset.tool.js';
|
|
13
13
|
import { initSocrataService } from './services/socrata/socrata-service.js';
|
|
14
14
|
await createApp({
|
|
15
|
+
instructions: `Use the cdc_* tools to access the CDC Open Data portal (~1,487 datasets) via the Socrata SODA API: search the catalog, inspect dataset schemas, and run SoQL queries across mortality, vaccinations, behavioral risk, surveillance, and other public health domains. Datasets are addressed by four-by-four IDs (e.g. bi63-dtpu); the catalog is heterogeneous, so the workflow is discover → inspect schema → query. All values come back as strings, and a column like "year" may be numeric in one dataset and text in another — match WHERE literals to the actual dataType from the schema.`,
|
|
15
16
|
tools: [discoverDatasets, getDatasetSchema, queryDataset],
|
|
16
17
|
resources: [datasetsResource, datasetDetailResource],
|
|
17
18
|
prompts: [analyzeHealthTrend],
|
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,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,MAAM,+DAA+D,CAAC;AACtG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yDAAyD,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,0DAA0D,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,sDAAsD,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAE3E,MAAM,SAAS,CAAC;IACd,KAAK,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC;IACzD,SAAS,EAAE,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;IACpD,OAAO,EAAE,CAAC,kBAAkB,CAAC;IAC7B,KAAK;QACH,kBAAkB,EAAE,CAAC;IACvB,CAAC;CACF,CAAC,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,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,MAAM,+DAA+D,CAAC;AACtG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yDAAyD,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,0DAA0D,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,2DAA2D,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,sDAAsD,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAE3E,MAAM,SAAS,CAAC;IACd,YAAY,EAAE,kkBAAkkB;IAChlB,KAAK,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC;IACzD,SAAS,EAAE,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;IACpD,OAAO,EAAE,CAAC,kBAAkB,CAAC;IAC7B,KAAK;QACH,kBAAkB,EAAE,CAAC;IACvB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -16,7 +16,7 @@ export const analyzeHealthTrend = prompt('analyze_health_trend', {
|
|
|
16
16
|
geography: z
|
|
17
17
|
.string()
|
|
18
18
|
.optional()
|
|
19
|
-
.describe('Geographic scope — "national", a specific state name, or "all states" for comparison. Defaults to national.'),
|
|
19
|
+
.describe('Geographic scope — "national", a specific state name (e.g., "California"), or "all states" for comparison. Defaults to national.'),
|
|
20
20
|
}),
|
|
21
21
|
generate: (args) => {
|
|
22
22
|
const timeContext = args.timeRange ? ` Focus on the period ${args.timeRange}.` : '';
|
|
@@ -37,7 +37,7 @@ export const analyzeHealthTrend = prompt('analyze_health_trend', {
|
|
|
37
37
|
'',
|
|
38
38
|
'2. **Inspect** — Use `cdc_get_dataset_schema` on the top 2-3 candidates. Check column names, types, and what filtering dimensions are available (year, state, demographic breakdowns, etc.).',
|
|
39
39
|
'',
|
|
40
|
-
'3. **Baseline** —
|
|
40
|
+
'3. **Baseline** — Use `cdc_query_dataset` against the most relevant dataset for an initial picture. Start broad, then narrow. Check what years, states, and categories are actually present in the data.',
|
|
41
41
|
'',
|
|
42
42
|
'4. **Compare** — Look for trends over time, geographic variation, or demographic disparities depending on what the data supports. Use aggregation (GROUP BY) for summaries.',
|
|
43
43
|
'',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-health-trend.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/analyze-health-trend.prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,sBAAsB,EAAE;IAC/D,WAAW,EACT,4OAA4O;IAC9O,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,CACP,uIAAuI,CACxI;QACH,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,gGAAgG,CACjG;QACH,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,
|
|
1
|
+
{"version":3,"file":"analyze-health-trend.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/analyze-health-trend.prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,sBAAsB,EAAE;IAC/D,WAAW,EACT,4OAA4O;IAC9O,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,CACP,uIAAuI,CACxI;QACH,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,gGAAgG,CACjG;QACH,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,kIAAkI,CACnI;KACJ,CAAC;IACF,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;QACjB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS;YAC/B,CAAC,CAAC,sBAAsB,IAAI,CAAC,SAAS,GAAG;YACzC,CAAC,CAAC,+BAA+B,CAAC;QAEpC,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;wBACJ,6DAA6D,IAAI,CAAC,KAAK,KAAK,WAAW,GAAG,UAAU,EAAE;wBACtG,EAAE;wBACF,uBAAuB;wBACvB,EAAE;wBACF,qMAAqM;wBACrM,EAAE;wBACF,8LAA8L;wBAC9L,EAAE;wBACF,0MAA0M;wBAC1M,EAAE;wBACF,6KAA6K;wBAC7K,EAAE;wBACF,qEAAqE;wBACrE,6EAA6E;wBAC7E,kEAAkE;wBAClE,yDAAyD;wBACzD,4CAA4C;qBAC7C,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -16,7 +16,7 @@ export declare const datasetDetailResource: import("@cyanheads/mcp-ts-core").Res
|
|
|
16
16
|
readonly code: JsonRpcErrorCode.RateLimited;
|
|
17
17
|
readonly when: "Socrata API returns 429 Too Many Requests.";
|
|
18
18
|
readonly retryable: true;
|
|
19
|
-
readonly recovery: "
|
|
19
|
+
readonly recovery: "Retry after a brief delay; the request was rate-limited.";
|
|
20
20
|
}, {
|
|
21
21
|
readonly reason: "upstream_error";
|
|
22
22
|
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
@@ -7,7 +7,7 @@ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
|
7
7
|
import { getSocrataService } from '../../../services/socrata/socrata-service.js';
|
|
8
8
|
export const datasetDetailResource = resource('cdc://datasets/{datasetId}', {
|
|
9
9
|
name: 'CDC Dataset Detail',
|
|
10
|
-
description: 'Dataset metadata and column schema for a specific CDC dataset
|
|
10
|
+
description: 'Dataset metadata and column schema for a specific CDC dataset, addressable by URI. Same payload as cdc_get_dataset_schema.',
|
|
11
11
|
mimeType: 'application/json',
|
|
12
12
|
errors: [
|
|
13
13
|
{
|
|
@@ -21,7 +21,7 @@ export const datasetDetailResource = resource('cdc://datasets/{datasetId}', {
|
|
|
21
21
|
code: JsonRpcErrorCode.RateLimited,
|
|
22
22
|
when: 'Socrata API returns 429 Too Many Requests.',
|
|
23
23
|
retryable: true,
|
|
24
|
-
recovery: '
|
|
24
|
+
recovery: 'Retry after a brief delay; the request was rate-limited.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
reason: 'upstream_error',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset-detail.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/dataset-detail.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC,4BAA4B,EAAE;IAC1E,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"dataset-detail.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/dataset-detail.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC,4BAA4B,EAAE;IAC1E,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,4HAA4H;IAC9H,QAAQ,EAAE,kBAAkB;IAE5B,MAAM,EAAE;QACN;YACE,MAAM,EAAE,mBAAmB;YAC3B,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,gDAAgD;YACtD,QAAQ,EACN,yFAAyF;SAC5F;QACD;YACE,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,gBAAgB,CAAC,WAAW;YAClC,IAAI,EAAE,4CAA4C;YAClD,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,0DAA0D;SACrE;QACD;YACE,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;YACzC,IAAI,EAAE,wEAAwE;YAC9E,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,yEAAyE;SACpF;KACF;IAED,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACjB,SAAS,EAAE;YACT;gBACE,GAAG,EAAE,0BAA0B;gBAC/B,IAAI,EAAE,+CAA+C;gBACrD,QAAQ,EAAE,kBAAkB;aAC7B;YACD;gBACE,GAAG,EAAE,0BAA0B;gBAC/B,IAAI,EAAE,4CAA4C;gBAClD,QAAQ,EAAE,kBAAkB;aAC7B;SACF;KACF,CAAC;IAEF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,KAAK,CAAC,2BAA2B,CAAC;aAClC,QAAQ,CAAC,sDAAsD,CAAC;KACpE,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;QACvB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAEzE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC,EAAE;YAC/C,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;SACpB,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -2,7 +2,20 @@
|
|
|
2
2
|
* @fileoverview Resource listing the top 50 CDC datasets by popularity for orientation.
|
|
3
3
|
* @module mcp-server/resources/definitions/datasets
|
|
4
4
|
*/
|
|
5
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
5
6
|
export declare const datasetsResource: import("@cyanheads/mcp-ts-core").ResourceDefinition<import("zod").ZodObject<Readonly<{
|
|
6
7
|
[k: string]: import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>;
|
|
7
|
-
}>, import("zod/v4/core").$strip>, undefined,
|
|
8
|
+
}>, import("zod/v4/core").$strip>, undefined, readonly [{
|
|
9
|
+
readonly reason: "rate_limited";
|
|
10
|
+
readonly code: JsonRpcErrorCode.RateLimited;
|
|
11
|
+
readonly when: "Socrata API returns 429 Too Many Requests.";
|
|
12
|
+
readonly retryable: true;
|
|
13
|
+
readonly recovery: "Retry after a brief delay; the request was rate-limited.";
|
|
14
|
+
}, {
|
|
15
|
+
readonly reason: "upstream_error";
|
|
16
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
17
|
+
readonly when: "Socrata catalog API returned a non-success status outside of 429.";
|
|
18
|
+
readonly retryable: true;
|
|
19
|
+
readonly recovery: "Retry after a brief delay; the catalog may be temporarily unavailable.";
|
|
20
|
+
}]>;
|
|
8
21
|
//# sourceMappingURL=datasets.resource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasets.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/datasets.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"datasets.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/datasets.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;GAiD3B,CAAC"}
|
|
@@ -3,11 +3,28 @@
|
|
|
3
3
|
* @module mcp-server/resources/definitions/datasets
|
|
4
4
|
*/
|
|
5
5
|
import { resource } from '@cyanheads/mcp-ts-core';
|
|
6
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
6
7
|
import { getSocrataService } from '../../../services/socrata/socrata-service.js';
|
|
7
8
|
export const datasetsResource = resource('cdc://datasets', {
|
|
8
9
|
name: 'CDC Dataset Catalog',
|
|
9
10
|
description: 'Top 50 CDC datasets by popularity with names, categories, and update timestamps. Provides an overview of the CDC data landscape for orientation. Use cdc_discover_datasets for full catalog search with filtering and pagination.',
|
|
10
11
|
mimeType: 'application/json',
|
|
12
|
+
errors: [
|
|
13
|
+
{
|
|
14
|
+
reason: 'rate_limited',
|
|
15
|
+
code: JsonRpcErrorCode.RateLimited,
|
|
16
|
+
when: 'Socrata API returns 429 Too Many Requests.',
|
|
17
|
+
retryable: true,
|
|
18
|
+
recovery: 'Retry after a brief delay; the request was rate-limited.',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
reason: 'upstream_error',
|
|
22
|
+
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
23
|
+
when: 'Socrata catalog API returned a non-success status outside of 429.',
|
|
24
|
+
retryable: true,
|
|
25
|
+
recovery: 'Retry after a brief delay; the catalog may be temporarily unavailable.',
|
|
26
|
+
},
|
|
27
|
+
],
|
|
11
28
|
list: async () => ({
|
|
12
29
|
resources: [
|
|
13
30
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasets.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/datasets.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,EAAE;IACzD,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,mOAAmO;IACrO,QAAQ,EAAE,kBAAkB;IAE5B,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACjB,SAAS,EAAE;YACT;gBACE,GAAG,EAAE,gBAAgB;gBACrB,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,kBAAkB;aAC7B;SACF;KACF,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG;QACxB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAEjE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAE9E,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC;YACH,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"datasets.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/datasets.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,EAAE;IACzD,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,mOAAmO;IACrO,QAAQ,EAAE,kBAAkB;IAE5B,MAAM,EAAE;QACN;YACE,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,gBAAgB,CAAC,WAAW;YAClC,IAAI,EAAE,4CAA4C;YAClD,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,0DAA0D;SACrE;QACD;YACE,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;YACzC,IAAI,EAAE,mEAAmE;YACzE,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,wEAAwE;SACnF;KACF;IAED,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACjB,SAAS,EAAE;YACT;gBACE,GAAG,EAAE,gBAAgB;gBACrB,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,kBAAkB;aAC7B;SACF;KACF,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG;QACxB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAEjE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAE9E,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC;YACH,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -33,7 +33,7 @@ export declare const discoverDatasets: import("@cyanheads/mcp-ts-core").ToolDefi
|
|
|
33
33
|
readonly code: JsonRpcErrorCode.RateLimited;
|
|
34
34
|
readonly when: "Socrata API returns 429 Too Many Requests.";
|
|
35
35
|
readonly retryable: true;
|
|
36
|
-
readonly recovery: "
|
|
36
|
+
readonly recovery: "Retry after a brief delay; the request was rate-limited.";
|
|
37
37
|
}, {
|
|
38
38
|
readonly reason: "upstream_error";
|
|
39
39
|
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover-datasets.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/discover-datasets.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"discover-datasets.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/discover-datasets.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgK3B,CAAC"}
|
|
@@ -6,7 +6,7 @@ import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
import { getSocrataService } from '../../../services/socrata/socrata-service.js';
|
|
8
8
|
export const discoverDatasets = tool('cdc_discover_datasets', {
|
|
9
|
-
description: 'Search the CDC dataset catalog by keyword, category, or tag. Returns dataset IDs, names, descriptions, column lists, and update timestamps.
|
|
9
|
+
description: 'Search the CDC dataset catalog by keyword, category, or tag. Returns dataset IDs, names, descriptions, column lists, and update timestamps.',
|
|
10
10
|
annotations: { readOnlyHint: true },
|
|
11
11
|
errors: [
|
|
12
12
|
{
|
|
@@ -14,7 +14,7 @@ export const discoverDatasets = tool('cdc_discover_datasets', {
|
|
|
14
14
|
code: JsonRpcErrorCode.RateLimited,
|
|
15
15
|
when: 'Socrata API returns 429 Too Many Requests.',
|
|
16
16
|
retryable: true,
|
|
17
|
-
recovery: '
|
|
17
|
+
recovery: 'Retry after a brief delay; the request was rate-limited.',
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
reason: 'upstream_error',
|
|
@@ -57,7 +57,9 @@ export const discoverDatasets = tool('cdc_discover_datasets', {
|
|
|
57
57
|
.array(z
|
|
58
58
|
.object({
|
|
59
59
|
id: z.string().describe('Four-by-four dataset identifier (e.g., "bi63-dtpu").'),
|
|
60
|
-
name: z
|
|
60
|
+
name: z
|
|
61
|
+
.string()
|
|
62
|
+
.describe('Dataset display name from the catalog (e.g., "Provisional COVID-19 Deaths by Sex and Age").'),
|
|
61
63
|
description: z
|
|
62
64
|
.string()
|
|
63
65
|
.optional()
|
|
@@ -84,7 +86,7 @@ export const discoverDatasets = tool('cdc_discover_datasets', {
|
|
|
84
86
|
category: z.string().optional().describe('Category filter used.'),
|
|
85
87
|
tags: z.array(z.string()).optional().describe('Tag filters used.'),
|
|
86
88
|
})
|
|
87
|
-
.describe('Filters applied to this
|
|
89
|
+
.describe('Filters that were applied to this query; absent fields indicate no filter on that dimension.'),
|
|
88
90
|
}),
|
|
89
91
|
async handler(input, ctx) {
|
|
90
92
|
const service = getSocrataService();
|
|
@@ -131,7 +133,7 @@ export const discoverDatasets = tool('cdc_discover_datasets', {
|
|
|
131
133
|
const views = typeof d.pageViews === 'number' ? d.pageViews.toLocaleString() : '—';
|
|
132
134
|
lines.push(`**ID:** \`${d.id}\` | **Category:** ${d.category ?? '—'} | **Updated:** ${d.updatedAt ?? '—'} | **Views:** ${views}`);
|
|
133
135
|
if (d.description)
|
|
134
|
-
lines.push(d.description
|
|
136
|
+
lines.push(d.description);
|
|
135
137
|
if (d.tags && d.tags.length > 0)
|
|
136
138
|
lines.push(`**Tags:** ${d.tags.join(', ')}`);
|
|
137
139
|
if (d.columnNames && d.columnNames.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover-datasets.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/discover-datasets.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,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,EAAE;IAC5D,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"discover-datasets.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/discover-datasets.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ export declare const getDatasetSchema: import("@cyanheads/mcp-ts-core").ToolDefi
|
|
|
26
26
|
readonly code: JsonRpcErrorCode.RateLimited;
|
|
27
27
|
readonly when: "Socrata API returns 429 Too Many Requests.";
|
|
28
28
|
readonly retryable: true;
|
|
29
|
-
readonly recovery: "
|
|
29
|
+
readonly recovery: "Retry after a brief delay; the request was rate-limited.";
|
|
30
30
|
}, {
|
|
31
31
|
readonly reason: "upstream_error";
|
|
32
32
|
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-dataset-schema.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-dataset-schema.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"get-dataset-schema.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-dataset-schema.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8F3B,CAAC"}
|
|
@@ -6,7 +6,7 @@ import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
import { getSocrataService } from '../../../services/socrata/socrata-service.js';
|
|
8
8
|
export const getDatasetSchema = tool('cdc_get_dataset_schema', {
|
|
9
|
-
description: 'Fetch the full column schema for a CDC dataset — names, data types, descriptions, row count, and last-updated timestamp.
|
|
9
|
+
description: 'Fetch the full column schema for a CDC dataset — names, data types, descriptions, row count, and last-updated timestamp. Get dataset IDs from cdc_discover_datasets.',
|
|
10
10
|
annotations: { readOnlyHint: true },
|
|
11
11
|
errors: [
|
|
12
12
|
{
|
|
@@ -20,7 +20,7 @@ export const getDatasetSchema = tool('cdc_get_dataset_schema', {
|
|
|
20
20
|
code: JsonRpcErrorCode.RateLimited,
|
|
21
21
|
when: 'Socrata API returns 429 Too Many Requests.',
|
|
22
22
|
retryable: true,
|
|
23
|
-
recovery: '
|
|
23
|
+
recovery: 'Retry after a brief delay; the request was rate-limited.',
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
26
|
reason: 'upstream_error',
|
|
@@ -37,7 +37,9 @@ export const getDatasetSchema = tool('cdc_get_dataset_schema', {
|
|
|
37
37
|
.describe('Four-by-four dataset identifier (e.g., "bi63-dtpu"). Obtain from cdc_discover_datasets.'),
|
|
38
38
|
}),
|
|
39
39
|
output: z.object({
|
|
40
|
-
name: z
|
|
40
|
+
name: z
|
|
41
|
+
.string()
|
|
42
|
+
.describe('Dataset display name from the catalog (e.g., "Provisional COVID-19 Deaths by Sex and Age").'),
|
|
41
43
|
description: z.string().optional().describe('Dataset description when provided.'),
|
|
42
44
|
rowCount: z
|
|
43
45
|
.number()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-dataset-schema.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-dataset-schema.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,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,EAAE;IAC7D,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"get-dataset-schema.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-dataset-schema.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,11 +43,11 @@ export declare const queryDataset: import("@cyanheads/mcp-ts-core").ToolDefiniti
|
|
|
43
43
|
readonly code: JsonRpcErrorCode.RateLimited;
|
|
44
44
|
readonly when: "Socrata API returns 429 Too Many Requests.";
|
|
45
45
|
readonly retryable: true;
|
|
46
|
-
readonly recovery: "
|
|
46
|
+
readonly recovery: "Retry after a brief delay; the request was rate-limited.";
|
|
47
47
|
}, {
|
|
48
48
|
readonly reason: "upstream_error";
|
|
49
49
|
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
50
|
-
readonly when: "Socrata data API returned a non-success status outside of
|
|
50
|
+
readonly when: "Socrata data API returned a non-success status outside of 404, 429, or validation errors.";
|
|
51
51
|
readonly retryable: true;
|
|
52
52
|
readonly recovery: "Retry after a brief delay; data.cdc.gov may be temporarily unavailable.";
|
|
53
53
|
}]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-dataset.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/query-dataset.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAKjE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"query-dataset.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/query-dataset.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAKjE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0JvB,CAAC"}
|
|
@@ -39,12 +39,12 @@ export const queryDataset = tool('cdc_query_dataset', {
|
|
|
39
39
|
code: JsonRpcErrorCode.RateLimited,
|
|
40
40
|
when: 'Socrata API returns 429 Too Many Requests.',
|
|
41
41
|
retryable: true,
|
|
42
|
-
recovery: '
|
|
42
|
+
recovery: 'Retry after a brief delay; the request was rate-limited.',
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
45
|
reason: 'upstream_error',
|
|
46
46
|
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
47
|
-
when: 'Socrata data API returned a non-success status outside of
|
|
47
|
+
when: 'Socrata data API returned a non-success status outside of 404, 429, or validation errors.',
|
|
48
48
|
retryable: true,
|
|
49
49
|
recovery: 'Retry after a brief delay; data.cdc.gov may be temporarily unavailable.',
|
|
50
50
|
},
|
|
@@ -57,7 +57,7 @@ export const queryDataset = tool('cdc_query_dataset', {
|
|
|
57
57
|
search: z
|
|
58
58
|
.string()
|
|
59
59
|
.optional()
|
|
60
|
-
.describe('Full-text search across all text columns
|
|
60
|
+
.describe('Full-text search across all text columns. For precise filtering use the where parameter instead.'),
|
|
61
61
|
select: z
|
|
62
62
|
.string()
|
|
63
63
|
.optional()
|
|
@@ -80,8 +80,8 @@ export const queryDataset = tool('cdc_query_dataset', {
|
|
|
80
80
|
.int()
|
|
81
81
|
.min(1)
|
|
82
82
|
.max(MAX_LIMIT)
|
|
83
|
-
.default(
|
|
84
|
-
.describe(`Max rows to return (default
|
|
83
|
+
.default(100)
|
|
84
|
+
.describe(`Max rows to return (default 100, max ${MAX_LIMIT}).`),
|
|
85
85
|
offset: z.number().int().min(0).default(0).describe('Row offset for pagination.'),
|
|
86
86
|
}),
|
|
87
87
|
output: z.object({
|
|
@@ -89,7 +89,7 @@ export const queryDataset = tool('cdc_query_dataset', {
|
|
|
89
89
|
.array(z.record(z.string(), z.unknown()))
|
|
90
90
|
.describe('Result rows with requested fields. Most values are strings (including numbers/dates); geo columns return GeoJSON objects.'),
|
|
91
91
|
rowCount: z.number().describe('Number of rows returned in this response.'),
|
|
92
|
-
query: z.string().describe('Assembled SoQL query string
|
|
92
|
+
query: z.string().describe('Assembled SoQL query string sent to Socrata.'),
|
|
93
93
|
}),
|
|
94
94
|
async handler(input, ctx) {
|
|
95
95
|
const service = getSocrataService();
|
|
@@ -126,8 +126,7 @@ export const queryDataset = tool('cdc_query_dataset', {
|
|
|
126
126
|
`| ${columns.join(' | ')} |`,
|
|
127
127
|
`| ${columns.map(() => '---').join(' | ')} |`,
|
|
128
128
|
];
|
|
129
|
-
const
|
|
130
|
-
for (const row of displayRows) {
|
|
129
|
+
for (const row of result.rows) {
|
|
131
130
|
const cells = columns.map((c) => {
|
|
132
131
|
const v = row[c];
|
|
133
132
|
const s = typeof v === 'string' ? v : v == null ? '' : JSON.stringify(v);
|
|
@@ -135,9 +134,6 @@ export const queryDataset = tool('cdc_query_dataset', {
|
|
|
135
134
|
});
|
|
136
135
|
lines.push(`| ${cells.join(' | ')} |`);
|
|
137
136
|
}
|
|
138
|
-
if (result.rows.length > 50) {
|
|
139
|
-
lines.push('', `*...and ${result.rows.length - 50} more rows (truncated in display)*`);
|
|
140
|
-
}
|
|
141
137
|
lines.push('', `**Query:** \`${result.query}\``);
|
|
142
138
|
return [{ type: 'text', text: lines.join('\n') }];
|
|
143
139
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-dataset.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/query-dataset.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,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,MAAM,SAAS,GAAG,IAAI,CAAC;AAEvB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE;IACpD,WAAW,EACT,6OAA6O;IAC/O,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;IAEnC,MAAM,EAAE;QACN;YACE,MAAM,EAAE,mBAAmB;YAC3B,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,gDAAgD;YACtD,QAAQ,EACN,yFAAyF;SAC5F;QACD;YACE,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,mFAAmF;YACzF,QAAQ,EACN,+FAA+F;SAClG;QACD;YACE,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,iFAAiF;YACvF,QAAQ,EACN,gIAAgI;SACnI;QACD;YACE,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,uEAAuE;YAC7E,QAAQ,EACN,gGAAgG;SACnG;QACD;YACE,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,gBAAgB,CAAC,WAAW;YAClC,IAAI,EAAE,4CAA4C;YAClD,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"query-dataset.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/query-dataset.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socrata-service.d.ts","sourceRoot":"","sources":["../../../src/services/socrata/socrata-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"socrata-service.d.ts","sourceRoot":"","sources":["../../../src/services/socrata/socrata-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAGV,eAAe,EACf,cAAc,EACd,WAAW,EACZ,MAAM,YAAY,CAAC;AAIpB,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC7B;AAED,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,eAAe,CAAK;IAE5B;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IA8CvF;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAgCpF;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAwB9E,OAAO,CAAC,eAAe;YAwCT,SAAS;YA0CT,QAAQ;CAQvB;AAID,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAMlD"}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* @module services/socrata/socrata-service
|
|
5
5
|
*/
|
|
6
6
|
import { notFound, rateLimited, serviceUnavailable, validationError, } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { httpErrorFromResponse } from '@cyanheads/mcp-ts-core/utils';
|
|
7
8
|
import { getServerConfig } from '../../config/server-config.js';
|
|
8
|
-
const DATASET_ID_PATTERN = /^[a-z0-9]{4}-[a-z0-9]{4}$/;
|
|
9
9
|
const MIN_REQUEST_INTERVAL_MS = 250;
|
|
10
10
|
export class SocrataService {
|
|
11
11
|
lastRequestTime = 0;
|
|
@@ -60,7 +60,6 @@ export class SocrataService {
|
|
|
60
60
|
* Fetch full metadata and column schema for a dataset.
|
|
61
61
|
*/
|
|
62
62
|
async getMetadata(datasetId, signal) {
|
|
63
|
-
this.validateDatasetId(datasetId);
|
|
64
63
|
const config = getServerConfig();
|
|
65
64
|
const url = `${config.baseUrl}/api/views/${datasetId}.json`;
|
|
66
65
|
const data = await this.fetchJson(url, signal);
|
|
@@ -91,7 +90,6 @@ export class SocrataService {
|
|
|
91
90
|
* Execute a SoQL query against a CDC dataset.
|
|
92
91
|
*/
|
|
93
92
|
async query(options, signal) {
|
|
94
|
-
this.validateDatasetId(options.datasetId);
|
|
95
93
|
const config = getServerConfig();
|
|
96
94
|
const params = new URLSearchParams();
|
|
97
95
|
if (options.search)
|
|
@@ -147,11 +145,6 @@ export class SocrataService {
|
|
|
147
145
|
url,
|
|
148
146
|
});
|
|
149
147
|
}
|
|
150
|
-
validateDatasetId(datasetId) {
|
|
151
|
-
if (!DATASET_ID_PATTERN.test(datasetId)) {
|
|
152
|
-
throw validationError(`Invalid dataset ID "${datasetId}" — must match format [a-z0-9]{4}-[a-z0-9]{4} (e.g., "bi63-dtpu"). Get valid IDs from cdc_discover_datasets.`, { reason: 'invalid_dataset_id', datasetId });
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
148
|
async fetchJson(url, signal) {
|
|
156
149
|
await this.throttle();
|
|
157
150
|
const config = getServerConfig();
|
|
@@ -173,10 +166,10 @@ export class SocrataService {
|
|
|
173
166
|
if (response.status === 400) {
|
|
174
167
|
this.throwBadRequest(body, url);
|
|
175
168
|
}
|
|
176
|
-
throw
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
url,
|
|
169
|
+
throw await httpErrorFromResponse(response, {
|
|
170
|
+
service: 'Socrata',
|
|
171
|
+
captureBody: false,
|
|
172
|
+
data: { reason: 'upstream_error', url, body: body.slice(0, 500) },
|
|
180
173
|
});
|
|
181
174
|
}
|
|
182
175
|
return (await response.json());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socrata-service.js","sourceRoot":"","sources":["../../../src/services/socrata/socrata-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,eAAe,GAChB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"socrata-service.js","sourceRoot":"","sources":["../../../src/services/socrata/socrata-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/cdc-health-mcp-server",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.4",
|
|
4
4
|
"description": "MCP server for discovering and querying CDC public health datasets via the Socrata SODA API.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -61,18 +61,18 @@
|
|
|
61
61
|
"access": "public"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@cyanheads/mcp-ts-core": "^0.
|
|
64
|
+
"@cyanheads/mcp-ts-core": "^0.9.1",
|
|
65
65
|
"pino-pretty": "^13.1.3"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@biomejs/biome": "^2.4.
|
|
68
|
+
"@biomejs/biome": "^2.4.15",
|
|
69
69
|
"@opentelemetry/api": "^1.9.1",
|
|
70
|
-
"@types/node": "^25.
|
|
71
|
-
"@vitest/coverage-istanbul": "^4.1.
|
|
70
|
+
"@types/node": "^25.8.0",
|
|
71
|
+
"@vitest/coverage-istanbul": "^4.1.6",
|
|
72
72
|
"depcheck": "^1.4.7",
|
|
73
73
|
"ignore": "^7.0.5",
|
|
74
74
|
"tsc-alias": "^1.8.17",
|
|
75
75
|
"typescript": "^6.0.3",
|
|
76
|
-
"vitest": "^4.1.
|
|
76
|
+
"vitest": "^4.1.6"
|
|
77
77
|
}
|
|
78
78
|
}
|
package/server.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/cdc-health-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.6.
|
|
9
|
+
"version": "0.6.4",
|
|
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/cdc-health-mcp-server",
|
|
21
21
|
"runtimeHint": "node",
|
|
22
|
-
"version": "0.6.
|
|
22
|
+
"version": "0.6.4",
|
|
23
23
|
"packageArguments": [
|
|
24
24
|
{
|
|
25
25
|
"type": "positional",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
55
55
|
"identifier": "@cyanheads/cdc-health-mcp-server",
|
|
56
56
|
"runtimeHint": "node",
|
|
57
|
-
"version": "0.6.
|
|
57
|
+
"version": "0.6.4",
|
|
58
58
|
"packageArguments": [
|
|
59
59
|
{
|
|
60
60
|
"type": "positional",
|