viafrei 1.4.8 → 1.4.9
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/API.md +4 -4
- package/CHANGELOG.md +161 -1
- package/SOURCES.md +26 -7
- package/package.json +5 -1
package/API.md
CHANGED
|
@@ -9,7 +9,7 @@ the server's own text, reproduced verbatim, because that text is what an
|
|
|
9
9
|
assistant reads when it decides which tool to call; paraphrasing it here would
|
|
10
10
|
document a different server.
|
|
11
11
|
|
|
12
|
-
**It is a dated snapshot, taken on 2026-
|
|
12
|
+
**It is a dated snapshot, taken on 2026-10-01.** Generating this file makes
|
|
13
13
|
it impossible for the document and the snapshot to disagree — CI regenerates and
|
|
14
14
|
compares — but it cannot keep the snapshot from ageing against the live server,
|
|
15
15
|
because a capture is a point in time. **The source of truth is the running
|
|
@@ -17,11 +17,11 @@ server:** connect any MCP client and call `tools/list`.
|
|
|
17
17
|
|
|
18
18
|
| | |
|
|
19
19
|
| --- | --- |
|
|
20
|
-
| Server | `viafrei` 1.4.
|
|
20
|
+
| Server | `viafrei` 1.4.9 |
|
|
21
21
|
| MCP protocol | `2025-06-18` |
|
|
22
22
|
| Streamable HTTP | https://mcp.viafrei.de/mcp |
|
|
23
23
|
| Legacy HTTP+SSE | https://mcp.viafrei.de/sse |
|
|
24
|
-
| Captured from | `https://mcp.viafrei.de/mcp` on 2026-
|
|
24
|
+
| Captured from | `https://mcp.viafrei.de/mcp` on 2026-10-01 |
|
|
25
25
|
| Surface | 19 tools, 10 resources, 2 resource templates, 9 prompts |
|
|
26
26
|
| Parameter schemas | JSON Schema draft-07 |
|
|
27
27
|
| Capabilities | `tools`, `resources`, `prompts`, `logging` |
|
|
@@ -655,5 +655,5 @@ single call.
|
|
|
655
655
|
---
|
|
656
656
|
|
|
657
657
|
Generated from `catalogue.json` by `scripts/gen-api-doc.mjs`. The snapshot was
|
|
658
|
-
read from `https://mcp.viafrei.de/mcp` on 2026-
|
|
658
|
+
read from `https://mcp.viafrei.de/mcp` on 2026-10-01; no tool was invoked to
|
|
659
659
|
produce it, so no data provider was contacted.
|
package/CHANGELOG.md
CHANGED
|
@@ -5,7 +5,166 @@ a Changelog and the versions follow Semantic Versioning.
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
## [1.4.9] - 2026-10-01
|
|
9
|
+
|
|
10
|
+
**Mirrors the server.** The bridge is versioned to match the ViaFrei MCP server
|
|
11
|
+
it relays to, and prod moved to 1.4.9; this release carries the three changes
|
|
12
|
+
that had been waiting under `[Unreleased]` for a number to mirror. The shipped
|
|
13
|
+
reference was re-captured from the running server at the cut, and the probe that
|
|
14
|
+
did it reported the surface **unchanged** — only the version string and the
|
|
15
|
+
capture date moved.
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **The sources page is now checked against the catalogue snapshot** (`scripts/check-sources.mjs`,
|
|
20
|
+
`npm run check:sources`), in CI and in the publish workflow (#32).
|
|
21
|
+
|
|
22
|
+
`SOURCES.md` states counts *about the server* — how many tools it exposes, how many are
|
|
23
|
+
read-only, which are fuel and therefore excluded from its spot check. Nothing compared
|
|
24
|
+
them with `catalogue.json`, which ships in the same tarball and holds the answers, and
|
|
25
|
+
the page spent two releases describing a server it no longer matched.
|
|
26
|
+
|
|
27
|
+
**Offline on purpose, and that is what makes it worth having.** Both files already ship
|
|
28
|
+
together, so this needs no network and runs on every push rather than at the cut. It
|
|
29
|
+
would have caught all three defects of the previous entry, including the one that got
|
|
30
|
+
past a first review round: the **derived** call count is computed as read-only minus the
|
|
31
|
+
excluded fuel tools, never read from the prose, because that is the one number on the
|
|
32
|
+
page a reader might act on.
|
|
33
|
+
|
|
34
|
+
The licence arm is the one that matters: a fuel tool present in the snapshot and not
|
|
35
|
+
named by the page is a failure, because that exclusion is an MTS-K condition rather
|
|
36
|
+
than a convenience, and a tool counts as fuel-constrained if its NAME says so **or**
|
|
37
|
+
its DESCRIPTION names the provider — measured on this snapshot, both fuel tools name
|
|
38
|
+
theirs in prose and no other tool does, so a rename alone cannot hide one. `npm run
|
|
39
|
+
test:sources` prints the case count; no number is written here, because this entry's
|
|
40
|
+
first draft stated one and it was stale within the round.
|
|
41
|
+
|
|
42
|
+
Two limits are pinned rather than assumed. A fuel rule gone inert REFUSES (exit 2)
|
|
43
|
+
instead of reporting an empty excluded set. And a tool renamed away from `fuel` *whose
|
|
44
|
+
description also stops naming the provider* matches neither arm and is not on the floor,
|
|
45
|
+
so that one still fails through the arithmetic, with a message about a call count rather
|
|
46
|
+
than about an unprotected tool. That is the honest reach of two text rules, and the
|
|
47
|
+
weaker behaviour is asserted rather than hoped for.
|
|
48
|
+
|
|
49
|
+
- **A cut-time probe that compares the shipped reference with the running server**
|
|
50
|
+
(`scripts/probe-catalogue.mjs`, `npm run probe:catalogue`; `--write` re-captures) (#33).
|
|
51
|
+
|
|
52
|
+
At the 1.4.6 cut the shipped reference described server 1.3.22 and omitted a tool the
|
|
53
|
+
server exposed. `check:docs` passed throughout — it proves `API.md` matches
|
|
54
|
+
`catalogue.json`, so **a stale pair passes together**. Nothing compared either with the
|
|
55
|
+
server.
|
|
56
|
+
|
|
57
|
+
**It is deliberately not a CI step.** This repository's test posture is that CI reaches
|
|
58
|
+
nothing, which is why every other check here is offline; a comparison with the running
|
|
59
|
+
server needs a network call, so this is run by a person at the cut and is the only
|
|
60
|
+
script here that touches the network. It is named `probe:` rather than `check:` so that
|
|
61
|
+
distinction is visible in `package.json`.
|
|
62
|
+
|
|
63
|
+
Read-only: `initialize` and the four list calls, **no tool invoked**, session deleted
|
|
64
|
+
afterwards. That is a licence requirement and not courtesy — the fuel source sets a
|
|
65
|
+
per-station floor.
|
|
66
|
+
|
|
67
|
+
**Its report distinguishes WRONG from DATED**, because those are the two real histories
|
|
68
|
+
and they need different remedies: 1.4.6's reference omitted a tool, which misleads a
|
|
69
|
+
reader about what they are holding; 1.4.8's had only a stale version string. Reporting
|
|
70
|
+
one as the other would be worse than no probe. Ten self-test cases, none of which touch
|
|
71
|
+
the network — every one runs against a local stub — including both halves of that
|
|
72
|
+
distinction, an empty list refused rather than compared equal, and `--write` proved to
|
|
73
|
+
produce a snapshot the comparator then accepts.
|
|
74
|
+
|
|
75
|
+
- **`runToolAsync`** in `scripts/tools.mjs`, with the same deadline and refusal as
|
|
76
|
+
`runTool`. The synchronous runner blocks the caller's event loop, so a caller that is
|
|
77
|
+
itself serving the child cannot use it — the probe's self-test serves a stub in-process
|
|
78
|
+
and spawns the probe against it, and every case deadlocked until this existed. Added to
|
|
79
|
+
the one `SPAWNERS` array the bare-name sweep derives from, so it is covered by the same
|
|
80
|
+
rule as its sibling rather than being a quiet exemption.
|
|
81
|
+
|
|
82
|
+
### Fixed
|
|
83
|
+
|
|
84
|
+
- **Both CI deprecation warnings, in both workflows.** `build-and-test` was emitting two
|
|
85
|
+
notices: the Node-20 runtime of `actions/checkout@v4` and `actions/setup-node@v4` is
|
|
86
|
+
deprecated and GitHub is already forcing those actions onto Node 24, and the
|
|
87
|
+
`ubuntu-latest` label migrates to Ubuntu 26 from 2026-10-19.
|
|
88
|
+
|
|
89
|
+
**The warning named one workflow; the measurement named two.** `publish.yml` pinned both
|
|
90
|
+
actions by commit sha, which looked like the careful half of the repository — but
|
|
91
|
+
`action.yml` at each of those pinned shas declares `using: node20`. So the workflow that
|
|
92
|
+
publishes to npm was on the deprecated runtime too and said nothing about it, because a
|
|
93
|
+
sha pin does not report its own age. A fix confined to `ci.yml` would have cleared the
|
|
94
|
+
log and left the publish path exactly where it was.
|
|
95
|
+
|
|
96
|
+
Both files now pin the same runner image, `ubuntu-24.04`, and the same two actions by
|
|
97
|
+
sha: checkout **v7.0.1** and setup-node **v7.0.0**, resolved from the API rather than
|
|
98
|
+
transcribed, and each verified to declare `using: node24` at the sha actually pinned —
|
|
99
|
+
which is what closes the notice rather than deferring it. That also leaves one version
|
|
100
|
+
of each action in the repository instead of two.
|
|
101
|
+
|
|
102
|
+
**v7, not v5, and it is a three-major move.** v5 clears today's warning and leaves this
|
|
103
|
+
repository two majors behind the same deadline. The first draft of this entry described
|
|
104
|
+
v7.0.0's release notes and called them the only behaviour change — true of that release,
|
|
105
|
+
false of the upgrade, and the paragraph's whole job is to justify the size of the jump.
|
|
106
|
+
|
|
107
|
+
The jump was therefore checked mechanically instead, which is shorter and re-runnable:
|
|
108
|
+
**diff the declared input sets at the two shas.** Across v4.4.0 → v7.0.0 setup-node
|
|
109
|
+
removes exactly one input, `always-auth`, and adds `package-manager-cache`; checkout
|
|
110
|
+
removes and adds none. Between them the two workflows pass four inputs — `node-version`,
|
|
111
|
+
`registry-url`, `cache` and `fetch-depth` — and all four are still declared, so the
|
|
112
|
+
`registry-url` → `.npmrc` path the publish depends on is intact.
|
|
113
|
+
|
|
114
|
+
The breaking changes the intervening majors do declare are inert here, by enumeration
|
|
115
|
+
rather than by assumption: setup-node v5's automatic package-manager detection and v6's
|
|
116
|
+
narrowing of it to npm cannot apply, because both jobs pass `cache: npm` explicitly and
|
|
117
|
+
this `package.json` has no `packageManager` field; checkout v5's minimum runner version
|
|
118
|
+
(2.327.1) is far below what GitHub-hosted runners run; checkout v7's refusal to check out
|
|
119
|
+
a fork's head applies to `pull_request_target` and `workflow_run`, neither of which
|
|
120
|
+
appears anywhere under `.github/`; and setup-node v7's removal of the dummy
|
|
121
|
+
`NODE_AUTH_TOKEN` export is an **improvement** on this path — that variable appears
|
|
122
|
+
nowhere in either workflow, and upstream's own pull request says the dummy value could
|
|
123
|
+
corrupt an `.npmrc` during an OIDC publish, which is how publishing here works.
|
|
124
|
+
|
|
125
|
+
One is named rather than waved past, because it touches the publish gate. checkout v6
|
|
126
|
+
moved the persisted git credential into a separate file, and `publish.yml` runs one git
|
|
127
|
+
command that touches the remote after checkout: the `git fetch origin main` the
|
|
128
|
+
tag-containment guard needs (the step's other two, a `rev-parse` and a `merge-base`, are
|
|
129
|
+
local). This repository is public, so that fetch succeeds with or without a credential;
|
|
130
|
+
and if it ever did not, the guard exits **2** and refuses to publish rather than
|
|
131
|
+
publishing a commit `main` does not contain. Fail-closed, so the bad outcome is a blocked
|
|
132
|
+
release and never a wrong one. It is also the one step a `workflow_dispatch` dry run
|
|
133
|
+
cannot exercise, since the guard is gated on a tag.
|
|
134
|
+
|
|
135
|
+
A floating tag is what hid this, so nothing here floats: all four `- uses:` lines in the
|
|
136
|
+
repository are now `@<sha> # vX.Y.Z`, and neither `runs-on` is a label that can change
|
|
137
|
+
under a workflow nobody re-read.
|
|
138
|
+
|
|
139
|
+
Written while prod and the registry were both at 1.4.8, so this said "no version bump:
|
|
140
|
+
there is no number to mirror". Prod moved to 1.4.9 before the cut, so the number now
|
|
141
|
+
exists and this ships under it.
|
|
142
|
+
|
|
143
|
+
- **`SOURCES.md` claimed a measurement that stopped being true, and the stale half is
|
|
144
|
+
a licence condition.** The page said its status column was measured by calling
|
|
145
|
+
"fifteen of the server's sixteen read-only tools — every one except
|
|
146
|
+
`find_cheapest_fuel`". As of the 2026-09-29 capture shipped alongside it, the server
|
|
147
|
+
exposes nineteen tools, seventeen of them read-only, and — this is the part that
|
|
148
|
+
matters — a **second** fuel tool, `find_fuel_station`.
|
|
149
|
+
|
|
150
|
+
The exclusion of `find_cheapest_fuel` is not a convenience: MTS-K sets a minimum
|
|
151
|
+
interval per station and its terms make needless querying a real risk to the access
|
|
152
|
+
itself. That reasoning applies to `find_fuel_station` identically, and the page did
|
|
153
|
+
not name it, so a reader following the page's own method would have called a fuel
|
|
154
|
+
tool the page meant to exclude.
|
|
155
|
+
|
|
156
|
+
The measurement is now scoped to the date and the server it was taken against, the
|
|
157
|
+
growth since is stated, and **both** fuel tools are named as excluded. It is
|
|
158
|
+
deliberately **not** re-run: that would still cost **fifteen** live calls against
|
|
159
|
+
real providers to re-confirm statuses already known — the same fifteen as at the
|
|
160
|
+
original measurement, because the one read-only tool the server gained is the
|
|
161
|
+
second fuel tool and is excluded. Sixteen minus one was fifteen; seventeen minus
|
|
162
|
+
two is fifteen again. Dated on purpose, and said out loud — a measurement carried forward under a present-tense sentence is
|
|
163
|
+
the failure that section exists to avoid.
|
|
164
|
+
|
|
165
|
+
Not released on its own: when it was written prod was at 1.4.8, already published, and
|
|
166
|
+
putting the package a patch ahead of the endpoint it relays to would have been worse than
|
|
167
|
+
waiting. It rode the next version sync, which is this one.
|
|
9
168
|
|
|
10
169
|
## [1.4.8] - 2026-09-29
|
|
11
170
|
|
|
@@ -1292,6 +1451,7 @@ for it, so the number is free; the bridge will use it when the platform does.
|
|
|
1292
1451
|
commits, and a squash makes them unreachable from `main` - which would turn
|
|
1293
1452
|
the check red on `main` for everybody, for something no contributor did.
|
|
1294
1453
|
|
|
1454
|
+
[1.4.9]: https://github.com/mavrovde/viafrei-bridge/releases/tag/v1.4.9
|
|
1295
1455
|
[1.3.22]: https://github.com/mavrovde/viafrei-bridge/releases/tag/v1.3.22
|
|
1296
1456
|
[1.3.16]: https://github.com/mavrovde/viafrei-bridge/releases/tag/v1.3.16
|
|
1297
1457
|
[1.3.15]: https://github.com/mavrovde/viafrei-bridge/releases/tag/v1.3.15
|
package/SOURCES.md
CHANGED
|
@@ -134,13 +134,32 @@ one labelled `not re-measured`** was checked by calling the public endpoint on
|
|
|
134
134
|
**2026-09-27** and reading which source the answer named. A source can be licensed, cleared and loaded and still not answer
|
|
135
135
|
a question today; where that is so, this page says it.
|
|
136
136
|
|
|
137
|
-
The measurement was taken
|
|
138
|
-
tools
|
|
139
|
-
`_meta.sources` out of the result:
|
|
140
|
-
|
|
141
|
-
The tool not called is the one whose row
|
|
142
|
-
the count
|
|
143
|
-
worse than an honest gap.
|
|
137
|
+
The measurement was taken **on 2026-09-27**, when the server exposed sixteen
|
|
138
|
+
read-only tools, by calling **fifteen of them — every one except
|
|
139
|
+
`find_cheapest_fuel`** — once each, and reading `_meta.sources` out of the result:
|
|
140
|
+
not by reading the code, and not by asking whether a feed was running. Thirteen
|
|
141
|
+
sources were named by at least one answer. The tool not called is the one whose row
|
|
142
|
+
is deliberately not re-measured, and the count says so rather than absorbing it: a
|
|
143
|
+
status this page cannot stand behind is worse than an honest gap.
|
|
144
|
+
|
|
145
|
+
**The server has grown since that measurement, and this page has not re-run it.**
|
|
146
|
+
As of the 2026-09-29 capture shipped alongside this page it exposes nineteen tools,
|
|
147
|
+
seventeen of them read-only, including a SECOND fuel tool, `find_fuel_station`.
|
|
148
|
+
That one is excluded from any spot check for exactly the same reason
|
|
149
|
+
`find_cheapest_fuel` is, and the reason is a licence condition rather
|
|
150
|
+
than a convenience: MTS-K sets a minimum interval per station and its terms make
|
|
151
|
+
needless querying a real risk to the access itself. **Both fuel tools are excluded,
|
|
152
|
+
not one.**
|
|
153
|
+
|
|
154
|
+
The sentence above therefore describes what was measured on 2026-09-27 and not what
|
|
155
|
+
the server offers today. Re-running it would still mean **fifteen** live calls
|
|
156
|
+
against real providers — the same fifteen, because the one read-only tool the server
|
|
157
|
+
gained is the second fuel tool, and that one is excluded. Sixteen read-only minus one
|
|
158
|
+
fuel tool was fifteen; seventeen minus two is fifteen again. Those calls would
|
|
159
|
+
re-confirm statuses this page already knows, so it is dated on purpose rather than
|
|
160
|
+
refreshed on a schedule — and dated is said out loud, because a measurement silently
|
|
161
|
+
carried forward under a present-tense sentence is the failure this section exists to
|
|
162
|
+
avoid.
|
|
144
163
|
|
|
145
164
|
- **live** — an answer came back naming it when this page was checked;
|
|
146
165
|
- **in the service** — licensed and loaded, and the spot check produced no
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "viafrei",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.9",
|
|
4
4
|
"description": "German traffic, rail, parking, charging, fuel, address and weather data in your AI assistant - MCP, no API key. stdio bridge to the hosted ViaFrei MCP server.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -75,6 +75,10 @@
|
|
|
75
75
|
"check:versions": "node scripts/check-versions.mjs",
|
|
76
76
|
"docs:api": "node scripts/gen-api-doc.mjs",
|
|
77
77
|
"check:docs": "node scripts/gen-api-doc.mjs --check",
|
|
78
|
+
"check:sources": "node scripts/check-sources.mjs",
|
|
79
|
+
"test:sources": "node scripts/check-sources.test.mjs",
|
|
80
|
+
"probe:catalogue": "node scripts/probe-catalogue.mjs",
|
|
81
|
+
"test:probe": "node scripts/probe-catalogue.test.mjs",
|
|
78
82
|
"rules:show": "node scripts/show-rules.mjs"
|
|
79
83
|
},
|
|
80
84
|
"dependencies": {
|