@linkbunny/mcp 0.1.2 → 0.1.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 +12 -10
- package/dist/index.js +1 -1
- package/dist/skill.md +28 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
# LinkBunny MCP
|
|
2
2
|
|
|
3
|
-
A local stdio MCP server
|
|
3
|
+
A local stdio MCP server that lets your coding agent run LinkBunny nofollow link exchanges for sites you control. Requires Node.js 22 or later and an account API token supplied as `LINKBUNNY_API_TOKEN` in the process environment.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Its official MCP Registry name is `com.getlinkbunny/exchange`.
|
|
6
|
+
|
|
7
|
+
These examples pin the `0.1.4` release.
|
|
6
8
|
|
|
7
9
|
```sh
|
|
8
|
-
npx -y @linkbunny/mcp@0.1.
|
|
10
|
+
npx -y @linkbunny/mcp@0.1.4
|
|
9
11
|
```
|
|
10
12
|
|
|
11
13
|
Your MCP client starts this process and communicates over stdin/stdout. Running the command alone waits for protocol input. npm hosts package files; no LinkBunny MCP process is hosted. API requests go only to `https://api.getlinkbunny.com/v1` over HTTPS. There is no endpoint override, daemon, polling, automatic retry, publication, or tool chaining.
|
|
12
14
|
|
|
13
15
|
## Configure a client
|
|
14
16
|
|
|
15
|
-
See [the copyable MCP setup prompt and client examples](https://getlinkbunny.com/docs/agents#mcp). The MCP prompt is separate from the skill installation prompt. Follow preparation → owner
|
|
17
|
+
See [the copyable MCP setup prompt and client examples](https://getlinkbunny.com/docs/agents#mcp). The MCP prompt is separate from the skill installation prompt. Follow preparation → owner approval of the exact persistent config bundle → registration → native trust/restart → fresh-session discovery.
|
|
16
18
|
|
|
17
19
|
An agent can inspect the project and prepare registration. Before writing persistent client configuration, it must show the owner the exact client, scope, config paths/diff, executable/version, secret-loading path, and trust/restart steps, then request one explicit authorization for that bundle. Preserve unrelated configuration and keep native trust controls enabled.
|
|
18
20
|
|
|
@@ -23,7 +25,7 @@ For [Codex](https://developers.openai.com/codex/mcp), after authorization merge
|
|
|
23
25
|
```toml
|
|
24
26
|
[mcp_servers.linkbunny]
|
|
25
27
|
command = "npx"
|
|
26
|
-
args = ["-y", "@linkbunny/mcp@0.1.
|
|
28
|
+
args = ["-y", "@linkbunny/mcp@0.1.4", "--token-file", "/absolute/project/.env.linkbunny"]
|
|
27
29
|
```
|
|
28
30
|
|
|
29
31
|
Run `codex mcp list` from the intended project to check registration. Have the owner complete native trust, restart the client, and begin a fresh backing session in Codex or Agent Control before discovery. Same-process hot reload is not proven. Use `/mcp` to check the active server.
|
|
@@ -38,7 +40,7 @@ For [Claude Code](https://code.claude.com/docs/en/mcp), after authorization merg
|
|
|
38
40
|
"command": "npx",
|
|
39
41
|
"args": [
|
|
40
42
|
"-y",
|
|
41
|
-
"@linkbunny/mcp@0.1.
|
|
43
|
+
"@linkbunny/mcp@0.1.4",
|
|
42
44
|
"--token-file",
|
|
43
45
|
"/absolute/project/.env.linkbunny"
|
|
44
46
|
]
|
|
@@ -57,7 +59,7 @@ For [VS Code](https://code.visualstudio.com/docs/agents/reference/mcp-configurat
|
|
|
57
59
|
"linkbunny": {
|
|
58
60
|
"type": "stdio",
|
|
59
61
|
"command": "npx",
|
|
60
|
-
"args": ["-y", "@linkbunny/mcp@0.1.
|
|
62
|
+
"args": ["-y", "@linkbunny/mcp@0.1.4"],
|
|
61
63
|
"envFile": "${workspaceFolder}/.env.linkbunny"
|
|
62
64
|
}
|
|
63
65
|
}
|
|
@@ -80,7 +82,7 @@ An explicit file takes precedence over an inherited token; invalid files never f
|
|
|
80
82
|
|
|
81
83
|
A package cached or downloaded by npm is not proof that a server is registered. Check initialization separately after saving the registration. Tokens saved in a secret store or repository environment file are not automatically loaded by the client.
|
|
82
84
|
|
|
83
|
-
In the fresh session, ask the configured client to perform `initialize`, `tools/list`, `resources/list`, and `resources/read` for `linkbunny://guidance/skill`, then call `get_status` once. Expect server version `0.1.
|
|
85
|
+
In the fresh session, ask the configured client to perform `initialize`, `tools/list`, `resources/list`, and `resources/read` for `linkbunny://guidance/skill`, then call `get_status` once. Expect server version `0.1.4`, exactly the six tools below, the guidance text, and a status result. `get_status` is read-only and proves token admission without reserving anything. Do not call any other tool to test configuration: even `check_in` can reserve an assignment. If a client cannot list or read resources, report that part as unverified; reading the web skill does not verify MCP resource access.
|
|
84
86
|
|
|
85
87
|
Discovery and resource reads make no LinkBunny API requests. Startup validates token format locally, so only `get_status` proves API token admission and shows subscription state. For isolated discovery-only testing, use the synthetic example `LINKBUNNY_API_TOKEN=synthetic-discovery-only-not-a-real-token-00000000`. It passes the local format check but cannot authorize real API activity. Never substitute a production token merely to test package startup. Discovery-only tests must not invoke `create_profile`, `update_profile`, `check_in`, `report_assignment`, or `reject_assignment`.
|
|
86
88
|
|
|
@@ -103,7 +105,7 @@ In the MyOG.social comparison, the released `0.1.0` resource matched the live ca
|
|
|
103
105
|
| `report_assignment` | `PUT /assignments/:assignmentID/report` |
|
|
104
106
|
| `reject_assignment` | `PUT /assignments/:assignmentID/reject` |
|
|
105
107
|
|
|
106
|
-
`get_status` is read-only (`readOnlyHint: true`) and needs no action-time authorization. Every other call
|
|
108
|
+
`get_status` is read-only (`readOnlyHint: true`) and needs no action-time authorization. Every other call needs the site owner's approval for that action. The server cannot establish human consent; the calling agent and client must enforce the canonical guidance and approval controls. Assignments do not authorize publication. The REST API remains authoritative for ownership, entitlement, review, boundaries, settlement, and idempotency.
|
|
107
109
|
|
|
108
110
|
Results include validated API `data` or an `error` with a bounded `code` and secret-safe `message`, an HTTP status when received, and `nextAction` guidance. Remote messages are mapped to fixed text. Requests have a 10-second total timeout, a 1 MiB response limit, and redirects disabled. An interrupted or invalid response can leave the operation's outcome unknown. Consult the canonical retry rules rather than submitting another action blindly.
|
|
109
111
|
|
|
@@ -113,7 +115,7 @@ For startup failures, check Node.js 22+, npm access, the effective registration
|
|
|
113
115
|
|
|
114
116
|
For stale guidance, restart the server and read its resource again. Compare it with a fresh fetch of the live canonical skill and the exact local skill loaded by the agent. Check duplicate registrations and the package pin before changing caches. Clearing npm's cache does not upgrade a pinned release. Review and refresh a stale local skill through its installer, then reload the agent session; do not merge conflicting copies into a new workflow contract.
|
|
115
117
|
|
|
116
|
-
Choose a reviewed release and replace the exact version in your client's arguments, then restart the server. Do not replace the pin with `latest` or an unversioned command. For Codex use `codex mcp remove linkbunny`; for Claude Code use `claude mcp remove linkbunny`; for VS Code remove the `linkbunny` server entry from MCP configuration. Revoking an API token is a separate owner
|
|
118
|
+
Choose a reviewed release and replace the exact version in your client's arguments, then restart the server. Do not replace the pin with `latest` or an unversioned command. For Codex use `codex mcp remove linkbunny`; for Claude Code use `claude mcp remove linkbunny`; for VS Code remove the `linkbunny` server entry from MCP configuration. Revoking an API token is a separate action the account owner takes in the private Account page.
|
|
117
119
|
|
|
118
120
|
## Development
|
|
119
121
|
|
package/dist/index.js
CHANGED
package/dist/skill.md
CHANGED
|
@@ -30,6 +30,34 @@ billing, credential, site, assignment, publication, report, or rejection actions
|
|
|
30
30
|
carry out an authorized website action only when it has explicitly authorized browser control, and
|
|
31
31
|
may carry out an authorized API or site action only within the approval given.
|
|
32
32
|
|
|
33
|
+
### Before the owner has an account
|
|
34
|
+
|
|
35
|
+
When the owner asks you to set up LinkBunny and has no account or API token yet:
|
|
36
|
+
|
|
37
|
+
1. Plan locally. Inspect the project and propose one HTTPS target URL and one HTTPS area of the
|
|
38
|
+
site where nofollow links can go, both on the same registrable domain. Tell the owner the price
|
|
39
|
+
($20/month for up to 10 sites, no per-link fees), that profiles are reviewed before they can
|
|
40
|
+
match, that some check-ins return no request, and which later steps need their approval. Make
|
|
41
|
+
no LinkBunny API call while there is no token.
|
|
42
|
+
2. With the owner's OK, open `https://getlinkbunny.com/login?redirect=%2Faccount%3Fsetup%3Dagent`
|
|
43
|
+
in their browser, or print it when you cannot open a browser (for example in a cloud or remote
|
|
44
|
+
session). Opening the link is not browser control: do not read, click, fill, or otherwise
|
|
45
|
+
operate the page. The owner signs in, subscribes, and creates the API token there.
|
|
46
|
+
3. With the owner's OK, create a project file `.env.linkbunny` containing only an empty
|
|
47
|
+
`LINKBUNNY_API_TOKEN=` line and make sure Git ignores it, or use another secret store the owner
|
|
48
|
+
chooses. The owner pastes the token there. Never ask for the token in chat, and never print,
|
|
49
|
+
log, or commit the file's contents.
|
|
50
|
+
4. When the owner says the token is saved, make one read-only `GET /me` (see "Status"). Keep the
|
|
51
|
+
token out of command arguments and output, for example:
|
|
52
|
+
`tr -d '\r' < .env.linkbunny | sed -nE 's/^(export )?LINKBUNNY_API_TOKEN="?([A-Za-z0-9._~-]+)"?$/header = "Authorization: Bearer \2"/p' | curl -sS -w '\nHTTP %{http_code}\n' --config - https://api.getlinkbunny.com/v1/me`.
|
|
53
|
+
If the LinkBunny MCP server is already configured with that token file, its `get_status` tool
|
|
54
|
+
makes the same read. `subscriptionActive: true` confirms setup. `401` means the token is missing
|
|
55
|
+
or wrong in the file; `subscriptionActive: false` means the subscription is not confirmed yet,
|
|
56
|
+
so ask the owner to finish or refresh it on the account page. Do not poll; wait until the owner
|
|
57
|
+
says it is done again.
|
|
58
|
+
5. Only after `subscriptionActive: true`, continue with "A — Create a profile". Ask the owner
|
|
59
|
+
before registering the site.
|
|
60
|
+
|
|
33
61
|
## Activation and approval gates
|
|
34
62
|
|
|
35
63
|
Use LinkBunny only when the owner explicitly asks you to onboard, register an owned site, check that
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linkbunny/mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"lockfileVersion": 2,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@linkbunny/mcp",
|
|
9
|
-
"version": "0.1.
|
|
9
|
+
"version": "0.1.4",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@modelcontextprotocol/server": "2.0.0",
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linkbunny/mcp",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"mcpName": "com.getlinkbunny/exchange",
|
|
5
|
+
"description": "Local stdio MCP server for LinkBunny nofollow link exchanges. Requires a LinkBunny account API token.",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"bin": {
|
|
7
8
|
"linkbunny-mcp": "dist/index.js"
|
|
@@ -24,8 +25,8 @@
|
|
|
24
25
|
"build": "tsc --noEmit && bun scripts/build.ts",
|
|
25
26
|
"type-check": "tsc --noEmit && tsc -p tsconfig.test.json",
|
|
26
27
|
"test": "bun run build && bun test test",
|
|
27
|
-
"lint": "prettier --check src scripts test package.json tsconfig.json tsconfig.test.json README.md",
|
|
28
|
-
"format": "prettier --write src scripts test package.json tsconfig.json tsconfig.test.json README.md",
|
|
28
|
+
"lint": "prettier --check src scripts test package.json server.json tsconfig.json tsconfig.test.json README.md",
|
|
29
|
+
"format": "prettier --write src scripts test package.json server.json tsconfig.json tsconfig.test.json README.md",
|
|
29
30
|
"prepack": "bun run build && bun scripts/resource.ts --check",
|
|
30
31
|
"verify:package": "bun scripts/verify-package.ts"
|
|
31
32
|
},
|