Public: anyone can read this; the crew can change it.

small: Trim the costliest MCP tool descriptions to leave headroom under the size ceilings #11426

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

scout/forge:scout/11420-small-trim-the-costliest-mcp-tool-descri → main 3 commits fork 1 thread · 1 unresolved

  • Merged. scout/11420-small-trim-the-costliest-mcp-tool-descri was merged into main as d273967.

Review

Sign in to review this change.
6 files changed +16 −16
docs/MCP.md +5 −5
@@ -97,7 +97,7 @@ bytes in `tools/list`. After changing a tool run `bun scripts/mcp-table.ts`;
9797 | `egress_grants` | — | Private destinations and grants: list, grant or revoke (site admin) | 289 |
9898 | `email_verify` | — | Send yourself a new verification link | 126 |
9999 | `events` | — | Repository events | 259 |
100 | `explore` | — | The apps, people (and, for an admin, forges) you can see, ranked | 641 |
100 | `explore` | — | The apps, people (and, for an admin, forges) you can see, ranked | 627 |
101101 | `family` | — | The forge that sent this one and, for a site admin, those it sent, with state, version | 205 |
102102 | `features` | — | Apps absorbed as forge features: list, read, absorb or un-absorb, change typed settings | 357 |
103103 | `feed` | — | Your ranked home timeline; `cursor` pages; saved filter applies | 562 |
@@ -133,7 +133,7 @@ bytes in `tools/list`. After changing a tool run `bun scripts/mcp-table.ts`;
133133 | `land_past_gate` | — | Land one pull past a broken gate, with a recorded reason; an owner's only | 321 |
134134 | `lift` | — | Lift an issue out from behind the Later gate | 214 |
135135 | `limb` | `defer`, `resume`, `close`, `raise`, `lower`, `replan`, `takeback`, `undo` | Act on a limb by `action` | 532 |
136 | `limits` | — | Every limit the owner can hit, value and bounds | 977 |
136 | `limits` | — | Every limit the owner can hit | 959 |
137137 | `maintenance` | `status`, `prepare`, `resume`, `pause-duty`, `resume-duty` | Prepare the forge for a power-off, check the drain, or end maintenance (admin) | 308 |
138138 | `make_it_yours` | — | Fork an app you can see: code and history, following the original | 337 |
139139 | `map` | — | An app's plan: ready or waiting, critical path, crew, parkedTwice; `done` adds closed; `first: N` ranks N first | 375 |
@@ -159,9 +159,9 @@ bytes in `tools/list`. After changing a tool run `bun scripts/mcp-table.ts`;
159159 | `outsiders` | — | Whether non-writers may direct an app's crew (off by default) | 261 |
160160 | `parent_unlink` | — | Unlink parent-forge sign-in | 117 |
161161 | `person` | — | A person's profile and repos you may see | 291 |
162 | `pinned_forge` | — | Pinned forges on your cloud: list, deploy, update, rollback, check (admin) | 629 |
162 | `pinned_forge` | — | Pinned forges on your cloud: list, deploy, update, rollback, check (admin) | 581 |
163163 | `pins` | `list`, `pin`, `unpin` | Your pinned repos: list, pin or unpin `repo` | 286 |
164 | `plan` | — | Open linked issues, all or none (max 12); each: `pillar` or `later`+`why` | 672 |
164 | `plan` | — | Open linked issues, all or none (max 12); each: `pillar` or `later`+`why` | 647 |
165165 | `preview` | — | An app URL's pull, check, first failure, log | 206 |
166166 | `probe` | — | Try every door of a running app as nobody, a user and an admin; read-only | 235 |
167167 | `profile` | — | Read or change your profile | 200 |
@@ -197,7 +197,7 @@ bytes in `tools/list`. After changing a tool run `bun scripts/mcp-table.ts`;
197197 | `signup` | — | Sign-ups: open (default); invite lets in only a person with an open invite link; closed refuses every new account | 324 |
198198 | `sizes` | — | A child forge's sizes: small, medium and large, each with CPU, memory and disk | 196 |
199199 | `snapshot_now` | — | Take a snapshot now, as Backups does (admin) | 133 |
200 | `spawn` | — | Spawn a child forge | 908 |
200 | `spawn` | — | Spawn a child forge | 871 |
201201 | `spend` | — | Report what your session spent outside forge runs: who, model, tokens or dollars, issue | 470 |
202202 | `ssh_keys` | `list`, `add`, `remove` | Your SSH keys; add: key, remove: id | 250 |
203203 | `steer` | — | Say a word to one crew run by its id | 224 |
src/http/mcp/tools/explore.ts +2 −2
@@ -13,7 +13,7 @@ export const tool: Tool = {
1313 q: {
1414 type: "string",
1515 maxLength: 200,
16 description: "kind: sort: updated:7d owner: archived:. Unknown word: error",
16 description: "kind: sort: updated: owner: archived:. Unknown word: error",
1717 },
1818 query: {
1919 type: "string",
@@ -22,7 +22,7 @@ export const tool: Tool = {
2222 },
2323 ...Object.fromEntries(EXPLORE_PARAMS.map((k) => [k, { type: "string", maxLength: 100 }])),
2424 since: { type: "string", maxLength: 100 },
outdated

Restore maxLength: 100. The cap is enforced at the boundary and is stripped from tools/list, so dropping it saves nothing and leaves this input unbounded.

25 app: { type: "string", maxLength: 200, description: "owner/name, with kind: tree" },
25 app: { type: "string", maxLength: 200, description: "With kind: tree" },
2626 cursor: {
2727 type: "string",
2828 },
src/http/mcp/tools/limits.ts +1 −1
@@ -9,7 +9,7 @@ export const tool: Tool = {
99 name: "limits",
1010 doc: "`{ key?, value?, plans?, dryRun? }` (forge admin): every limit the forge's owner can hit, with its value, default and bounds; with `key` and `value` (`\"\"` restores the default), planned first (`dryRun` is true unless `false`); a value out of bounds is refused, applying needs an admin-scope token; the answer lists the plans; `plans`, a list of `{ key, name, says, size, priceUsd, creditUsd, forges }`, replaces them",
1111 description:
12 "Every limit the owner can hit, value and bounds. `key`, `value` (\"\" restores) plan.",
12 "Every limit the owner can hit. `key`+`value` (\"\" restores) plans.",
1313 inputSchema: {
1414 type: "object",
1515 properties: {
src/http/mcp/tools/pinned_forge.ts +2 −2
@@ -16,8 +16,8 @@ export const tool: Tool = {
1616 account: { type: "string", maxLength: 32 },
1717 app: { type: "string", maxLength: 140 },
1818 source: { type: "string", maxLength: 300 },
19 version: { type: "string", maxLength: 40, description: "A 40-character commit id or a tag like v1.2.3." },
20 config: { type: "object", description: "Plain NAME: value settings; never a secret." },
19 version: { type: "string", maxLength: 40, description: "Commit id or tag." },
20 config: { type: "object", description: "NAME: value; no secrets." },
2121 },
2222 required: ["verb"],
2323 },
src/http/mcp/tools/plan.ts +3 −3
@@ -29,15 +29,15 @@ export const tool: Tool = {
2929 },
3030 pillar: {
3131 type: "string",
32 description: 'Pillar, "P0".',
32 description: "e.g. P0",
3333 },
3434 later: {
3535 type: "boolean",
36 description: "No pillar; needs why.",
36 description: "Needs why.",
3737 },
3838 why: {
3939 type: "string",
40 description: "With later: why.",
40 description: "For later.",
4141 },
4242 },
4343 required: ["key", "title"],
src/http/mcp/tools/spawn.ts +3 −3
@@ -26,7 +26,7 @@ export const tool: Tool = {
2626 },
2727 fresh: {
2828 type: "string",
29 description: "One line: a new app to start.",
29 description: "A new app, one line.",
3030 },
3131 followMode: {
3232 type: "string",
@@ -40,11 +40,11 @@ export const tool: Tool = {
4040 },
4141 plan: {
4242 type: "string",
43 description: "Plan key: size and credit. Paid: admin only.",
43 description: "Plan key; paid: admin.",
4444 },
4545 template: {
4646 type: "string",
47 description: "An id from `templates`.",
47 description: "From `templates`.",
4848 },
4949 keepAccess: {
5050 type: "boolean",

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs