@fre4x/fred 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Adaptive Agent
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,54 @@
1
+ # fred — The Economic Nerve
2
+
3
+ > *Monetary policy, GDP, unemployment, inflation — the macroeconomic forces that move everything. This B1TE reads them directly.*
4
+
5
+ Part of **[FRE4X-B1TE](../)** — a monorepo of MCP servers built for autonomous agents.
6
+
7
+ The Federal Reserve publishes the data that governments and institutions use to make decisions worth trillions. This server gives the agent that same data stream — unfiltered, paginated, ready for inference. While analysts write reports, the agent already knows.
8
+
9
+ ## Tools
10
+
11
+ | Tool | What it reaches |
12
+ |------|----------------|
13
+ | `fred_search_series` | Full-text search across all FRED series |
14
+ | `fred_get_series_info` | Metadata for a series — units, frequency, range, last update |
15
+ | `fred_get_series_data` | Observation time-series for any series (e.g. `GDP`, `UNRATE`, `CPIAUCSL`) |
16
+ | `fred_get_category_series` | All series under a given FRED category |
17
+ | `fred_get_releases` | Index of all FRED data releases |
18
+ | `fred_get_release_series` | Series belonging to a specific release |
19
+ | `fred_get_sources` | All primary data sources in FRED |
20
+ | `fred_get_source` | Details for one source |
21
+
22
+ All list tools support pagination via `limit` / `offset`.
23
+
24
+ ## Requirements
25
+
26
+ A [FRED API key](https://fred.stlouisfed.org/docs/api/api_key.html) (free) — set as `FRED_API_KEY`.
27
+
28
+ ## Deploy
29
+
30
+ ```json
31
+ {
32
+ "mcpServers": {
33
+ "fred": {
34
+ "command": "npx",
35
+ "args": ["-y", "@fre4x/fred"],
36
+ "env": {
37
+ "FRED_API_KEY": "your_api_key_here"
38
+ }
39
+ }
40
+ }
41
+ }
42
+ ```
43
+
44
+ ## Development
45
+
46
+ ```bash
47
+ bun install
48
+ bun run dev # tsx, no build
49
+ bun run build # compile → dist/
50
+ ```
51
+
52
+ ## License
53
+
54
+ MIT — **WE ARE THE FRE4X.**
package/dist/api.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import type { FredSearchResponse, FredSeriesInfoResponse, FredObservationsResponse, FredReleasesResponse, FredSourcesResponse, FredCategorySeriesResponse, FredSource } from "./types.js";
2
+ export declare class FredApiClient {
3
+ private client;
4
+ private apiKey;
5
+ constructor();
6
+ searchSeries(query: string, limit?: number, offset?: number): Promise<FredSearchResponse>;
7
+ getSeriesInfo(seriesId: string): Promise<FredSeriesInfoResponse>;
8
+ getSeriesObservations(seriesId: string, limit?: number, offset?: number): Promise<FredObservationsResponse>;
9
+ getCategorySeries(categoryId: number, limit?: number, offset?: number): Promise<FredCategorySeriesResponse>;
10
+ getReleases(limit?: number, offset?: number): Promise<FredReleasesResponse>;
11
+ getReleaseSeries(releaseId: number, limit?: number, offset?: number): Promise<FredCategorySeriesResponse>;
12
+ getSources(): Promise<FredSourcesResponse>;
13
+ getSource(sourceId: number): Promise<{
14
+ sources: FredSource[];
15
+ }>;
16
+ }
17
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,UAAU,EACX,MAAM,YAAY,CAAC;AAIpB,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAS;;IAgBjB,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,EACV,MAAM,SAAI,GACT,OAAO,CAAC,kBAAkB,CAAC;IAgBxB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAOhE,qBAAqB,CACzB,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAO,EACZ,MAAM,SAAI,GACT,OAAO,CAAC,wBAAwB,CAAC;IAU9B,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,KAAK,SAAK,EACV,MAAM,SAAI,GACT,OAAO,CAAC,0BAA0B,CAAC;IAgBhC,WAAW,CAAC,KAAK,SAAK,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAOlE,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,KAAK,SAAK,EACV,MAAM,SAAI,GACT,OAAO,CAAC,0BAA0B,CAAC;IAUhC,UAAU,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAK1C,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;CAStE"}
package/dist/api.js ADDED
@@ -0,0 +1,76 @@
1
+ import axios from "axios";
2
+ const FRED_BASE_URL = "https://api.stlouisfed.org/fred";
3
+ export class FredApiClient {
4
+ client;
5
+ apiKey;
6
+ constructor() {
7
+ const key = process.env.FRED_API_KEY;
8
+ if (!key) {
9
+ throw new Error("FRED_API_KEY environment variable not set. Please set it to use this server.");
10
+ }
11
+ this.apiKey = key;
12
+ this.client = axios.create({
13
+ baseURL: FRED_BASE_URL,
14
+ params: { api_key: this.apiKey, file_type: "json" },
15
+ });
16
+ }
17
+ async searchSeries(query, limit = 20, offset = 0) {
18
+ const { data } = await this.client.get("/series/search", {
19
+ params: {
20
+ search_text: query,
21
+ limit,
22
+ offset,
23
+ order_by: "popularity",
24
+ sort_order: "desc",
25
+ },
26
+ });
27
+ return data;
28
+ }
29
+ async getSeriesInfo(seriesId) {
30
+ const { data } = await this.client.get("/series", {
31
+ params: { series_id: seriesId },
32
+ });
33
+ return data;
34
+ }
35
+ async getSeriesObservations(seriesId, limit = 1000, offset = 0) {
36
+ const { data } = await this.client.get("/series/observations", {
37
+ params: { series_id: seriesId, limit, offset },
38
+ });
39
+ return data;
40
+ }
41
+ async getCategorySeries(categoryId, limit = 20, offset = 0) {
42
+ const { data } = await this.client.get("/category/series", {
43
+ params: {
44
+ category_id: categoryId,
45
+ limit,
46
+ offset,
47
+ order_by: "popularity",
48
+ sort_order: "desc",
49
+ },
50
+ });
51
+ return data;
52
+ }
53
+ async getReleases(limit = 20, offset = 0) {
54
+ const { data } = await this.client.get("/releases", {
55
+ params: { limit, offset },
56
+ });
57
+ return data;
58
+ }
59
+ async getReleaseSeries(releaseId, limit = 20, offset = 0) {
60
+ const { data } = await this.client.get("/release/series", {
61
+ params: { release_id: releaseId, limit, offset },
62
+ });
63
+ return data;
64
+ }
65
+ async getSources() {
66
+ const { data } = await this.client.get("/sources");
67
+ return data;
68
+ }
69
+ async getSource(sourceId) {
70
+ const { data } = await this.client.get("/source", {
71
+ params: { source_id: sourceId },
72
+ });
73
+ return data;
74
+ }
75
+ }
76
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,232 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { z } from "zod";
5
+ import { FredApiClient } from "./api.js";
6
+ import { createApiError, createNotFoundError, truncateToLimit, paginationSchema, } from "@fre4x/mcp-shared";
7
+ const server = new McpServer({
8
+ name: "fred-mcp-server",
9
+ version: "1.0.0",
10
+ });
11
+ function getClient() {
12
+ return new FredApiClient();
13
+ }
14
+ // --- Formatters ---
15
+ function formatSeriesList(seriess, total, offset) {
16
+ if (!seriess || seriess.length === 0)
17
+ return "No series found.";
18
+ const rows = seriess.map((s) => `| ${s.id} | ${s.title} | ${s.units_short} | ${s.frequency_short} | ${s.popularity} |`);
19
+ const header = `**Found ${total} series (showing ${seriess.length} from offset ${offset}):**\n\n`;
20
+ const table = "| ID | Title | Units | Frequency | Popularity |\n" +
21
+ "|---|---|---|---|---|\n" +
22
+ rows.join("\n");
23
+ return header + table;
24
+ }
25
+ function formatSeriesInfo(s) {
26
+ return [
27
+ `## ${s.title} (${s.id})`,
28
+ `- **Units**: ${s.units}`,
29
+ `- **Frequency**: ${s.frequency}`,
30
+ `- **Seasonal Adjustment**: ${s.seasonal_adjustment}`,
31
+ `- **Observation Range**: ${s.observation_start} → ${s.observation_end}`,
32
+ `- **Last Updated**: ${s.last_updated}`,
33
+ `- **Popularity**: ${s.popularity}`,
34
+ s.notes ? `\n**Notes**: ${s.notes}` : "",
35
+ ]
36
+ .filter(Boolean)
37
+ .join("\n");
38
+ }
39
+ function formatObservations(observations, total, seriesId) {
40
+ const rows = observations.map((o) => `| ${o.date} | ${o.value} |`);
41
+ return (`## ${seriesId} Observations\n` +
42
+ `**Showing ${observations.length} of ${total} data points**\n\n` +
43
+ "| Date | Value |\n| --- | --- |\n" +
44
+ rows.join("\n"));
45
+ }
46
+ function formatReleases(releases, total) {
47
+ if (!releases || releases.length === 0)
48
+ return "No releases found.";
49
+ const rows = releases.map((r) => `| ${r.id} | ${r.name} | ${r.press_release ? "Yes" : "No"} | ${r.link ?? ""} |`);
50
+ return (`**Found ${total} releases (showing ${releases.length}):**\n\n` +
51
+ "| ID | Name | Press Release | Link |\n|---|---|---|---|\n" +
52
+ rows.join("\n"));
53
+ }
54
+ function formatSources(sources) {
55
+ if (!sources || sources.length === 0)
56
+ return "No sources found.";
57
+ const rows = sources.map((s) => `| ${s.id} | ${s.name} | ${s.link ?? ""} |`);
58
+ return (`**Found ${sources.length} sources:**\n\n` +
59
+ "| ID | Name | Link |\n|---|---|---|\n" +
60
+ rows.join("\n"));
61
+ }
62
+ // --- Tools ---
63
+ server.registerTool("fred_search_series", {
64
+ title: "Search FRED Series",
65
+ description: "Search FRED economic data series by text query.",
66
+ inputSchema: z.object({
67
+ query: z.string().describe("Search text e.g. 'gdp', 'unemployment'"),
68
+ ...paginationSchema.shape,
69
+ }),
70
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
71
+ }, async ({ query, limit, offset }) => {
72
+ try {
73
+ const client = getClient();
74
+ const res = await client.searchSeries(query, limit, offset);
75
+ const text = formatSeriesList(res.seriess, res.count, offset);
76
+ return { content: [{ type: "text", text: truncateToLimit(text) }] };
77
+ }
78
+ catch (err) {
79
+ return createApiError(err instanceof Error ? err.message : String(err));
80
+ }
81
+ });
82
+ server.registerTool("fred_get_series_info", {
83
+ title: "Get FRED Series Info",
84
+ description: "Get metadata for a specific FRED series.",
85
+ inputSchema: z.object({
86
+ series_id: z.string().describe("Series ID e.g. 'GDP', 'UNRATE'"),
87
+ }),
88
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
89
+ }, async ({ series_id }) => {
90
+ try {
91
+ const client = getClient();
92
+ const res = await client.getSeriesInfo(series_id);
93
+ if (!res.seriess || res.seriess.length === 0) {
94
+ return createNotFoundError(`Series '${series_id}' not found.`);
95
+ }
96
+ const text = formatSeriesInfo(res.seriess[0]);
97
+ return { content: [{ type: "text", text }] };
98
+ }
99
+ catch (err) {
100
+ return createApiError(err instanceof Error ? err.message : String(err));
101
+ }
102
+ });
103
+ server.registerTool("fred_get_series_data", {
104
+ title: "Get FRED Series Data",
105
+ description: "Get observation data points for a specific FRED series.",
106
+ inputSchema: z.object({
107
+ series_id: z.string().describe("Series ID e.g. 'GDP'"),
108
+ ...paginationSchema.shape,
109
+ }),
110
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
111
+ }, async ({ series_id, limit, offset }) => {
112
+ try {
113
+ const client = getClient();
114
+ const res = await client.getSeriesObservations(series_id, limit, offset);
115
+ if (!res.observations || res.observations.length === 0) {
116
+ return createNotFoundError(`No data found for series '${series_id}'.`);
117
+ }
118
+ const text = formatObservations(res.observations, res.count, series_id);
119
+ return { content: [{ type: "text", text: truncateToLimit(text) }] };
120
+ }
121
+ catch (err) {
122
+ return createApiError(err instanceof Error ? err.message : String(err));
123
+ }
124
+ });
125
+ server.registerTool("fred_get_category_series", {
126
+ title: "Get FRED Category Series",
127
+ description: "Get series belonging to a specific FRED category.",
128
+ inputSchema: z.object({
129
+ category_id: z.number().int().describe("Category ID e.g. 125"),
130
+ ...paginationSchema.shape,
131
+ }),
132
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
133
+ }, async ({ category_id, limit, offset }) => {
134
+ try {
135
+ const client = getClient();
136
+ const res = await client.getCategorySeries(category_id, limit, offset);
137
+ const text = formatSeriesList(res.seriess, res.count, offset);
138
+ return { content: [{ type: "text", text: truncateToLimit(text) }] };
139
+ }
140
+ catch (err) {
141
+ return createApiError(err instanceof Error ? err.message : String(err));
142
+ }
143
+ });
144
+ server.registerTool("fred_get_releases", {
145
+ title: "Get FRED Releases",
146
+ description: "Get all economic data releases from FRED.",
147
+ inputSchema: z.object({ ...paginationSchema.shape }),
148
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
149
+ }, async ({ limit, offset }) => {
150
+ try {
151
+ const client = getClient();
152
+ const res = await client.getReleases(limit, offset);
153
+ const text = formatReleases(res.releases, res.count);
154
+ return { content: [{ type: "text", text: truncateToLimit(text) }] };
155
+ }
156
+ catch (err) {
157
+ return createApiError(err instanceof Error ? err.message : String(err));
158
+ }
159
+ });
160
+ server.registerTool("fred_get_release_series", {
161
+ title: "Get FRED Release Series",
162
+ description: "Get series belonging to a specific FRED release.",
163
+ inputSchema: z.object({
164
+ release_id: z.number().int().describe("Release ID"),
165
+ ...paginationSchema.shape,
166
+ }),
167
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
168
+ }, async ({ release_id, limit, offset }) => {
169
+ try {
170
+ const client = getClient();
171
+ const res = await client.getReleaseSeries(release_id, limit, offset);
172
+ const text = formatSeriesList(res.seriess, res.count, offset);
173
+ return { content: [{ type: "text", text: truncateToLimit(text) }] };
174
+ }
175
+ catch (err) {
176
+ return createApiError(err instanceof Error ? err.message : String(err));
177
+ }
178
+ });
179
+ server.registerTool("fred_get_sources", {
180
+ title: "Get FRED Sources",
181
+ description: "Get all data sources available in FRED.",
182
+ inputSchema: z.object({}),
183
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
184
+ }, async () => {
185
+ try {
186
+ const client = getClient();
187
+ const res = await client.getSources();
188
+ const text = formatSources(res.sources);
189
+ return { content: [{ type: "text", text }] };
190
+ }
191
+ catch (err) {
192
+ return createApiError(err instanceof Error ? err.message : String(err));
193
+ }
194
+ });
195
+ server.registerTool("fred_get_source", {
196
+ title: "Get FRED Source",
197
+ description: "Get details for a specific FRED data source.",
198
+ inputSchema: z.object({
199
+ source_id: z.number().int().describe("Source ID"),
200
+ }),
201
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
202
+ }, async ({ source_id }) => {
203
+ try {
204
+ const client = getClient();
205
+ const res = await client.getSource(source_id);
206
+ if (!res.sources || res.sources.length === 0) {
207
+ return createNotFoundError(`Source '${source_id}' not found.`);
208
+ }
209
+ const s = res.sources[0];
210
+ const text = [
211
+ `## Source: ${s.name} (ID: ${s.id})`,
212
+ s.link ? `- **Link**: ${s.link}` : "",
213
+ s.notes ? `\n**Notes**: ${s.notes}` : "",
214
+ ]
215
+ .filter(Boolean)
216
+ .join("\n");
217
+ return { content: [{ type: "text", text }] };
218
+ }
219
+ catch (err) {
220
+ return createApiError(err instanceof Error ? err.message : String(err));
221
+ }
222
+ });
223
+ // --- Start Server ---
224
+ async function main() {
225
+ const transport = new StdioServerTransport();
226
+ await server.connect(transport);
227
+ }
228
+ main().catch((err) => {
229
+ console.error("Fatal error:", err);
230
+ process.exit(1);
231
+ });
232
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ export interface FredSeries {
2
+ id: string;
3
+ realtime_start: string;
4
+ realtime_end: string;
5
+ title: string;
6
+ observation_start: string;
7
+ observation_end: string;
8
+ frequency: string;
9
+ frequency_short: string;
10
+ units: string;
11
+ units_short: string;
12
+ seasonal_adjustment: string;
13
+ seasonal_adjustment_short: string;
14
+ last_updated: string;
15
+ popularity: number;
16
+ group_popularity?: number;
17
+ notes?: string;
18
+ }
19
+ export interface FredObservation {
20
+ realtime_start: string;
21
+ realtime_end: string;
22
+ date: string;
23
+ value: string;
24
+ }
25
+ export interface FredSearchResponse {
26
+ realtime_start: string;
27
+ realtime_end: string;
28
+ order_by: string;
29
+ sort_order: string;
30
+ count: number;
31
+ offset: number;
32
+ limit: number;
33
+ seriess: FredSeries[];
34
+ }
35
+ export interface FredSeriesInfoResponse {
36
+ realtime_start: string;
37
+ realtime_end: string;
38
+ seriess: FredSeries[];
39
+ }
40
+ export interface FredObservationsResponse {
41
+ realtime_start: string;
42
+ realtime_end: string;
43
+ observation_start: string;
44
+ observation_end: string;
45
+ units: string;
46
+ output_type: number;
47
+ file_type: string;
48
+ order_by: string;
49
+ sort_order: string;
50
+ count: number;
51
+ offset: number;
52
+ limit: number;
53
+ observations: FredObservation[];
54
+ }
55
+ export interface FredRelease {
56
+ id: number;
57
+ realtime_start: string;
58
+ realtime_end: string;
59
+ name: string;
60
+ press_release: boolean;
61
+ link?: string;
62
+ }
63
+ export interface FredReleasesResponse {
64
+ realtime_start: string;
65
+ realtime_end: string;
66
+ order_by: string;
67
+ sort_order: string;
68
+ count: number;
69
+ offset: number;
70
+ limit: number;
71
+ releases: FredRelease[];
72
+ }
73
+ export interface FredSource {
74
+ id: number;
75
+ realtime_start: string;
76
+ realtime_end: string;
77
+ name: string;
78
+ link?: string;
79
+ notes?: string;
80
+ }
81
+ export interface FredSourcesResponse {
82
+ realtime_start: string;
83
+ realtime_end: string;
84
+ order_by: string;
85
+ sort_order: string;
86
+ count: number;
87
+ offset: number;
88
+ limit: number;
89
+ sources: FredSource[];
90
+ }
91
+ export interface FredCategorySeriesResponse {
92
+ realtime_start: string;
93
+ realtime_end: string;
94
+ order_by: string;
95
+ sort_order: string;
96
+ count: number;
97
+ offset: number;
98
+ limit: number;
99
+ seriess: FredSeries[];
100
+ }
101
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // FRED API Response Types
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,0BAA0B"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@fre4x/fred",
3
+ "version": "1.0.1",
4
+ "description": "A FRED economic data MCP server for LLMs.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "fred": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "typecheck": "tsc --noEmit",
16
+ "prepublishOnly": "npm run build",
17
+ "start": "node dist/index.js",
18
+ "dev": "tsx src/index.ts",
19
+ "watch": "tsc -w"
20
+ },
21
+ "keywords": [
22
+ "mcp",
23
+ "fred",
24
+ "economics",
25
+ "mcp-server",
26
+ "ai"
27
+ ],
28
+ "author": "fritzprix",
29
+ "license": "MIT",
30
+ "dependencies": {
31
+ "@modelcontextprotocol/sdk": "^1.26.0",
32
+ "axios": "^1.13.5",
33
+ "zod": "^4.3.6"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^25.3.0",
37
+ "tsx": "^4.21.0",
38
+ "typescript": "^5.9.3"
39
+ }
40
+ }