@cyanheads/reliefweb-mcp-server 0.1.4 → 0.1.5
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/AGENTS.md +24 -45
- package/CLAUDE.md +24 -45
- package/README.md +22 -1
- package/changelog/0.1.x/0.1.5.md +25 -0
- package/changelog/template.md +8 -0
- package/package.json +3 -3
- package/server.json +9 -3
package/AGENTS.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** @cyanheads/reliefweb-mcp-server
|
|
4
|
-
**Version:** 0.1.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.
|
|
4
|
+
**Version:** 0.1.5
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.13`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
|
8
8
|
**Zod:** ^4.4.3
|
|
@@ -37,7 +37,7 @@ Tailor suggestions to what's actually missing or stale — don't recite the full
|
|
|
37
37
|
- **Use `ctx.state`** for tenant-scoped storage. Never access persistence directly.
|
|
38
38
|
- **Check `ctx.elicit` / `ctx.sample`** for presence before calling.
|
|
39
39
|
- **Secrets in env vars only** — never hardcoded.
|
|
40
|
-
- **Close the loop on issues.** When implementing work tracked by a GitHub issue, comment on the issue with what landed
|
|
40
|
+
- **Close the loop on issues.** When implementing work tracked by a GitHub issue, comment on the issue with what landed and close it. Do both — a comment without a close leaves stale issues open; a close without a comment leaves no record of what shipped. The comment is for future readers — state the concrete changes, not the conversation that produced them.
|
|
41
41
|
|
|
42
42
|
---
|
|
43
43
|
|
|
@@ -139,6 +139,10 @@ export function getServerConfig() {
|
|
|
139
139
|
|
|
140
140
|
`parseEnvConfig` maps Zod schema paths → env var names so errors name the variable (`MY_API_KEY`) not the path (`apiKey`). Throws `ConfigurationError`, which the framework prints as a clean startup banner.
|
|
141
141
|
|
|
142
|
+
### Server instructions
|
|
143
|
+
|
|
144
|
+
`createApp({ instructions })` — optional server-level orientation, sent to clients on every `initialize` as session-level context. Use it for deployment guidance (connection aliases, regional notes, scope hints) instead of repeating the same context across tool descriptions. Client adoption is uneven, but there's no downside when set.
|
|
145
|
+
|
|
142
146
|
---
|
|
143
147
|
|
|
144
148
|
## Context
|
|
@@ -165,6 +169,8 @@ Handlers throw — the framework catches, classifies, and formats.
|
|
|
165
169
|
**Recommended: typed error contract.** Declare `errors: [{ reason, code, when, recovery, retryable? }]` on `tool()` / `resource()` to receive `ctx.fail(reason, …)` typed against the reason union. TypeScript catches typos at compile time, `data.reason` is auto-populated for observability, linter enforces conformance against the handler body. `recovery` is required descriptive metadata for the agent's next move (≥ 5 words, lint-validated); for the wire `data.recovery.hint` (mirrored into `content[]` text), pass explicitly at the throw site when dynamic context matters: `ctx.fail('reason', msg, { recovery: { hint: '...' } })`. Baseline codes (`InternalError`, `ServiceUnavailable`, `Timeout`, `ValidationError`, `SerializationError`) bubble freely and don't need declaring.
|
|
166
170
|
|
|
167
171
|
```ts
|
|
172
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
173
|
+
|
|
168
174
|
errors: [
|
|
169
175
|
{ reason: 'no_match', code: JsonRpcErrorCode.NotFound,
|
|
170
176
|
when: 'No item matched the query',
|
|
@@ -252,26 +258,27 @@ Available skills:
|
|
|
252
258
|
| `add-service` | Scaffold a new service integration |
|
|
253
259
|
| `add-test` | Scaffold test file for a tool, resource, or service |
|
|
254
260
|
| `field-test` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
|
|
255
|
-
| `tool-defs-analysis` | Read-only audit of definition language
|
|
261
|
+
| `tool-defs-analysis` | Read-only audit of MCP definition language across the surface — voice, leaks, defaults, recovery hints, output descriptions |
|
|
256
262
|
| `security-pass` | Audit server for MCP-flavored security gaps: output injection, scope blast radius, input sinks, tenant isolation |
|
|
263
|
+
| `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
|
|
257
264
|
| `devcheck` | Lint, format, typecheck, audit |
|
|
258
265
|
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
|
|
259
|
-
| `
|
|
260
|
-
| `
|
|
261
|
-
| `
|
|
266
|
+
| `git-wrapup` | Land working-tree changes as a versioned commit + annotated tag — version bump, changelog, verify, tag. Local only. |
|
|
267
|
+
| `release-and-publish` | Push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
|
|
268
|
+
| `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
|
|
269
|
+
| `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
|
|
270
|
+
| `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
|
|
262
271
|
| `api-auth` | Auth modes, scopes, JWT/OAuth |
|
|
263
272
|
| `api-canvas` | DataCanvas: register tabular data, run SQL, export, plus the `spillover()` helper for big result sets — Tier 3 opt-in |
|
|
264
273
|
| `api-config` | AppConfig, parseConfig, env vars |
|
|
265
274
|
| `api-context` | Context interface, logger, state, progress |
|
|
266
275
|
| `api-errors` | McpError, JsonRpcErrorCode, error patterns |
|
|
267
|
-
| `api-linter` | Definition
|
|
276
|
+
| `api-linter` | Definition linter rule catalog — invoked by `bun run lint:mcp` and `devcheck` |
|
|
268
277
|
| `api-services` | LLM, Speech, Graph services |
|
|
269
|
-
| `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
|
|
270
278
|
| `api-testing` | createMockContext, test patterns |
|
|
271
279
|
| `api-utils` | Formatting, parsing, security, pagination, scheduling, telemetry helpers |
|
|
280
|
+
| `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
|
|
272
281
|
| `api-workers` | Cloudflare Workers runtime |
|
|
273
|
-
| `report-issue-framework` | File bug/feature request against @cyanheads/mcp-ts-core |
|
|
274
|
-
| `report-issue-local` | File bug/feature request against this server's repo |
|
|
275
282
|
|
|
276
283
|
When you complete a skill's checklist, check the boxes and add a completion timestamp at the end (e.g., `Completed: 2026-03-11`).
|
|
277
284
|
|
|
@@ -306,40 +313,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
306
313
|
|
|
307
314
|
**Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match.
|
|
308
315
|
|
|
309
|
-
**README install badges
|
|
310
|
-
|
|
311
|
-
| Client | Mechanism |
|
|
312
|
-
|:-------|:----------|
|
|
313
|
-
| Claude Desktop | Browser downloads the `.mcpb` from the latest GitHub Release; OS file handler routes it to Claude Desktop, which opens the install dialog. No deep-link URL scheme yet — this is the canonical path. |
|
|
314
|
-
| Cursor | Official `https://cursor.com/en/install-mcp` endpoint with base64 JSON config. |
|
|
315
|
-
| VS Code / Insiders | Official `vscode:mcp/install?...` deep link, wrapped in `https://vscode.dev/redirect?url=` so GitHub-rendered markdown doesn't strip the non-HTTP scheme. |
|
|
316
|
-
| Claude Code / Codex | CLI only (`claude mcp add` / `codex mcp add`); no URL scheme. |
|
|
317
|
-
|
|
318
|
-
```markdown
|
|
319
|
-
[](https://github.com/<OWNER>/<REPO>/releases/latest/download/<PACKAGE_NAME>.mcpb)
|
|
320
|
-
[](https://cursor.com/en/install-mcp?name=<PACKAGE_NAME>&config=<BASE64_CONFIG>)
|
|
321
|
-
[](https://vscode.dev/redirect?url=vscode:mcp/install?<URLENCODED_JSON>)
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
Both install links route through HTTPS endpoints (`cursor.com/en/install-mcp` and `vscode.dev/redirect`) — GitHub-rendered markdown strips non-HTTP URL schemes from anchors, so a raw `cursor://` or `vscode:` link won't click through from github.com.
|
|
325
|
-
|
|
326
|
-
Generate the encoded configs (replace `<PACKAGE_NAME>` and add env vars for any required API keys):
|
|
327
|
-
|
|
328
|
-
```bash
|
|
329
|
-
# Cursor: base64-encoded JSON. Split command/args, add env when keys are needed.
|
|
330
|
-
echo -n '{"command":"npx","args":["-y","<PACKAGE_NAME>"],"env":{"API_KEY":"your-api-key"}}' | base64
|
|
331
|
-
# Without env (no required keys):
|
|
332
|
-
echo -n '{"command":"npx","args":["-y","<PACKAGE_NAME>"]}' | base64
|
|
333
|
-
|
|
334
|
-
# VS Code: URL-encoded JSON. Same shape plus a `name` field.
|
|
335
|
-
node -p 'encodeURIComponent(JSON.stringify({name:"<SHORT_NAME>",command:"npx",args:["-y","<PACKAGE_NAME>"],env:{API_KEY:"your-api-key"}}))'
|
|
336
|
-
# Without env:
|
|
337
|
-
node -p 'encodeURIComponent(JSON.stringify({name:"<SHORT_NAME>",command:"npx",args:["-y","<PACKAGE_NAME>"]}))'
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
Both clients use the same `{command, args, env}` shape (matching `mcp.json` schema). VS Code adds a top-level `name` field. Omit `env` entirely when no API keys are needed — don't include empty objects or framework-only vars like `MCP_TRANSPORT_TYPE`.
|
|
341
|
-
|
|
342
|
-
The Claude Desktop badge requires the bundle to ship with a stable filename — `bun run bundle` outputs `dist/<PACKAGE_NAME>.mcpb`, and `release-and-publish` attaches that file to the GitHub Release. `releases/latest/download/<PACKAGE_NAME>.mcpb` then redirects to the most recent release.
|
|
316
|
+
**README install badges** (Claude Desktop `.mcpb`, Cursor, VS Code) and the `base64` / `encodeURIComponent` config-generation commands are ship-time concerns — run the `polish-docs-meta` skill, which carries the badge format, layout, and generation snippets in `skills/polish-docs-meta/references/readme.md`.
|
|
343
317
|
|
|
344
318
|
---
|
|
345
319
|
|
|
@@ -362,6 +336,8 @@ security: false # optional — true flags security fi
|
|
|
362
336
|
|
|
363
337
|
`breaking: true` renders a `· ⚠️ Breaking` badge — use it when consumers must update code on upgrade (signature changes, removed APIs, config renames). `security: true` renders a `· 🛡️ Security` badge and pairs with a `## Security` body section. When both are set, badges render `· ⚠️ Breaking · 🛡️ Security`.
|
|
364
338
|
|
|
339
|
+
`agent-notes` is an optional free-form field for maintenance agents processing the release downstream. Content here won't appear in the rendered CHANGELOG — it's consumed by agents running the `maintenance` skill. Use it for adoption instructions that don't fit the human-facing sections: new files to create, fields to populate, one-time migration steps. Omit entirely when there's nothing to say.
|
|
340
|
+
|
|
365
341
|
**Section order** (Keep a Changelog): Added, Changed, Deprecated, Removed, Fixed, Security. Include only sections with entries — don't ship empty headers.
|
|
366
342
|
|
|
367
343
|
**Tag annotations** render as GitHub Release bodies via `--notes-from-tag`. They must be structured markdown — never a flat comma-separated string. Subject omits the version number (GitHub prepends it). See `changelog/template.md` for the full format reference.
|
|
@@ -394,4 +370,7 @@ import { getMyService } from '@/services/my-domain/my-service.js';
|
|
|
394
370
|
- [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
|
|
395
371
|
- [ ] Registered in `createApp()` arrays (directly or via barrel exports)
|
|
396
372
|
- [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
|
|
373
|
+
- [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = package name; `interface.shortDescription` from `package.json` description
|
|
374
|
+
- [ ] `.codex-plugin/mcp.json` updated — server name key matches `package.json` name; env vars added for any required API keys
|
|
375
|
+
- [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; inline `mcpServers` entry with server name key, env vars for any required API keys
|
|
397
376
|
- [ ] `bun run devcheck` passes
|
package/CLAUDE.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** @cyanheads/reliefweb-mcp-server
|
|
4
|
-
**Version:** 0.1.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.
|
|
4
|
+
**Version:** 0.1.5
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.13`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
|
8
8
|
**Zod:** ^4.4.3
|
|
@@ -37,7 +37,7 @@ Tailor suggestions to what's actually missing or stale — don't recite the full
|
|
|
37
37
|
- **Use `ctx.state`** for tenant-scoped storage. Never access persistence directly.
|
|
38
38
|
- **Check `ctx.elicit` / `ctx.sample`** for presence before calling.
|
|
39
39
|
- **Secrets in env vars only** — never hardcoded.
|
|
40
|
-
- **Close the loop on issues.** When implementing work tracked by a GitHub issue, comment on the issue with what landed
|
|
40
|
+
- **Close the loop on issues.** When implementing work tracked by a GitHub issue, comment on the issue with what landed and close it. Do both — a comment without a close leaves stale issues open; a close without a comment leaves no record of what shipped. The comment is for future readers — state the concrete changes, not the conversation that produced them.
|
|
41
41
|
|
|
42
42
|
---
|
|
43
43
|
|
|
@@ -139,6 +139,10 @@ export function getServerConfig() {
|
|
|
139
139
|
|
|
140
140
|
`parseEnvConfig` maps Zod schema paths → env var names so errors name the variable (`MY_API_KEY`) not the path (`apiKey`). Throws `ConfigurationError`, which the framework prints as a clean startup banner.
|
|
141
141
|
|
|
142
|
+
### Server instructions
|
|
143
|
+
|
|
144
|
+
`createApp({ instructions })` — optional server-level orientation, sent to clients on every `initialize` as session-level context. Use it for deployment guidance (connection aliases, regional notes, scope hints) instead of repeating the same context across tool descriptions. Client adoption is uneven, but there's no downside when set.
|
|
145
|
+
|
|
142
146
|
---
|
|
143
147
|
|
|
144
148
|
## Context
|
|
@@ -165,6 +169,8 @@ Handlers throw — the framework catches, classifies, and formats.
|
|
|
165
169
|
**Recommended: typed error contract.** Declare `errors: [{ reason, code, when, recovery, retryable? }]` on `tool()` / `resource()` to receive `ctx.fail(reason, …)` typed against the reason union. TypeScript catches typos at compile time, `data.reason` is auto-populated for observability, linter enforces conformance against the handler body. `recovery` is required descriptive metadata for the agent's next move (≥ 5 words, lint-validated); for the wire `data.recovery.hint` (mirrored into `content[]` text), pass explicitly at the throw site when dynamic context matters: `ctx.fail('reason', msg, { recovery: { hint: '...' } })`. Baseline codes (`InternalError`, `ServiceUnavailable`, `Timeout`, `ValidationError`, `SerializationError`) bubble freely and don't need declaring.
|
|
166
170
|
|
|
167
171
|
```ts
|
|
172
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
173
|
+
|
|
168
174
|
errors: [
|
|
169
175
|
{ reason: 'no_match', code: JsonRpcErrorCode.NotFound,
|
|
170
176
|
when: 'No item matched the query',
|
|
@@ -252,26 +258,27 @@ Available skills:
|
|
|
252
258
|
| `add-service` | Scaffold a new service integration |
|
|
253
259
|
| `add-test` | Scaffold test file for a tool, resource, or service |
|
|
254
260
|
| `field-test` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
|
|
255
|
-
| `tool-defs-analysis` | Read-only audit of definition language
|
|
261
|
+
| `tool-defs-analysis` | Read-only audit of MCP definition language across the surface — voice, leaks, defaults, recovery hints, output descriptions |
|
|
256
262
|
| `security-pass` | Audit server for MCP-flavored security gaps: output injection, scope blast radius, input sinks, tenant isolation |
|
|
263
|
+
| `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
|
|
257
264
|
| `devcheck` | Lint, format, typecheck, audit |
|
|
258
265
|
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
|
|
259
|
-
| `
|
|
260
|
-
| `
|
|
261
|
-
| `
|
|
266
|
+
| `git-wrapup` | Land working-tree changes as a versioned commit + annotated tag — version bump, changelog, verify, tag. Local only. |
|
|
267
|
+
| `release-and-publish` | Push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
|
|
268
|
+
| `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
|
|
269
|
+
| `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
|
|
270
|
+
| `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
|
|
262
271
|
| `api-auth` | Auth modes, scopes, JWT/OAuth |
|
|
263
272
|
| `api-canvas` | DataCanvas: register tabular data, run SQL, export, plus the `spillover()` helper for big result sets — Tier 3 opt-in |
|
|
264
273
|
| `api-config` | AppConfig, parseConfig, env vars |
|
|
265
274
|
| `api-context` | Context interface, logger, state, progress |
|
|
266
275
|
| `api-errors` | McpError, JsonRpcErrorCode, error patterns |
|
|
267
|
-
| `api-linter` | Definition
|
|
276
|
+
| `api-linter` | Definition linter rule catalog — invoked by `bun run lint:mcp` and `devcheck` |
|
|
268
277
|
| `api-services` | LLM, Speech, Graph services |
|
|
269
|
-
| `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
|
|
270
278
|
| `api-testing` | createMockContext, test patterns |
|
|
271
279
|
| `api-utils` | Formatting, parsing, security, pagination, scheduling, telemetry helpers |
|
|
280
|
+
| `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
|
|
272
281
|
| `api-workers` | Cloudflare Workers runtime |
|
|
273
|
-
| `report-issue-framework` | File bug/feature request against @cyanheads/mcp-ts-core |
|
|
274
|
-
| `report-issue-local` | File bug/feature request against this server's repo |
|
|
275
282
|
|
|
276
283
|
When you complete a skill's checklist, check the boxes and add a completion timestamp at the end (e.g., `Completed: 2026-03-11`).
|
|
277
284
|
|
|
@@ -306,40 +313,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
306
313
|
|
|
307
314
|
**Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match.
|
|
308
315
|
|
|
309
|
-
**README install badges
|
|
310
|
-
|
|
311
|
-
| Client | Mechanism |
|
|
312
|
-
|:-------|:----------|
|
|
313
|
-
| Claude Desktop | Browser downloads the `.mcpb` from the latest GitHub Release; OS file handler routes it to Claude Desktop, which opens the install dialog. No deep-link URL scheme yet — this is the canonical path. |
|
|
314
|
-
| Cursor | Official `https://cursor.com/en/install-mcp` endpoint with base64 JSON config. |
|
|
315
|
-
| VS Code / Insiders | Official `vscode:mcp/install?...` deep link, wrapped in `https://vscode.dev/redirect?url=` so GitHub-rendered markdown doesn't strip the non-HTTP scheme. |
|
|
316
|
-
| Claude Code / Codex | CLI only (`claude mcp add` / `codex mcp add`); no URL scheme. |
|
|
317
|
-
|
|
318
|
-
```markdown
|
|
319
|
-
[](https://github.com/<OWNER>/<REPO>/releases/latest/download/<PACKAGE_NAME>.mcpb)
|
|
320
|
-
[](https://cursor.com/en/install-mcp?name=<PACKAGE_NAME>&config=<BASE64_CONFIG>)
|
|
321
|
-
[](https://vscode.dev/redirect?url=vscode:mcp/install?<URLENCODED_JSON>)
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
Both install links route through HTTPS endpoints (`cursor.com/en/install-mcp` and `vscode.dev/redirect`) — GitHub-rendered markdown strips non-HTTP URL schemes from anchors, so a raw `cursor://` or `vscode:` link won't click through from github.com.
|
|
325
|
-
|
|
326
|
-
Generate the encoded configs (replace `<PACKAGE_NAME>` and add env vars for any required API keys):
|
|
327
|
-
|
|
328
|
-
```bash
|
|
329
|
-
# Cursor: base64-encoded JSON. Split command/args, add env when keys are needed.
|
|
330
|
-
echo -n '{"command":"npx","args":["-y","<PACKAGE_NAME>"],"env":{"API_KEY":"your-api-key"}}' | base64
|
|
331
|
-
# Without env (no required keys):
|
|
332
|
-
echo -n '{"command":"npx","args":["-y","<PACKAGE_NAME>"]}' | base64
|
|
333
|
-
|
|
334
|
-
# VS Code: URL-encoded JSON. Same shape plus a `name` field.
|
|
335
|
-
node -p 'encodeURIComponent(JSON.stringify({name:"<SHORT_NAME>",command:"npx",args:["-y","<PACKAGE_NAME>"],env:{API_KEY:"your-api-key"}}))'
|
|
336
|
-
# Without env:
|
|
337
|
-
node -p 'encodeURIComponent(JSON.stringify({name:"<SHORT_NAME>",command:"npx",args:["-y","<PACKAGE_NAME>"]}))'
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
Both clients use the same `{command, args, env}` shape (matching `mcp.json` schema). VS Code adds a top-level `name` field. Omit `env` entirely when no API keys are needed — don't include empty objects or framework-only vars like `MCP_TRANSPORT_TYPE`.
|
|
341
|
-
|
|
342
|
-
The Claude Desktop badge requires the bundle to ship with a stable filename — `bun run bundle` outputs `dist/<PACKAGE_NAME>.mcpb`, and `release-and-publish` attaches that file to the GitHub Release. `releases/latest/download/<PACKAGE_NAME>.mcpb` then redirects to the most recent release.
|
|
316
|
+
**README install badges** (Claude Desktop `.mcpb`, Cursor, VS Code) and the `base64` / `encodeURIComponent` config-generation commands are ship-time concerns — run the `polish-docs-meta` skill, which carries the badge format, layout, and generation snippets in `skills/polish-docs-meta/references/readme.md`.
|
|
343
317
|
|
|
344
318
|
---
|
|
345
319
|
|
|
@@ -362,6 +336,8 @@ security: false # optional — true flags security fi
|
|
|
362
336
|
|
|
363
337
|
`breaking: true` renders a `· ⚠️ Breaking` badge — use it when consumers must update code on upgrade (signature changes, removed APIs, config renames). `security: true` renders a `· 🛡️ Security` badge and pairs with a `## Security` body section. When both are set, badges render `· ⚠️ Breaking · 🛡️ Security`.
|
|
364
338
|
|
|
339
|
+
`agent-notes` is an optional free-form field for maintenance agents processing the release downstream. Content here won't appear in the rendered CHANGELOG — it's consumed by agents running the `maintenance` skill. Use it for adoption instructions that don't fit the human-facing sections: new files to create, fields to populate, one-time migration steps. Omit entirely when there's nothing to say.
|
|
340
|
+
|
|
365
341
|
**Section order** (Keep a Changelog): Added, Changed, Deprecated, Removed, Fixed, Security. Include only sections with entries — don't ship empty headers.
|
|
366
342
|
|
|
367
343
|
**Tag annotations** render as GitHub Release bodies via `--notes-from-tag`. They must be structured markdown — never a flat comma-separated string. Subject omits the version number (GitHub prepends it). See `changelog/template.md` for the full format reference.
|
|
@@ -394,4 +370,7 @@ import { getMyService } from '@/services/my-domain/my-service.js';
|
|
|
394
370
|
- [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
|
|
395
371
|
- [ ] Registered in `createApp()` arrays (directly or via barrel exports)
|
|
396
372
|
- [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
|
|
373
|
+
- [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = package name; `interface.shortDescription` from `package.json` description
|
|
374
|
+
- [ ] `.codex-plugin/mcp.json` updated — server name key matches `package.json` name; env vars added for any required API keys
|
|
375
|
+
- [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; inline `mcpServers` entry with server name key, env vars for any required API keys
|
|
397
376
|
- [ ] `bun run devcheck` passes
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/reliefweb-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/reliefweb-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -19,6 +19,12 @@
|
|
|
19
19
|
|
|
20
20
|
</div>
|
|
21
21
|
|
|
22
|
+
<div align="center">
|
|
23
|
+
|
|
24
|
+
**Public Hosted Server:** [https://reliefweb.caseyjhand.com/mcp](https://reliefweb.caseyjhand.com/mcp)
|
|
25
|
+
|
|
26
|
+
</div>
|
|
27
|
+
|
|
22
28
|
---
|
|
23
29
|
|
|
24
30
|
## Tools
|
|
@@ -178,6 +184,21 @@ Agent-friendly output:
|
|
|
178
184
|
- [Bun v1.3.2](https://bun.sh/) or higher.
|
|
179
185
|
- A **pre-approved ReliefWeb appname** — register at [ReliefWeb API](https://reliefweb.int/help/api) and set `RELIEFWEB_APP_NAME`. The API has required pre-approved appnames since November 2025; requests without one are rejected.
|
|
180
186
|
|
|
187
|
+
### Public Hosted Instance
|
|
188
|
+
|
|
189
|
+
A public instance is available at `https://reliefweb.caseyjhand.com/mcp` — no installation required. Point any MCP client at it via Streamable HTTP:
|
|
190
|
+
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"mcpServers": {
|
|
194
|
+
"reliefweb": {
|
|
195
|
+
"type": "streamable-http",
|
|
196
|
+
"url": "https://reliefweb.caseyjhand.com/mcp"
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
181
202
|
### Self-Hosted / Local
|
|
182
203
|
|
|
183
204
|
Add the following to your MCP client configuration file.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "mcp-ts-core ^0.9.9 → ^0.9.13: 413 body cap, HTTP session-init gate, quieter 401/403/400/404 logging, GET /mcp keywords; plugin metadata files; skill updates"
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.1.5 — 2026-05-28
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **`.claude-plugin/`** and **`.codex-plugin/`** — Claude Code and Codex plugin metadata files scaffolded per mcp-ts-core 0.9.10.
|
|
12
|
+
- **`CITATION.cff`** — citation metadata file.
|
|
13
|
+
|
|
14
|
+
## Changed
|
|
15
|
+
|
|
16
|
+
- **`@cyanheads/mcp-ts-core`** ^0.9.9 → ^0.9.13. User-facing changes picked up:
|
|
17
|
+
- **`MCP_HTTP_MAX_BODY_BYTES`** — configurable inbound request-body cap (default 1 MiB); oversized requests rejected with HTTP 413 before the SDK parses the body.
|
|
18
|
+
- **HTTP session-init gate** — stateful HTTP mode now rejects non-`initialize` requests without an `Mcp-Session-Id` header with HTTP 400.
|
|
19
|
+
- **Expected client error log levels** — 401, 403, 400, 404 now use `logger.warning` instead of full error pipeline with stack traces, reducing noise in logs.
|
|
20
|
+
- **`GET /mcp` keywords** — `package.json` `keywords` surfaced on the status JSON alongside name, version, and description.
|
|
21
|
+
- **`@biomejs/biome`** ^2.4.15 → ^2.4.16.
|
|
22
|
+
- **Skills** — `code-simplifier` added; `git-wrapup` v1.0 → v1.1; `release-and-publish` updated to v2.7; `api-canvas`, `api-config`, `design-mcp-server`, `polish-docs-meta`, `report-issue-framework`, `migrate-mcp-ts-template` (removed) synced from framework 0.9.10–0.9.13.
|
|
23
|
+
- **`CLAUDE.md` / `AGENTS.md`** — framework version reference updated to `^0.9.13`; plugin file checklist item added.
|
|
24
|
+
</content>
|
|
25
|
+
</invoke>
|
package/changelog/template.md
CHANGED
|
@@ -19,6 +19,14 @@ breaking: false
|
|
|
19
19
|
# `## Security` section below. Flagged as `Security` in the rollup so
|
|
20
20
|
# users can triage upgrade urgency at a glance.
|
|
21
21
|
security: false
|
|
22
|
+
|
|
23
|
+
# Optional free-form notes for maintenance agents processing this release.
|
|
24
|
+
# Not rendered in CHANGELOG — consumed by agents running `maintenance` on
|
|
25
|
+
# downstream servers. Use for adoption instructions that don't fit the
|
|
26
|
+
# human-facing sections: new files to create, fields to populate, one-time
|
|
27
|
+
# migration steps. Omit the field entirely when there's nothing to say.
|
|
28
|
+
# agent-notes: |
|
|
29
|
+
# <instructions for downstream maintenance agents>
|
|
22
30
|
---
|
|
23
31
|
|
|
24
32
|
# <version> — YYYY-MM-DD
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/reliefweb-mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"mcpName": "io.github.cyanheads/reliefweb-mcp-server",
|
|
5
5
|
"description": "Search ReliefWeb humanitarian reports, disasters, jobs, training, and country profiles via MCP. STDIO or Streamable HTTP.",
|
|
6
6
|
"type": "module",
|
|
@@ -83,12 +83,12 @@
|
|
|
83
83
|
"access": "public"
|
|
84
84
|
},
|
|
85
85
|
"dependencies": {
|
|
86
|
-
"@cyanheads/mcp-ts-core": "^0.9.
|
|
86
|
+
"@cyanheads/mcp-ts-core": "^0.9.13",
|
|
87
87
|
"pino-pretty": "^13.1.3",
|
|
88
88
|
"zod": "^4.4.3"
|
|
89
89
|
},
|
|
90
90
|
"devDependencies": {
|
|
91
|
-
"@biomejs/biome": "^2.4.
|
|
91
|
+
"@biomejs/biome": "^2.4.16",
|
|
92
92
|
"@types/node": "^25.9.1",
|
|
93
93
|
"depcheck": "^1.4.7",
|
|
94
94
|
"ignore": "^7.0.5",
|
package/server.json
CHANGED
|
@@ -6,14 +6,20 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/reliefweb-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.1.
|
|
9
|
+
"version": "0.1.5",
|
|
10
|
+
"remotes": [
|
|
11
|
+
{
|
|
12
|
+
"type": "streamable-http",
|
|
13
|
+
"url": "https://reliefweb.caseyjhand.com/mcp"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
10
16
|
"packages": [
|
|
11
17
|
{
|
|
12
18
|
"registryType": "npm",
|
|
13
19
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
14
20
|
"identifier": "@cyanheads/reliefweb-mcp-server",
|
|
15
21
|
"runtimeHint": "bun",
|
|
16
|
-
"version": "0.1.
|
|
22
|
+
"version": "0.1.5",
|
|
17
23
|
"packageArguments": [
|
|
18
24
|
{
|
|
19
25
|
"type": "positional",
|
|
@@ -48,7 +54,7 @@
|
|
|
48
54
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
49
55
|
"identifier": "@cyanheads/reliefweb-mcp-server",
|
|
50
56
|
"runtimeHint": "bun",
|
|
51
|
-
"version": "0.1.
|
|
57
|
+
"version": "0.1.5",
|
|
52
58
|
"packageArguments": [
|
|
53
59
|
{
|
|
54
60
|
"type": "positional",
|