search-rotation 0.4.9 → 0.4.11
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 +1 -1
- package/README.md +24 -15
- package/dist/index.js +0 -0
- package/docs/clients.md +10 -8
- package/docs/distribution.md +53 -0
- package/docs/operations.md +1 -1
- package/docs/release-notes.md +43 -6
- package/package.json +6 -5
- package/static/app.js +1 -2
- package/static/index.html +2 -2
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
**One MCP server for web search and page extraction across multiple providers.**
|
|
7
7
|
|
|
8
|
-
Built by [Robin Bially](https://github.com/
|
|
8
|
+
Built by [Robin Bially](https://github.com/robin-bially).
|
|
9
9
|
|
|
10
10
|
Rotate across available quotas, automatically fail over when a provider is unavailable, and return consistent results to your AI assistant. A local dashboard lets you manage API keys, reorder engines, check quotas, and inspect request history.
|
|
11
11
|
|
|
@@ -18,30 +18,35 @@ Rotate across available quotas, automatically fail over when a provider is unava
|
|
|
18
18
|
|
|
19
19
|
## Quick start
|
|
20
20
|
|
|
21
|
+
### npm
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
npx -y search-rotation --http --open
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Requires **Node.js 20.3+**. For MCP over stdio, configure your client to run
|
|
28
|
+
`npx -y search-rotation` with no arguments. The server is also listed in the
|
|
29
|
+
[official MCP Registry](https://registry.modelcontextprotocol.io/?q=io.github.robin-bially%2Fsearch-rotation)
|
|
30
|
+
as `io.github.robin-bially/search-rotation`.
|
|
31
|
+
|
|
21
32
|
### Homebrew
|
|
22
33
|
|
|
23
34
|
```sh
|
|
24
|
-
brew install
|
|
35
|
+
brew install robin-bially/tap/search-rotation
|
|
25
36
|
search-rotation --http --open
|
|
26
37
|
```
|
|
27
38
|
|
|
28
39
|
Homebrew installs the required Node.js runtime. For MCP over stdio, configure your
|
|
29
40
|
client to run `search-rotation` with no arguments. See the
|
|
30
|
-
[
|
|
31
|
-
|
|
32
|
-
### GitHub / npx
|
|
41
|
+
[Homebrew tap](https://github.com/robin-bially/homebrew-tap) for upgrades and details.
|
|
33
42
|
|
|
34
|
-
|
|
43
|
+
### Pinned release from GitHub
|
|
35
44
|
|
|
36
45
|
```sh
|
|
37
|
-
npx -y --allow-git=all github:
|
|
46
|
+
npx -y --allow-git=all github:robin-bially/search-rotation-mcp#v0.4.11
|
|
38
47
|
```
|
|
39
48
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
```sh
|
|
43
|
-
npx -y --allow-git=all github:localfoundry/search-rotation-mcp#v0.4.9 --http --open
|
|
44
|
-
```
|
|
49
|
+
Use this when you want a fixed version instead of the current npm release.
|
|
45
50
|
|
|
46
51
|
Add your provider keys in the dashboard, then connect your assistant using the **[MCP client setup guide](docs/clients.md)** for Codex, Claude, Cursor, or OpenCode.
|
|
47
52
|
|
|
@@ -114,11 +119,15 @@ After updating, reconnect your MCP client to load the new tool schema.
|
|
|
114
119
|
## Releasing
|
|
115
120
|
|
|
116
121
|
```sh
|
|
117
|
-
VERSION=0.4.
|
|
122
|
+
VERSION=0.4.10 ./scripts/release.sh --publish
|
|
118
123
|
```
|
|
119
124
|
|
|
120
|
-
The script checks the package (`npm ci`, build, tests, `npm run smoke:package`), bumps the version, points the document pins at it, commits and tags, packs the tarball with its checksum, creates the GitHub release
|
|
125
|
+
The script checks the package (`npm ci`, build, tests, `npm run smoke:package`), bumps the version, points the document pins at it, commits and tags, packs the tarball with its checksum, creates the GitHub release, updates the formula in `robin-bially/homebrew-tap` and finally waits until the npm registry serves the new version. Without `--publish` it only prepares the artifacts in `.build/releases`; `--dry-run` checks the prerequisites, `--draft` creates a draft release and `--force` tolerates a dirty tree. The tap is cloned temporarily when `TAP_DIR` is not set, so a fresh checkout is enough.
|
|
126
|
+
|
|
127
|
+
Publishing to npm happens in [`.github/workflows/publish.yml`](.github/workflows/publish.yml) through trusted publishing once the GitHub release is published, so the script itself needs no npm credentials. The workflow requires a trusted publisher for `search-rotation` on npmjs.com that points at this repository and `publish.yml`.
|
|
128
|
+
|
|
129
|
+
The same workflow registers the version in the official MCP Registry from `server.json`. [Distribution & listings](docs/distribution.md) tracks every channel, who keeps it current, and what each one still needs.
|
|
121
130
|
|
|
122
131
|
## Learn more
|
|
123
132
|
|
|
124
|
-
[Client setup](docs/clients.md) · [Operations & configuration (DE)](docs/operations.md) · [Releases](https://github.com/
|
|
133
|
+
[Client setup](docs/clients.md) · [Operations & configuration (DE)](docs/operations.md) · [Distribution & listings](docs/distribution.md) · [Releases](https://github.com/robin-bially/search-rotation-mcp/releases) · [CI](https://github.com/robin-bially/search-rotation-mcp/actions/workflows/ci.yml) · [MIT license](LICENSE)
|
package/dist/index.js
CHANGED
|
File without changes
|
package/docs/clients.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
## Homebrew installation
|
|
6
6
|
|
|
7
7
|
```sh
|
|
8
|
-
brew install
|
|
8
|
+
brew install robin-bially/tap/search-rotation
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Homebrew installs Node.js automatically. Set your MCP client's command to
|
|
@@ -36,7 +36,7 @@ Add to `~/.codex/config.toml`:
|
|
|
36
36
|
```toml
|
|
37
37
|
[mcp_servers.search-rotation]
|
|
38
38
|
command = "npx"
|
|
39
|
-
args = ["-y", "
|
|
39
|
+
args = ["-y", "search-rotation"]
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
## Claude Desktop and Cursor
|
|
@@ -48,7 +48,7 @@ Add to Claude Desktop's MCP configuration or Cursor's `.cursor/mcp.json`:
|
|
|
48
48
|
"mcpServers": {
|
|
49
49
|
"search-rotation": {
|
|
50
50
|
"command": "npx",
|
|
51
|
-
"args": ["-y", "
|
|
51
|
+
"args": ["-y", "search-rotation"]
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
}
|
|
@@ -57,7 +57,7 @@ Add to Claude Desktop's MCP configuration or Cursor's `.cursor/mcp.json`:
|
|
|
57
57
|
## Claude Code
|
|
58
58
|
|
|
59
59
|
```sh
|
|
60
|
-
claude mcp add search-rotation -- npx -y
|
|
60
|
+
claude mcp add search-rotation -- npx -y search-rotation
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
## OpenCode V2
|
|
@@ -67,20 +67,22 @@ Add this entry under `mcp.servers`:
|
|
|
67
67
|
```json
|
|
68
68
|
"search-rotation": {
|
|
69
69
|
"type": "local",
|
|
70
|
-
"command": ["npx", "-y", "
|
|
70
|
+
"command": ["npx", "-y", "search-rotation"],
|
|
71
71
|
"codemode": true
|
|
72
72
|
}
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
## Local install or release archive
|
|
76
76
|
|
|
77
|
-
If installed locally, use `search-rotation` as the command. A prebuilt archive is also available under [GitHub Releases](https://github.com/
|
|
77
|
+
If installed locally, use `search-rotation` as the command. A prebuilt archive is also available under [GitHub Releases](https://github.com/robin-bially/search-rotation-mcp/releases/latest):
|
|
78
78
|
|
|
79
79
|
```sh
|
|
80
|
-
npm install -g ./search-rotation-0.4.
|
|
80
|
+
npm install -g ./search-rotation-0.4.11.tgz
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
npx installs the package from the npm registry, so no Git access is required. The pinned
|
|
84
|
+
`github:robin-bially/search-rotation-mcp#vX` form from the README needs `--allow-git=all`
|
|
85
|
+
instead, because npm 12 resolves Git dependencies only when explicitly allowed.
|
|
84
86
|
|
|
85
87
|
For remote HTTP access, authentication and advanced settings, see the [operations guide (German)](operations.md).
|
|
86
88
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Distribution and listings
|
|
2
|
+
|
|
3
|
+
Where search-rotation is published or listed, who keeps each channel current, and
|
|
4
|
+
what still needs attention. Snapshot: 2026-09-26, after the account rename from `localfoundry` to `robin-bially` and the 0.4.11 release.
|
|
5
|
+
|
|
6
|
+
## Channels
|
|
7
|
+
|
|
8
|
+
| Channel | Entry | Kept current by | State |
|
|
9
|
+
| --- | --- | --- | --- |
|
|
10
|
+
| npm | `search-rotation` | release workflow, trusted publishing | 0.4.10; 0.4.11 blocked by the stale trusted publisher, see below |
|
|
11
|
+
| Homebrew | `brew install robin-bially/tap/search-rotation` | release script writes the formula | 0.4.11 |
|
|
12
|
+
| Official MCP Registry | `io.github.robin-bially/search-rotation` | release workflow, GitHub OIDC | blocked: the registry verifies the npm package, so it needs 0.4.11 on npm first; `io.github.localfoundry/search-rotation` stays live at 0.4.10 because the registry has no unpublish |
|
|
13
|
+
| GitHub releases | tag, tarball and checksum | release script | v0.4.11 |
|
|
14
|
+
| Glama | [directory entry](https://glama.ai/mcp/servers/robin-bially/search-rotation-mcp), rated A | Glama indexes the repository on its own | listed; the account rename is pending a re-crawl |
|
|
15
|
+
| mcpservers.org | [submission](https://mcpservers.org/de/submit) from 2026-09-26 | reviewed by the site | in review, up to two weeks |
|
|
16
|
+
| PulseMCP | — | ingests the official registry | submissions paused, not listed yet |
|
|
17
|
+
| [punkpeye/awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers/pull/15171) | Search & Data Extraction | maintainers | pull request open, listing checks done |
|
|
18
|
+
| [YuzeHao2023/Awesome-MCP-Servers](https://github.com/YuzeHao2023/Awesome-MCP-Servers/pull/550) | Search & Web | maintainers | pull request open |
|
|
19
|
+
| [ever-works/awesome-mcp-servers](https://github.com/ever-works/awesome-mcp-servers/pull/188) | Web Search | maintainers | pull request open |
|
|
20
|
+
|
|
21
|
+
Channels that build on the official registry follow a release by themselves, so a
|
|
22
|
+
release needs no manual work for them.
|
|
23
|
+
|
|
24
|
+
## What a release updates
|
|
25
|
+
|
|
26
|
+
`VERSION=x.y.z ./scripts/release.sh --publish` runs the checks, bumps the version,
|
|
27
|
+
commits and tags, creates the GitHub release, packs the tarball with its checksum,
|
|
28
|
+
writes the formula in `robin-bially/homebrew-tap`, and waits until npm serves the
|
|
29
|
+
new version. The published release triggers
|
|
30
|
+
[`.github/workflows/publish.yml`](../.github/workflows/publish.yml), which pushes
|
|
31
|
+
the package to npm with provenance and then registers the same version in the
|
|
32
|
+
official MCP Registry from `server.json` and the `mcpName` field of
|
|
33
|
+
`package.json`.
|
|
34
|
+
|
|
35
|
+
Four details are easy to forget:
|
|
36
|
+
|
|
37
|
+
- `server.json` and `mcpName` must name the same server; `test/registry-manifest.test.ts` fails when they drift apart.
|
|
38
|
+
- The registry limits `description` to 100 characters.
|
|
39
|
+
- The registry verifies ownership through the published npm package, so a manifest can only be registered once that version exists on npm. The workflow skips an already published version, which makes a re-run safe.
|
|
40
|
+
- npm trusted publishing is bound to one repository. The entry for `search-rotation` still named `localfoundry/search-rotation-mcp`, so the 0.4.11 publish failed with `404 Not Found - PUT https://registry.npmjs.org/search-rotation`. Repair with `npm trust github search-rotation --file publish.yml --repo robin-bially/search-rotation-mcp --allow-publish`, then revoke the stale entry (`npm trust list search-rotation`, `npm trust revoke search-rotation --id=<id>`) and re-run the publish workflow. Both commands ask for a one-time password in the browser. The old owner name is free again, so the stale entry also lets a stranger publish to this package.
|
|
41
|
+
|
|
42
|
+
## Recurring checks
|
|
43
|
+
|
|
44
|
+
- After a release: `npm view search-rotation version` and the [registry entry](https://registry.modelcontextprotocol.io/?q=io.github.robin-bially%2Fsearch-rotation) should both show the new version. The release script already waits for npm, but a failed publish workflow leaves the release and the tap ahead of npm, as with 0.4.11.
|
|
45
|
+
- Dependency and tap maintenance runs outside this repository on a biweekly schedule.
|
|
46
|
+
- The GitHub account moved from `localfoundry` to `robin-bially` on 2026-09-26. The registry has no unpublish, so the entry `io.github.localfoundry/search-rotation` stays frozen at 0.4.10 while the next release adds `io.github.robin-bially/search-rotation`. The old handle is free again, so anything still pointing there can end up at a different account.
|
|
47
|
+
- Open externally: mcpservers.org reviews the submission, PulseMCP is paused, the three list pull requests wait for their maintainers, and Glama re-crawls repositories at its own pace.
|
|
48
|
+
|
|
49
|
+
## Deliberately not used
|
|
50
|
+
|
|
51
|
+
Directories that require a new account before a submission (Glama's own form,
|
|
52
|
+
mcp.so) are skipped. The Glama listing exists because Glama indexes public GitHub
|
|
53
|
+
repositories without a submission; it picked up the repository rename by itself.
|
package/docs/operations.md
CHANGED
|
@@ -26,7 +26,7 @@ Der Gratis-Modus ist **keine Ausgabengarantie**: andere Anwendungen können dass
|
|
|
26
26
|
## Remote-Betrieb (Streamable HTTP)
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
npx -y
|
|
29
|
+
npx -y search-rotation --http --host 0.0.0.0 --port 6277 --public-origin https://search.example.com --token <geheim>
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
Client-Config (Claude):
|
package/docs/release-notes.md
CHANGED
|
@@ -1,15 +1,52 @@
|
|
|
1
|
+
## v0.4.11 — Distribution under the robin-bially account
|
|
2
|
+
|
|
3
|
+
The GitHub account moved from `localfoundry` to `robin-bially`, so every distribution
|
|
4
|
+
path follows: the Homebrew tap is `robin-bially/tap`, the official MCP Registry
|
|
5
|
+
namespace becomes `io.github.robin-bially/search-rotation`, and the npm metadata now
|
|
6
|
+
points at the renamed repository. The package itself is unchanged, so there is no
|
|
7
|
+
behaviour change and no configuration migration.
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
brew update && brew upgrade robin-bially/tap/search-rotation
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Or run the pinned GitHub version:
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
npx -y --allow-git=all github:robin-bially/search-rotation-mcp#v0.4.11
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
## v0.4.10 — npm distribution and MCP Registry metadata
|
|
21
|
+
|
|
22
|
+
The package now ships through npm as well, so `npx -y search-rotation` installs the
|
|
23
|
+
latest release without Git. Publishing runs in the release workflow through npm
|
|
24
|
+
trusted publishing, and `mcpName` plus `server.json` carry the metadata for the
|
|
25
|
+
official MCP Registry.
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
brew update && brew upgrade robin-bially/tap/search-rotation
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Or run the pinned GitHub version:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
npx -y --allow-git=all github:robin-bially/search-rotation-mcp#v0.4.10
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
|
|
1
38
|
## v0.4.9 — Updated Node type definitions
|
|
2
39
|
|
|
3
40
|
Routine maintenance release: the Node type definitions move to 26.6.3. No behaviour change and no configuration migration. The GitHub release page now shows only the notes for the current version instead of the whole changelog.
|
|
4
41
|
|
|
5
42
|
```sh
|
|
6
|
-
brew update && brew upgrade
|
|
43
|
+
brew update && brew upgrade robin-bially/tap/search-rotation
|
|
7
44
|
```
|
|
8
45
|
|
|
9
46
|
Or run the pinned GitHub version:
|
|
10
47
|
|
|
11
48
|
```sh
|
|
12
|
-
npx -y --allow-git=all github:
|
|
49
|
+
npx -y --allow-git=all github:robin-bially/search-rotation-mcp#v0.4.9
|
|
13
50
|
```
|
|
14
51
|
|
|
15
52
|
|
|
@@ -18,13 +55,13 @@ npx -y --allow-git=all github:localfoundry/search-rotation-mcp#v0.4.9
|
|
|
18
55
|
Routine maintenance release: the MCP SDK moves to 1.30.1, Hono to 4.13.9, Zod to 4.6.5, tsx to 4.23.15 and the Node type definitions to 26.6.2, together with the matching transitive updates (jose, proxy-addr, ip-address, fast-uri, undici-types). No behaviour change and no configuration migration.
|
|
19
56
|
|
|
20
57
|
```sh
|
|
21
|
-
brew update && brew upgrade
|
|
58
|
+
brew update && brew upgrade robin-bially/tap/search-rotation
|
|
22
59
|
```
|
|
23
60
|
|
|
24
61
|
Or run the pinned GitHub version:
|
|
25
62
|
|
|
26
63
|
```sh
|
|
27
|
-
npx -y --allow-git=all github:
|
|
64
|
+
npx -y --allow-git=all github:robin-bially/search-rotation-mcp#v0.4.8
|
|
28
65
|
```
|
|
29
66
|
|
|
30
67
|
|
|
@@ -42,11 +79,11 @@ Engine call counts are now visible with or without an API key. Search, fetch, an
|
|
|
42
79
|
No configuration migration is required. Reconnect MCP clients after updating.
|
|
43
80
|
|
|
44
81
|
```sh
|
|
45
|
-
brew update && brew upgrade
|
|
82
|
+
brew update && brew upgrade robin-bially/tap/search-rotation
|
|
46
83
|
```
|
|
47
84
|
|
|
48
85
|
Or run the pinned GitHub version:
|
|
49
86
|
|
|
50
87
|
```sh
|
|
51
|
-
npx -y --allow-git=all github:
|
|
88
|
+
npx -y --allow-git=all github:robin-bially/search-rotation-mcp#v0.4.7
|
|
52
89
|
```
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "search-rotation",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.11",
|
|
4
|
+
"mcpName": "io.github.robin-bially/search-rotation",
|
|
4
5
|
"description": "Round-robin web search over the free tiers of multiple search APIs (Tavily, Firecrawl, Parallel, Exa, Google PSE, Jina, DuckDuckGo) as an MCP server — with a local dashboard for API keys, engine order/toggles and live quota status.",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"license": "MIT",
|
|
7
8
|
"author": {
|
|
8
9
|
"name": "Robin Bially",
|
|
9
|
-
"url": "https://github.com/
|
|
10
|
+
"url": "https://github.com/robin-bially"
|
|
10
11
|
},
|
|
11
12
|
"bin": {
|
|
12
13
|
"search-rotation": "dist/index.js"
|
|
@@ -56,10 +57,10 @@
|
|
|
56
57
|
},
|
|
57
58
|
"repository": {
|
|
58
59
|
"type": "git",
|
|
59
|
-
"url": "git+https://github.com/
|
|
60
|
+
"url": "git+https://github.com/robin-bially/search-rotation-mcp.git"
|
|
60
61
|
},
|
|
61
|
-
"homepage": "https://github.com/
|
|
62
|
+
"homepage": "https://github.com/robin-bially/search-rotation-mcp#readme",
|
|
62
63
|
"bugs": {
|
|
63
|
-
"url": "https://github.com/
|
|
64
|
+
"url": "https://github.com/robin-bially/search-rotation-mcp/issues"
|
|
64
65
|
}
|
|
65
66
|
}
|
package/static/app.js
CHANGED
|
@@ -462,8 +462,7 @@ function sparkline(entries) {
|
|
|
462
462
|
|
|
463
463
|
function renderSnippets() {
|
|
464
464
|
const remoteUrl = location.origin + "/mcp";
|
|
465
|
-
const
|
|
466
|
-
const args = ["-y", "--allow-git=all", packageRef];
|
|
465
|
+
const args = ["-y", "search-rotation"];
|
|
467
466
|
const codex = $("#snip-codex");
|
|
468
467
|
if (!codex) return;
|
|
469
468
|
codex.textContent = '[mcp_servers.search-rotation]\ncommand = "npx"\nargs = ' + JSON.stringify(args);
|
package/static/index.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<title>search-rotation
|
|
6
|
+
<title>search-rotation</title>
|
|
7
7
|
<meta name="theme-color" content="#0a0c12">
|
|
8
8
|
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%238b7cf7'/%3E%3Cstop offset='1' stop-color='%234dd8e6'/%3E%3C/linearGradient%3E%3C/defs%3E%3Ccircle cx='16' cy='16' r='14' fill='none' stroke='url(%23g)' stroke-width='3.5' stroke-dasharray='66 22' stroke-linecap='round'/%3E%3Ccircle cx='16' cy='16' r='4.5' fill='url(%23g)'/%3E%3C/svg%3E">
|
|
9
9
|
<link rel="stylesheet" href="/style.css">
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
<main class="view" id="view" aria-live="polite"></main>
|
|
84
84
|
|
|
85
85
|
<footer class="footer">
|
|
86
|
-
<span><strong>
|
|
86
|
+
<span><strong>Robin Bially</strong> · <span data-i18n="footer.text"></span></span>
|
|
87
87
|
<span class="footer-meta"><code id="configpath"></code></span>
|
|
88
88
|
</footer>
|
|
89
89
|
|