@allratestoday/mcp-server 0.3.3 → 0.3.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/README.md +36 -23
- package/dist/client.js +1 -1
- package/dist/index.js +7 -7
- package/package.json +8 -7
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# AllRatesToday MCP Server
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@allratestoday/mcp-server)
|
|
4
4
|
[](https://www.npmjs.com/package/@allratestoday/mcp-server)
|
|
@@ -9,7 +9,7 @@ English | [简体中文](./README-zh-CN.md)
|
|
|
9
9
|
|
|
10
10
|
> Give your AI coding assistant a live window into the foreign-exchange market.
|
|
11
11
|
|
|
12
|
-
A Model Context Protocol server that lets **Claude Code**, **Cursor**, **Claude Desktop**, **Windsurf**, and any other MCP-compatible client fetch real-time currency rates, historical data, and multi-currency lookups.
|
|
12
|
+
A Model Context Protocol server that lets **Claude Code**, **Cursor**, **Claude Desktop**, **Windsurf**, and any other MCP-compatible client fetch real-time currency rates, historical data, and multi-currency lookups from the [AllRatesToday API](https://allratestoday.com).
|
|
13
13
|
|
|
14
14
|
After installation, your assistant can answer questions like:
|
|
15
15
|
|
|
@@ -35,6 +35,7 @@ After installation, your assistant can answer questions like:
|
|
|
35
35
|
- [Verify it works](#verify-it-works)
|
|
36
36
|
- [Tools reference](#tools-reference)
|
|
37
37
|
- [Environment variables](#environment-variables)
|
|
38
|
+
- [Plans and limits](#plans-and-limits)
|
|
38
39
|
- [Troubleshooting](#troubleshooting)
|
|
39
40
|
- [Error reference](#error-reference)
|
|
40
41
|
- [FAQ](#faq)
|
|
@@ -51,6 +52,7 @@ After installation, your assistant can answer questions like:
|
|
|
51
52
|
|---|---|
|
|
52
53
|
| **Currencies** | 150+ ISO 4217 codes, all major and most exotics |
|
|
53
54
|
| **Update frequency** | Mid-market rates refresh every ~60 seconds |
|
|
55
|
+
| **Data source** | Tier-1 financial data providers (Reuters / Refinitiv-class) |
|
|
54
56
|
| **Historical depth** | Up to 1 year via `1d` / `7d` / `30d` / `1y` granularity |
|
|
55
57
|
| **Tools exposed** | 4 — `get_exchange_rate`, `get_historical_rates`, `get_rates_authenticated`, `list_currencies` |
|
|
56
58
|
| **Transport** | stdio (subprocess), MCP 1.x compatible |
|
|
@@ -60,14 +62,14 @@ After installation, your assistant can answer questions like:
|
|
|
60
62
|
|
|
61
63
|
## Get an API key (required)
|
|
62
64
|
|
|
63
|
-
The server **will not start** without a valid `ALLRATES_API_KEY`.
|
|
65
|
+
The server **will not start** without a valid `ALLRATES_API_KEY`. A free key is enough for development and personal use — **no credit card required**.
|
|
64
66
|
|
|
65
|
-
1. Register at [allratestoday.com/register](https://allratestoday.com/register)
|
|
67
|
+
1. Register at [allratestoday.com/register](https://allratestoday.com/register) — 30 seconds
|
|
66
68
|
2. Verify your email
|
|
67
69
|
3. Copy your key from the dashboard (format: `art_live_xxxxx`)
|
|
68
70
|
4. Use it as `ALLRATES_API_KEY` in the configs below
|
|
69
71
|
|
|
70
|
-
If
|
|
72
|
+
If you forget, the server prints clear registration instructions on stderr and exits with code 1.
|
|
71
73
|
|
|
72
74
|
---
|
|
73
75
|
|
|
@@ -203,7 +205,7 @@ After configuring your client, test in this order:
|
|
|
203
205
|
|
|
204
206
|
## Tools reference
|
|
205
207
|
|
|
206
|
-
All four tools require
|
|
208
|
+
All four tools require `ALLRATES_API_KEY`.
|
|
207
209
|
|
|
208
210
|
### `get_exchange_rate`
|
|
209
211
|
|
|
@@ -332,13 +334,19 @@ You set these in your MCP client's config (in the `env` block) — not in your s
|
|
|
332
334
|
|
|
333
335
|
---
|
|
334
336
|
|
|
337
|
+
## Plans
|
|
338
|
+
|
|
339
|
+
A free tier and paid plans are available. See [allratestoday.com/pricing](https://allratestoday.com/pricing) for current quotas. All plans include the same currency coverage and historical depth — only the request quotas differ.
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
335
343
|
## Troubleshooting
|
|
336
344
|
|
|
337
345
|
| Symptom | Likely cause | Fix |
|
|
338
346
|
|---|---|---|
|
|
339
347
|
| Client shows "MCP server failed to start" or red dot | `ALLRATES_API_KEY` not set or invalid | Verify the key in your client config; check it matches the dashboard |
|
|
340
|
-
| Tools show but every call returns "Invalid API key" | Key is malformed (missing prefix, truncated, or revoked) | Copy a fresh key from the dashboard |
|
|
341
|
-
| Tools return "API quota exceeded" |
|
|
348
|
+
| Tools show but every call returns "Invalid AllRatesToday API key" | Key is malformed (missing prefix, truncated, or revoked) | Copy a fresh key from the dashboard |
|
|
349
|
+
| Tools return "AllRatesToday API quota exceeded" | Free-tier monthly limit hit | Wait until next month or upgrade plan |
|
|
342
350
|
| Historical tool returns "Bad request" | Invalid period or unknown currency code | Period must be `1d`/`7d`/`30d`/`1y`; codes must be 3 letters |
|
|
343
351
|
| Server starts but tools never appear in client | Client didn't reload after config change | Fully quit (not just close) and reopen the client |
|
|
344
352
|
| `npx` runs but hangs forever | The server is waiting for an MCP client to connect — this is normal when run from a shell | Don't run from a shell; let your MCP client launch it |
|
|
@@ -363,9 +371,9 @@ The server maps API errors to clear, actionable messages.
|
|
|
363
371
|
|---|---|---|
|
|
364
372
|
| 200 | Success | (rate returned) |
|
|
365
373
|
| 400 | Bad request — usually unknown currency code | `Bad request — possibly an unknown currency code` |
|
|
366
|
-
| 401 | Invalid or missing API key | `Invalid API key` |
|
|
367
|
-
| 429 | Quota exceeded | `API quota exceeded` |
|
|
368
|
-
| 5xx |
|
|
374
|
+
| 401 | Invalid or missing API key | `Invalid AllRatesToday API key` |
|
|
375
|
+
| 429 | Quota exceeded | `AllRatesToday API quota exceeded` |
|
|
376
|
+
| 5xx | Server-side issue at allratestoday.com | `HTTP 5xx — <upstream message>` |
|
|
369
377
|
|
|
370
378
|
The LLM will surface these messages in its response, so a user prompt that hits a 429 results in the assistant saying *"the API quota has been exceeded — please try again next month or upgrade your plan."*
|
|
371
379
|
|
|
@@ -373,20 +381,23 @@ The LLM will surface these messages in its response, so a user prompt that hits
|
|
|
373
381
|
|
|
374
382
|
## FAQ
|
|
375
383
|
|
|
384
|
+
**Is the free plan really enough for normal use?**
|
|
385
|
+
Yes for personal/dev use. The free tier covers a few daily questions. Heavy interactive use, multiple chat sessions per day, or running the server in production should consider the paid tiers.
|
|
386
|
+
|
|
376
387
|
**Do you store my conversation or query data?**
|
|
377
|
-
No. Only your API key and the request parameters (source, target, period, time) are sent to
|
|
388
|
+
No. Only your API key and the request parameters (source, target, period, time) are sent to allratestoday.com — never the LLM's conversation context, sheet contents, or anything else.
|
|
378
389
|
|
|
379
390
|
**What happens to my API key?**
|
|
380
|
-
It's only sent as a `Bearer` token in the `Authorization` header on requests to the
|
|
391
|
+
It's only sent as a `Bearer` token in the `Authorization` header on requests to the AllRatesToday API. It's never logged or transmitted elsewhere.
|
|
381
392
|
|
|
382
393
|
**Why is my historical request slow on first call?**
|
|
383
|
-
Cold-start of `npx` (first run downloads the package) plus
|
|
394
|
+
Cold-start of `npx` (first run downloads the package) plus the initial AllRatesToday cache miss. Subsequent calls are fast (<200ms typically).
|
|
384
395
|
|
|
385
396
|
**Can I run this without npm/Node?**
|
|
386
397
|
Not currently — Node ≥18 is required. We've considered a standalone binary; if that matters to you, open an issue.
|
|
387
398
|
|
|
388
399
|
**Is there a self-hosted option?**
|
|
389
|
-
Yes, set `ALLRATES_BASE_URL` to
|
|
400
|
+
Yes, set `ALLRATES_BASE_URL` to your own AllRatesToday instance. Contact support@allratestoday.com for self-hosted licensing.
|
|
390
401
|
|
|
391
402
|
**Does this work with ChatGPT?**
|
|
392
403
|
The Anthropic MCP standard works with any MCP-compatible client. ChatGPT Desktop has experimental MCP support; check OpenAI's docs for current status.
|
|
@@ -396,8 +407,8 @@ The Anthropic MCP standard works with any MCP-compatible client. ChatGPT Desktop
|
|
|
396
407
|
## Development
|
|
397
408
|
|
|
398
409
|
```bash
|
|
399
|
-
git clone https://github.com/cahthuranag/
|
|
400
|
-
cd
|
|
410
|
+
git clone https://github.com/cahthuranag/mcp-server.git
|
|
411
|
+
cd mcp-server
|
|
401
412
|
npm install
|
|
402
413
|
npm run build
|
|
403
414
|
ALLRATES_API_KEY=art_live_xxxxx node dist/index.js
|
|
@@ -411,7 +422,7 @@ To watch and rebuild on changes during development:
|
|
|
411
422
|
npm run dev
|
|
412
423
|
```
|
|
413
424
|
|
|
414
|
-
To test against a local instance:
|
|
425
|
+
To test against a local AllRatesToday instance:
|
|
415
426
|
|
|
416
427
|
```bash
|
|
417
428
|
ALLRATES_BASE_URL=http://localhost:8080/api ALLRATES_API_KEY=test_key node dist/index.js
|
|
@@ -422,7 +433,7 @@ ALLRATES_BASE_URL=http://localhost:8080/api ALLRATES_API_KEY=test_key node dist/
|
|
|
422
433
|
```
|
|
423
434
|
src/
|
|
424
435
|
├── index.ts # MCP server, tool registration, request handlers
|
|
425
|
-
└── client.ts # HTTP client + error mapping
|
|
436
|
+
└── client.ts # HTTP client for AllRatesToday API + error mapping
|
|
426
437
|
dist/ # Compiled JS (gitignored)
|
|
427
438
|
server.json # MCP registry manifest
|
|
428
439
|
package.json # npm metadata, dependencies, scripts
|
|
@@ -430,10 +441,10 @@ package.json # npm metadata, dependencies, scripts
|
|
|
430
441
|
|
|
431
442
|
### Contributing
|
|
432
443
|
|
|
433
|
-
Issues and PRs welcome at [github.com/cahthuranag/
|
|
444
|
+
Issues and PRs welcome at [github.com/cahthuranag/mcp-server](https://github.com/cahthuranag/mcp-server). Before opening a PR:
|
|
434
445
|
|
|
435
446
|
1. `npm run build` should succeed with no errors
|
|
436
|
-
2. Test against a real API key (set in `ALLRATES_API_KEY`)
|
|
447
|
+
2. Test against a real AllRatesToday API key (set in `ALLRATES_API_KEY`)
|
|
437
448
|
3. Update tool descriptions in `src/index.ts` if you change tool behavior
|
|
438
449
|
4. Update this README's "Tools reference" section if you add or rename a tool
|
|
439
450
|
|
|
@@ -441,7 +452,7 @@ Issues and PRs welcome at [github.com/cahthuranag/realtime-exchange-rate-mcp](ht
|
|
|
441
452
|
|
|
442
453
|
## Changelog
|
|
443
454
|
|
|
444
|
-
See [GitHub Releases](https://github.com/cahthuranag/
|
|
455
|
+
See [GitHub Releases](https://github.com/cahthuranag/mcp-server/releases) for the full list. Recent highlights:
|
|
445
456
|
|
|
446
457
|
- **0.3.x** — API key required for all tools; fail-fast at startup with clear error
|
|
447
458
|
- **0.2.x** — Removed news tool, required auth on `get_historical_rates`
|
|
@@ -451,8 +462,10 @@ See [GitHub Releases](https://github.com/cahthuranag/realtime-exchange-rate-mcp/
|
|
|
451
462
|
|
|
452
463
|
## Support
|
|
453
464
|
|
|
454
|
-
- **
|
|
465
|
+
- **API issues**: [support@allratestoday.com](mailto:support@allratestoday.com)
|
|
466
|
+
- **Bug reports**: [github.com/cahthuranag/mcp-server/issues](https://github.com/cahthuranag/mcp-server/issues)
|
|
455
467
|
- **MCP questions**: [modelcontextprotocol.io](https://modelcontextprotocol.io) — protocol docs
|
|
468
|
+
- **Status / uptime**: [allratestoday.com](https://allratestoday.com) (status page in development)
|
|
456
469
|
|
|
457
470
|
---
|
|
458
471
|
|
package/dist/client.js
CHANGED
|
@@ -30,7 +30,7 @@ export class AllRatesTodayClient {
|
|
|
30
30
|
'User-Agent': USER_AGENT,
|
|
31
31
|
};
|
|
32
32
|
if (!this.apiKey) {
|
|
33
|
-
throw new AllRatesTodayError('API key is required.
|
|
33
|
+
throw new AllRatesTodayError('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.');
|
|
34
34
|
}
|
|
35
35
|
headers['Authorization'] = `Bearer ${this.apiKey}`;
|
|
36
36
|
const res = await this.fetchImpl(url.toString(), { method: 'GET', headers });
|
package/dist/index.js
CHANGED
|
@@ -12,7 +12,7 @@ const CCY = {
|
|
|
12
12
|
const tools = [
|
|
13
13
|
{
|
|
14
14
|
name: 'get_exchange_rate',
|
|
15
|
-
description: 'Get the current mid-market exchange rate between two currencies. Returns a single rate number. Requires API key (ALLRATES_API_KEY).',
|
|
15
|
+
description: 'Get the current mid-market exchange rate between two currencies. Returns a single rate number. Requires a free AllRatesToday API key (ALLRATES_API_KEY) — sign up at https://allratestoday.com/register.',
|
|
16
16
|
inputSchema: {
|
|
17
17
|
type: 'object',
|
|
18
18
|
additionalProperties: false,
|
|
@@ -25,7 +25,7 @@ const tools = [
|
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
name: 'get_historical_rates',
|
|
28
|
-
description: 'Get historical exchange-rate data points for a currency pair over a period. Periods: 1d (hourly), 7d (daily), 30d (daily), 1y (weekly). Requires API key (ALLRATES_API_KEY).',
|
|
28
|
+
description: 'Get historical exchange-rate data points for a currency pair over a period. Periods: 1d (hourly), 7d (daily), 30d (daily), 1y (weekly). Requires an AllRatesToday API key (ALLRATES_API_KEY).',
|
|
29
29
|
inputSchema: {
|
|
30
30
|
type: 'object',
|
|
31
31
|
additionalProperties: false,
|
|
@@ -44,7 +44,7 @@ const tools = [
|
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
name: 'get_rates_authenticated',
|
|
47
|
-
description: 'Get rates with higher limits and multi-target support. Requires API key (ALLRATES_API_KEY). Supports comma-separated targets like "EUR,GBP,JPY".',
|
|
47
|
+
description: 'Get rates with higher limits and multi-target support. Requires an AllRatesToday API key (ALLRATES_API_KEY). Supports comma-separated targets like "EUR,GBP,JPY".',
|
|
48
48
|
inputSchema: {
|
|
49
49
|
type: 'object',
|
|
50
50
|
additionalProperties: false,
|
|
@@ -70,7 +70,7 @@ const tools = [
|
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
name: 'list_currencies',
|
|
73
|
-
description: 'List all supported currencies with code, name, and symbol. Requires API key (ALLRATES_API_KEY). Cached 24h upstream.',
|
|
73
|
+
description: 'List all supported currencies with code, name, and symbol. Requires a free AllRatesToday API key (ALLRATES_API_KEY) — sign up at https://allratestoday.com/register. Cached 24h upstream.',
|
|
74
74
|
inputSchema: { type: 'object', additionalProperties: false, properties: {} },
|
|
75
75
|
},
|
|
76
76
|
];
|
|
@@ -83,9 +83,9 @@ async function main() {
|
|
|
83
83
|
if (!apiKey) {
|
|
84
84
|
console.error([
|
|
85
85
|
'',
|
|
86
|
-
'
|
|
86
|
+
' AllRatesToday MCP server requires an API key.',
|
|
87
87
|
'',
|
|
88
|
-
' 1.
|
|
88
|
+
' 1. Sign up free at https://allratestoday.com/register (300 requests/month, no card required)',
|
|
89
89
|
' 2. Copy your API key from the dashboard',
|
|
90
90
|
' 3. Set ALLRATES_API_KEY in your MCP client config:',
|
|
91
91
|
'',
|
|
@@ -102,7 +102,7 @@ async function main() {
|
|
|
102
102
|
apiKey,
|
|
103
103
|
baseUrl: process.env.ALLRATES_BASE_URL,
|
|
104
104
|
});
|
|
105
|
-
const server = new Server({ name: '
|
|
105
|
+
const server = new Server({ name: 'allratestoday-mcp', version: '0.3.1' }, { capabilities: { tools: {} } });
|
|
106
106
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools }));
|
|
107
107
|
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
108
108
|
const { name, arguments: args = {} } = req.params;
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@allratestoday/mcp-server",
|
|
3
|
-
"version": "0.3.
|
|
4
|
-
"mcpName": "io.github.cahthuranag/
|
|
5
|
-
"description": "MCP server
|
|
3
|
+
"version": "0.3.4",
|
|
4
|
+
"mcpName": "io.github.cahthuranag/mcp-server",
|
|
5
|
+
"description": "MCP server for AllRatesToday — let AI coding tools (Claude Code, Cursor, Claude Desktop) fetch real-time and historical currency exchange rates.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"mcp",
|
|
8
8
|
"model-context-protocol",
|
|
@@ -10,15 +10,16 @@
|
|
|
10
10
|
"cursor",
|
|
11
11
|
"currency",
|
|
12
12
|
"exchange-rate",
|
|
13
|
-
"forex"
|
|
13
|
+
"forex",
|
|
14
|
+
"allratestoday"
|
|
14
15
|
],
|
|
15
16
|
"license": "MIT",
|
|
16
|
-
"homepage": "https://
|
|
17
|
+
"homepage": "https://allratestoday.com",
|
|
17
18
|
"repository": {
|
|
18
19
|
"type": "git",
|
|
19
|
-
"url": "git+https://github.com/cahthuranag/
|
|
20
|
+
"url": "git+https://github.com/cahthuranag/mcp-server.git"
|
|
20
21
|
},
|
|
21
|
-
"bugs": "https://github.com/cahthuranag/
|
|
22
|
+
"bugs": "https://github.com/cahthuranag/mcp-server/issues",
|
|
22
23
|
"type": "module",
|
|
23
24
|
"main": "dist/index.js",
|
|
24
25
|
"bin": {
|