@pipeworx/mcp-ecb 0.1.5 → 0.1.6
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 +2 -2
- package/package.json +3 -3
- package/server.json +1 -1
- package/src/index.ts +23 -1
- package/src/server.ts +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
European Central Bank Data Portal MCP — exchange rates, interest rates, monetary aggregates, HICP, bank lending. No auth.
|
|
4
4
|
|
|
5
|
-
Part of [Pipeworx](https://pipeworx.io) — an MCP gateway connecting AI agents to
|
|
5
|
+
Part of [Pipeworx](https://pipeworx.io) — an MCP gateway connecting AI agents to 1881+ live data sources. This is an independent, unofficial integration — not affiliated with, endorsed by, or published by the upstream provider.
|
|
6
6
|
|
|
7
7
|
## Tools
|
|
8
8
|
|
|
@@ -71,7 +71,7 @@ directly, instead of just this one's:
|
|
|
71
71
|
}
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
Both URLs reach the same gateway and the same
|
|
74
|
+
Both URLs reach the same gateway and the same 1881+ data sources. The
|
|
75
75
|
only difference is which pack's tools are listed **directly**; `ask_pipeworx`
|
|
76
76
|
reaches all of them from either one.
|
|
77
77
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pipeworx/mcp-ecb",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "ECB Data Portal MCP — European Central Bank statistical data",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"@cloudflare/workers-types": "^4.20260405.1"
|
|
27
27
|
},
|
|
28
28
|
"pipeworx": {
|
|
29
|
-
"sourceHash": "v1-
|
|
30
|
-
"sourceCommit": "
|
|
29
|
+
"sourceHash": "v1-0c919aa84baead00fcec6845dd177b1997a602cf9d00824ea0d26f48a1c787b2",
|
|
30
|
+
"sourceCommit": "24e32b525f9c0b2fd7d94b519b08abb108cc11cd"
|
|
31
31
|
}
|
|
32
32
|
}
|
package/server.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "io.github.pipeworx-io/ecb",
|
|
4
4
|
"title": "Ecb",
|
|
5
5
|
"description": "ECB Data Portal MCP — European Central Bank statistical data",
|
|
6
|
-
"version": "0.1.
|
|
6
|
+
"version": "0.1.6",
|
|
7
7
|
"websiteUrl": "https://pipeworx.io/packs/ecb",
|
|
8
8
|
"repository": {
|
|
9
9
|
"url": "https://github.com/pipeworx-io/mcp-ecb",
|
package/src/index.ts
CHANGED
|
@@ -1177,8 +1177,30 @@ async function hicpInflation(args: Record<string, unknown>) {
|
|
|
1177
1177
|
});
|
|
1178
1178
|
}
|
|
1179
1179
|
|
|
1180
|
+
/**
|
|
1181
|
+
* An ECB Data Portal series key is written FLOW.dim.dim..., e.g.
|
|
1182
|
+
* MIR.M.IT.B.A2C.A.R.A.2250.EUR.P, so callers hand the whole string over as
|
|
1183
|
+
* flow_ref, or repeat the flow id at the head of key (fleet #3669). The ECB has
|
|
1184
|
+
* no series whose first dimension equals its own flow id (the first dimension
|
|
1185
|
+
* is FREQ), so stripping that prefix cannot change the meaning of a well-formed
|
|
1186
|
+
* call; it only turns a guaranteed 404 into the series the caller named.
|
|
1187
|
+
*/
|
|
1188
|
+
function splitFlowPrefixedKey(flow: string, key: string): { flow: string; key: string } {
|
|
1189
|
+
const flowDot = flow.indexOf('.');
|
|
1190
|
+
if (flowDot > 0) {
|
|
1191
|
+
// flow_ref carries the whole key ("MIR.M.IT...."). An explicit key that is
|
|
1192
|
+
// not the same remainder wins nothing - the dotted flow_ref is the series.
|
|
1193
|
+
return { flow: flow.slice(0, flowDot), key: flow.slice(flowDot + 1) };
|
|
1194
|
+
}
|
|
1195
|
+
if (key.startsWith(flow + '.')) return { flow, key: key.slice(flow.length + 1) };
|
|
1196
|
+
return { flow, key };
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1180
1199
|
async function getData(args: Record<string, unknown>) {
|
|
1181
|
-
|
|
1200
|
+
const flowArg = reqStr(args, 'flow_ref', '"EXR"').trim();
|
|
1201
|
+
const keyArg = flowArg.includes('.') && args.key == null ? '' : reqStr(args, 'key', '"D.USD.EUR.SP00.A"').trim();
|
|
1202
|
+
const split = splitFlowPrefixedKey(flowArg, keyArg);
|
|
1203
|
+
return fetchData(split.flow, split.key, {
|
|
1182
1204
|
start_period: args.start_period as string | undefined,
|
|
1183
1205
|
end_period: args.end_period as string | undefined,
|
|
1184
1206
|
last_n: args.last_n as number | undefined,
|