@allratestoday/central-bank-mcp 0.1.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 AllRatesToday
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,110 @@
1
+ # Central Bank Rates MCP Server — @allratestoday/central-bank-mcp
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@allratestoday/central-bank-mcp.svg)](https://www.npmjs.com/package/@allratestoday/central-bank-mcp)
4
+ [![npm downloads](https://img.shields.io/npm/dm/@allratestoday/central-bank-mcp.svg)](https://www.npmjs.com/package/@allratestoday/central-bank-mcp)
5
+ [![license](https://img.shields.io/npm/l/@allratestoday/central-bank-mcp.svg)](./LICENSE)
6
+ [![MCP](https://img.shields.io/badge/Model%20Context%20Protocol-1.x-blue.svg)](https://modelcontextprotocol.io)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6.svg)](https://www.typescriptlang.org/)
8
+
9
+ **Give your AI assistant the official exchange rates that compliance, tax, and accounting actually require. A Model Context Protocol server that lets Claude Code, Cursor, Claude Desktop, Windsurf, and any MCP-compatible client fetch published central-bank and tax-authority rates from 60+ institutions — ECB, Fed, Bank of Japan, HMRC, US Treasury, and more — via the [AllRatesToday API](https://allratestoday.com/central-bank-rates-api/).**
10
+
11
+ After installation, your assistant can answer questions like:
12
+
13
+ - *"What is the ECB's official USD/EUR rate today?"*
14
+ - *"What HMRC rate should I use for this March invoice?"*
15
+ - *"Show me the Bank of Japan's official rate for every day of Q1."*
16
+ - *"Compare the official USD/LKR rate across every central bank that publishes one."*
17
+
18
+ ## ⚖️ Official rates vs mid-market rates
19
+
20
+ Everything this server returns is an **official published rate**: fixed once the institution publishes it, carrying that institution's own publication date — the number tax authorities, auditors, and customs require. It is *not* the live market rate. For **live mid-market rates** (price display, conversion, anything that should track the market), use the companion server [`@allratestoday/mcp-server`](https://www.npmjs.com/package/@allratestoday/mcp-server). The two can diverge by several percent — pick by use case. Methodology: [allratestoday.com/official-rates-methodology](https://allratestoday.com/official-rates-methodology/).
21
+
22
+ ## 🚀 Why this server?
23
+
24
+ - 🏛️ **60+ official sources** — central banks (ECB, Fed, BOJ, SNB, RBI, …) plus tax authorities (HMRC, US Treasury, …), each served from its own published tables
25
+ - 📅 **Point-in-time correctness** — ask for any date; weekends and holidays roll back to the rate legally in force, and the response tells you which publication date applied
26
+ - 📊 **Cross-bank comparison** — one call returns every institution's rate for a pair, with min/max/median and spread stats
27
+ - 🧮 **Honest derivations** — pairs a bank doesn't publish directly are cross-computed only within that bank's own table and flagged `derived`; banks are never mixed
28
+ - 🧰 **Five focused tools** — small surface, easy for the model to use correctly
29
+ - 🔌 **Works everywhere MCP does** — stdio transport, MCP 1.x; Claude Code, Cursor, Claude Desktop, Windsurf, or any generic host
30
+
31
+ ## 🔑 Get your API key
32
+
33
+ The server **will not start** without a valid `ALLRATES_API_KEY`. A free key covers the latest published tables — **no credit card required**. Dated tables and history need a paid plan.
34
+
35
+ 1. Register at [allratestoday.com/register](https://allratestoday.com/register) — 30 seconds
36
+ 2. Verify your email
37
+ 3. Copy your key from the dashboard (format: `art_live_xxxxx`)
38
+ 4. Use it as `ALLRATES_API_KEY` in the configs below
39
+
40
+ ## 📦 Installation
41
+
42
+ ```bash
43
+ # Run without installing (recommended)
44
+ npx -y @allratestoday/central-bank-mcp
45
+ ```
46
+
47
+ ```bash
48
+ # Or install globally
49
+ npm install -g @allratestoday/central-bank-mcp
50
+ central-bank-mcp
51
+ ```
52
+
53
+ Both commands launch the stdio MCP server and wait for a client to connect — your MCP client launches them as a subprocess.
54
+
55
+ ## 🏁 Quick setup per client
56
+
57
+ ### Claude Code
58
+
59
+ ```bash
60
+ claude mcp add central-bank-rates -- npx -y @allratestoday/central-bank-mcp
61
+ claude mcp env central-bank-rates ALLRATES_API_KEY=art_live_xxxxx
62
+ ```
63
+
64
+ Restart Claude Code. Verify by asking: *"Which central banks can you fetch official rates from?"*
65
+
66
+ ### Cursor
67
+
68
+ Edit `~/.cursor/mcp.json` (or `.cursor/mcp.json` inside your project):
69
+
70
+ ```json
71
+ {
72
+ "mcpServers": {
73
+ "central-bank-rates": {
74
+ "command": "npx",
75
+ "args": ["-y", "@allratestoday/central-bank-mcp"],
76
+ "env": {
77
+ "ALLRATES_API_KEY": "art_live_xxxxx"
78
+ }
79
+ }
80
+ }
81
+ }
82
+ ```
83
+
84
+ ### Claude Desktop
85
+
86
+ Edit `claude_desktop_config.json` (Settings → Developer → Edit Config) and add the same `mcpServers` block as the Cursor example above, then restart Claude Desktop.
87
+
88
+ ## 🧰 Tools
89
+
90
+ | Tool | What it does | Plan |
91
+ |---|---|---|
92
+ | `list_central_banks` | All covered institutions with codes, metadata, latest date | Free |
93
+ | `get_official_rates` | A bank's published table (or one pair), latest or for a given date | Free (latest) / Paid (dated) |
94
+ | `get_official_rate_history` | Date-by-date official series for one pair | Paid, billed ~1 call per month covered |
95
+ | `compare_official_rates` | One pair across every bank, with spread stats | Free |
96
+ | `get_publication_calendar` | Dates a bank actually published (no values) | Free |
97
+
98
+ ## 🔒 Privacy
99
+
100
+ Only the request parameters and your API key ever reach allratestoday.com — never conversation context.
101
+
102
+ ## 📚 More from AllRatesToday
103
+
104
+ - [Central bank REST API docs](https://allratestoday.com/central-bank-rates-api/)
105
+ - [Per-bank npm SDKs](https://github.com/AllRates-Today)
106
+ - [`@allratestoday/mcp-server`](https://www.npmjs.com/package/@allratestoday/mcp-server) — live mid-market rates MCP server
107
+
108
+ ## License
109
+
110
+ MIT © AllRatesToday
@@ -0,0 +1,45 @@
1
+ export interface ClientOptions {
2
+ apiKey?: string;
3
+ baseUrl?: string;
4
+ fetchImpl?: typeof fetch;
5
+ }
6
+ export declare class CentralBankApiError extends Error {
7
+ readonly status?: number | undefined;
8
+ readonly body?: unknown;
9
+ constructor(message: string, status?: number | undefined, body?: unknown);
10
+ }
11
+ export interface CbRate {
12
+ base: string;
13
+ quote: string;
14
+ type: string;
15
+ value: number;
16
+ }
17
+ export declare class CentralBankClient {
18
+ private readonly apiKey?;
19
+ private readonly baseUrl;
20
+ private readonly fetchImpl;
21
+ constructor(options?: ClientOptions);
22
+ private request;
23
+ listBanks(): Promise<{
24
+ banks: Array<Record<string, unknown>>;
25
+ disclaimer: string;
26
+ }>;
27
+ getRates(bank: string, opts?: {
28
+ date?: string;
29
+ source?: string;
30
+ target?: string;
31
+ }): Promise<Record<string, unknown>>;
32
+ getHistory(bank: string, opts: {
33
+ symbol?: string;
34
+ source?: string;
35
+ target?: string;
36
+ from?: string;
37
+ to?: string;
38
+ }): Promise<Record<string, unknown>>;
39
+ compareBanks(source: string, target: string): Promise<Record<string, unknown>>;
40
+ getAvailability(bank: string, opts: {
41
+ year?: string;
42
+ from?: string;
43
+ to?: string;
44
+ }): Promise<Record<string, unknown>>;
45
+ }
package/dist/client.js ADDED
@@ -0,0 +1,90 @@
1
+ import { VERSION } from './version.js';
2
+ const DEFAULT_BASE_URL = 'https://allratestoday.com/api';
3
+ export class CentralBankApiError extends Error {
4
+ status;
5
+ body;
6
+ constructor(message, status, body) {
7
+ super(message);
8
+ this.status = status;
9
+ this.body = body;
10
+ this.name = 'CentralBankApiError';
11
+ }
12
+ }
13
+ function errorMessage(status, upstream) {
14
+ switch (status) {
15
+ case 400:
16
+ return upstream ?? 'Bad request — check the bank code, currency codes, or date format';
17
+ case 401:
18
+ return 'Invalid AllRatesToday API key';
19
+ case 402:
20
+ case 403:
21
+ return upstream ?? 'This endpoint requires a paid AllRatesToday plan';
22
+ case 404:
23
+ return upstream ?? 'Unknown bank code or unsupported currency pair for this bank';
24
+ case 429:
25
+ return 'AllRatesToday API quota exceeded';
26
+ default:
27
+ return upstream ? `HTTP ${status} — ${upstream}` : `HTTP ${status}`;
28
+ }
29
+ }
30
+ export class CentralBankClient {
31
+ apiKey;
32
+ baseUrl;
33
+ fetchImpl;
34
+ constructor(options = {}) {
35
+ this.apiKey = options.apiKey;
36
+ this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, '');
37
+ this.fetchImpl = options.fetchImpl ?? fetch;
38
+ }
39
+ async request(path, query = {}) {
40
+ const url = new URL(this.baseUrl + path);
41
+ for (const [key, value] of Object.entries(query)) {
42
+ if (value !== undefined && value !== '')
43
+ url.searchParams.set(key, value);
44
+ }
45
+ if (!this.apiKey) {
46
+ throw new CentralBankApiError('AllRatesToday API key is required. Sign up free at https://allratestoday.com/register to get a key, then set ALLRATES_API_KEY in your MCP config.');
47
+ }
48
+ const headers = {
49
+ 'Accept': 'application/json',
50
+ 'User-Agent': `central-bank-mcp/${VERSION}`,
51
+ 'Authorization': `Bearer ${this.apiKey}`,
52
+ };
53
+ const res = await this.fetchImpl(url.toString(), { method: 'GET', headers });
54
+ const text = await res.text();
55
+ let body;
56
+ try {
57
+ body = text ? JSON.parse(text) : null;
58
+ }
59
+ catch {
60
+ body = text;
61
+ }
62
+ if (!res.ok) {
63
+ const upstream = body && typeof body === 'object' && 'error' in body && typeof body.error === 'string'
64
+ ? body.error
65
+ : undefined;
66
+ throw new CentralBankApiError(errorMessage(res.status, upstream), res.status, body);
67
+ }
68
+ return body;
69
+ }
70
+ listBanks() {
71
+ return this.request('/v1/central-banks');
72
+ }
73
+ // date undefined -> /latest; date given -> /{YYYY-MM-DD} (paid plans).
74
+ getRates(bank, opts = {}) {
75
+ const path = `/v1/central-bank/${encodeURIComponent(bank)}/${opts.date ?? 'latest'}`;
76
+ return this.request(path, {
77
+ source: opts.source,
78
+ target: opts.target,
79
+ });
80
+ }
81
+ getHistory(bank, opts) {
82
+ return this.request(`/v1/central-bank/${encodeURIComponent(bank)}/history`, opts);
83
+ }
84
+ compareBanks(source, target) {
85
+ return this.request('/v1/central-banks/rates', { source, target });
86
+ }
87
+ getAvailability(bank, opts) {
88
+ return this.request(`/v1/central-bank/${encodeURIComponent(bank)}/availability`, opts);
89
+ }
90
+ }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,172 @@
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 { CentralBankClient, CentralBankApiError } from './client.js';
6
+ import { VERSION } from './version.js';
7
+ const BANK_DESC = "Bank/authority code as returned by list_central_banks (lowercase, e.g. 'ecb', 'fed', 'boj', 'hmrc', 'cbsl'). Call list_central_banks first if unsure — codes are short abbreviations of the institution, not country codes.";
8
+ const bank = z
9
+ .string()
10
+ .regex(/^[a-z0-9-]{2,20}$/i, 'must be a bank code like ecb, fed, boj — see list_central_banks')
11
+ .describe(BANK_DESC);
12
+ const ccy = z
13
+ .string()
14
+ .regex(/^[A-Za-z]{3}$/, 'must be a 3-letter ISO 4217 currency code')
15
+ .describe("ISO 4217 currency code, 3 letters, case-insensitive (e.g. 'USD', 'EUR', 'LKR').");
16
+ const isoDate = z
17
+ .string()
18
+ .regex(/^\d{4}-\d{2}-\d{2}$/, 'must be YYYY-MM-DD')
19
+ .describe('Calendar date in YYYY-MM-DD format.');
20
+ const READ_ONLY = { readOnlyHint: true, openWorldHint: true };
21
+ function ok(structured) {
22
+ return {
23
+ content: [{ type: 'text', text: JSON.stringify(structured, null, 2) }],
24
+ structuredContent: structured,
25
+ };
26
+ }
27
+ function fail(err) {
28
+ const message = err instanceof CentralBankApiError
29
+ ? `AllRatesToday error${err.status ? ` (${err.status})` : ''}: ${err.message}`
30
+ : err instanceof Error
31
+ ? err.message
32
+ : String(err);
33
+ return { content: [{ type: 'text', text: message }], isError: true };
34
+ }
35
+ async function main() {
36
+ const apiKey = process.env.ALLRATES_API_KEY;
37
+ if (!apiKey) {
38
+ console.error([
39
+ '',
40
+ ' AllRatesToday central-bank MCP server requires an API key.',
41
+ '',
42
+ ' 1. Sign up free at https://allratestoday.com/register (free tier — no card required)',
43
+ ' 2. Copy your API key from the dashboard',
44
+ ' 3. Set ALLRATES_API_KEY in your MCP client config:',
45
+ '',
46
+ ' "central-bank-rates": {',
47
+ ' "command": "npx",',
48
+ ' "args": ["-y", "@allratestoday/central-bank-mcp"],',
49
+ ' "env": { "ALLRATES_API_KEY": "art_live_..." }',
50
+ ' }',
51
+ '',
52
+ ].join('\n'));
53
+ process.exit(1);
54
+ }
55
+ const client = new CentralBankClient({
56
+ apiKey,
57
+ baseUrl: process.env.ALLRATES_BASE_URL,
58
+ });
59
+ const server = new McpServer({ name: 'central-bank-mcp', version: VERSION });
60
+ server.registerTool('list_central_banks', {
61
+ title: 'List covered central banks & tax authorities',
62
+ description: "Call this FIRST when you need a bank code, or when the user asks 'which central banks do you cover?' or 'do you have rates from X?'. Returns { banks: [{ code, name, country, home_ccy, rate_types, latest date, ... }], disclaimer } for 60+ institutions — central banks (ECB, Fed, BOJ, ...) plus tax authorities (HMRC, US Treasury, ...). The `code` field is what every other tool takes as its `bank` parameter. Cheap to call.",
63
+ inputSchema: {},
64
+ annotations: READ_ONLY,
65
+ }, async () => {
66
+ try {
67
+ return ok(await client.listBanks());
68
+ }
69
+ catch (err) {
70
+ return fail(err);
71
+ }
72
+ });
73
+ server.registerTool('get_official_rates', {
74
+ title: "Get a bank's official published rates",
75
+ description: "Use this for OFFICIAL rates a specific institution published — 'what is the ECB rate for USD?', 'Bank of Japan official rate on 2026-03-14', 'HMRC rate for invoicing'. These are the fixed rates in force for compliance, tax, customs, and accounting — NOT live market rates. Omit `date` for the newest published table; give `date` (paid plans) for the table in force on that day (weekends/holidays roll back to the last published date — the response's rate_date says which). Omit source/target for the bank's full table { rates: [{ base, quote, type, value }] }; give both for one pair — cross-computed via the bank's own home currency when not directly published, flagged `derived`. For live mid-market rates use the @allratestoday/mcp-server package instead.",
76
+ inputSchema: {
77
+ bank,
78
+ date: isoDate
79
+ .optional()
80
+ .describe('Optional YYYY-MM-DD. Omit for the latest published table (all plans). A specific date requires a paid plan.'),
81
+ source: ccy.optional().describe('Optional. With target, narrows to one pair.'),
82
+ target: ccy.optional().describe('Optional. With source, narrows to one pair.'),
83
+ },
84
+ annotations: READ_ONLY,
85
+ }, async ({ bank: bankCode, date, source, target }) => {
86
+ try {
87
+ if ((source && !target) || (!source && target)) {
88
+ return fail(new Error('Provide both source and target, or neither.'));
89
+ }
90
+ return ok(await client.getRates(bankCode.toLowerCase(), {
91
+ date,
92
+ source: source?.toUpperCase(),
93
+ target: target?.toUpperCase(),
94
+ }));
95
+ }
96
+ catch (err) {
97
+ return fail(err);
98
+ }
99
+ });
100
+ server.registerTool('get_official_rate_history', {
101
+ title: "Get a bank's official rate history",
102
+ description: "Use this for a date-by-date series of one bank's OFFICIAL rates — 'ECB USD rate for every day of 2025', 'how did the CBSL official rate move last quarter'. Returns one row per published date: { series: [{ date, rate, rate_type, derived, method }] }. Give either `symbol` (matches either side of the pair vs the bank's home currency) or a source+target pair. Defaults to the last year when from/to omitted. Paid plans only, and BILLED BY VOLUME: one API call per month of history covered (a year-long series costs ~12 calls) — keep ranges as narrow as the question needs. For publication dates without values (free) use get_publication_calendar.",
103
+ inputSchema: {
104
+ bank,
105
+ symbol: ccy
106
+ .optional()
107
+ .describe("One currency vs the bank's home currency, e.g. 'USD'. Alternative to source+target."),
108
+ source: ccy.optional(),
109
+ target: ccy.optional(),
110
+ from: isoDate.optional().describe('Start date. Defaults to one year ago.'),
111
+ to: isoDate.optional().describe('End date. Defaults to today.'),
112
+ },
113
+ annotations: READ_ONLY,
114
+ }, async ({ bank: bankCode, symbol, source, target, from, to }) => {
115
+ try {
116
+ if (!symbol && !(source && target)) {
117
+ return fail(new Error('Provide either symbol, or both source and target.'));
118
+ }
119
+ return ok(await client.getHistory(bankCode.toLowerCase(), {
120
+ symbol: symbol?.toUpperCase(),
121
+ source: source?.toUpperCase(),
122
+ target: target?.toUpperCase(),
123
+ from,
124
+ to,
125
+ }));
126
+ }
127
+ catch (err) {
128
+ return fail(err);
129
+ }
130
+ });
131
+ server.registerTool('compare_official_rates', {
132
+ title: 'Compare one pair across every bank',
133
+ description: "Use this when the user wants one currency pair across ALL institutions at once — 'what does each central bank say USD/EUR is?', 'spread between official USD/LKR rates', 'which bank has the highest official rate for X?'. One call returns every covered bank's latest official rate for the pair plus spread stats { min, max, median, spread_bps } over fresh sources (stale quarterly publishers are returned but excluded from stats). Rates a bank doesn't publish directly are cross-computed within that bank's own table only — banks are never mixed. Methodology: https://allratestoday.com/official-rates-methodology/",
134
+ inputSchema: { source: ccy, target: ccy },
135
+ annotations: READ_ONLY,
136
+ }, async ({ source, target }) => {
137
+ try {
138
+ return ok(await client.compareBanks(source.toUpperCase(), target.toUpperCase()));
139
+ }
140
+ catch (err) {
141
+ return fail(err);
142
+ }
143
+ });
144
+ server.registerTool('get_publication_calendar', {
145
+ title: "Get a bank's publication calendar",
146
+ description: "Use this to see WHICH dates a bank actually published a rate table — 'did the ECB publish on 2026-01-01?', 'how often does the US Treasury publish?'. Returns dates only, no rate values, so it is available on every plan (unlike history). Gaps reveal weekends, holidays, and weekly/quarterly publication cadence. Give ?year=YYYY or a from/to range; large ranges are capped and flagged `truncated`.",
147
+ inputSchema: {
148
+ bank,
149
+ year: z
150
+ .string()
151
+ .regex(/^\d{4}$/, 'must be YYYY')
152
+ .optional()
153
+ .describe("Whole calendar year, e.g. '2026'. Alternative to from/to."),
154
+ from: isoDate.optional(),
155
+ to: isoDate.optional(),
156
+ },
157
+ annotations: READ_ONLY,
158
+ }, async ({ bank: bankCode, year, from, to }) => {
159
+ try {
160
+ return ok(await client.getAvailability(bankCode.toLowerCase(), { year, from, to }));
161
+ }
162
+ catch (err) {
163
+ return fail(err);
164
+ }
165
+ });
166
+ const transport = new StdioServerTransport();
167
+ await server.connect(transport);
168
+ }
169
+ main().catch((err) => {
170
+ console.error('Fatal:', err);
171
+ process.exit(1);
172
+ });
@@ -0,0 +1 @@
1
+ export declare const VERSION: string;
@@ -0,0 +1,3 @@
1
+ import { createRequire } from 'node:module';
2
+ const require = createRequire(import.meta.url);
3
+ export const VERSION = require('../package.json').version;
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@allratestoday/central-bank-mcp",
3
+ "version": "0.1.0",
4
+ "mcpName": "io.github.cahthuranag/central-bank-mcp",
5
+ "description": "MCP server for official central-bank and tax-authority exchange rates — let AI tools (Claude Code, Cursor, Claude Desktop) fetch published rates from 60+ institutions (ECB, Fed, HMRC, BOJ, ...) via the AllRatesToday API.",
6
+ "keywords": [
7
+ "mcp",
8
+ "model-context-protocol",
9
+ "claude",
10
+ "cursor",
11
+ "central-bank",
12
+ "official-rates",
13
+ "exchange-rate",
14
+ "ecb",
15
+ "tax",
16
+ "allratestoday"
17
+ ],
18
+ "license": "MIT",
19
+ "homepage": "https://allratestoday.com/central-bank-rates-api/",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/AllRates-Today/central-bank-mcp.git"
23
+ },
24
+ "bugs": "https://github.com/AllRates-Today/central-bank-mcp/issues",
25
+ "type": "module",
26
+ "main": "dist/index.js",
27
+ "bin": {
28
+ "central-bank-mcp": "dist/index.js"
29
+ },
30
+ "files": [
31
+ "dist",
32
+ "README.md",
33
+ "LICENSE"
34
+ ],
35
+ "engines": {
36
+ "node": ">=18"
37
+ },
38
+ "scripts": {
39
+ "build": "tsc",
40
+ "test": "node --test test/*.test.mjs",
41
+ "prepublishOnly": "npm run build",
42
+ "start": "node dist/index.js",
43
+ "dev": "tsc --watch"
44
+ },
45
+ "dependencies": {
46
+ "@modelcontextprotocol/sdk": "^1.29.0",
47
+ "zod": "^4.4.3"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^26.1.1",
51
+ "typescript": "^7.0.2"
52
+ }
53
+ }