@webhooks-cc/mcp 1.23.0 → 2.0.0
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 +43 -16
- package/dist/bin/mcp.js +1355 -638
- package/dist/{chunk-TMX4P6ZZ.mjs → chunk-VANGXSK7.mjs} +522 -33
- package/dist/index.d.mts +84 -10
- package/dist/index.d.ts +84 -10
- package/dist/index.js +1322 -581
- package/dist/index.mjs +290 -34
- package/dist/tools-Bg9zP80n.d.mts +276 -0
- package/dist/tools-Bg9zP80n.d.ts +276 -0
- package/dist/tools.d.mts +3 -200
- package/dist/tools.d.ts +3 -200
- package/dist/tools.js +526 -33
- package/dist/tools.mjs +15 -1
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -6,12 +6,14 @@ The easiest way in is the [remote server](#remote-server) at `https://webhooks.c
|
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
|
-
No API key is needed. Without one, the server starts with the
|
|
9
|
+
No API key is needed. Without one, the server starts with the tools for the account a human connected the agent to before, or else in the keyless [agent sandbox](#without-an-api-key-the-agent-sandbox). It reads:
|
|
10
10
|
|
|
11
11
|
- `WHK_API_KEY` (optional) for an API key, which always wins over a saved connection
|
|
12
12
|
- `WHK_AGENT_FILE` for where the sandbox and the connection are saved (default `~/.config/whk/agent.json`, see [the agent credential file](#the-agent-credential-file))
|
|
13
13
|
- `WHK_BASE_URL` for a custom API base URL
|
|
14
14
|
- `WHK_WEBHOOK_URL` for a custom receiver base URL
|
|
15
|
+
- `WHK_MCP_TOOLS` for which [tool groups](#tool-groups) to list, such as `all` or `core,teams`
|
|
16
|
+
- `WHK_MCP_READ_ONLY` set to `1` to list only the tools that change nothing
|
|
15
17
|
|
|
16
18
|
### Claude Code plugin
|
|
17
19
|
|
|
@@ -34,7 +36,7 @@ For other agents, `npx skills add kroqdotdev/webhooks-cc` installs the same skil
|
|
|
34
36
|
- **claude.ai and Claude Desktop**: Settings, Connectors, add a custom connector with the URL `https://webhooks.cc/mcp`
|
|
35
37
|
- **ChatGPT**: add it as a custom connector (developer mode)
|
|
36
38
|
|
|
37
|
-
A client that can send headers may use an API key instead: `Authorization: Bearer whcc_...`. The remote server has
|
|
39
|
+
A client that can send headers may use an API key instead: `Authorization: Bearer whcc_...`. The remote server has 91 tools: `send_to`, `replay_request` and `share_port` are left out and `targetUrl` is refused, because a hosted server cannot reach your machine, and waits are capped at 50 seconds. It needs an account (no sandbox), and serves tools only, without prompts or resources.
|
|
38
40
|
|
|
39
41
|
### One-click
|
|
40
42
|
|
|
@@ -83,7 +85,29 @@ Leave out `env` to start without a key. Get your API key at [webhooks.cc/account
|
|
|
83
85
|
|
|
84
86
|
## What it exposes
|
|
85
87
|
|
|
86
|
-
|
|
88
|
+
With an API key or a saved connection, the server lists the `39` core tools and `enable_tools` by default, and all `94` tools for Claude Code, Codex and ChatGPT (see [Tool groups](#tool-groups)), plus `3` prompts (and, with an API key, `3` resource surfaces). Without either, it lists `11` sandbox tools. The remote server exposes the `36` core tools it can run by default, and `91` with `?tools=all` or for clients that load every group.
|
|
89
|
+
|
|
90
|
+
### Tool groups
|
|
91
|
+
|
|
92
|
+
The tools come in groups, so that clients with a limit on tools (Cursor stops at about 40 across all servers) get a list they can use:
|
|
93
|
+
|
|
94
|
+
- `core`: endpoints, captured requests and emails, sending test webhooks, signatures, forwarding destinations, deliveries, previews of your local app, usage and approvals
|
|
95
|
+
- `forwarding`: dry runs of a destination, the endpoint's forwarding settings and signing secret (rotating it counts as a change), test deliveries
|
|
96
|
+
- `layouts`: email layouts and named fields, ready-made layouts, and AI setup
|
|
97
|
+
- `extras`: bulk endpoint changes, favourites, request counts and payload schemas
|
|
98
|
+
- `teams`: teams, members, invites, sharing endpoints with a team, team pricing
|
|
99
|
+
- `account`: billing, API keys, connected agents, public share links, the display name
|
|
100
|
+
- `domains`: custom inbound email domains
|
|
101
|
+
- `sheets`: Google Sheets destinations
|
|
102
|
+
- `names`: reserved preview names, their passwords, and the requests visitors made
|
|
103
|
+
|
|
104
|
+
Without `WHK_MCP_TOOLS`, the server lists `core`. A client that loads tools only when the model looks for them, or takes long lists (Claude Code, claude.ai, Codex, ChatGPT), gets every group once it connects, announced with one `notifications/tools/list_changed`. With `WHK_MCP_TOOLS` (`all`, or `core` plus group names separated by commas), the server lists exactly those groups for every client; unknown names are reported on stderr.
|
|
105
|
+
|
|
106
|
+
`enable_tools` loads more groups during a session: pass `groups` (for example `["teams"]`, or `["all"]`). It answers with the tools each group added, and its description lists every group and which are loaded, so an agent that misses a tool knows where it lives. It is there whenever a group is left to load.
|
|
107
|
+
|
|
108
|
+
`WHK_MCP_READ_ONLY=1` lists only the tools that change nothing (their `readOnlyHint` is true). `enable_tools` stays, since it only changes what this session lists, and loads only a group's read-only tools; without an account, `connect_account` and `wait_for_connection` stay too.
|
|
109
|
+
|
|
110
|
+
Every tool carries MCP annotations (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`) and a title.
|
|
87
111
|
|
|
88
112
|
### Endpoint tools
|
|
89
113
|
|
|
@@ -171,14 +195,15 @@ Everything the dashboard's Shares page does is here, so an agent never needs it;
|
|
|
171
195
|
- `list_provider_templates`
|
|
172
196
|
- `get_usage` (personal plan plus each subscribed team's pool)
|
|
173
197
|
- `describe`
|
|
198
|
+
- `enable_tools` (local server only: loads more [tool groups](#tool-groups))
|
|
174
199
|
|
|
175
200
|
### Without an API key: the agent sandbox
|
|
176
201
|
|
|
177
|
-
Started without `WHK_API_KEY`, the server starts with the
|
|
202
|
+
Started without `WHK_API_KEY`, the server starts with the account's tools when [the agent credential file](#the-agent-credential-file) holds a live connection to a human's account. Otherwise it registers sandbox tools instead ([auth.md](https://webhooks.cc/auth.md)):
|
|
178
203
|
|
|
179
204
|
- `create_endpoint`, `list_endpoints`, `get_endpoint`, `delete_endpoint`, `list_requests`, `get_request`, `wait_for_request`, `generate_payload_schema`: the same names and arguments as the full tools, in a sandbox of up to 3 endpoints, 25 captured requests each and 100 in all, for 24 hours. The first `create_endpoint` registers it (a few seconds of proof of work).
|
|
180
205
|
- `connect_account`: returns a link and a 6-digit code for a human to connect the agent to their account. Pass the email they sign in to webhooks.cc with.
|
|
181
|
-
- `wait_for_connection`: waits for the human, then replaces the sandbox tools with the
|
|
206
|
+
- `wait_for_connection`: waits for the human, then replaces the sandbox tools with the tools for that account, in the same [groups](#tool-groups) (`notifications/tools/list_changed`) and saves the connection.
|
|
182
207
|
- `about_sandbox`: the limits and how to connect, without a network call.
|
|
183
208
|
|
|
184
209
|
The human approves the agent once: later sessions start connected, for 90 days. When they disconnect the agent under Account, Connected agents, the sandbox tools come back. A sandbox made in an earlier session cannot move into the account, because only the process that registered holds the claim token; `connect_account` then connects through a new registration and says so, and the old endpoints stay in the sandbox until they expire.
|
|
@@ -257,26 +282,28 @@ Use `list_provider_templates` to inspect templates, default events, signature he
|
|
|
257
282
|
Typical agent flows:
|
|
258
283
|
|
|
259
284
|
- Create an ephemeral endpoint, send a provider-signed webhook, and wait for capture
|
|
260
|
-
- Search retained requests across endpoints with
|
|
285
|
+
- Search retained requests across endpoints by substring, continuing with the cursor through long histories
|
|
261
286
|
- Compare two webhook attempts and extract only the JSON fields you care about
|
|
262
287
|
- Verify a captured signature against a known secret
|
|
263
288
|
- Run `test_webhook_flow` to create, send, capture, verify, replay, and clean up in one tool call
|
|
264
289
|
|
|
265
290
|
## Programmatic use
|
|
266
291
|
|
|
267
|
-
The package also exports `createServer()`, `registerTools()`, `registerSandboxTools()`, `registerPrompts()`, and `registerResources()` if you want to embed the server yourself. `createServer()` without `apiKey`
|
|
292
|
+
The package also exports `createServer()`, `registerTools()`, `registerSandboxTools()`, `registerPrompts()`, and `registerResources()` if you want to embed the server yourself. `createServer()` takes `tools` and `readOnly` (default `WHK_MCP_TOOLS` and `WHK_MCP_READ_ONLY`), and without `apiKey` also `credentialsFile` (a path, or `false` to keep the sandbox and the connection in memory). `registerTools(target, client, { remote, groups, readOnly })` registers the tools on anything with a `tool()` method (`asToolServer(mcpServer)` adapts an `McpServer` from `@modelcontextprotocol/server`); `remote: true` applies the remote server's restrictions. It is also exported from `@webhooks-cc/mcp/tools`.
|
|
268
293
|
|
|
269
294
|
```ts
|
|
270
295
|
import { createServer } from "@webhooks-cc/mcp";
|
|
271
|
-
import {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
296
|
+
import { serveStdio } from "@modelcontextprotocol/server/stdio";
|
|
297
|
+
|
|
298
|
+
// One server per connection; serves 2026-07-28 clients and those that open with initialize.
|
|
299
|
+
serveStdio(() =>
|
|
300
|
+
createServer({
|
|
301
|
+
apiKey: process.env.WHK_API_KEY!,
|
|
302
|
+
baseUrl: process.env.WHK_BASE_URL,
|
|
303
|
+
webhookUrl: process.env.WHK_WEBHOOK_URL,
|
|
304
|
+
tools: "core,teams",
|
|
305
|
+
})
|
|
306
|
+
);
|
|
280
307
|
```
|
|
281
308
|
|
|
282
309
|
## Example conversation
|